From dccbfaf917e009c8cf260091275b0e4d1cb5d456 Mon Sep 17 00:00:00 2001 From: Tamas Berghammer Date: Tue, 31 Mar 2015 10:21:50 +0000 Subject: 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 --- lldb/source/Core/ArchSpec.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'lldb/source/Core/ArchSpec.cpp') 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 { -- cgit v1.2.3