diff --git a/0001-Remove-MIUtilParse-no-longer-used.patch b/0001-Remove-MIUtilParse-no-longer-used.patch new file mode 100644 index 0000000..5bb734d --- /dev/null +++ b/0001-Remove-MIUtilParse-no-longer-used.patch @@ -0,0 +1,214 @@ +From 988829f74cfe3c9085c097387f7b8d56b64d3d00 Mon Sep 17 00:00:00 2001 +From: Pavel Labath +Date: Tue, 13 Sep 2016 10:39:12 +0000 +Subject: [PATCH] Remove MIUtilParse (no longer used) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Summary: follow-up to https://reviews.llvm.org/D23882 + +Reviewers: dawn, krytarowski, labath, ki.stfu + +Subscribers: beanz, mgorny, labath, ki.stfu, lldb-commits + +Differential Revision: https://reviews.llvm.org/D23883 +Author: Michał Górny + +git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@281317 91177308-0d34-0410-b5e6-96231b3b80d8 +--- + tools/lldb-mi/CMakeLists.txt | 1 - + tools/lldb-mi/MIUtilParse.cpp | 74 ----------------------------------------- + tools/lldb-mi/MIUtilParse.h | 77 ------------------------------------------- + 3 files changed, 152 deletions(-) + delete mode 100644 tools/lldb-mi/MIUtilParse.cpp + delete mode 100644 tools/lldb-mi/MIUtilParse.h + +diff --git a/tools/lldb-mi/CMakeLists.txt b/tools/lldb-mi/CMakeLists.txt +index 79f657a..01ad483 100644 +--- a/tools/lldb-mi/CMakeLists.txt ++++ b/tools/lldb-mi/CMakeLists.txt +@@ -65,7 +65,6 @@ set(LLDB_MI_SOURCES + MIDriverBase.cpp + MIDriverMain.cpp + MIDriverMgr.cpp +- MIUtilParse.cpp + MIUtilDateTimeStd.cpp + MIUtilDebug.cpp + MIUtilFileStd.cpp +diff -up lldb-3.9.0.src/tools/lldb-mi/MIUtilParse.cpp.dave lldb-3.9.0.src/tools/lldb-mi/MIUtilParse.cpp +--- lldb-3.9.0.src/tools/lldb-mi/MIUtilParse.cpp.dave 2016-10-27 07:14:11.484573321 +1000 ++++ lldb-3.9.0.src/tools/lldb-mi/MIUtilParse.cpp 2016-10-27 07:14:58.914009161 +1000 +@@ -1,75 +0,0 @@ +-//===-- MIUtilParse.cpp ----------------------------------------*- C++ -*-===// +-// +-// The LLVM Compiler Infrastructure +-// +-// This file is distributed under the University of Illinois Open Source +-// License. See LICENSE.TXT for details. +-// +-//===----------------------------------------------------------------------===// +- +-// Third party headers: +-#include +- +-// In-house headers: +-#include "MIUtilParse.h" +- +-//++ ------------------------------------------------------------------------------------ +-// Details: CRegexParser constructor. +-// Type: Method. +-// Args: regexStr - Pointer to the regular expression to compile. +-// Return: None. +-// Throws: None. +-//-- +-MIUtilParse::CRegexParser::CRegexParser(const char *regexStr) +- : m_isValid(llvm_regcomp(&m_emma, regexStr, REG_EXTENDED) == 0) +-{ +-} +- +-//++ ------------------------------------------------------------------------------------ +-// Details: CRegexParser destructor. +-// Type: Method. +-// Args: None. +-// Return: None. +-// Throws: None. +-//-- +-MIUtilParse::CRegexParser::~CRegexParser() +-{ +- // Free up memory held within regex. +- if (m_isValid) +- llvm_regfree(&m_emma); +-} +- +-//++ ------------------------------------------------------------------------------------ +-// Details: CRegexParser regex executer. +-// Match the input against the regular expression. Return an error +-// if the number of matches is less than minMatches. If the default +-// minMatches value of 0 is passed, an error will be returned if +-// the number of matches is less than the maxMatches value used to +-// initialize Match. +-// Type: Method. +-// Args: input (R) - Pointer to UTF8 text data to be parsed. +-// match (RW) - Reference to Match class. +-// minMatches (R) - Minimum number of regex matches expected. +-// Return: bool - True = minimum matches were met, +-// false = minimum matches were not met or regex failed. +-// Throws: None. +-//-- +-bool +-MIUtilParse::CRegexParser::Execute(const char *input, Match& match, size_t minMatches) +-{ +- if (!m_isValid) +- return false; +- +- std::unique_ptr matches(new llvm_regmatch_t[match.m_maxMatches]); // Array of matches +- +- if (llvm_regexec(&m_emma, input, match.m_maxMatches, matches.get(), 0) != 0) +- return false; +- +- size_t i; +- for (i = 0; i < match.m_maxMatches && matches[i].rm_so >= 0; i++) +- { +- const int n = matches[i].rm_eo - matches[i].rm_so; +- match.m_matchStrs[i].assign(input + matches[i].rm_so, n); +- } +- return i >= minMatches; +-} +diff -up lldb-3.9.0.src/tools/lldb-mi/MIUtilParse.h.dave lldb-3.9.0.src/tools/lldb-mi/MIUtilParse.h +--- lldb-3.9.0.src/tools/lldb-mi/MIUtilParse.h.dave 2016-10-27 07:14:19.814649866 +1000 ++++ lldb-3.9.0.src/tools/lldb-mi/MIUtilParse.h 2016-10-27 07:14:57.395995227 +1000 +@@ -1,93 +0,0 @@ +-//===-- MIUtilParse.h ------------------------------------------*- C++ -*-===// +-// +-// The LLVM Compiler Infrastructure +-// +-// This file is distributed under the University of Illinois Open Source +-// License. See LICENSE.TXT for details. +-// +-//===----------------------------------------------------------------------===// +- +-#pragma once +- +-// Third party headers: +-#include "../lib/Support/regex_impl.h" +- +-// In-house headers: +-#include "MIUtilString.h" +- +-namespace MIUtilParse +-{ +- +-//++ ============================================================================ +-// Details: MI common code utility class. Used to parse the output +-// returned from lldb commands using regex. +-//-- +-class CRegexParser +-{ +- public: +- // Helper class for keeping track of regex matches. +- class Match +- { +- friend CRegexParser; +- public: +- /* ctor */ explicit Match(size_t nmatches) +- : m_matchStrs(nmatches), m_maxMatches(nmatches) +- { +- } +- size_t +- GetMatchCount() const +- { +- return m_matchStrs.size(); +- } +- CMIUtilString +- GetMatchAtIndex(size_t i) const +- { +- if (m_matchStrs.size() > i) +- return m_matchStrs[i]; +- return CMIUtilString(); +- } +- private: +- CMIUtilString::VecString_t m_matchStrs; +- const size_t m_maxMatches; +- }; +- +- // Methods: +- // Compile the regular expression. +- /* ctor */ explicit CRegexParser(const char *regexStr); +- +- // Free the memory used by the regular expression. +- /* dtor */ ~CRegexParser(); +- +- // No copies +- CRegexParser(const CRegexParser&) = delete; +- void operator=(CRegexParser&) = delete; +- +- // Return the match at the index. +- int +- GetMatchCount(const Match& match) const +- { +- if (m_isValid) +- return match.GetMatchCount(); +- return 0; +- } +- +- bool +- IsValid() const +- { +- return m_isValid; +- } +- +- // Match the input against the regular expression. Return an error +- // if the number of matches is less than minMatches. If the default +- // minMatches value of 0 is passed, an error will be returned if +- // the number of matches is less than the maxMatches value used to +- // initialize Match. +- bool +- Execute(const char *input, Match& match, size_t minMatches = 0); +- +- private: +- llvm_regex_t m_emma; +- const bool m_isValid; +-}; +- +-} diff --git a/0001-Replace-uses-of-MIUtilParse-CRegexParser-with-llvm-R.patch b/0001-Replace-uses-of-MIUtilParse-CRegexParser-with-llvm-R.patch new file mode 100644 index 0000000..71bd67f --- /dev/null +++ b/0001-Replace-uses-of-MIUtilParse-CRegexParser-with-llvm-R.patch @@ -0,0 +1,167 @@ +From 96868d29541c046cf85ed0423cfee4ebf64b341a Mon Sep 17 00:00:00 2001 +From: Pavel Labath +Date: Mon, 5 Sep 2016 15:15:12 +0000 +Subject: [PATCH] Replace uses of MIUtilParse::CRegexParser with llvm::Regex +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Summary: +Replace uses of the local MIUtilParse::CRegexParser class with the LLVM support class llvm::Regex. This reduces duplication of code, and makes it possible to remove the MIUtilParse::CRegexParser class that requires LLVM internal implementation headers. + +Bug: https://llvm.org/bugs/show_bug.cgi?id=29138 + +Reviewers: dawn, abidh, ki.stfu + +Subscribers: labath, ki.stfu, lldb-commits + +Differential Revision: https://reviews.llvm.org/D23882 +Author: Michał Górny + +git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@280662 91177308-0d34-0410-b5e6-96231b3b80d8 +--- + tools/lldb-mi/MICmdCmdData.cpp | 28 +++++++++++++++------------- + tools/lldb-mi/MICmdCmdSymbol.cpp | 38 ++++++++++++++++++++------------------ + 2 files changed, 35 insertions(+), 31 deletions(-) + +diff --git a/tools/lldb-mi/MICmdCmdData.cpp b/tools/lldb-mi/MICmdCmdData.cpp +index a46fb55..7f4c2e8 100644 +--- a/tools/lldb-mi/MICmdCmdData.cpp ++++ b/tools/lldb-mi/MICmdCmdData.cpp +@@ -25,6 +25,9 @@ + #include "lldb/API/SBInstruction.h" + #include "lldb/API/SBInstructionList.h" + #include "lldb/API/SBStream.h" ++#include "llvm/ADT/SmallVector.h" ++#include "llvm/ADT/StringRef.h" ++#include "llvm/Support/Regex.h" + + // In-house headers: + #include "MICmdCmdData.h" +@@ -42,7 +45,6 @@ + #include "MICmdArgValConsume.h" + #include "MICmnLLDBDebugSessionInfoVarObj.h" + #include "MICmnLLDBUtilSBValue.h" +-#include "MIUtilParse.h" + + //++ ------------------------------------------------------------------------------------ + // Details: CMICmdCmdDataEvaluateExpression constructor. +@@ -1651,24 +1653,24 @@ ParseLLDBLineEntry(const char *input, CMIUtilString &start, CMIUtilString &end, + // is remains is assumed to be the filename. + + // Match LineEntry using regex. +- static MIUtilParse::CRegexParser g_lineentry_nocol_regex( +- "^ *LineEntry: \\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+)$"); +- static MIUtilParse::CRegexParser g_lineentry_col_regex( +- "^ *LineEntry: \\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+):[0-9]+$"); +- // ^1=start ^2=end ^3=f ^4=line ^5=:col(opt) ++ static llvm::Regex g_lineentry_nocol_regex( ++ llvm::StringRef("^ *LineEntry: \\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+)$")); ++ static llvm::Regex g_lineentry_col_regex( ++ llvm::StringRef("^ *LineEntry: \\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+):[0-9]+$")); ++ // ^1=start ^2=end ^3=f ^4=line ^5=:col(opt) + +- MIUtilParse::CRegexParser::Match match(6); ++ llvm::SmallVector match; + + // First try matching the LineEntry with the column, + // then try without the column. +- const bool ok = g_lineentry_col_regex.Execute(input, match) || +- g_lineentry_nocol_regex.Execute(input, match); ++ const bool ok = g_lineentry_col_regex.match(input, &match) || ++ g_lineentry_nocol_regex.match(input, &match); + if (ok) + { +- start = match.GetMatchAtIndex(1); +- end = match.GetMatchAtIndex(2); +- file = match.GetMatchAtIndex(3); +- line = match.GetMatchAtIndex(4); ++ start = match[1]; ++ end = match[2]; ++ file = match[3]; ++ line = match[4]; + } + return ok; + } +diff --git a/tools/lldb-mi/MICmdCmdSymbol.cpp b/tools/lldb-mi/MICmdCmdSymbol.cpp +index abaa392..b2519af 100644 +--- a/tools/lldb-mi/MICmdCmdSymbol.cpp ++++ b/tools/lldb-mi/MICmdCmdSymbol.cpp +@@ -11,6 +11,9 @@ + + // Third Party Headers: + #include "lldb/API/SBCommandInterpreter.h" ++#include "llvm/ADT/SmallVector.h" ++#include "llvm/ADT/StringRef.h" ++#include "llvm/Support/Regex.h" + + // In-house headers: + #include "MICmdArgValFile.h" +@@ -19,7 +22,6 @@ + #include "MICmnMIResultRecord.h" + #include "MICmnMIValueList.h" + #include "MICmnMIValueTuple.h" +-#include "MIUtilParse.h" + + //++ ------------------------------------------------------------------------------------ + // Details: CMICmdCmdSymbolListLines constructor. +@@ -105,15 +107,15 @@ static bool + ParseLLDBLineAddressHeader(const char *input, CMIUtilString &file) + { + // Match LineEntry using regex. +- static MIUtilParse::CRegexParser g_lineentry_header_regex( +- "^ *Lines found for file (.+) in compilation unit (.+) in `(.+)$"); +- // ^1=file ^2=cu ^3=module ++ static llvm::Regex g_lineentry_header_regex( ++ llvm::StringRef("^ *Lines found for file (.+) in compilation unit (.+) in `(.+)$")); ++ // ^1=file ^2=cu ^3=module + +- MIUtilParse::CRegexParser::Match match(4); ++ llvm::SmallVector match; + +- const bool ok = g_lineentry_header_regex.Execute(input, match); ++ const bool ok = g_lineentry_header_regex.match(input, &match); + if (ok) +- file = match.GetMatchAtIndex(1); ++ file = match[1]; + return ok; + } + +@@ -141,23 +143,23 @@ ParseLLDBLineAddressEntry(const char *input, CMIUtilString &addr, + // is remains is assumed to be the filename. + + // Match LineEntry using regex. +- static MIUtilParse::CRegexParser g_lineentry_nocol_regex( +- "^ *\\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+)$"); +- static MIUtilParse::CRegexParser g_lineentry_col_regex( +- "^ *\\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+):[0-9]+$"); +- // ^1=start ^2=end ^3=f ^4=line ^5=:col(opt) ++ static llvm::Regex g_lineentry_nocol_regex( ++ llvm::StringRef("^ *\\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+)$")); ++ static llvm::Regex g_lineentry_col_regex( ++ llvm::StringRef("^ *\\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+):[0-9]+$")); ++ // ^1=start ^2=end ^3=f ^4=line ^5=:col(opt) + +- MIUtilParse::CRegexParser::Match match(6); ++ llvm::SmallVector match; + + // First try matching the LineEntry with the column, + // then try without the column. +- const bool ok = g_lineentry_col_regex.Execute(input, match) || +- g_lineentry_nocol_regex.Execute(input, match); ++ const bool ok = g_lineentry_col_regex.match(input, &match) || ++ g_lineentry_nocol_regex.match(input, &match); + if (ok) + { +- addr = match.GetMatchAtIndex(1); +- file = match.GetMatchAtIndex(3); +- line = match.GetMatchAtIndex(4); ++ addr = match[1]; ++ file = match[3]; ++ line = match[4]; + } + return ok; + } +-- +2.5.5 + diff --git a/lldb.spec b/lldb.spec index 9325389..4a8c74f 100644 --- a/lldb.spec +++ b/lldb.spec @@ -7,8 +7,9 @@ License: NCSA URL: http://llvm.org Source0: http://llvm.org/releases/%{version}/%{name}-%{version}.src.tar.xz -# hack patch from upstream review systems to fix out of tree builds. -Patch0: D15067.id41365.diff +# Patch to remove use of private llvm headers +Patch1: 0001-Replace-uses-of-MIUtilParse-CRegexParser-with-llvm-R.patch +Patch2: 0001-Remove-MIUtilParse-no-longer-used.patch BuildRequires: cmake BuildRequires: llvm-devel = %{version} @@ -44,8 +45,12 @@ The package contains the LLDB Python module. %prep %setup -q -n %{name}-%{version}.src -%patch0 -p1 -b .dave +%patch1 -p1 +%patch2 -p1 + %build + +rm tools/lldb-mi/MIUtilParse.* mkdir -p _build cd _build @@ -53,8 +58,8 @@ cd _build LDFLAGS="%{__global_ldflags} -lpthread -ldl" -CFLAGS="%{optflags} -fno-strict-aliasing -Wno-error=format-security" -CXXFLAGS="%{optflags} -fno-strict-aliasing -Wno-error=format-security" +CFLAGS="%{optflags} -fno-strict-aliasing -Wno-error=format-security -fno-rtti" +CXXFLAGS="%{optflags} -fno-strict-aliasing -Wno-error=format-security -fno-rtti" %cmake .. \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ @@ -111,6 +116,8 @@ rm -f %{buildroot}%{python_sitearch}/six.* %changelog * Wed Oct 26 2016 Dave Airlie - 3.9.0-1 - lldb 3.9.0 +- fixup some issues with MIUtilParse by removing it +- build with -fno-rtti * Tue Jul 19 2016 Fedora Release Engineering - 3.8.0-2 - https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages