Support riscv64 in stack tool, remove mips64
Test: atest python-stack_core_test Test: Manual validation against a crash stack on aosp_riscv64. Change-Id: Ifc3646486fda9120c30c987f9623e134d3491a9a
This commit is contained in:
@@ -66,9 +66,9 @@ class TraceConverter:
|
||||
"arm": "r0|r1|r2|r3|r4|r5|r6|r7|r8|r9|sl|fp|ip|sp|lr|pc|cpsr",
|
||||
"arm64": "x0|x1|x2|x3|x4|x5|x6|x7|x8|x9|x10|x11|x12|x13|x14|x15|x16|x17|x18|x19|x20|x21|x22|x23|x24|x25|x26|x27|x28|x29|x30|sp|pc|pstate",
|
||||
"mips": "zr|at|v0|v1|a0|a1|a2|a3|t0|t1|t2|t3|t4|t5|t6|t7|s0|s1|s2|s3|s4|s5|s6|s7|t8|t9|k0|k1|gp|sp|s8|ra|hi|lo|bva|epc",
|
||||
"mips64": "zr|at|v0|v1|a0|a1|a2|a3|a4|a5|a6|a7|t0|t1|t2|t3|s0|s1|s2|s3|s4|s5|s6|s7|t8|t9|k0|k1|gp|sp|s8|ra|hi|lo|bva|epc",
|
||||
"x86": "eax|ebx|ecx|edx|esi|edi|x?cs|x?ds|x?es|x?fs|x?ss|eip|ebp|esp|flags",
|
||||
"x86_64": "rax|rbx|rcx|rdx|rsi|rdi|r8|r9|r10|r11|r12|r13|r14|r15|cs|ss|rip|rbp|rsp|eflags",
|
||||
"riscv64": "ra|sp|gp|tp|t0|t1|t2|s0|s1|a0|a1|a2|a3|a4|a5|a6|a7|s2|s3|s4|s5|s6|s7|s8|s9|s10|s11|t3|t4|t5|t6|pc",
|
||||
}
|
||||
|
||||
# We use the "file" command line tool to extract BuildId from ELF files.
|
||||
@@ -78,14 +78,14 @@ class TraceConverter:
|
||||
flags=re.DOTALL)
|
||||
|
||||
def UpdateAbiRegexes(self):
|
||||
if symbol.ARCH == "arm64" or symbol.ARCH == "mips64" or symbol.ARCH == "x86_64":
|
||||
if symbol.ARCH == "arm64" or symbol.ARCH == "x86_64" or symbol.ARCH == "riscv64":
|
||||
self.width = "{16}"
|
||||
self.spacing = " "
|
||||
else:
|
||||
self.width = "{8}"
|
||||
self.spacing = ""
|
||||
|
||||
self.register_line = re.compile("(([ ]*\\b(" + self.register_names[symbol.ARCH] + ")\\b +[0-9a-f]" + self.width + "){2,5})")
|
||||
self.register_line = re.compile("(([ ]*\\b(" + self.register_names[symbol.ARCH] + ")\\b +[0-9a-f]" + self.width + "){1,5}$)")
|
||||
|
||||
# Note that both trace and value line matching allow for variable amounts of
|
||||
# whitespace (e.g. \t). This is because the we want to allow for the stack
|
||||
@@ -541,7 +541,7 @@ class TraceConverter:
|
||||
if nest_count > 0:
|
||||
nest_count = nest_count - 1
|
||||
arrow = "v------>"
|
||||
if symbol.ARCH == "arm64" or symbol.ARCH == "mips64" or symbol.ARCH == "x86_64":
|
||||
if symbol.ARCH == "arm64" or symbol.ARCH == "x86_64" or symbol.ARCH == "riscv64":
|
||||
arrow = "v-------------->"
|
||||
self.trace_lines.append((arrow, source_symbol, source_location))
|
||||
else:
|
||||
@@ -602,15 +602,15 @@ class RegisterPatternTests(unittest.TestCase):
|
||||
def test_mips_registers(self):
|
||||
self.assert_register_matches("mips", example_crashes.mips, '\\b(zr|a0|t0|t4|s0|s4|t8|gp|hi)\\b')
|
||||
|
||||
def test_mips64_registers(self):
|
||||
self.assert_register_matches("mips64", example_crashes.mips64, '\\b(zr|a0|a4|t0|s0|s4|t8|gp|hi)\\b')
|
||||
|
||||
def test_x86_registers(self):
|
||||
self.assert_register_matches("x86", example_crashes.x86, '\\b(eax|esi|xcs|eip)\\b')
|
||||
|
||||
def test_x86_64_registers(self):
|
||||
self.assert_register_matches("x86_64", example_crashes.x86_64, '\\b(rax|rsi|r8|r12|cs|rip)\\b')
|
||||
|
||||
def test_riscv64_registers(self):
|
||||
self.assert_register_matches("riscv64", example_crashes.riscv64, '\\b(gp|t2|t6|s3|s7|s11|a3|a7|sp)\\b')
|
||||
|
||||
class LibmemunreachablePatternTests(unittest.TestCase):
|
||||
def test_libmemunreachable(self):
|
||||
tc = TraceConverter()
|
||||
|
||||
Reference in New Issue
Block a user