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::getARMAttributeTags()) 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 EXPECT_TRUE(testBuildAttr(9, 2, ARMBuildAttrs::THUMB_ISA_use, 131 ARMBuildAttrs::AllowThumb32)); 132 EXPECT_TRUE(testBuildAttr(9, 3, ARMBuildAttrs::THUMB_ISA_use, 133 ARMBuildAttrs::AllowThumbDerived)); 134 } 135 136 TEST(FPArchBuildAttr, testBuildAttr) { 137 EXPECT_TRUE(testTagString(10, "Tag_FP_arch")); 138 EXPECT_TRUE(testBuildAttr(10, 0, ARMBuildAttrs::FP_arch, 139 ARMBuildAttrs::Not_Allowed)); 140 EXPECT_TRUE(testBuildAttr(10, 1, ARMBuildAttrs::FP_arch, 141 ARMBuildAttrs::Allowed)); 142 EXPECT_TRUE(testBuildAttr(10, 2, ARMBuildAttrs::FP_arch, 143 ARMBuildAttrs::AllowFPv2)); 144 EXPECT_TRUE(testBuildAttr(10, 3, ARMBuildAttrs::FP_arch, 145 ARMBuildAttrs::AllowFPv3A)); 146 EXPECT_TRUE(testBuildAttr(10, 4, ARMBuildAttrs::FP_arch, 147 ARMBuildAttrs::AllowFPv3B)); 148 EXPECT_TRUE(testBuildAttr(10, 5, ARMBuildAttrs::FP_arch, 149 ARMBuildAttrs::AllowFPv4A)); 150 EXPECT_TRUE(testBuildAttr(10, 6, ARMBuildAttrs::FP_arch, 151 ARMBuildAttrs::AllowFPv4B)); 152 EXPECT_TRUE(testBuildAttr(10, 7, ARMBuildAttrs::FP_arch, 153 ARMBuildAttrs::AllowFPARMv8A)); 154 EXPECT_TRUE(testBuildAttr(10, 8, ARMBuildAttrs::FP_arch, 155 ARMBuildAttrs::AllowFPARMv8B)); 156 } 157 158 TEST(WMMXBuildAttr, testBuildAttr) { 159 EXPECT_TRUE(testTagString(11, "Tag_WMMX_arch")); 160 EXPECT_TRUE(testBuildAttr(11, 0, ARMBuildAttrs::WMMX_arch, 161 ARMBuildAttrs::Not_Allowed)); 162 EXPECT_TRUE(testBuildAttr(11, 1, ARMBuildAttrs::WMMX_arch, 163 ARMBuildAttrs::AllowWMMXv1)); 164 EXPECT_TRUE(testBuildAttr(11, 2, ARMBuildAttrs::WMMX_arch, 165 ARMBuildAttrs::AllowWMMXv2)); 166 } 167 168 TEST(SIMDBuildAttr, testBuildAttr) { 169 EXPECT_TRUE(testTagString(12, "Tag_Advanced_SIMD_arch")); 170 EXPECT_TRUE(testBuildAttr(12, 0, ARMBuildAttrs::Advanced_SIMD_arch, 171 ARMBuildAttrs::Not_Allowed)); 172 EXPECT_TRUE(testBuildAttr(12, 1, ARMBuildAttrs::Advanced_SIMD_arch, 173 ARMBuildAttrs::AllowNeon)); 174 EXPECT_TRUE(testBuildAttr(12, 2, ARMBuildAttrs::Advanced_SIMD_arch, 175 ARMBuildAttrs::AllowNeon2)); 176 EXPECT_TRUE(testBuildAttr(12, 3, ARMBuildAttrs::Advanced_SIMD_arch, 177 ARMBuildAttrs::AllowNeonARMv8)); 178 EXPECT_TRUE(testBuildAttr(12, 4, ARMBuildAttrs::Advanced_SIMD_arch, 179 ARMBuildAttrs::AllowNeonARMv8_1a)); 180 } 181 182 TEST(FPHPBuildAttr, testBuildAttr) { 183 EXPECT_TRUE(testTagString(36, "Tag_FP_HP_extension")); 184 EXPECT_TRUE(testBuildAttr(36, 0, ARMBuildAttrs::FP_HP_extension, 185 ARMBuildAttrs::Not_Allowed)); 186 EXPECT_TRUE(testBuildAttr(36, 1, ARMBuildAttrs::FP_HP_extension, 187 ARMBuildAttrs::AllowHPFP)); 188 } 189 190 TEST(MVEBuildAttr, testBuildAttr) { 191 EXPECT_TRUE(testTagString(48, "Tag_MVE_arch")); 192 EXPECT_TRUE(testBuildAttr(48, 0, ARMBuildAttrs::MVE_arch, 193 ARMBuildAttrs::Not_Allowed)); 194 EXPECT_TRUE(testBuildAttr(48, 1, ARMBuildAttrs::MVE_arch, 195 ARMBuildAttrs::AllowMVEInteger)); 196 EXPECT_TRUE(testBuildAttr(48, 2, ARMBuildAttrs::MVE_arch, 197 ARMBuildAttrs::AllowMVEIntegerAndFloat)); 198 } 199 200 TEST(CPUAlignBuildAttr, testBuildAttr) { 201 EXPECT_TRUE(testTagString(34, "Tag_CPU_unaligned_access")); 202 EXPECT_TRUE(testBuildAttr(34, 0, ARMBuildAttrs::CPU_unaligned_access, 203 ARMBuildAttrs::Not_Allowed)); 204 EXPECT_TRUE(testBuildAttr(34, 1, ARMBuildAttrs::CPU_unaligned_access, 205 ARMBuildAttrs::Allowed)); 206 } 207 208 TEST(T2EEBuildAttr, testBuildAttr) { 209 EXPECT_TRUE(testTagString(66, "Tag_T2EE_use")); 210 EXPECT_TRUE(testBuildAttr(66, 0, ARMBuildAttrs::T2EE_use, 211 ARMBuildAttrs::Not_Allowed)); 212 EXPECT_TRUE(testBuildAttr(66, 1, ARMBuildAttrs::T2EE_use, 213 ARMBuildAttrs::Allowed)); 214 } 215 216 TEST(VirtualizationBuildAttr, testBuildAttr) { 217 EXPECT_TRUE(testTagString(68, "Tag_Virtualization_use")); 218 EXPECT_TRUE(testBuildAttr(68, 0, ARMBuildAttrs::Virtualization_use, 219 ARMBuildAttrs::Not_Allowed)); 220 EXPECT_TRUE(testBuildAttr(68, 1, ARMBuildAttrs::Virtualization_use, 221 ARMBuildAttrs::AllowTZ)); 222 EXPECT_TRUE(testBuildAttr(68, 2, ARMBuildAttrs::Virtualization_use, 223 ARMBuildAttrs::AllowVirtualization)); 224 EXPECT_TRUE(testBuildAttr(68, 3, ARMBuildAttrs::Virtualization_use, 225 ARMBuildAttrs::AllowTZVirtualization)); 226 } 227 228 TEST(MPBuildAttr, testBuildAttr) { 229 EXPECT_TRUE(testTagString(42, "Tag_MPextension_use")); 230 EXPECT_TRUE(testBuildAttr(42, 0, ARMBuildAttrs::MPextension_use, 231 ARMBuildAttrs::Not_Allowed)); 232 EXPECT_TRUE(testBuildAttr(42, 1, ARMBuildAttrs::MPextension_use, 233 ARMBuildAttrs::AllowMP)); 234 } 235 236 TEST(DivBuildAttr, testBuildAttr) { 237 EXPECT_TRUE(testTagString(44, "Tag_DIV_use")); 238 EXPECT_TRUE(testBuildAttr(44, 0, ARMBuildAttrs::DIV_use, 239 ARMBuildAttrs::AllowDIVIfExists)); 240 EXPECT_TRUE(testBuildAttr(44, 1, ARMBuildAttrs::DIV_use, 241 ARMBuildAttrs::DisallowDIV)); 242 EXPECT_TRUE(testBuildAttr(44, 2, ARMBuildAttrs::DIV_use, 243 ARMBuildAttrs::AllowDIVExt)); 244 } 245 246 TEST(PCS_ConfigBuildAttr, testBuildAttr) { 247 EXPECT_TRUE(testTagString(13, "Tag_PCS_config")); 248 EXPECT_TRUE(testBuildAttr(13, 0, ARMBuildAttrs::PCS_config, 0)); 249 EXPECT_TRUE(testBuildAttr(13, 1, ARMBuildAttrs::PCS_config, 1)); 250 EXPECT_TRUE(testBuildAttr(13, 2, ARMBuildAttrs::PCS_config, 2)); 251 EXPECT_TRUE(testBuildAttr(13, 3, ARMBuildAttrs::PCS_config, 3)); 252 EXPECT_TRUE(testBuildAttr(13, 4, ARMBuildAttrs::PCS_config, 4)); 253 EXPECT_TRUE(testBuildAttr(13, 5, ARMBuildAttrs::PCS_config, 5)); 254 EXPECT_TRUE(testBuildAttr(13, 6, ARMBuildAttrs::PCS_config, 6)); 255 EXPECT_TRUE(testBuildAttr(13, 7, ARMBuildAttrs::PCS_config, 7)); 256 } 257 258 TEST(PCS_R9BuildAttr, testBuildAttr) { 259 EXPECT_TRUE(testTagString(14, "Tag_ABI_PCS_R9_use")); 260 EXPECT_TRUE(testBuildAttr(14, 0, ARMBuildAttrs::ABI_PCS_R9_use, 261 ARMBuildAttrs::R9IsGPR)); 262 EXPECT_TRUE(testBuildAttr(14, 1, ARMBuildAttrs::ABI_PCS_R9_use, 263 ARMBuildAttrs::R9IsSB)); 264 EXPECT_TRUE(testBuildAttr(14, 2, ARMBuildAttrs::ABI_PCS_R9_use, 265 ARMBuildAttrs::R9IsTLSPointer)); 266 EXPECT_TRUE(testBuildAttr(14, 3, ARMBuildAttrs::ABI_PCS_R9_use, 267 ARMBuildAttrs::R9Reserved)); 268 } 269 270 TEST(PCS_RWBuildAttr, testBuildAttr) { 271 EXPECT_TRUE(testTagString(15, "Tag_ABI_PCS_RW_data")); 272 EXPECT_TRUE(testBuildAttr(15, 0, ARMBuildAttrs::ABI_PCS_RW_data, 273 ARMBuildAttrs::Not_Allowed)); 274 EXPECT_TRUE(testBuildAttr(15, 1, ARMBuildAttrs::ABI_PCS_RW_data, 275 ARMBuildAttrs::AddressRWPCRel)); 276 EXPECT_TRUE(testBuildAttr(15, 2, ARMBuildAttrs::ABI_PCS_RW_data, 277 ARMBuildAttrs::AddressRWSBRel)); 278 EXPECT_TRUE(testBuildAttr(15, 3, ARMBuildAttrs::ABI_PCS_RW_data, 279 ARMBuildAttrs::AddressRWNone)); 280 } 281 282 TEST(PCS_ROBuildAttr, testBuildAttr) { 283 EXPECT_TRUE(testTagString(16, "Tag_ABI_PCS_RO_data")); 284 EXPECT_TRUE(testBuildAttr(16, 0, ARMBuildAttrs::ABI_PCS_RO_data, 285 ARMBuildAttrs::Not_Allowed)); 286 EXPECT_TRUE(testBuildAttr(16, 1, ARMBuildAttrs::ABI_PCS_RO_data, 287 ARMBuildAttrs::AddressROPCRel)); 288 EXPECT_TRUE(testBuildAttr(16, 2, ARMBuildAttrs::ABI_PCS_RO_data, 289 ARMBuildAttrs::AddressRONone)); 290 } 291 292 TEST(PCS_GOTBuildAttr, testBuildAttr) { 293 EXPECT_TRUE(testTagString(17, "Tag_ABI_PCS_GOT_use")); 294 EXPECT_TRUE(testBuildAttr(17, 0, ARMBuildAttrs::ABI_PCS_GOT_use, 295 ARMBuildAttrs::Not_Allowed)); 296 EXPECT_TRUE(testBuildAttr(17, 1, ARMBuildAttrs::ABI_PCS_GOT_use, 297 ARMBuildAttrs::AddressDirect)); 298 EXPECT_TRUE(testBuildAttr(17, 2, ARMBuildAttrs::ABI_PCS_GOT_use, 299 ARMBuildAttrs::AddressGOT)); 300 } 301 302 TEST(PCS_WCharBuildAttr, testBuildAttr) { 303 EXPECT_TRUE(testTagString(18, "Tag_ABI_PCS_wchar_t")); 304 EXPECT_TRUE(testBuildAttr(18, 0, ARMBuildAttrs::ABI_PCS_wchar_t, 305 ARMBuildAttrs::WCharProhibited)); 306 EXPECT_TRUE(testBuildAttr(18, 2, ARMBuildAttrs::ABI_PCS_wchar_t, 307 ARMBuildAttrs::WCharWidth2Bytes)); 308 EXPECT_TRUE(testBuildAttr(18, 4, ARMBuildAttrs::ABI_PCS_wchar_t, 309 ARMBuildAttrs::WCharWidth4Bytes)); 310 } 311 312 TEST(EnumSizeBuildAttr, testBuildAttr) { 313 EXPECT_TRUE(testTagString(26, "Tag_ABI_enum_size")); 314 EXPECT_TRUE(testBuildAttr(26, 0, ARMBuildAttrs::ABI_enum_size, 315 ARMBuildAttrs::EnumProhibited)); 316 EXPECT_TRUE(testBuildAttr(26, 1, ARMBuildAttrs::ABI_enum_size, 317 ARMBuildAttrs::EnumSmallest)); 318 EXPECT_TRUE(testBuildAttr(26, 2, ARMBuildAttrs::ABI_enum_size, 319 ARMBuildAttrs::Enum32Bit)); 320 EXPECT_TRUE(testBuildAttr(26, 3, ARMBuildAttrs::ABI_enum_size, 321 ARMBuildAttrs::Enum32BitABI)); 322 } 323 324 TEST(AlignNeededBuildAttr, testBuildAttr) { 325 EXPECT_TRUE(testTagString(24, "Tag_ABI_align_needed")); 326 EXPECT_TRUE(testBuildAttr(24, 0, ARMBuildAttrs::ABI_align_needed, 327 ARMBuildAttrs::Not_Allowed)); 328 EXPECT_TRUE(testBuildAttr(24, 1, ARMBuildAttrs::ABI_align_needed, 329 ARMBuildAttrs::Align8Byte)); 330 EXPECT_TRUE(testBuildAttr(24, 2, ARMBuildAttrs::ABI_align_needed, 331 ARMBuildAttrs::Align4Byte)); 332 EXPECT_TRUE(testBuildAttr(24, 3, ARMBuildAttrs::ABI_align_needed, 333 ARMBuildAttrs::AlignReserved)); 334 } 335 336 TEST(AlignPreservedBuildAttr, testBuildAttr) { 337 EXPECT_TRUE(testTagString(25, "Tag_ABI_align_preserved")); 338 EXPECT_TRUE(testBuildAttr(25, 0, ARMBuildAttrs::ABI_align_preserved, 339 ARMBuildAttrs::AlignNotPreserved)); 340 EXPECT_TRUE(testBuildAttr(25, 1, ARMBuildAttrs::ABI_align_preserved, 341 ARMBuildAttrs::AlignPreserve8Byte)); 342 EXPECT_TRUE(testBuildAttr(25, 2, ARMBuildAttrs::ABI_align_preserved, 343 ARMBuildAttrs::AlignPreserveAll)); 344 EXPECT_TRUE(testBuildAttr(25, 3, ARMBuildAttrs::ABI_align_preserved, 345 ARMBuildAttrs::AlignReserved)); 346 } 347 348 TEST(FPRoundingBuildAttr, testBuildAttr) { 349 EXPECT_TRUE(testTagString(19, "Tag_ABI_FP_rounding")); 350 EXPECT_TRUE(testBuildAttr(19, 0, ARMBuildAttrs::ABI_FP_rounding, 0)); 351 EXPECT_TRUE(testBuildAttr(19, 1, ARMBuildAttrs::ABI_FP_rounding, 1)); 352 } 353 354 TEST(FPDenormalBuildAttr, testBuildAttr) { 355 EXPECT_TRUE(testTagString(20, "Tag_ABI_FP_denormal")); 356 EXPECT_TRUE(testBuildAttr(20, 0, ARMBuildAttrs::ABI_FP_denormal, 357 ARMBuildAttrs::PositiveZero)); 358 EXPECT_TRUE(testBuildAttr(20, 1, ARMBuildAttrs::ABI_FP_denormal, 359 ARMBuildAttrs::IEEEDenormals)); 360 EXPECT_TRUE(testBuildAttr(20, 2, ARMBuildAttrs::ABI_FP_denormal, 361 ARMBuildAttrs::PreserveFPSign)); 362 } 363 364 TEST(FPExceptionsBuildAttr, testBuildAttr) { 365 EXPECT_TRUE(testTagString(21, "Tag_ABI_FP_exceptions")); 366 EXPECT_TRUE(testBuildAttr(21, 0, ARMBuildAttrs::ABI_FP_exceptions, 0)); 367 EXPECT_TRUE(testBuildAttr(21, 1, ARMBuildAttrs::ABI_FP_exceptions, 1)); 368 } 369 370 TEST(FPUserExceptionsBuildAttr, testBuildAttr) { 371 EXPECT_TRUE(testTagString(22, "Tag_ABI_FP_user_exceptions")); 372 EXPECT_TRUE(testBuildAttr(22, 0, ARMBuildAttrs::ABI_FP_user_exceptions, 0)); 373 EXPECT_TRUE(testBuildAttr(22, 1, ARMBuildAttrs::ABI_FP_user_exceptions, 1)); 374 } 375 376 TEST(FPNumberModelBuildAttr, testBuildAttr) { 377 EXPECT_TRUE(testTagString(23, "Tag_ABI_FP_number_model")); 378 EXPECT_TRUE(testBuildAttr(23, 0, ARMBuildAttrs::ABI_FP_number_model, 379 ARMBuildAttrs::Not_Allowed)); 380 EXPECT_TRUE(testBuildAttr(23, 1, ARMBuildAttrs::ABI_FP_number_model, 381 ARMBuildAttrs::AllowIEEENormal)); 382 EXPECT_TRUE(testBuildAttr(23, 2, ARMBuildAttrs::ABI_FP_number_model, 383 ARMBuildAttrs::AllowRTABI)); 384 EXPECT_TRUE(testBuildAttr(23, 3, ARMBuildAttrs::ABI_FP_number_model, 385 ARMBuildAttrs::AllowIEEE754)); 386 } 387 388 TEST(FP16BuildAttr, testBuildAttr) { 389 EXPECT_TRUE(testTagString(38, "Tag_ABI_FP_16bit_format")); 390 EXPECT_TRUE(testBuildAttr(38, 0, ARMBuildAttrs::ABI_FP_16bit_format, 391 ARMBuildAttrs::Not_Allowed)); 392 EXPECT_TRUE(testBuildAttr(38, 1, ARMBuildAttrs::ABI_FP_16bit_format, 393 ARMBuildAttrs::FP16FormatIEEE)); 394 EXPECT_TRUE(testBuildAttr(38, 2, ARMBuildAttrs::ABI_FP_16bit_format, 395 ARMBuildAttrs::FP16VFP3)); 396 } 397 398 TEST(HardFPBuildAttr, testBuildAttr) { 399 EXPECT_TRUE(testTagString(27, "Tag_ABI_HardFP_use")); 400 EXPECT_TRUE(testBuildAttr(27, 0, ARMBuildAttrs::ABI_HardFP_use, 401 ARMBuildAttrs::HardFPImplied)); 402 EXPECT_TRUE(testBuildAttr(27, 1, ARMBuildAttrs::ABI_HardFP_use, 403 ARMBuildAttrs::HardFPSinglePrecision)); 404 EXPECT_TRUE(testBuildAttr(27, 2, ARMBuildAttrs::ABI_HardFP_use, 2)); 405 } 406 407 TEST(VFPArgsBuildAttr, testBuildAttr) { 408 EXPECT_TRUE(testTagString(28, "Tag_ABI_VFP_args")); 409 EXPECT_TRUE(testBuildAttr(28, 0, ARMBuildAttrs::ABI_VFP_args, 410 ARMBuildAttrs::BaseAAPCS)); 411 EXPECT_TRUE(testBuildAttr(28, 1, ARMBuildAttrs::ABI_VFP_args, 412 ARMBuildAttrs::HardFPAAPCS)); 413 EXPECT_TRUE(testBuildAttr(28, 2, ARMBuildAttrs::ABI_VFP_args, 2)); 414 EXPECT_TRUE(testBuildAttr(28, 3, ARMBuildAttrs::ABI_VFP_args, 3)); 415 } 416 417 TEST(WMMXArgsBuildAttr, testBuildAttr) { 418 EXPECT_TRUE(testTagString(29, "Tag_ABI_WMMX_args")); 419 EXPECT_TRUE(testBuildAttr(29, 0, ARMBuildAttrs::ABI_WMMX_args, 0)); 420 EXPECT_TRUE(testBuildAttr(29, 1, ARMBuildAttrs::ABI_WMMX_args, 1)); 421 EXPECT_TRUE(testBuildAttr(29, 2, ARMBuildAttrs::ABI_WMMX_args, 2)); 422 } 423