ARMAttributeParser.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. //===--- ARMAttributeParser.h - ARM Attribute Information Printer ---------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #ifndef LLVM_TOOLS_LLVM_READOBJ_ARMATTRIBUTEPARSER_H
  10. #define LLVM_TOOLS_LLVM_READOBJ_ARMATTRIBUTEPARSER_H
  11. #include "StreamWriter.h"
  12. #include "llvm/Support/ARMBuildAttributes.h"
  13. namespace llvm {
  14. class StringRef;
  15. class ARMAttributeParser {
  16. StreamWriter &SW;
  17. struct DisplayHandler {
  18. ARMBuildAttrs::AttrType Attribute;
  19. void (ARMAttributeParser::*Routine)(ARMBuildAttrs::AttrType,
  20. const uint8_t *, uint32_t &);
  21. };
  22. static const DisplayHandler DisplayRoutines[];
  23. uint64_t ParseInteger(const uint8_t *Data, uint32_t &Offset);
  24. StringRef ParseString(const uint8_t *Data, uint32_t &Offset);
  25. void IntegerAttribute(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  26. uint32_t &Offset);
  27. void StringAttribute(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  28. uint32_t &Offset);
  29. void PrintAttribute(unsigned Tag, unsigned Value, StringRef ValueDesc);
  30. void CPU_arch(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  31. uint32_t &Offset);
  32. void CPU_arch_profile(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  33. uint32_t &Offset);
  34. void ARM_ISA_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  35. uint32_t &Offset);
  36. void THUMB_ISA_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  37. uint32_t &Offset);
  38. void FP_arch(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  39. uint32_t &Offset);
  40. void WMMX_arch(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  41. uint32_t &Offset);
  42. void Advanced_SIMD_arch(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  43. uint32_t &Offset);
  44. void PCS_config(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  45. uint32_t &Offset);
  46. void ABI_PCS_R9_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  47. uint32_t &Offset);
  48. void ABI_PCS_RW_data(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  49. uint32_t &Offset);
  50. void ABI_PCS_RO_data(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  51. uint32_t &Offset);
  52. void ABI_PCS_GOT_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  53. uint32_t &Offset);
  54. void ABI_PCS_wchar_t(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  55. uint32_t &Offset);
  56. void ABI_FP_rounding(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  57. uint32_t &Offset);
  58. void ABI_FP_denormal(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  59. uint32_t &Offset);
  60. void ABI_FP_exceptions(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  61. uint32_t &Offset);
  62. void ABI_FP_user_exceptions(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  63. uint32_t &Offset);
  64. void ABI_FP_number_model(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  65. uint32_t &Offset);
  66. void ABI_align_needed(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  67. uint32_t &Offset);
  68. void ABI_align_preserved(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  69. uint32_t &Offset);
  70. void ABI_enum_size(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  71. uint32_t &Offset);
  72. void ABI_HardFP_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  73. uint32_t &Offset);
  74. void ABI_VFP_args(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  75. uint32_t &Offset);
  76. void ABI_WMMX_args(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  77. uint32_t &Offset);
  78. void ABI_optimization_goals(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  79. uint32_t &Offset);
  80. void ABI_FP_optimization_goals(ARMBuildAttrs::AttrType Tag,
  81. const uint8_t *Data, uint32_t &Offset);
  82. void compatibility(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  83. uint32_t &Offset);
  84. void CPU_unaligned_access(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  85. uint32_t &Offset);
  86. void FP_HP_extension(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  87. uint32_t &Offset);
  88. void ABI_FP_16bit_format(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  89. uint32_t &Offset);
  90. void MPextension_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  91. uint32_t &Offset);
  92. void DIV_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  93. uint32_t &Offset);
  94. void T2EE_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  95. uint32_t &Offset);
  96. void Virtualization_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  97. uint32_t &Offset);
  98. void nodefaults(ARMBuildAttrs::AttrType Tag, const uint8_t *Data,
  99. uint32_t &Offset);
  100. void ParseAttributeList(const uint8_t *Data, uint32_t &Offset,
  101. uint32_t Length);
  102. void ParseIndexList(const uint8_t *Data, uint32_t &Offset,
  103. SmallVectorImpl<uint8_t> &IndexList);
  104. void ParseSubsection(const uint8_t *Data, uint32_t Length);
  105. public:
  106. ARMAttributeParser(StreamWriter &SW) : SW(SW) {}
  107. void Parse(ArrayRef<uint8_t> Section);
  108. };
  109. }
  110. #endif