aboutsummaryrefslogtreecommitdiff
path: root/arm_utils_unittest.cc
diff options
context:
space:
mode:
authorSamuel Huang <huangs@chromium.org>2021-07-22 16:26:47 +0000
committerCopybara-Service <copybara-worker@google.com>2021-07-25 21:38:38 -0700
commit769128e925d4591347c4f28ccb1e3e552af5f13b (patch)
tree4fde049cef07dd51f2adf3b8eb27661070967204 /arm_utils_unittest.cc
parentf48f9be9148176b288655f809d5bb64589d042df (diff)
downloadzucchini-769128e925d4591347c4f28ccb1e3e552af5f13b.tar.gz
[Zucchini] Cleanup before adding ARM support for ELF files.
This CL performs some code cleanup to prepare for main CL that adds ARM support for ELF files (https://crrev.com/c/2922822): * Rename ARM32 / Arm32 to AArch32. * Replace DISALLOW_COPY_AND_ASSIGN for affected files. Bug: 918867 Change-Id: I0e96b66fb29e9d1a35f9d7fac65755fbeda4831f Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3044420 Commit-Queue: Samuel Huang <huangs@chromium.org> Commit-Queue: Etienne Pierre-Doray <etiennep@chromium.org> Reviewed-by: Etienne Pierre-Doray <etiennep@chromium.org> Cr-Commit-Position: refs/heads/master@{#904357} NOKEYCHECK=True GitOrigin-RevId: 33679d241940ef6221b68d3e5daef606d7dd767d
Diffstat (limited to 'arm_utils_unittest.cc')
-rw-r--r--arm_utils_unittest.cc54
1 files changed, 29 insertions, 25 deletions
diff --git a/arm_utils_unittest.cc b/arm_utils_unittest.cc
index 56aa1f9..8109c92 100644
--- a/arm_utils_unittest.cc
+++ b/arm_utils_unittest.cc
@@ -121,8 +121,8 @@ static bool SplitBits(const std::string& pattern,
return true;
}
-// ARM32 or AArch64 instruction specification for tests. May be 16-bit or 32-bit
-// (determined by INT_T).
+// AArch32 or AArch64 instruction specification for tests. May be 16-bit or
+// 32-bit (determined by INT_T).
template <typename INT_T>
struct ArmRelInstruction {
ArmRelInstruction(const std::string& code_pattern_in, INT_T code)
@@ -307,10 +307,10 @@ TEST(ArmUtilsTest, SplitBits) {
run_test("BAD", "AAAAaaaa BBBB01..", 0xFC02); // Constant mismatch.
}
-TEST(Arm32Rel32Translator, Fetch) {
+TEST(AArch32Rel32Translator, Fetch) {
std::vector<uint8_t> bytes = {0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE};
ConstBufferView region(&bytes[0], bytes.size());
- Arm32Rel32Translator translator;
+ AArch32Rel32Translator translator;
EXPECT_EQ(0x76543210U, translator.FetchArmCode32(region, 0U));
EXPECT_EQ(0xFEDCBA98U, translator.FetchArmCode32(region, 4U));
@@ -321,7 +321,7 @@ TEST(Arm32Rel32Translator, Fetch) {
EXPECT_EQ(0xBA98FEDCU, translator.FetchThumb2Code32(region, 4U));
}
-TEST(Arm32Rel32Translator, Store) {
+TEST(AArch32Rel32Translator, Store) {
std::vector<uint8_t> expected = {
0xFF, 0xFF, 0xFF, 0xFF, // Padding.
0x10, 0x32, 0x54, 0x76, // ARM 32-bit.
@@ -336,7 +336,7 @@ TEST(Arm32Rel32Translator, Store) {
MutableBufferView region(&bytes[0], bytes.size());
CHECK_EQ(expected.size(), bytes.size());
- Arm32Rel32Translator translator;
+ AArch32Rel32Translator translator;
translator.StoreArmCode32(region, 4U, 0x76543210U);
translator.StoreThumb2Code16(region, 10U, 0x8642U);
translator.StoreThumb2Code32(region, 14U, 0xFEDCBA98U);
@@ -346,10 +346,11 @@ TEST(Arm32Rel32Translator, Store) {
// Detailed test of Encode/Decode: Check valid and invalid |disp| for various
// clean slate |code| cases. Also check |disp| and |code| binary components,
-// which in Arm32Rel32Translator comments.
-TEST(Arm32Rel32Translator, EncodeDecode) {
+// which in AArch32Rel32Translator comments.
+TEST(AArch32Rel32Translator, EncodeDecode) {
// A24 tests.
- ArmTranslatorEncodeDecodeTest<Arm32Rel32Translator::AddrTraits_A24> test_A24;
+ ArmTranslatorEncodeDecodeTest<AArch32Rel32Translator::AddrTraits_A24>
+ test_A24;
for (int cond = 0; cond <= 0x0E; ++cond) {
ArmRelInstruction<uint32_t> B_A1_cond("cccc1010 Siiiiiii iiiiiiii iiiiiiii",
kCleanSlateB_A1 | (cond << 28));
@@ -368,7 +369,7 @@ TEST(Arm32Rel32Translator, EncodeDecode) {
{1, -1, 0x41, 0x43, 0x02000000, -0x02000002});
// T8 tests.
- ArmTranslatorEncodeDecodeTest<Arm32Rel32Translator::AddrTraits_T8> test_T8;
+ ArmTranslatorEncodeDecodeTest<AArch32Rel32Translator::AddrTraits_T8> test_T8;
for (int cond = 0; cond <= 0x0E; ++cond) {
ArmRelInstruction<uint16_t> B_T1_cond("1101cccc Siiiiiii",
kCleanSlateB_T1 | (cond << 8));
@@ -383,14 +384,16 @@ TEST(Arm32Rel32Translator, EncodeDecode) {
{0x00FE, -0x0100, 0, 2, 4, 0x40, 0x41, 0x0100, -0x0102});
// T11 tests.
- ArmTranslatorEncodeDecodeTest<Arm32Rel32Translator::AddrTraits_T11> test_T11;
+ ArmTranslatorEncodeDecodeTest<AArch32Rel32Translator::AddrTraits_T11>
+ test_T11;
ArmRelInstruction<uint16_t> B_T2("11100Sii iiiiiiii", kCleanSlateB_T2);
test_T11.Run("SSSSSSSS SSSSSSSS SSSSSiii iiiiiii0", {"S", "i"}, {B_T2},
{0x07FE, -0x0800, 0, 2, -2, 4, 0x40, 0x42},
{1, -1, 0x41, 0x43, 0x0800, -0x0802});
// T20 tests.
- ArmTranslatorEncodeDecodeTest<Arm32Rel32Translator::AddrTraits_T20> test_T20;
+ ArmTranslatorEncodeDecodeTest<AArch32Rel32Translator::AddrTraits_T20>
+ test_T20;
for (int cond = 0; cond <= 0x0E; ++cond) {
ArmRelInstruction<uint32_t> B_T3_cond(
"11110Scc cciiiiii 10(J1)0(J2)jjj jjjjjjjj",
@@ -409,7 +412,8 @@ TEST(Arm32Rel32Translator, EncodeDecode) {
0x00100000, -0x00100002});
// T24 tests.
- ArmTranslatorEncodeDecodeTest<Arm32Rel32Translator::AddrTraits_T24> test_T24;
+ ArmTranslatorEncodeDecodeTest<AArch32Rel32Translator::AddrTraits_T24>
+ test_T24;
// "Clean slate" means J1 = J2 = 1, so we include 0x00002800.
ArmRelInstruction<uint32_t> B_T4("11110Sii iiiiiiii 10(J1)1(J2)jjj jjjjjjjj",
kCleanSlateB_T4);
@@ -431,7 +435,7 @@ TEST(Arm32Rel32Translator, EncodeDecode) {
{1, -1, 2, -2, 0x41, 0x42, 0x43, 0x00FFFFFE, 0x01000000, -0x01000002});
}
-TEST(Arm32Rel32Translator, WriteRead) {
+TEST(AArch32Rel32Translator, WriteRead) {
std::vector<rva_t> aligned4;
std::vector<rva_t> misaligned4;
std::vector<rva_t> aligned2;
@@ -450,7 +454,7 @@ TEST(Arm32Rel32Translator, WriteRead) {
auto pcThumb2 = [](rva_t instr_rva) -> rva_t { return instr_rva + 4; };
// A24 tests.
- ArmTranslatorWriteReadTest<Arm32Rel32Translator::AddrTraits_A24> test_A24;
+ ArmTranslatorWriteReadTest<AArch32Rel32Translator::AddrTraits_A24> test_A24;
for (uint32_t clean_slate_code : {kCleanSlateB_A1, kCleanSlateBL_A1}) {
test_A24.Accept(clean_slate_code, aligned4, aligned4);
test_A24.Reject(clean_slate_code, aligned4, misaligned4);
@@ -475,7 +479,7 @@ TEST(Arm32Rel32Translator, WriteRead) {
pcArm(0x16FFFFFE + 2), pcArm(0x16FFFFFE + 4)});
// T8 tests.
- ArmTranslatorWriteReadTest<Arm32Rel32Translator::AddrTraits_T8> test_T8;
+ ArmTranslatorWriteReadTest<AArch32Rel32Translator::AddrTraits_T8> test_T8;
test_T8.Accept(kCleanSlateB_T1, aligned2, aligned2);
test_T8.Reject(kCleanSlateB_T1, aligned2, misaligned2);
test_T8.Reject(kCleanSlateB_T1, misaligned2, aligned2);
@@ -487,7 +491,7 @@ TEST(Arm32Rel32Translator, WriteRead) {
{pcThumb2(0x10000400 - 2), pcThumb2(0x100005FE + 2)});
// T11 tests.
- ArmTranslatorWriteReadTest<Arm32Rel32Translator::AddrTraits_T11> test_T11;
+ ArmTranslatorWriteReadTest<AArch32Rel32Translator::AddrTraits_T11> test_T11;
test_T11.Accept(kCleanSlateB_T2, aligned2, aligned2);
test_T11.Reject(kCleanSlateB_T2, aligned2, misaligned2);
test_T11.Reject(kCleanSlateB_T2, misaligned2, aligned2);
@@ -499,7 +503,7 @@ TEST(Arm32Rel32Translator, WriteRead) {
{pcThumb2(0x10002800 - 2), pcThumb2(0x100037FE + 2)});
// T20 tests.
- ArmTranslatorWriteReadTest<Arm32Rel32Translator::AddrTraits_T20> test_T20;
+ ArmTranslatorWriteReadTest<AArch32Rel32Translator::AddrTraits_T20> test_T20;
test_T20.Accept(kCleanSlateB_T3, aligned2, aligned2);
test_T20.Reject(kCleanSlateB_T3, aligned2, misaligned2);
test_T20.Reject(kCleanSlateB_T3, misaligned2, aligned2);
@@ -511,7 +515,7 @@ TEST(Arm32Rel32Translator, WriteRead) {
{pcThumb2(0x10200000 - 2), pcThumb2(0x103FFFFE + 2)});
// T24 tests.
- ArmTranslatorWriteReadTest<Arm32Rel32Translator::AddrTraits_T24> test_T24;
+ ArmTranslatorWriteReadTest<AArch32Rel32Translator::AddrTraits_T24> test_T24;
for (uint32_t clean_slate_code : {kCleanSlateB_T4, kCleanSlateBL_T1}) {
test_T24.Accept(clean_slate_code, aligned2, aligned2);
test_T24.Reject(clean_slate_code, aligned2, misaligned2);
@@ -537,12 +541,12 @@ TEST(Arm32Rel32Translator, WriteRead) {
}
// Typical usage in |target_rva| extraction.
-TEST(Arm32Rel32Translator, Main) {
+TEST(AArch32Rel32Translator, Main) {
// ARM mode (32-bit).
// 00103050: 00 01 02 EA B 00183458 ; B encoding A1 (cond = AL).
{
rva_t instr_rva = 0x00103050U;
- Arm32Rel32Translator translator;
+ AArch32Rel32Translator translator;
std::vector<uint8_t> bytes = {0x00, 0x01, 0x02, 0xEA};
MutableBufferView region(&bytes[0], bytes.size());
uint32_t code = translator.FetchArmCode32(region, 0U);
@@ -572,7 +576,7 @@ TEST(Arm32Rel32Translator, Main) {
// 001030A2: F3 E7 B 0010308C ; B encoding T2.
{
rva_t instr_rva = 0x001030A2U;
- Arm32Rel32Translator translator;
+ AArch32Rel32Translator translator;
std::vector<uint8_t> bytes = {0xF3, 0xE7};
MutableBufferView region(&bytes[0], bytes.size());
uint16_t code = translator.FetchThumb2Code16(region, 0U);
@@ -603,7 +607,7 @@ TEST(Arm32Rel32Translator, Main) {
// 001030A2: 00 F0 01 FA BL 001034A8 ; BL encoding T1.
{
rva_t instr_rva = 0x001030A2U;
- Arm32Rel32Translator translator;
+ AArch32Rel32Translator translator;
std::vector<uint8_t> bytes = {0x00, 0xF0, 0x01, 0xFA};
MutableBufferView region(&bytes[0], bytes.size());
uint32_t code = translator.FetchThumb2Code32(region, 0U);
@@ -630,12 +634,12 @@ TEST(Arm32Rel32Translator, Main) {
}
}
-TEST(Arm32Rel32Translator, BLXComplication) {
+TEST(AArch32Rel32Translator, BLXComplication) {
auto run_test = [](rva_t instr_rva,
std::vector<uint8_t> bytes, // Pass by value.
uint32_t expected_code, arm_disp_t expected_disp,
uint32_t clean_slate_code, rva_t expected_target_rva) {
- Arm32Rel32Translator translator;
+ AArch32Rel32Translator translator;
MutableBufferView region(&bytes[0], bytes.size());
uint32_t code = translator.FetchThumb2Code32(region, 0U);
EXPECT_EQ(expected_code, code);