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

Side by Side Diff: src/tools/mac/dump_syms/dump_syms_tool.cc

Issue 1864823002: Added an option (-i) to have dump_syms output header information only. (Closed) Base URL: https://chromium.googlesource.com/breakpad/breakpad.git@master
Patch Set: merge Created 4 years, 8 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 | « src/tools/linux/dump_syms/dump_syms.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // -*- mode: c++ -*- 1 // -*- mode: c++ -*-
2 2
3 // Copyright (c) 2011, Google Inc. 3 // Copyright (c) 2011, Google Inc.
4 // All rights reserved. 4 // All rights reserved.
5 // 5 //
6 // Redistribution and use in source and binary forms, with or without 6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are 7 // modification, are permitted provided that the following conditions are
8 // met: 8 // met:
9 // 9 //
10 // * Redistributions of source code must retain the above copyright 10 // * Redistributions of source code must retain the above copyright
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 #include "common/mac/macho_utilities.h" 44 #include "common/mac/macho_utilities.h"
45 #include "common/scoped_ptr.h" 45 #include "common/scoped_ptr.h"
46 46
47 using google_breakpad::DumpSymbols; 47 using google_breakpad::DumpSymbols;
48 using google_breakpad::Module; 48 using google_breakpad::Module;
49 using google_breakpad::scoped_ptr; 49 using google_breakpad::scoped_ptr;
50 using std::vector; 50 using std::vector;
51 51
52 struct Options { 52 struct Options {
53 Options() 53 Options()
54 : srcPath(), dsymPath(), arch(), cfi(true), handle_inter_cu_refs(true) {} 54 : srcPath(), dsymPath(), arch(), header_only(false),
55 cfi(true), handle_inter_cu_refs(true) {}
55 56
56 string srcPath; 57 string srcPath;
57 string dsymPath; 58 string dsymPath;
58 const NXArchInfo *arch; 59 const NXArchInfo *arch;
60 bool header_only;
59 bool cfi; 61 bool cfi;
60 bool handle_inter_cu_refs; 62 bool handle_inter_cu_refs;
61 }; 63 };
62 64
63 static bool StackFrameEntryComparator(const Module::StackFrameEntry* a, 65 static bool StackFrameEntryComparator(const Module::StackFrameEntry* a,
64 const Module::StackFrameEntry* b) { 66 const Module::StackFrameEntry* b) {
65 return a->address < b->address; 67 return a->address < b->address;
66 } 68 }
67 69
68 // Copy the CFI data from |from_module| into |to_module|, for any non- 70 // Copy the CFI data from |from_module| into |to_module|, for any non-
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 if (arch_info) 146 if (arch_info)
145 fprintf(stderr, "%s (%s)\n", arch_info->name, arch_info->description); 147 fprintf(stderr, "%s (%s)\n", arch_info->name, arch_info->description);
146 else 148 else
147 fprintf(stderr, "unrecognized cpu type 0x%x, subtype 0x%x\n", 149 fprintf(stderr, "unrecognized cpu type 0x%x, subtype 0x%x\n",
148 arch->cputype, arch->cpusubtype); 150 arch->cputype, arch->cpusubtype);
149 } 151 }
150 return false; 152 return false;
151 } 153 }
152 } 154 }
153 155
156 if (options.header_only)
157 return dump_symbols.WriteSymbolFileHeader(std::cout);
158
154 // Read the primary file into a Breakpad Module. 159 // Read the primary file into a Breakpad Module.
155 Module* module = NULL; 160 Module* module = NULL;
156 if (!dump_symbols.ReadSymbolData(&module)) 161 if (!dump_symbols.ReadSymbolData(&module))
157 return false; 162 return false;
158 scoped_ptr<Module> scoped_module(module); 163 scoped_ptr<Module> scoped_module(module);
159 164
160 // If this is a split module, read the secondary Mach-O file, from which the 165 // If this is a split module, read the secondary Mach-O file, from which the
161 // CFI data will be extracted. 166 // CFI data will be extracted.
162 if (split_module && primary_file == options.dsymPath) { 167 if (split_module && primary_file == options.dsymPath) {
163 if (!dump_symbols.Read(options.srcPath)) 168 if (!dump_symbols.Read(options.srcPath))
(...skipping 18 matching lines...) Expand all
182 } 187 }
183 188
184 return module->Write(std::cout, symbol_data); 189 return module->Write(std::cout, symbol_data);
185 } 190 }
186 191
187 //============================================================================= 192 //=============================================================================
188 static void Usage(int argc, const char *argv[]) { 193 static void Usage(int argc, const char *argv[]) {
189 fprintf(stderr, "Output a Breakpad symbol file from a Mach-o file.\n"); 194 fprintf(stderr, "Output a Breakpad symbol file from a Mach-o file.\n");
190 fprintf(stderr, "Usage: %s [-a ARCHITECTURE] [-c] [-g dSYM path] " 195 fprintf(stderr, "Usage: %s [-a ARCHITECTURE] [-c] [-g dSYM path] "
191 "<Mach-o file>\n", argv[0]); 196 "<Mach-o file>\n", argv[0]);
197 fprintf(stderr, "\t-i: Output module header information only.\n");
192 fprintf(stderr, "\t-a: Architecture type [default: native, or whatever is\n"); 198 fprintf(stderr, "\t-a: Architecture type [default: native, or whatever is\n");
193 fprintf(stderr, "\t in the file, if it contains only one architecture]\n"); 199 fprintf(stderr, "\t in the file, if it contains only one architecture]\n");
194 fprintf(stderr, "\t-g: Debug symbol file (dSYM) to dump in addition to the " 200 fprintf(stderr, "\t-g: Debug symbol file (dSYM) to dump in addition to the "
195 "Mach-o file\n"); 201 "Mach-o file\n");
196 fprintf(stderr, "\t-c: Do not generate CFI section\n"); 202 fprintf(stderr, "\t-c: Do not generate CFI section\n");
197 fprintf(stderr, "\t-r: Do not handle inter-compilation unit references\n"); 203 fprintf(stderr, "\t-r: Do not handle inter-compilation unit references\n");
198 fprintf(stderr, "\t-h: Usage\n"); 204 fprintf(stderr, "\t-h: Usage\n");
199 fprintf(stderr, "\t-?: Usage\n"); 205 fprintf(stderr, "\t-?: Usage\n");
200 } 206 }
201 207
202 //============================================================================= 208 //=============================================================================
203 static void SetupOptions(int argc, const char *argv[], Options *options) { 209 static void SetupOptions(int argc, const char *argv[], Options *options) {
204 extern int optind; 210 extern int optind;
205 signed char ch; 211 signed char ch;
206 212
207 while ((ch = getopt(argc, (char * const *)argv, "a:g:chr?")) != -1) { 213 while ((ch = getopt(argc, (char * const *)argv, "ia:g:chr?")) != -1) {
208 switch (ch) { 214 switch (ch) {
215 case 'i':
216 options->header_only = true;
217 break;
209 case 'a': { 218 case 'a': {
210 const NXArchInfo *arch_info = 219 const NXArchInfo *arch_info =
211 google_breakpad::BreakpadGetArchInfoFromName(optarg); 220 google_breakpad::BreakpadGetArchInfoFromName(optarg);
212 if (!arch_info) { 221 if (!arch_info) {
213 fprintf(stderr, "%s: Invalid architecture: %s\n", argv[0], optarg); 222 fprintf(stderr, "%s: Invalid architecture: %s\n", argv[0], optarg);
214 Usage(argc, argv); 223 Usage(argc, argv);
215 exit(1); 224 exit(1);
216 } 225 }
217 options->arch = arch_info; 226 options->arch = arch_info;
218 break; 227 break;
(...skipping 27 matching lines...) Expand all
246 //============================================================================= 255 //=============================================================================
247 int main (int argc, const char * argv[]) { 256 int main (int argc, const char * argv[]) {
248 Options options; 257 Options options;
249 bool result; 258 bool result;
250 259
251 SetupOptions(argc, argv, &options); 260 SetupOptions(argc, argv, &options);
252 result = Start(options); 261 result = Start(options);
253 262
254 return !result; 263 return !result;
255 } 264 }
OLDNEW
« no previous file with comments | « src/tools/linux/dump_syms/dump_syms.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698