Fix ArtDisassemblerTest.LoadLiteralVisit to read initialized values
ArtDisassemblerTest.LoadLiteralVisit tests the disassembly output of
ldr by reading from pc + 0. It was using 64-bit gpr and fpr registers
but we only know the contents of 32-bits (the encoding of the
instruction). The other 32-bits could be uninitialized or maybe even
unaccessible. So use 32-bit registers so we can expect a known value
always.
Bug: 258391316
Test: art_disassembler_tests in asan config
Change-Id: Iaaf2bbe3912772593af64a54e49519ae40e18f14
diff --git a/disassembler/disassembler_arm64_test.cc b/disassembler/disassembler_arm64_test.cc
index c1917cc..81c067a 100644
--- a/disassembler/disassembler_arm64_test.cc
+++ b/disassembler/disassembler_arm64_test.cc
@@ -138,10 +138,12 @@
COMPARE(ldr(x0, MemOperand(x18, 0)), "ldr x0, \\[x18\\]$");
// Check we do append some extra info in the right text format for valid literal load instruction.
- COMPARE(ldr(x0, vixl::aarch64::Assembler::ImmLLiteral(0)),
- "ldr x0, pc\\+0 \\(addr -?0x[0-9a-f]+\\) \\(0x[0-9a-fA-F]+ / -?[0-9]+\\)");
- COMPARE(ldr(d0, vixl::aarch64::Assembler::ImmLLiteral(0)),
- "ldr d0, pc\\+0 \\(addr -?0x[0-9a-f]+\\) \\([0-9]+.[0-9]+e(\\+|-)[0-9]+\\)");
+ COMPARE(ldr(w0, vixl::aarch64::Assembler::ImmLLiteral(0)),
+ "ldr w0, pc\\+0 \\(addr -?0x[0-9a-f]+\\) \\(0x18000000 / 402653184\\)");
+ // We don't compare with exact value even though it's a known literal (the encoding of the
+ // instruction itself) since the precision of printed floating point values could change.
+ COMPARE(ldr(s0, vixl::aarch64::Assembler::ImmLLiteral(0)),
+ "ldr s0, pc\\+0 \\(addr -?0x[0-9a-f]+\\) \\([0-9]+.[0-9]+e(\\+|-)[0-9]+\\)");
}
TEST_F(ArtDisassemblerTest, LoadStoreUnsignedOffsetVisit) {