[Courgette] Refactor: Add AssemblyProgram::DispatchInstructionLabels() to hide InstructionVector usage.

To reduce Courgette memory usage (and possibly solve installer crashes),
we plan to make AssemblyProgram store instructions more efficiently. We
start by hiding AssemblyProgram's InstructionVector usage from
AdjustmentMethod and AdjustmentMethod2.

Previously AdjustmentMethod[2] get AssemblyProgram's instruction vector,
and loop over it to extract labels from abs32/rel32 instructions. This
CL moves the loop into AssemblyProgram::DispatchInstructionLabels().
Callers now specify a map of handlers, without needing to know how
instructions are stored in AssemblyProgram.

Review-Url: https://codereview.chromium.org/2457133002
Cr-Original-Commit-Position: refs/heads/master@{#428522}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 99a5a8c3c7923a01d37a6d6d63203234d310e320
4 files changed
tree: d1b8871b8a51884ea9822276717a3c6e91a70590
  1. testdata/
  2. third_party/
  3. adjustment_method.cc
  4. adjustment_method.h
  5. adjustment_method_2.cc
  6. adjustment_method_unittest.cc
  7. analyze_mem_test
  8. analyze_stress_test
  9. assembly_program.cc
  10. assembly_program.h
  11. base_test_unittest.cc
  12. base_test_unittest.h
  13. bsdiff_memory_unittest.cc
  14. BUILD.gn
  15. consecutive_range_visitor.h
  16. consecutive_range_visitor_unittest.cc
  17. courgette.h
  18. courgette_application.png
  19. courgette_generation.png
  20. courgette_minimal_tool.cc
  21. courgette_tool.cc
  22. crc.cc
  23. crc.h
  24. DEPS
  25. description.html
  26. description.md
  27. difference_estimator.cc
  28. difference_estimator.h
  29. difference_estimator_unittest.cc
  30. disassembler.cc
  31. disassembler.h
  32. disassembler_elf_32.cc
  33. disassembler_elf_32.h
  34. disassembler_elf_32_arm.cc
  35. disassembler_elf_32_arm.h
  36. disassembler_elf_32_x86.cc
  37. disassembler_elf_32_x86.h
  38. disassembler_elf_32_x86_unittest.cc
  39. disassembler_win32.cc
  40. disassembler_win32.h
  41. disassembler_win32_x64.cc
  42. disassembler_win32_x64.h
  43. disassembler_win32_x64_unittest.cc
  44. disassembler_win32_x86.cc
  45. disassembler_win32_x86.h
  46. disassembler_win32_x86_unittest.cc
  47. encode_decode_unittest.cc
  48. encoded_program.cc
  49. encoded_program.h
  50. encoded_program_fuzz_unittest.cc
  51. encoded_program_unittest.cc
  52. ensemble.cc
  53. ensemble.h
  54. ensemble_apply.cc
  55. ensemble_create.cc
  56. ensemble_unittest.cc
  57. image_utils.h
  58. image_utils_unittest.cc
  59. label_manager.cc
  60. label_manager.h
  61. label_manager_unittest.cc
  62. memory_allocator.cc
  63. memory_allocator.h
  64. memory_allocator_unittest.cc
  65. memory_monitor.cc
  66. OWNERS
  67. patch_generator_x86_32.h
  68. patcher_x86_32.h
  69. program_detector.cc
  70. program_detector.h
  71. program_detector_unittest.cc
  72. region.h
  73. rel32_finder.cc
  74. rel32_finder.h
  75. rel32_finder_unittest.cc
  76. rel32_finder_x64.cc
  77. rel32_finder_x64.h
  78. rel32_finder_x86.cc
  79. rel32_finder_x86.h
  80. run_mem_test
  81. run_stress_test
  82. simple_delta.cc
  83. simple_delta.h
  84. streams.cc
  85. streams.h
  86. streams_unittest.cc
  87. stress_test_common
  88. typedrva_unittest.cc
  89. types_elf.h
  90. types_win_pe.h
  91. versioning_unittest.cc