#!/usr/bin/env python

"""Extract embedded offsets from an object file.

We let the compiler calculate the offsets it is going to use and have those
emitted into and object file. This is the next pass which extracts those offsets
and stores them in a header file for the assembly to include and use.
"""

import argparse
import re
import subprocess
import sys

def Main():
  parser = argparse.ArgumentParser()
  parser.add_argument("--tool_prefix", required=True)
  parser.add_argument("--input", required=True)
  parser.add_argument("--output", required=True)
  args = parser.parse_args()
  raw = subprocess.check_output([
      "{}objdump".format(args.tool_prefix),
      "--disassemble-all",
      "--section",
      ".rodata",
      args.input])
  lines = raw.split('\n')
  with open(args.output, 'w') as header:
    header.write('#pragma once\n\n')
    for n in range(len(lines)):
      # Find a defined offset
      match = re.match('.+DEFINE_OFFSET__([^>]+)', lines[n])
      if not match:
        continue
      name = match.group(1)
      # The next line tells the offset
      if "..." in lines[n + 1]:
        offset = 0
      else:
        offset = re.match('.+\.[\S]+\s+(.+)$', lines[n + 1]).group(1)
      # Write the offset to the header
      header.write("#define {} {}\n".format(name, offset))
  return 0

if __name__ == "__main__":
  sys.exit(Main())
