[Courgette] Refactor: Store Label Annotation in AssemblyProgram for patch generation.

For Courgette-gen, label adjustment needs lists of abs32 & rel32 Label*
sorted by file offset. Let these lists be "Label Annotations".
Previously these were extracted during label adjustment from list of
instructions in AssemblyProgram, but now we wish to remove these stored
instructions.

This CL make AssemblyProgram store Label annotations. These are computed
only when needed (Courgette-gen / -gen1a). Details:

- Add ParseDetecteExecutableWithAnnotation() alongside
  ParseDetecteExecutable(), to avoid affecting flows that don't require
  Label Annotations.
- AssemblyProgram: Add |*_label_annotations_| as storage vectors. These
  are optionally populated in InstructionStoreReceptor when
  Disassembler::Disassemble() gets called.
  - InstructionCountReceptor now put into use.
- Simplify Label adjustment: AssemblyProgram::HandleInstructionLabels()
  is replaced with visiting AssemblyProgram's Label Annotations.
- Subtle: GraphAdjuster now includes abs64. The class doesn't get used,
  but the change is logical anyway.

BUG=660980

Review-Url: https://codereview.chromium.org/2793153003
Cr-Original-Commit-Position: refs/heads/master@{#464536}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: c4155eb674ece85b214aaf4cb781510d7377d390
12 files changed
tree: 9cbf3bb4bc8c5492fd0c96078598922d92b37c8c
  1. BUILD.gn
  2. DEPS
  3. OWNERS
  4. adjustment_method.cc
  5. adjustment_method.h
  6. adjustment_method_2.cc
  7. adjustment_method_unittest.cc
  8. analyze_mem_test
  9. analyze_stress_test
  10. assembly_program.cc
  11. assembly_program.h
  12. base_test_unittest.cc
  13. base_test_unittest.h
  14. bsdiff_memory_unittest.cc
  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. description.html
  25. description.md
  26. difference_estimator.cc
  27. difference_estimator.h
  28. difference_estimator_unittest.cc
  29. disassembler.cc
  30. disassembler.h
  31. disassembler_elf_32.cc
  32. disassembler_elf_32.h
  33. disassembler_elf_32_arm.cc
  34. disassembler_elf_32_arm.h
  35. disassembler_elf_32_x86.cc
  36. disassembler_elf_32_x86.h
  37. disassembler_elf_32_x86_unittest.cc
  38. disassembler_win32.cc
  39. disassembler_win32.h
  40. disassembler_win32_x64.cc
  41. disassembler_win32_x64.h
  42. disassembler_win32_x64_unittest.cc
  43. disassembler_win32_x86.cc
  44. disassembler_win32_x86.h
  45. disassembler_win32_x86_unittest.cc
  46. encode_decode_unittest.cc
  47. encoded_program.cc
  48. encoded_program.h
  49. encoded_program_fuzz_unittest.cc
  50. encoded_program_unittest.cc
  51. ensemble.cc
  52. ensemble.h
  53. ensemble_apply.cc
  54. ensemble_create.cc
  55. ensemble_unittest.cc
  56. image_utils.h
  57. image_utils_unittest.cc
  58. instruction_utils.h
  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. patch_generator_x86_32.h
  67. patcher_x86_32.h
  68. program_detector.cc
  69. program_detector.h
  70. program_detector_unittest.cc
  71. region.h
  72. rel32_finder.cc
  73. rel32_finder.h
  74. rel32_finder_unittest.cc
  75. rel32_finder_x64.cc
  76. rel32_finder_x64.h
  77. rel32_finder_x86.cc
  78. rel32_finder_x86.h
  79. run_mem_test
  80. run_stress_test
  81. simple_delta.cc
  82. simple_delta.h
  83. streams.cc
  84. streams.h
  85. streams_unittest.cc
  86. stress_test_common
  87. testdata/
  88. third_party/
  89. typedrva_unittest.cc
  90. types_elf.h
  91. types_win_pe.h
  92. versioning_unittest.cc