diff options
author | wanglei <wanglei@loongson.cn> | 2024-11-08 10:43:57 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-08 10:43:57 +0800 |
commit | 1c8fca82a0f4ac6df5db539e96adcad143f5ebe7 (patch) | |
tree | 6d5b6142a954535f880c81de9a0b0e3b22905755 /lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp | |
parent | 4e668d5b27a339918bee4d994fca31d962519e80 (diff) | |
download | llvm-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.cpp | 17 |
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 §ion_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; |