summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta-oe/classes/socorro-syms.bbclass50
1 files changed, 49 insertions, 1 deletions
diff --git a/meta-oe/classes/socorro-syms.bbclass b/meta-oe/classes/socorro-syms.bbclass
index 766a9e6272..c2729527d6 100644
--- a/meta-oe/classes/socorro-syms.bbclass
+++ b/meta-oe/classes/socorro-syms.bbclass
@@ -42,6 +42,16 @@ python symbol_file_preprocess() {
42 breakpad_sym_file_path = os.path.join(breakpad_syms_dir, sym_file_name) 42 breakpad_sym_file_path = os.path.join(breakpad_syms_dir, sym_file_name)
43 socorro_sym_file_path = os.path.join(socorro_syms_dir, sym_file_name) 43 socorro_sym_file_path = os.path.join(socorro_syms_dir, sym_file_name)
44 44
45 create_socorro_sym_file(breakpad_sym_file_path, socorro_sym_file_path)
46
47 arrange_socorro_sym_file(socorro_sym_file_path, socorro_syms_dir)
48
49 return
50}
51
52
53def create_socorro_sym_file(breakpad_sym_file_path, socorro_sym_file_path):
54
45 # In the symbol file, all source files are referenced like the following. 55 # In the symbol file, all source files are referenced like the following.
46 # FILE 123 /path/to/some/File.cpp 56 # FILE 123 /path/to/some/File.cpp
47 # Go through all references and replace the file paths with repository 57 # Go through all references and replace the file paths with repository
@@ -56,7 +66,6 @@ python symbol_file_preprocess() {
56 socorro_sym_file.write(line) 66 socorro_sym_file.write(line)
57 67
58 return 68 return
59}
60 69
61 70
62def socorro_file_reference(line): 71def socorro_file_reference(line):
@@ -162,3 +171,42 @@ def git_repository_path(source_file_path):
162 171
163 return socorro_reference 172 return socorro_reference
164 173
174
175def arrange_socorro_sym_file(socorro_sym_file_path, socorro_syms_dir):
176
177 import re
178
179 # Breakpad's minidump_stackwalk needs a certain directory structure in order
180 # to find correct symbols when extracting a stack trace out of a minidump.
181 # The directory structure must look like the following.
182 # YourBinary/<hash>/YourBinary.sym
183 # YourLibrary.so/<hash>/YourLibrary.so.sym
184 # To be able to create such structure we need to extract the hash value that
185 # is found in each symbol file. The header of the symbol file looks
186 # something like this:
187 # MODULE Linux x86 A079E473106CE51C74C1C25AF536CCD30 YourBinary
188 # See
189 # http://code.google.com/p/google-breakpad/wiki/LinuxStarterGuide
190
191 # Create the directory with the same name as the binary.
192 binary_dir = re.sub("\.sym$", "", socorro_sym_file_path)
193 if not os.path.exists(binary_dir):
194 os.makedirs(binary_dir)
195
196 # Get the hash from the header of the symbol file.
197 with open(socorro_sym_file_path, 'r') as socorro_sym_file:
198
199 # The hash is the 4th argument of the first line.
200 sym_file_hash = socorro_sym_file.readline().split()[3]
201
202 # Create the hash directory.
203 hash_dir = os.path.join(binary_dir, sym_file_hash)
204 if not os.path.exists(hash_dir):
205 os.makedirs(hash_dir)
206
207 # Move the symbol file to the hash directory.
208 sym_file_name = os.path.basename(socorro_sym_file_path)
209 os.rename(socorro_sym_file_path, os.path.join(hash_dir, sym_file_name))
210
211 return
212