[libunwind][LoongArch] Add 64-bit LoongArch support
Defines enums for the LoongArch registers.
Adds the register class implementation for LoongArch.
Adds save and restore context functionality.
This only supports 64 bits integer and float-point register
implementation.
Fix https://github.com/llvm/llvm-project/issues/55398
Reviewed By: SixWeining
Differential Revision: https://reviews.llvm.org/D137010
NOKEYCHECK=True
GitOrigin-RevId: c5072695127e767a76973cdbed683215df31fa40
diff --git a/src/UnwindCursor.hpp b/src/UnwindCursor.hpp
index f118497..0c6cda3 100644
--- a/src/UnwindCursor.hpp
+++ b/src/UnwindCursor.hpp
@@ -1064,6 +1064,10 @@
}
#endif
+#if defined(_LIBUNWIND_TARGET_LOONGARCH)
+ int stepWithCompactEncoding(Registers_loongarch &) { return UNW_EINVAL; }
+#endif
+
#if defined(_LIBUNWIND_TARGET_SPARC)
int stepWithCompactEncoding(Registers_sparc &) { return UNW_EINVAL; }
#endif
@@ -1140,6 +1144,12 @@
}
#endif
+#if defined(_LIBUNWIND_TARGET_LOONGARCH)
+ bool compactSaysUseDwarf(Registers_loongarch &, uint32_t *) const {
+ return true;
+ }
+#endif
+
#if defined(_LIBUNWIND_TARGET_SPARC)
bool compactSaysUseDwarf(Registers_sparc &, uint32_t *) const { return true; }
#endif
@@ -1224,6 +1234,12 @@
}
#endif
+#if defined(_LIBUNWIND_TARGET_LOONGARCH)
+ compact_unwind_encoding_t dwarfEncoding(Registers_loongarch &) const {
+ return 0;
+ }
+#endif
+
#if defined(_LIBUNWIND_TARGET_SPARC)
compact_unwind_encoding_t dwarfEncoding(Registers_sparc &) const { return 0; }
#endif