aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
diff options
context:
space:
mode:
authorwanglei <wanglei@loongson.cn>2024-11-08 10:43:57 +0800
committerGitHub <noreply@github.com>2024-11-08 10:43:57 +0800
commit1c8fca82a0f4ac6df5db539e96adcad143f5ebe7 (patch)
tree6d5b6142a954535f880c81de9a0b0e3b22905755 /lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
parent4e668d5b27a339918bee4d994fca31d962519e80 (diff)
downloadllvm-1c8fca82a0f4ac6df5db539e96adcad143f5ebe7.zip
llvm-1c8fca82a0f4ac6df5db539e96adcad143f5ebe7.tar.gz
llvm-1c8fca82a0f4ac6df5db539e96adcad143f5ebe7.tar.bz2
[lldb][LoongArch] Function calls support in lldb expressions
This patch adds desired feature flags in JIT compiler to enable hard-float instructions if target supports them and allows to use floats and doubles in lldb expressions. Fited tests: lldb-shell :: Expr/TestAnonNamespaceParamFunc.cpp lldb-shell :: Expr/TestIRMemoryMap.test lldb-shell :: Expr/TestStringLiteralExpr.test lldb-shell :: SymbolFile/DWARF/debug-types-expressions.test Similar as #99336 Depens on: https://github.com/llvm/llvm-project/pull/114741 Reviewed By: SixWeining Pull Request: https://github.com/llvm/llvm-project/pull/114742
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp')
-rw-r--r--lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 10d0966..9c7dff8 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -1436,6 +1436,23 @@ size_t ObjectFileELF::GetSectionHeaderInfo(SectionHeaderColl &section_headers,
arch_spec.SetFlags(flags);
}
+ if (arch_spec.GetMachine() == llvm::Triple::loongarch32 ||
+ arch_spec.GetMachine() == llvm::Triple::loongarch64) {
+ uint32_t flags = arch_spec.GetFlags();
+ switch (header.e_flags & llvm::ELF::EF_LOONGARCH_ABI_MODIFIER_MASK) {
+ case llvm::ELF::EF_LOONGARCH_ABI_SINGLE_FLOAT:
+ flags |= ArchSpec::eLoongArch_abi_single_float;
+ break;
+ case llvm::ELF::EF_LOONGARCH_ABI_DOUBLE_FLOAT:
+ flags |= ArchSpec::eLoongArch_abi_double_float;
+ break;
+ case llvm::ELF::EF_LOONGARCH_ABI_SOFT_FLOAT:
+ break;
+ }
+
+ arch_spec.SetFlags(flags);
+ }
+
// If there are no section headers we are done.
if (header.e_shnum == 0)
return 0;