diff options
author | Tamas Berghammer <tberghammer@google.com> | 2015-03-31 10:21:50 +0000 |
---|---|---|
committer | Tamas Berghammer <tberghammer@google.com> | 2015-03-31 10:21:50 +0000 |
commit | dccbfaf917e009c8cf260091275b0e4d1cb5d456 (patch) | |
tree | 001f98c381ee6b1a96a21a4d8f29740cc2407893 /lldb/source/Core/ArchSpec.cpp | |
parent | 4c1b7467714e01335fcda3e396d8fed6ac273693 (diff) | |
download | bcm5719-llvm-dccbfaf917e009c8cf260091275b0e4d1cb5d456.tar.gz bcm5719-llvm-dccbfaf917e009c8cf260091275b0e4d1cb5d456.zip |
Fix type detection for 'char' variables
A char can have signed and unsigned encoding but previously lldb always
assumed it is signed. This CL adds a logic to detect the encoding of
'char' types based on the default encoding on the target architecture.
It fixes variable printing and expression evaluation on architectures
where 'char' is signed by default.
Differential revision: http://reviews.llvm.org/D8636
llvm-svn: 233682
Diffstat (limited to 'lldb/source/Core/ArchSpec.cpp')
-rw-r--r-- | lldb/source/Core/ArchSpec.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lldb/source/Core/ArchSpec.cpp b/lldb/source/Core/ArchSpec.cpp index be3f84b06aa..4040671e54c 100644 --- a/lldb/source/Core/ArchSpec.cpp +++ b/lldb/source/Core/ArchSpec.cpp @@ -577,6 +577,32 @@ ArchSpec::GetDefaultEndian () const return eByteOrderInvalid; } +bool +ArchSpec::CharIsSignedByDefault () const +{ + switch (m_triple.getArch()) { + default: + return true; + + case llvm::Triple::aarch64: + case llvm::Triple::aarch64_be: + case llvm::Triple::arm: + case llvm::Triple::armeb: + case llvm::Triple::thumb: + case llvm::Triple::thumbeb: + return m_triple.isOSDarwin() || m_triple.isOSWindows(); + + case llvm::Triple::ppc: + case llvm::Triple::ppc64: + return m_triple.isOSDarwin(); + + case llvm::Triple::ppc64le: + case llvm::Triple::systemz: + case llvm::Triple::xcore: + return false; + } +} + lldb::ByteOrder ArchSpec::GetByteOrder () const { |