esp32ulp_mapgen.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/usr/bin/env python
  2. # esp32ulp_mapgen utility converts a symbol list provided by nm into an export script
  3. # for the linker and a header file.
  4. #
  5. # Copyright (c) 2016-2017 Espressif Systems (Shanghai) PTE LTD.
  6. # Distributed under the terms of Apache License v2.0 found in the top-level LICENSE file.
  7. from optparse import OptionParser
  8. BASE_ADDR = 0x50000000;
  9. def gen_ld_h_from_sym(f_sym, f_ld, f_h):
  10. f_ld.write("/* Variable definitions for ESP32ULP linker\n");
  11. f_ld.write(" * This file is generated automatically by esp32ulp_mapgen.py utility.\n");
  12. f_ld.write(" */\n\n");
  13. f_h.write("// Variable definitions for ESP32ULP\n");
  14. f_h.write("// This file is generated automatically by esp32ulp_mapgen.py utility\n\n");
  15. f_h.write("#pragma once\n\n");
  16. for line in f_sym:
  17. name, _, addr_str = line.split()
  18. addr = int(addr_str, 16) + BASE_ADDR;
  19. f_h.write("extern uint32_t ulp_{0};\n".format(name));
  20. f_ld.write("PROVIDE ( ulp_{0} = 0x{1:08x} );\n".format(name, addr))
  21. def main():
  22. description = ( "This application generates .h and .ld files for symbols defined in input file. "
  23. "The input symbols file can be generated using nm utility like this: "
  24. "esp32-ulp-nm -g -f posix <elf_file> > <symbols_file>" );
  25. parser = OptionParser(description=description)
  26. parser.add_option("-s", "--symfile", dest="symfile",
  27. help="symbols file name", metavar="SYMFILE")
  28. parser.add_option("-o", "--outputfile", dest="outputfile",
  29. help="destination .h and .ld files name prefix", metavar="OUTFILE")
  30. (options, args) = parser.parse_args()
  31. if options.symfile is None:
  32. parser.print_help()
  33. return 1
  34. if options.outputfile is None:
  35. parser.print_help()
  36. return 1
  37. with open(options.outputfile + ".h", 'w') as f_h, \
  38. open(options.outputfile + ".ld", 'w') as f_ld, \
  39. open(options.symfile) as f_sym: \
  40. gen_ld_h_from_sym(f_sym, f_ld, f_h)
  41. return 0
  42. if __name__ == "__main__":
  43. exit(main());