Fix ridiculous pc offsets for static symbols in .so files.

Example before:

  static	art::HandleUnexpectedSignal(int, siginfo*, void*)+4146013245 [0xf75f6fcd] (libartd.so)

...and after:

  static 	art::HandleUnexpectedSignal(int, siginfo*, void*)+1085 [0xf7e9872d] (libartd.so)

(This matches what gdb's x/1i said.)

Change-Id: I0f1ce29ad09bbe6f1f27aa8ef654e7fab2f2378e
diff --git a/src/utils.cc b/src/utils.cc
index d45568e..5fe5403 100644
--- a/src/utils.cc
+++ b/src/utils.cc
@@ -940,10 +940,12 @@
     symbol_table = load_symbol_table(symbol->map_name);
   }
   const symbol_t* elf_symbol = NULL;
+  bool was_relative = true;
   if (symbol_table != NULL) {
     elf_symbol = find_symbol(symbol_table, symbol->relative_pc);
     if (elf_symbol == NULL) {
       elf_symbol = find_symbol(symbol_table, frame->absolute_pc);
+      was_relative = false;
     }
   }
   if (elf_symbol != NULL) {
@@ -953,7 +955,9 @@
     } else {
       symbol_name = elf_symbol->name;
     }
-    pc_offset = frame->absolute_pc - elf_symbol->start;
+
+    // TODO: is it a libcorkscrew bug that we have to do this?
+    pc_offset = (was_relative ? symbol->relative_pc : frame->absolute_pc) - elf_symbol->start;
   } else {
     symbol_name = "???";
   }