diff options
Diffstat (limited to 'lib/ObjectYAML/COFFYAML.cpp')
| -rw-r--r-- | lib/ObjectYAML/COFFYAML.cpp | 56 | 
1 files changed, 53 insertions, 3 deletions
| diff --git a/lib/ObjectYAML/COFFYAML.cpp b/lib/ObjectYAML/COFFYAML.cpp index 1103159fc98d..937b8dc029fa 100644 --- a/lib/ObjectYAML/COFFYAML.cpp +++ b/lib/ObjectYAML/COFFYAML.cpp @@ -178,6 +178,46 @@ void ScalarEnumerationTraits<COFF::RelocationTypeAMD64>::enumeration(    ECase(IMAGE_REL_AMD64_SSPAN32);  } +void ScalarEnumerationTraits<COFF::RelocationTypesARM>::enumeration( +    IO &IO, COFF::RelocationTypesARM &Value) { +  ECase(IMAGE_REL_ARM_ABSOLUTE); +  ECase(IMAGE_REL_ARM_ADDR32); +  ECase(IMAGE_REL_ARM_ADDR32NB); +  ECase(IMAGE_REL_ARM_BRANCH24); +  ECase(IMAGE_REL_ARM_BRANCH11); +  ECase(IMAGE_REL_ARM_TOKEN); +  ECase(IMAGE_REL_ARM_BLX24); +  ECase(IMAGE_REL_ARM_BLX11); +  ECase(IMAGE_REL_ARM_SECTION); +  ECase(IMAGE_REL_ARM_SECREL); +  ECase(IMAGE_REL_ARM_MOV32A); +  ECase(IMAGE_REL_ARM_MOV32T); +  ECase(IMAGE_REL_ARM_BRANCH20T); +  ECase(IMAGE_REL_ARM_BRANCH24T); +  ECase(IMAGE_REL_ARM_BLX23T); +} + +void ScalarEnumerationTraits<COFF::RelocationTypesARM64>::enumeration( +    IO &IO, COFF::RelocationTypesARM64 &Value) { +  ECase(IMAGE_REL_ARM64_ABSOLUTE); +  ECase(IMAGE_REL_ARM64_ADDR32); +  ECase(IMAGE_REL_ARM64_ADDR32NB); +  ECase(IMAGE_REL_ARM64_BRANCH26); +  ECase(IMAGE_REL_ARM64_PAGEBASE_REL21); +  ECase(IMAGE_REL_ARM64_REL21); +  ECase(IMAGE_REL_ARM64_PAGEOFFSET_12A); +  ECase(IMAGE_REL_ARM64_PAGEOFFSET_12L); +  ECase(IMAGE_REL_ARM64_SECREL); +  ECase(IMAGE_REL_ARM64_SECREL_LOW12A); +  ECase(IMAGE_REL_ARM64_SECREL_HIGH12A); +  ECase(IMAGE_REL_ARM64_SECREL_LOW12L); +  ECase(IMAGE_REL_ARM64_TOKEN); +  ECase(IMAGE_REL_ARM64_SECTION); +  ECase(IMAGE_REL_ARM64_ADDR64); +  ECase(IMAGE_REL_ARM64_BRANCH19); +  ECase(IMAGE_REL_ARM64_BRANCH14); +} +  void ScalarEnumerationTraits<COFF::WindowsSubsystem>::enumeration(      IO &IO, COFF::WindowsSubsystem &Value) {    ECase(IMAGE_SUBSYSTEM_UNKNOWN); @@ -378,6 +418,14 @@ void MappingTraits<COFFYAML::Relocation>::mapping(IO &IO,      MappingNormalization<NType<COFF::RelocationTypeAMD64>, uint16_t> NT(          IO, Rel.Type);      IO.mapRequired("Type", NT->Type); +  } else if (H.Machine == COFF::IMAGE_FILE_MACHINE_ARMNT) { +    MappingNormalization<NType<COFF::RelocationTypesARM>, uint16_t> NT( +        IO, Rel.Type); +    IO.mapRequired("Type", NT->Type); +  } else if (H.Machine == COFF::IMAGE_FILE_MACHINE_ARM64) { +    MappingNormalization<NType<COFF::RelocationTypesARM64>, uint16_t> NT( +        IO, Rel.Type); +    IO.mapRequired("Type", NT->Type);    } else {      IO.mapRequired("Type", Rel.Type);    } @@ -514,14 +562,16 @@ void MappingTraits<COFFYAML::Section>::mapping(IO &IO, COFFYAML::Section &Sec) {    IO.mapOptional("VirtualSize", Sec.Header.VirtualSize, 0U);    IO.mapOptional("Alignment", Sec.Alignment, 0U); -  // If this is a .debug$S or .debug$T section parse the semantic representation -  // of the symbols/types.  If it is any other kind of section, just deal in raw -  // bytes. +  // If this is a .debug$S .debug$T, or .debug$H section parse the semantic +  // representation of the symbols/types.  If it is any other kind of section, +  // just deal in raw bytes.    IO.mapOptional("SectionData", Sec.SectionData);    if (Sec.Name == ".debug$S")      IO.mapOptional("Subsections", Sec.DebugS);    else if (Sec.Name == ".debug$T")      IO.mapOptional("Types", Sec.DebugT); +  else if (Sec.Name == ".debug$H") +    IO.mapOptional("GlobalHashes", Sec.DebugH);    IO.mapOptional("Relocations", Sec.Relocations);  } | 
