1 #include "llvm/Support/ARMAttributeParser.h" 2 #include "llvm/Support/ARMBuildAttributes.h" 3 #include "llvm/Support/ELFAttributes.h" 4 #include "gtest/gtest.h" 5 #include <string> 6 7 using namespace llvm; 8 9 struct AttributeSection { 10 unsigned Tag; 11 unsigned Value; 12 13 AttributeSection(unsigned tag, unsigned value) : Tag(tag), Value(value) { } 14 15 void write(raw_ostream &OS) { 16 OS.flush(); 17 // length = length + "aeabi\0" + TagFile + ByteSize + Tag + Value; 18 // length = 17 bytes 19 20 OS << 'A' << (uint8_t)17 << (uint8_t)0 << (uint8_t)0 << (uint8_t)0; 21 OS << "aeabi" << '\0'; 22 OS << (uint8_t)1 << (uint8_t)7 << (uint8_t)0 << (uint8_t)0 << (uint8_t)0; 23 OS << (uint8_t)Tag << (uint8_t)Value; 24 25 } 26 }; 27 28 bool testBuildAttr(unsigned Tag, unsigned Value, 29 unsigned ExpectedTag, unsigned ExpectedValue) { 30 std::string buffer; 31 raw_string_ostream OS(buffer); 32 AttributeSection Section(Tag, Value); 33 Section.write(OS); 34 ArrayRef<uint8_t> Bytes( 35 reinterpret_cast<const uint8_t*>(OS.str().c_str()), OS.str().size()); 36 37 ARMAttributeParser Parser; 38 cantFail(Parser.parse(Bytes, support::little)); 39 40 Optional<unsigned> Attr = Parser.getAttributeValue(ExpectedTag); 41 return Attr.hasValue() && Attr.getValue() == ExpectedValue; 42 } 43 44 void testParseError(ArrayRef<uint8_t> bytes, const char *msg) { 45 ARMAttributeParser parser; 46 Error e = parser.parse(bytes, support::little); 47 EXPECT_STREQ(toString(std::move(e)).c_str(), msg); 48 } 49 50 bool testTagString(unsigned Tag, const char *name) { 51 return ELFAttrs::attrTypeAsString(Tag, ARMBuildAttrs::ARMAttributeTags) 52 .str() == name; 53 } 54 55 TEST(ARMAttributeParser, UnknownCPU_arch) { 56 static const uint8_t bytes[] = {'A', 15, 0, 0, 0, 'a', 'e', 'a', 'b', 57 'i', 0, 1, 7, 0, 0, 0, 6, 22}; 58 testParseError(bytes, "unknown CPU_arch value: 22"); 59 } 60 61 TEST(CPUArchBuildAttr, testBuildAttr) { 62 EXPECT_TRUE(testTagString(6, "Tag_CPU_arch")); 63 64 EXPECT_TRUE(testBuildAttr(6, 0, ARMBuildAttrs::CPU_arch, 65 ARMBuildAttrs::Pre_v4)); 66 EXPECT_TRUE(testBuildAttr(6, 1, ARMBuildAttrs::CPU_arch, 67 ARMBuildAttrs::v4)); 68 EXPECT_TRUE(testBuildAttr(6, 2, ARMBuildAttrs::CPU_arch, 69 ARMBuildAttrs::v4T)); 70 EXPECT_TRUE(testBuildAttr(6, 3, ARMBuildAttrs::CPU_arch, 71 ARMBuildAttrs::v5T)); 72 EXPECT_TRUE(testBuildAttr(6, 4, ARMBuildAttrs::CPU_arch, 73 ARMBuildAttrs::v5TE)); 74 EXPECT_TRUE(testBuildAttr(6, 5, ARMBuildAttrs::CPU_arch, 75 ARMBuildAttrs::v5TEJ)); 76 EXPECT_TRUE(testBuildAttr(6, 6, ARMBuildAttrs::CPU_arch, 77 ARMBuildAttrs::v6)); 78 EXPECT_TRUE(testBuildAttr(6, 7, ARMBuildAttrs::CPU_arch, 79 ARMBuildAttrs::v6KZ)); 80 EXPECT_TRUE(testBuildAttr(6, 8, ARMBuildAttrs::CPU_arch, 81 ARMBuildAttrs::v6T2)); 82 EXPECT_TRUE(testBuildAttr(6, 9, ARMBuildAttrs::CPU_arch, 83 ARMBuildAttrs::v6K)); 84 EXPECT_TRUE(testBuildAttr(6, 10, ARMBuildAttrs::CPU_arch, 85 ARMBuildAttrs::v7)); 86 EXPECT_TRUE(testBuildAttr(6, 11, ARMBuildAttrs::CPU_arch, 87 ARMBuildAttrs::v6_M)); 88 EXPECT_TRUE(testBuildAttr(6, 12, ARMBuildAttrs::CPU_arch, 89 ARMBuildAttrs::v6S_M)); 90 EXPECT_TRUE(testBuildAttr(6, 13, ARMBuildAttrs::CPU_arch, 91 ARMBuildAttrs::v7E_M)); 92 EXPECT_TRUE(testBuildAttr(6, 14, ARMBuildAttrs::CPU_arch, 93 ARMBuildAttrs::v8_A)); 94 EXPECT_TRUE(testBuildAttr(6, 15, ARMBuildAttrs::CPU_arch, 95 ARMBuildAttrs::v8_R)); 96 EXPECT_TRUE(testBuildAttr(6, 16, ARMBuildAttrs::CPU_arch, 97 ARMBuildAttrs::v8_M_Base)); 98 EXPECT_TRUE(testBuildAttr(6, 17, ARMBuildAttrs::CPU_arch, 99 ARMBuildAttrs::v8_M_Main)); 100 EXPECT_TRUE(testBuildAttr(6, 21, ARMBuildAttrs::CPU_arch, 101 ARMBuildAttrs::v8_1_M_Main)); 102 } 103 104 TEST(CPUArchProfileBuildAttr, testBuildAttr) { 105 EXPECT_TRUE(testTagString(7, "Tag_CPU_arch_profile")); 106 EXPECT_TRUE(testBuildAttr(7, 'A', ARMBuildAttrs::CPU_arch_profile, 107 ARMBuildAttrs::ApplicationProfile)); 108 EXPECT_TRUE(testBuildAttr(7, 'R', ARMBuildAttrs::CPU_arch_profile, 109 ARMBuildAttrs::RealTimeProfile)); 110 EXPECT_TRUE(testBuildAttr(7, 'M', ARMBuildAttrs::CPU_arch_profile, 111 ARMBuildAttrs::MicroControllerProfile)); 112 EXPECT_TRUE(testBuildAttr(7, 'S', ARMBuildAttrs::CPU_arch_profile, 113 ARMBuildAttrs::SystemProfile)); 114 } 115 116 TEST(ARMISABuildAttr, testBuildAttr) { 117 EXPECT_TRUE(testTagString(8, "Tag_ARM_ISA_use")); 118 EXPECT_TRUE(testBuildAttr(8, 0, ARMBuildAttrs::ARM_ISA_use, 119 ARMBuildAttrs::Not_Allowed)); 120 EXPECT_TRUE(testBuildAttr(8, 1, ARMBuildAttrs::ARM_ISA_use, 121 ARMBuildAttrs::Allowed)); 122 } 123 124 TEST(ThumbISABuildAttr, testBuildAttr) { 125 EXPECT_TRUE(testTagString(9, "Tag_THUMB_ISA_use")); 126 EXPECT_TRUE(testBuildAttr(9, 0, ARMBuildAttrs::THUMB_ISA_use, 127 ARMBuildAttrs::Not_Allowed)); 128 EXPECT_TRUE(testBuildAttr(9, 1, ARMBuildAttrs::THUMB_ISA_use, 129 ARMBuildAttrs::Allowed)); 130 } 131 132 TEST(FPArchBuildAttr, testBuildAttr) { 133 EXPECT_TRUE(testTagString(10, "Tag_FP_arch")); 134 EXPECT_TRUE(testBuildAttr(10, 0, ARMBuildAttrs::FP_arch, 135 ARMBuildAttrs::Not_Allowed)); 136 EXPECT_TRUE(testBuildAttr(10, 1, ARMBuildAttrs::FP_arch, 137 ARMBuildAttrs::Allowed)); 138 EXPECT_TRUE(testBuildAttr(10, 2, ARMBuildAttrs::FP_arch, 139 ARMBuildAttrs::AllowFPv2)); 140 EXPECT_TRUE(testBuildAttr(10, 3, ARMBuildAttrs::FP_arch, 141 ARMBuildAttrs::AllowFPv3A)); 142 EXPECT_TRUE(testBuildAttr(10, 4, ARMBuildAttrs::FP_arch, 143 ARMBuildAttrs::AllowFPv3B)); 144 EXPECT_TRUE(testBuildAttr(10, 5, ARMBuildAttrs::FP_arch, 145 ARMBuildAttrs::AllowFPv4A)); 146 EXPECT_TRUE(testBuildAttr(10, 6, ARMBuildAttrs::FP_arch, 147 ARMBuildAttrs::AllowFPv4B)); 148 EXPECT_TRUE(testBuildAttr(10, 7, ARMBuildAttrs::FP_arch, 149 ARMBuildAttrs::AllowFPARMv8A)); 150 EXPECT_TRUE(testBuildAttr(10, 8, ARMBuildAttrs::FP_arch, 151 ARMBuildAttrs::AllowFPARMv8B)); 152 } 153 154 TEST(WMMXBuildAttr, testBuildAttr) { 155 EXPECT_TRUE(testTagString(11, "Tag_WMMX_arch")); 156 EXPECT_TRUE(testBuildAttr(11, 0, ARMBuildAttrs::WMMX_arch, 157 ARMBuildAttrs::Not_Allowed)); 158 EXPECT_TRUE(testBuildAttr(11, 1, ARMBuildAttrs::WMMX_arch, 159 ARMBuildAttrs::AllowWMMXv1)); 160 EXPECT_TRUE(testBuildAttr(11, 2, ARMBuildAttrs::WMMX_arch, 161 ARMBuildAttrs::AllowWMMXv2)); 162 } 163 164 TEST(SIMDBuildAttr, testBuildAttr) { 165 EXPECT_TRUE(testTagString(12, "Tag_Advanced_SIMD_arch")); 166 EXPECT_TRUE(testBuildAttr(12, 0, ARMBuildAttrs::Advanced_SIMD_arch, 167 ARMBuildAttrs::Not_Allowed)); 168 EXPECT_TRUE(testBuildAttr(12, 1, ARMBuildAttrs::Advanced_SIMD_arch, 169 ARMBuildAttrs::AllowNeon)); 170 EXPECT_TRUE(testBuildAttr(12, 2, ARMBuildAttrs::Advanced_SIMD_arch, 171 ARMBuildAttrs::AllowNeon2)); 172 EXPECT_TRUE(testBuildAttr(12, 3, ARMBuildAttrs::Advanced_SIMD_arch, 173 ARMBuildAttrs::AllowNeonARMv8)); 174 EXPECT_TRUE(testBuildAttr(12, 4, ARMBuildAttrs::Advanced_SIMD_arch, 175 ARMBuildAttrs::AllowNeonARMv8_1a)); 176 } 177 178 TEST(FPHPBuildAttr, testBuildAttr) { 179 EXPECT_TRUE(testTagString(36, "Tag_FP_HP_extension")); 180 EXPECT_TRUE(testBuildAttr(36, 0, ARMBuildAttrs::FP_HP_extension, 181 ARMBuildAttrs::Not_Allowed)); 182 EXPECT_TRUE(testBuildAttr(36, 1, ARMBuildAttrs::FP_HP_extension, 183 ARMBuildAttrs::AllowHPFP)); 184 } 185 186 TEST(MVEBuildAttr, testBuildAttr) { 187 EXPECT_TRUE(testTagString(48, "Tag_MVE_arch")); 188 EXPECT_TRUE(testBuildAttr(48, 0, ARMBuildAttrs::MVE_arch, 189 ARMBuildAttrs::Not_Allowed)); 190 EXPECT_TRUE(testBuildAttr(48, 1, ARMBuildAttrs::MVE_arch, 191 ARMBuildAttrs::AllowMVEInteger)); 192 EXPECT_TRUE(testBuildAttr(48, 2, ARMBuildAttrs::MVE_arch, 193 ARMBuildAttrs::AllowMVEIntegerAndFloat)); 194 } 195 196 TEST(CPUAlignBuildAttr, testBuildAttr) { 197 EXPECT_TRUE(testTagString(34, "Tag_CPU_unaligned_access")); 198 EXPECT_TRUE(testBuildAttr(34, 0, ARMBuildAttrs::CPU_unaligned_access, 199 ARMBuildAttrs::Not_Allowed)); 200 EXPECT_TRUE(testBuildAttr(34, 1, ARMBuildAttrs::CPU_unaligned_access, 201 ARMBuildAttrs::Allowed)); 202 } 203 204 TEST(T2EEBuildAttr, testBuildAttr) { 205 EXPECT_TRUE(testTagString(66, "Tag_T2EE_use")); 206 EXPECT_TRUE(testBuildAttr(66, 0, ARMBuildAttrs::T2EE_use, 207 ARMBuildAttrs::Not_Allowed)); 208 EXPECT_TRUE(testBuildAttr(66, 1, ARMBuildAttrs::T2EE_use, 209 ARMBuildAttrs::Allowed)); 210 } 211 212 TEST(VirtualizationBuildAttr, testBuildAttr) { 213 EXPECT_TRUE(testTagString(68, "Tag_Virtualization_use")); 214 EXPECT_TRUE(testBuildAttr(68, 0, ARMBuildAttrs::Virtualization_use, 215 ARMBuildAttrs::Not_Allowed)); 216 EXPECT_TRUE(testBuildAttr(68, 1, ARMBuildAttrs::Virtualization_use, 217 ARMBuildAttrs::AllowTZ)); 218 EXPECT_TRUE(testBuildAttr(68, 2, ARMBuildAttrs::Virtualization_use, 219 ARMBuildAttrs::AllowVirtualization)); 220 EXPECT_TRUE(testBuildAttr(68, 3, ARMBuildAttrs::Virtualization_use, 221 ARMBuildAttrs::AllowTZVirtualization)); 222 } 223 224 TEST(MPBuildAttr, testBuildAttr) { 225 EXPECT_TRUE(testTagString(42, "Tag_MPextension_use")); 226 EXPECT_TRUE(testBuildAttr(42, 0, ARMBuildAttrs::MPextension_use, 227 ARMBuildAttrs::Not_Allowed)); 228 EXPECT_TRUE(testBuildAttr(42, 1, ARMBuildAttrs::MPextension_use, 229 ARMBuildAttrs::AllowMP)); 230 } 231 232 TEST(DivBuildAttr, testBuildAttr) { 233 EXPECT_TRUE(testTagString(44, "Tag_DIV_use")); 234 EXPECT_TRUE(testBuildAttr(44, 0, ARMBuildAttrs::DIV_use, 235 ARMBuildAttrs::AllowDIVIfExists)); 236 EXPECT_TRUE(testBuildAttr(44, 1, ARMBuildAttrs::DIV_use, 237 ARMBuildAttrs::DisallowDIV)); 238 EXPECT_TRUE(testBuildAttr(44, 2, ARMBuildAttrs::DIV_use, 239 ARMBuildAttrs::AllowDIVExt)); 240 } 241 242 TEST(PCS_ConfigBuildAttr, testBuildAttr) { 243 EXPECT_TRUE(testTagString(13, "Tag_PCS_config")); 244 EXPECT_TRUE(testBuildAttr(13, 0, ARMBuildAttrs::PCS_config, 0)); 245 EXPECT_TRUE(testBuildAttr(13, 1, ARMBuildAttrs::PCS_config, 1)); 246 EXPECT_TRUE(testBuildAttr(13, 2, ARMBuildAttrs::PCS_config, 2)); 247 EXPECT_TRUE(testBuildAttr(13, 3, ARMBuildAttrs::PCS_config, 3)); 248 EXPECT_TRUE(testBuildAttr(13, 4, ARMBuildAttrs::PCS_config, 4)); 249 EXPECT_TRUE(testBuildAttr(13, 5, ARMBuildAttrs::PCS_config, 5)); 250 EXPECT_TRUE(testBuildAttr(13, 6, ARMBuildAttrs::PCS_config, 6)); 251 EXPECT_TRUE(testBuildAttr(13, 7, ARMBuildAttrs::PCS_config, 7)); 252 } 253 254 TEST(PCS_R9BuildAttr, testBuildAttr) { 255 EXPECT_TRUE(testTagString(14, "Tag_ABI_PCS_R9_use")); 256 EXPECT_TRUE(testBuildAttr(14, 0, ARMBuildAttrs::ABI_PCS_R9_use, 257 ARMBuildAttrs::R9IsGPR)); 258 EXPECT_TRUE(testBuildAttr(14, 1, ARMBuildAttrs::ABI_PCS_R9_use, 259 ARMBuildAttrs::R9IsSB)); 260 EXPECT_TRUE(testBuildAttr(14, 2, ARMBuildAttrs::ABI_PCS_R9_use, 261 ARMBuildAttrs::R9IsTLSPointer)); 262 EXPECT_TRUE(testBuildAttr(14, 3, ARMBuildAttrs::ABI_PCS_R9_use, 263 ARMBuildAttrs::R9Reserved)); 264 } 265 266 TEST(PCS_RWBuildAttr, testBuildAttr) { 267 EXPECT_TRUE(testTagString(15, "Tag_ABI_PCS_RW_data")); 268 EXPECT_TRUE(testBuildAttr(15, 0, ARMBuildAttrs::ABI_PCS_RW_data, 269 ARMBuildAttrs::Not_Allowed)); 270 EXPECT_TRUE(testBuildAttr(15, 1, ARMBuildAttrs::ABI_PCS_RW_data, 271 ARMBuildAttrs::AddressRWPCRel)); 272 EXPECT_TRUE(testBuildAttr(15, 2, ARMBuildAttrs::ABI_PCS_RW_data, 273 ARMBuildAttrs::AddressRWSBRel)); 274 EXPECT_TRUE(testBuildAttr(15, 3, ARMBuildAttrs::ABI_PCS_RW_data, 275 ARMBuildAttrs::AddressRWNone)); 276 } 277 278 TEST(PCS_ROBuildAttr, testBuildAttr) { 279 EXPECT_TRUE(testTagString(16, "Tag_ABI_PCS_RO_data")); 280 EXPECT_TRUE(testBuildAttr(16, 0, ARMBuildAttrs::ABI_PCS_RO_data, 281 ARMBuildAttrs::Not_Allowed)); 282 EXPECT_TRUE(testBuildAttr(16, 1, ARMBuildAttrs::ABI_PCS_RO_data, 283 ARMBuildAttrs::AddressROPCRel)); 284 EXPECT_TRUE(testBuildAttr(16, 2, ARMBuildAttrs::ABI_PCS_RO_data, 285 ARMBuildAttrs::AddressRONone)); 286 } 287 288 TEST(PCS_GOTBuildAttr, testBuildAttr) { 289 EXPECT_TRUE(testTagString(17, "Tag_ABI_PCS_GOT_use")); 290 EXPECT_TRUE(testBuildAttr(17, 0, ARMBuildAttrs::ABI_PCS_GOT_use, 291 ARMBuildAttrs::Not_Allowed)); 292 EXPECT_TRUE(testBuildAttr(17, 1, ARMBuildAttrs::ABI_PCS_GOT_use, 293 ARMBuildAttrs::AddressDirect)); 294 EXPECT_TRUE(testBuildAttr(17, 2, ARMBuildAttrs::ABI_PCS_GOT_use, 295 ARMBuildAttrs::AddressGOT)); 296 } 297 298 TEST(PCS_WCharBuildAttr, testBuildAttr) { 299 EXPECT_TRUE(testTagString(18, "Tag_ABI_PCS_wchar_t")); 300 EXPECT_TRUE(testBuildAttr(18, 0, ARMBuildAttrs::ABI_PCS_wchar_t, 301 ARMBuildAttrs::WCharProhibited)); 302 EXPECT_TRUE(testBuildAttr(18, 2, ARMBuildAttrs::ABI_PCS_wchar_t, 303 ARMBuildAttrs::WCharWidth2Bytes)); 304 EXPECT_TRUE(testBuildAttr(18, 4, ARMBuildAttrs::ABI_PCS_wchar_t, 305 ARMBuildAttrs::WCharWidth4Bytes)); 306 } 307 308 TEST(EnumSizeBuildAttr, testBuildAttr) { 309 EXPECT_TRUE(testTagString(26, "Tag_ABI_enum_size")); 310 EXPECT_TRUE(testBuildAttr(26, 0, ARMBuildAttrs::ABI_enum_size, 311 ARMBuildAttrs::EnumProhibited)); 312 EXPECT_TRUE(testBuildAttr(26, 1, ARMBuildAttrs::ABI_enum_size, 313 ARMBuildAttrs::EnumSmallest)); 314 EXPECT_TRUE(testBuildAttr(26, 2, ARMBuildAttrs::ABI_enum_size, 315 ARMBuildAttrs::Enum32Bit)); 316 EXPECT_TRUE(testBuildAttr(26, 3, ARMBuildAttrs::ABI_enum_size, 317 ARMBuildAttrs::Enum32BitABI)); 318 } 319 320 TEST(AlignNeededBuildAttr, testBuildAttr) { 321 EXPECT_TRUE(testTagString(24, "Tag_ABI_align_needed")); 322 EXPECT_TRUE(testBuildAttr(24, 0, ARMBuildAttrs::ABI_align_needed, 323 ARMBuildAttrs::Not_Allowed)); 324 EXPECT_TRUE(testBuildAttr(24, 1, ARMBuildAttrs::ABI_align_needed, 325 ARMBuildAttrs::Align8Byte)); 326 EXPECT_TRUE(testBuildAttr(24, 2, ARMBuildAttrs::ABI_align_needed, 327 ARMBuildAttrs::Align4Byte)); 328 EXPECT_TRUE(testBuildAttr(24, 3, ARMBuildAttrs::ABI_align_needed, 329 ARMBuildAttrs::AlignReserved)); 330 } 331 332 TEST(AlignPreservedBuildAttr, testBuildAttr) { 333 EXPECT_TRUE(testTagString(25, "Tag_ABI_align_preserved")); 334 EXPECT_TRUE(testBuildAttr(25, 0, ARMBuildAttrs::ABI_align_preserved, 335 ARMBuildAttrs::AlignNotPreserved)); 336 EXPECT_TRUE(testBuildAttr(25, 1, ARMBuildAttrs::ABI_align_preserved, 337 ARMBuildAttrs::AlignPreserve8Byte)); 338 EXPECT_TRUE(testBuildAttr(25, 2, ARMBuildAttrs::ABI_align_preserved, 339 ARMBuildAttrs::AlignPreserveAll)); 340 EXPECT_TRUE(testBuildAttr(25, 3, ARMBuildAttrs::ABI_align_preserved, 341 ARMBuildAttrs::AlignReserved)); 342 } 343 344 TEST(FPRoundingBuildAttr, testBuildAttr) { 345 EXPECT_TRUE(testTagString(19, "Tag_ABI_FP_rounding")); 346 EXPECT_TRUE(testBuildAttr(19, 0, ARMBuildAttrs::ABI_FP_rounding, 0)); 347 EXPECT_TRUE(testBuildAttr(19, 1, ARMBuildAttrs::ABI_FP_rounding, 1)); 348 } 349 350 TEST(FPDenormalBuildAttr, testBuildAttr) { 351 EXPECT_TRUE(testTagString(20, "Tag_ABI_FP_denormal")); 352 EXPECT_TRUE(testBuildAttr(20, 0, ARMBuildAttrs::ABI_FP_denormal, 353 ARMBuildAttrs::PositiveZero)); 354 EXPECT_TRUE(testBuildAttr(20, 1, ARMBuildAttrs::ABI_FP_denormal, 355 ARMBuildAttrs::IEEEDenormals)); 356 EXPECT_TRUE(testBuildAttr(20, 2, ARMBuildAttrs::ABI_FP_denormal, 357 ARMBuildAttrs::PreserveFPSign)); 358 } 359 360 TEST(FPExceptionsBuildAttr, testBuildAttr) { 361 EXPECT_TRUE(testTagString(21, "Tag_ABI_FP_exceptions")); 362 EXPECT_TRUE(testBuildAttr(21, 0, ARMBuildAttrs::ABI_FP_exceptions, 0)); 363 EXPECT_TRUE(testBuildAttr(21, 1, ARMBuildAttrs::ABI_FP_exceptions, 1)); 364 } 365 366 TEST(FPUserExceptionsBuildAttr, testBuildAttr) { 367 EXPECT_TRUE(testTagString(22, "Tag_ABI_FP_user_exceptions")); 368 EXPECT_TRUE(testBuildAttr(22, 0, ARMBuildAttrs::ABI_FP_user_exceptions, 0)); 369 EXPECT_TRUE(testBuildAttr(22, 1, ARMBuildAttrs::ABI_FP_user_exceptions, 1)); 370 } 371 372 TEST(FPNumberModelBuildAttr, testBuildAttr) { 373 EXPECT_TRUE(testTagString(23, "Tag_ABI_FP_number_model")); 374 EXPECT_TRUE(testBuildAttr(23, 0, ARMBuildAttrs::ABI_FP_number_model, 375 ARMBuildAttrs::Not_Allowed)); 376 EXPECT_TRUE(testBuildAttr(23, 1, ARMBuildAttrs::ABI_FP_number_model, 377 ARMBuildAttrs::AllowIEEENormal)); 378 EXPECT_TRUE(testBuildAttr(23, 2, ARMBuildAttrs::ABI_FP_number_model, 379 ARMBuildAttrs::AllowRTABI)); 380 EXPECT_TRUE(testBuildAttr(23, 3, ARMBuildAttrs::ABI_FP_number_model, 381 ARMBuildAttrs::AllowIEEE754)); 382 } 383 384 TEST(FP16BuildAttr, testBuildAttr) { 385 EXPECT_TRUE(testTagString(38, "Tag_ABI_FP_16bit_format")); 386 EXPECT_TRUE(testBuildAttr(38, 0, ARMBuildAttrs::ABI_FP_16bit_format, 387 ARMBuildAttrs::Not_Allowed)); 388 EXPECT_TRUE(testBuildAttr(38, 1, ARMBuildAttrs::ABI_FP_16bit_format, 389 ARMBuildAttrs::FP16FormatIEEE)); 390 EXPECT_TRUE(testBuildAttr(38, 2, ARMBuildAttrs::ABI_FP_16bit_format, 391 ARMBuildAttrs::FP16VFP3)); 392 } 393 394 TEST(HardFPBuildAttr, testBuildAttr) { 395 EXPECT_TRUE(testTagString(27, "Tag_ABI_HardFP_use")); 396 EXPECT_TRUE(testBuildAttr(27, 0, ARMBuildAttrs::ABI_HardFP_use, 397 ARMBuildAttrs::HardFPImplied)); 398 EXPECT_TRUE(testBuildAttr(27, 1, ARMBuildAttrs::ABI_HardFP_use, 399 ARMBuildAttrs::HardFPSinglePrecision)); 400 EXPECT_TRUE(testBuildAttr(27, 2, ARMBuildAttrs::ABI_HardFP_use, 2)); 401 } 402 403 TEST(VFPArgsBuildAttr, testBuildAttr) { 404 EXPECT_TRUE(testTagString(28, "Tag_ABI_VFP_args")); 405 EXPECT_TRUE(testBuildAttr(28, 0, ARMBuildAttrs::ABI_VFP_args, 406 ARMBuildAttrs::BaseAAPCS)); 407 EXPECT_TRUE(testBuildAttr(28, 1, ARMBuildAttrs::ABI_VFP_args, 408 ARMBuildAttrs::HardFPAAPCS)); 409 EXPECT_TRUE(testBuildAttr(28, 2, ARMBuildAttrs::ABI_VFP_args, 2)); 410 EXPECT_TRUE(testBuildAttr(28, 3, ARMBuildAttrs::ABI_VFP_args, 3)); 411 } 412 413 TEST(WMMXArgsBuildAttr, testBuildAttr) { 414 EXPECT_TRUE(testTagString(29, "Tag_ABI_WMMX_args")); 415 EXPECT_TRUE(testBuildAttr(29, 0, ARMBuildAttrs::ABI_WMMX_args, 0)); 416 EXPECT_TRUE(testBuildAttr(29, 1, ARMBuildAttrs::ABI_WMMX_args, 1)); 417 EXPECT_TRUE(testBuildAttr(29, 2, ARMBuildAttrs::ABI_WMMX_args, 2)); 418 } 419