OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright (C) 2013 The Android Open Source Project | 3 # Copyright (C) 2013 The Android Open Source Project |
4 # | 4 # |
5 # Licensed under the Apache License, Version 2.0 (the "License"); | 5 # Licensed under the Apache License, Version 2.0 (the "License"); |
6 # you may not use this file except in compliance with the License. | 6 # you may not use this file except in compliance with the License. |
7 # You may obtain a copy of the License at | 7 # You may obtain a copy of the License at |
8 # | 8 # |
9 # http://www.apache.org/licenses/LICENSE-2.0 | 9 # http://www.apache.org/licenses/LICENSE-2.0 |
10 # | 10 # |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 try: | 138 try: |
139 options, arguments = getopt.getopt(argv, "", | 139 options, arguments = getopt.getopt(argv, "", |
140 ["packed-relocation-adjustments", | 140 ["packed-relocation-adjustments", |
141 "no-packed-relocation-adjustments", | 141 "no-packed-relocation-adjustments", |
142 "more-info", | 142 "more-info", |
143 "less-info", | 143 "less-info", |
144 "chrome-symbols-dir=", | 144 "chrome-symbols-dir=", |
145 "output-directory=", | 145 "output-directory=", |
146 "symbols-dir=", | 146 "symbols-dir=", |
147 "symbols-zip=", | 147 "symbols-zip=", |
| 148 "packed-lib=", |
148 "arch=", | 149 "arch=", |
149 "fallback-monochrome", | 150 "fallback-monochrome", |
150 "verbose", | 151 "verbose", |
151 "help"]) | 152 "help"]) |
152 except getopt.GetoptError, unused_error: | 153 except getopt.GetoptError, unused_error: |
153 PrintUsage() | 154 PrintUsage() |
154 | 155 |
155 zip_arg = None | 156 zip_arg = None |
156 more_info = False | 157 more_info = False |
157 packed_relocation_adjustments = "unknown" | |
158 fallback_monochrome = False | 158 fallback_monochrome = False |
159 arch_defined = False | 159 arch_defined = False |
| 160 packed_libs = [] |
160 for option, value in options: | 161 for option, value in options: |
161 if option == "--help": | 162 if option == "--help": |
162 PrintUsage() | 163 PrintUsage() |
163 elif option == "--symbols-dir": | 164 elif option == "--symbols-dir": |
164 symbol.SYMBOLS_DIR = os.path.expanduser(value) | 165 symbol.SYMBOLS_DIR = os.path.expanduser(value) |
165 elif option == "--symbols-zip": | 166 elif option == "--symbols-zip": |
166 zip_arg = os.path.expanduser(value) | 167 zip_arg = os.path.expanduser(value) |
167 elif option == "--arch": | 168 elif option == "--arch": |
168 symbol.ARCH = value | 169 symbol.ARCH = value |
169 arch_defined = True | 170 arch_defined = True |
170 elif option == "--chrome-symbols-dir": | 171 elif option == "--chrome-symbols-dir": |
171 symbol.CHROME_SYMBOLS_DIR = os.path.join(symbol.CHROME_SRC, value) | 172 symbol.CHROME_SYMBOLS_DIR = os.path.join(symbol.CHROME_SRC, value) |
172 elif option == "--output-directory": | 173 elif option == "--output-directory": |
173 constants.SetOutputDirectory(value) | 174 constants.SetOutputDirectory(value) |
174 elif option == "--packed-relocation-adjustments": | 175 elif option == "--packed-lib": |
175 packed_relocation_adjustments = True | 176 packed_libs.append(os.path.expanduser(value)) |
176 elif option == "--no-packed-relocation-adjustments": | |
177 packed_relocation_adjustments = False | |
178 elif option == "--more-info": | 177 elif option == "--more-info": |
179 more_info = True | 178 more_info = True |
180 elif option == "--less-info": | 179 elif option == "--less-info": |
181 more_info = False | 180 more_info = False |
182 elif option == "--fallback-monochrome": | 181 elif option == "--fallback-monochrome": |
183 fallback_monochrome = True | 182 fallback_monochrome = True |
184 elif option == "--verbose": | 183 elif option == "--verbose": |
185 logging.basicConfig(level=logging.DEBUG) | 184 logging.basicConfig(level=logging.DEBUG) |
| 185 elif option in ( |
| 186 '--packed-relocation-adjustments', |
| 187 '--no-packed-relocation-adjustments'): |
| 188 print ('--[no-]packed-relocation-adjustments options are deprecated. ' |
| 189 'Specify packed libs directory instead.') |
186 | 190 |
187 if len(arguments) > 1: | 191 if len(arguments) > 1: |
188 PrintUsage() | 192 PrintUsage() |
189 | 193 |
190 # Do an up-front test that the output directory is known. | 194 # Do an up-front test that the output directory is known. |
191 if not symbol.CHROME_SYMBOLS_DIR: | 195 if not symbol.CHROME_SYMBOLS_DIR: |
192 constants.CheckOutputDirectory() | 196 constants.CheckOutputDirectory() |
193 | 197 |
194 if not arguments or arguments[0] == "-": | 198 if not arguments or arguments[0] == "-": |
195 print "Reading native crash info from stdin" | 199 print "Reading native crash info from stdin" |
196 f = sys.stdin | 200 f = sys.stdin |
197 else: | 201 else: |
198 print "Searching for native crashes in: " + os.path.realpath(arguments[0]) | 202 print "Searching for native crashes in: " + os.path.realpath(arguments[0]) |
199 f = open(arguments[0], "r") | 203 f = open(arguments[0], "r") |
200 | 204 |
201 lines = f.readlines() | 205 lines = f.readlines() |
202 f.close() | 206 f.close() |
203 | 207 |
204 rootdir = None | 208 rootdir = None |
205 if zip_arg: | 209 if zip_arg: |
206 rootdir, symbol.SYMBOLS_DIR = UnzipSymbols(zip_arg) | 210 rootdir, symbol.SYMBOLS_DIR = UnzipSymbols(zip_arg) |
207 | 211 |
208 if packed_relocation_adjustments == "unknown": | 212 version = stack_libs.GetTargetAndroidVersionNumber(lines) |
209 version = stack_libs.GetTargetAndroidVersionNumber(lines) | 213 if version is None: |
210 if version == None: | 214 print ("Unknown Android release, " |
211 packed_relocation_adjustments = False | 215 "consider passing --packed-lib.") |
212 print ("Unknown Android release, " | 216 elif version < _ANDROID_M_MAJOR_VERSION and not packed_libs: |
213 + "consider --[no-]packed-relocation-adjustments options") | 217 print ("Pre-M Android release detected, " |
214 elif version >= _ANDROID_M_MAJOR_VERSION: | 218 "but --packed-lib not specified. Stack symbolization may fail.") |
215 packed_relocation_adjustments = False | |
216 else: | |
217 packed_relocation_adjustments = True | |
218 print ("Pre-M Android release detected, " | |
219 + "added --packed-relocation-adjustments option") | |
220 else: | |
221 packed_relocation_adjustments = False | |
222 | 219 |
223 if packed_relocation_adjustments: | 220 if (version is None or version < _ANDROID_M_MAJOR_VERSION) and packed_libs: |
224 constants.CheckOutputDirectory() | 221 load_vaddrs = stack_libs.GetLoadVaddrs(stripped_libs=packed_libs) |
225 stripped_libs_dir = constants.GetOutDirectory() | |
226 load_vaddrs = stack_libs.GetLoadVaddrs(stripped_libs_dir) | |
227 else: | 222 else: |
228 load_vaddrs = {} | 223 load_vaddrs = {} |
229 | 224 |
230 print ("Reading Android symbols from: " | 225 print ("Reading Android symbols from: " |
231 + os.path.normpath(symbol.SYMBOLS_DIR)) | 226 + os.path.normpath(symbol.SYMBOLS_DIR)) |
232 chrome_search_path = symbol.GetLibrarySearchPaths() | 227 chrome_search_path = symbol.GetLibrarySearchPaths() |
233 print ("Searching for Chrome symbols from within: " | 228 print ("Searching for Chrome symbols from within: " |
234 + ':'.join((os.path.normpath(d) for d in chrome_search_path))) | 229 + ':'.join((os.path.normpath(d) for d in chrome_search_path))) |
235 stack_core.ConvertTrace(lines, load_vaddrs, more_info, fallback_monochrome, | 230 stack_core.ConvertTrace(lines, load_vaddrs, more_info, fallback_monochrome, |
236 arch_defined) | 231 arch_defined) |
237 | 232 |
238 if rootdir: | 233 if rootdir: |
239 # be a good citizen and clean up...os.rmdir and os.removedirs() don't work | 234 # be a good citizen and clean up...os.rmdir and os.removedirs() don't work |
240 cmd = "rm -rf \"%s\"" % rootdir | 235 cmd = "rm -rf \"%s\"" % rootdir |
241 print "\ncleaning up (%s)" % cmd | 236 print "\ncleaning up (%s)" % cmd |
242 os.system(cmd) | 237 os.system(cmd) |
243 | 238 |
244 if __name__ == "__main__": | 239 if __name__ == "__main__": |
245 sys.exit(main(sys.argv[1:])) | 240 sys.exit(main(sys.argv[1:])) |
246 | 241 |
247 # vi: ts=2 sw=2 | 242 # vi: ts=2 sw=2 |
OLD | NEW |