Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(539)

Side by Side Diff: base/dynamic_link_dbghelp.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/dynamic_link_dbghelp.h ('k') | base/dynamic_link_kernel32.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2003-2009 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15 //
16 // dynamic loading of dbghelp dll functions
17
18 #include "omaha/base/debug.h"
19 #include "omaha/base/dynamic_link_dbghelp.h"
20
21 namespace omaha {
22
23 BOOL (CALLBACK *Dbghelp::SymInitialize)(HANDLE, PCSTR, BOOL);
24 BOOL (CALLBACK *Dbghelp::SymCleanup)(HANDLE);
25 BOOL (CALLBACK *Dbghelp::SymEnumSymbols)(HANDLE, ULONG64, PCSTR, PSYM_ENUMERATES YMBOLS_CALLBACK, PVOID);
26 DWORD (CALLBACK *Dbghelp::SymSetOptions)(DWORD);
27 BOOL (CALLBACK *Dbghelp::SymSetContext)(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP _CONTEXT);
28 BOOL (CALLBACK *Dbghelp::SymGetLineFromAddr)(HANDLE, DWORD, PDWORD, PIMAGEHLP_LI NE);
29 BOOL (CALLBACK *Dbghelp::SymGetLineFromAddr64)(HANDLE, DWORD64, PDWORD, PIMAGEHL P_LINE64);
30 BOOL (CALLBACK *Dbghelp::SymFromAddr)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFO);
31 BOOL (CALLBACK *Dbghelp::StackWalk64)(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVO ID, PREAD_PROCESS_MEMORY_ROUTINE64,
32 PFUNCTION_TABLE_ACCESS_ROUTINE64, PGET_MODULE_BASE_ROUTINE64, PTRANSLATE _ADDRESS_ROUTINE64);
33 BOOL (CALLBACK *Dbghelp::StackWalk)(DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID, PREAD_PROCESS_MEMORY_ROUTINE,
34 PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADD RESS_ROUTINE);
35 PVOID (CALLBACK *Dbghelp::SymFunctionTableAccess64)(HANDLE, DWORD64);
36 PVOID (CALLBACK *Dbghelp::SymFunctionTableAccess)(HANDLE, DWORD);
37 DWORD64 (CALLBACK *Dbghelp::SymGetModuleBase64)(HANDLE, DWORD64);
38 DWORD64 (CALLBACK *Dbghelp::SymGetModuleBase)(HANDLE, DWORD);
39 BOOL (CALLBACK *Dbghelp::SymGetTypeInfo)(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL _TYPE_INFO, PVOID);
40 BOOL (CALLBACK *Dbghelp::MiniDumpWriteDump)(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE , PMINIDUMP_EXCEPTION_INFORMATION,
41 PMINIDUMP_USER_STREAM_INFORMATION, PMINIDUMP_CALLBACK_INFORMATION);
42
43 Dbghelp::LoadedState Dbghelp::loaded_state_ = Dbghelp::NOT_LOADED;
44 HINSTANCE Dbghelp::library_ = NULL;
45
46 template <typename T>
47 bool Dbghelp::GPA(const char * function_name, T& function_pointer) {
48 ASSERT(function_name, (L""));
49
50 function_pointer = reinterpret_cast<T>(::GetProcAddress(library_,
51 function_name));
52 return function_pointer != NULL;
53 }
54
55 HRESULT Dbghelp::Load() {
56 // If we've already tried to load, don't try again.
57 if (loaded_state_ != NOT_LOADED) goto Exit;
58
59 Clear();
60
61 // UTIL_LOG((L2, _T("dbghelp loading")));
62 library_ = ::LoadLibrary(_T("dbghelp"));
63 // UTIL_LOG((L2, _T("dbghelp loaded")));
64
65 if (!library_) return E_FAIL;
66
67 bool all_valid = (GPA("SymInitialize", SymInitialize))
68 & (GPA("SymCleanup", SymCleanup))
69 & (GPA("SymSetOptions", SymSetOptions))
70 & (GPA("SymGetLineFromAddr", SymGetLineFromAddr))
71 & (GPA("SymGetLineFromAddr64", SymGetLineFromAddr64))
72 & (GPA("StackWalk", StackWalk))
73 & (GPA("StackWalk64", StackWalk64))
74 & (GPA("SymFunctionTableAccess", SymFunctionTableAccess))
75 & (GPA("SymFunctionTableAccess64", SymFunctionTableAccess64))
76 & (GPA("SymGetModuleBase", SymGetModuleBase))
77 & (GPA("SymGetModuleBase64", SymGetModuleBase64))
78 & (GPA("MiniDumpWriteDump", MiniDumpWriteDump));
79
80 // These are not supported in the Win2k version of DbgHelp;
81 // failing to load them is not an error.
82 GPA("SymEnumSymbols", SymEnumSymbols);
83 GPA("SymGetTypeInfo", SymGetTypeInfo);
84 GPA("SymSetContext", SymSetContext);
85 GPA("SymFromAddr", SymFromAddr);
86
87 if (!all_valid) Unload();
88 loaded_state_ = all_valid ? LOAD_SUCCEEDED : LOAD_FAILED;
89
90 Exit:
91 return (loaded_state_ == LOAD_SUCCEEDED) ? S_OK : E_FAIL;
92 }
93
94 void Dbghelp::Unload() {
95 if (library_) {
96 VERIFY(::FreeLibrary(library_), (L""));
97
98 // Must set library_ to NULL so that Loaded() will return FALSE.
99 library_ = NULL;
100 }
101 Clear();
102 }
103
104 void Dbghelp::Clear() {
105 // just clear the main entry points
106 SymInitialize = NULL;
107 MiniDumpWriteDump = NULL;
108 }
109
110 } // namespace omaha
111
OLDNEW
« no previous file with comments | « base/dynamic_link_dbghelp.h ('k') | base/dynamic_link_kernel32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698