aboutsummaryrefslogtreecommitdiff
path: root/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp')
-rw-r--r--source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp36
1 files changed, 16 insertions, 20 deletions
diff --git a/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp b/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
index e920d70cd596..61c3c64d4fc3 100644
--- a/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
+++ b/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
@@ -38,7 +38,7 @@
#include "lldb/Target/Target.h"
#include "lldb/Target/StackFrame.h"
-#include <regex.h>
+#include "lldb/Core/RegularExpression.h"
using namespace lldb;
using namespace lldb_private;
@@ -369,20 +369,14 @@ public:
}
}
- if (!s_regex_compiled)
- {
- ::regcomp(&s_regex, "[ \t]*([^ ^\t]+)[ \t]*([^ ^\t].*)?", REG_EXTENDED);
- s_regex_compiled = true;
- }
+ static RegularExpression s_regex("[ \t]*([^ ^\t]+)[ \t]*([^ ^\t].*)?", REG_EXTENDED);
- ::regmatch_t matches[3];
+ RegularExpression::Match matches(3);
- if (!::regexec(&s_regex, out_string, sizeof(matches) / sizeof(::regmatch_t), matches, 0))
+ if (s_regex.Execute(out_string, &matches))
{
- if (matches[1].rm_so != -1)
- m_opcode_name.assign(out_string + matches[1].rm_so, matches[1].rm_eo - matches[1].rm_so);
- if (matches[2].rm_so != -1)
- m_mnemonics.assign(out_string + matches[2].rm_so, matches[2].rm_eo - matches[2].rm_so);
+ matches.GetMatchAtIndex(out_string, 1, m_opcode_name);
+ matches.GetMatchAtIndex(out_string, 2, m_mnemonics);
}
}
}
@@ -415,13 +409,9 @@ protected:
LazyBool m_does_branch;
bool m_is_valid;
bool m_using_file_addr;
-
- static bool s_regex_compiled;
- static ::regex_t s_regex;
};
-bool InstructionLLVMC::s_regex_compiled = false;
-::regex_t InstructionLLVMC::s_regex;
+
DisassemblerLLVMC::LLVMCDisassembler::LLVMCDisassembler (const char *triple, unsigned flavor, DisassemblerLLVMC &owner):
m_is_valid(true)
@@ -651,9 +641,15 @@ DisassemblerLLVMC::DisassemblerLLVMC (const ArchSpec &arch, const char *flavor_s
}
// Cortex-M3 devices (e.g. armv7m) can only execute thumb (T2) instructions,
- // so hardcode the primary disassembler to thumb mode.
+ // so hardcode the primary disassembler to thumb mode. Same for Cortex-M4 (armv7em).
+ //
+ // Handle the Cortex-M0 (armv6m) the same; the ISA is a subset of the T and T32
+ // instructions defined in ARMv7-A.
+
if (arch.GetTriple().getArch() == llvm::Triple::arm
- && (arch.GetCore() == ArchSpec::Core::eCore_arm_armv7m || arch.GetCore() == ArchSpec::Core::eCore_arm_armv7em))
+ && (arch.GetCore() == ArchSpec::Core::eCore_arm_armv7m
+ || arch.GetCore() == ArchSpec::Core::eCore_arm_armv7em
+ || arch.GetCore() == ArchSpec::Core::eCore_arm_armv6m))
{
triple = thumb_arch.GetTriple().getTriple().c_str();
}
@@ -796,7 +792,7 @@ int DisassemblerLLVMC::OpInfo (uint64_t PC,
default:
break;
case 1:
- bzero (tag_bug, sizeof(::LLVMOpInfo1));
+ memset (tag_bug, 0, sizeof(::LLVMOpInfo1));
break;
}
return 0;