| #!/usr/bin/env fuchsia-vendored-python |
| # Copyright 2021 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import sys |
| |
| |
| def do_remap(build_id): |
| """ |
| >>> do_remap('1815548680a59ffa') |
| '86541518A580FA9F0000000000000000' |
| """ |
| build_id = build_id.upper() |
| # See https://crashpad.chromium.org/bug/229 and |
| # https://source.chromium.org/chromium/chromium/src/+/main:third_party/crashpad/crashpad/snapshot/elf/module_snapshot_elf.cc;l=157-167;drc=81cc8267d3a069163708f3ac140d0d940487c137 |
| return ( |
| build_id[6:8] |
| + build_id[4:6] |
| + build_id[2:4] |
| + build_id[0:2] |
| + build_id[10:12] |
| + build_id[8:10] |
| + build_id[14:16] |
| + build_id[12:14] |
| + +(32 - len(build_id)) * "0" |
| ) |
| |
| |
| def main(): |
| if len(sys.argv) != 2: |
| print("expected a single [normally 16 character] build id.", file=sys.stderr) |
| return 1 |
| build_id = sys.argv[1].upper() |
| |
| # debug id is normally a PDB's guid + an "age". For historical reasons, the build id gets |
| # swizzled (in the remap function) but is still 32 characters. Add the trailing 0 for a pseudo |
| # age that the crash server assumes. |
| age = "0" |
| print(do_remap(sys.argv[1]) + age) |
| |
| |
| if __name__ == "__main__": |
| sys.exit(main()) |