From dd5d611b0d6763c0a625c1315fb873cd28a50158 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sun, 20 May 2018 15:37:12 -0700 Subject: clang: Fix driver segfault with very long commandline This is triggerred with webkit linking commands Signed-off-by: Khem Raj --- ...r-Avoid-invalidated-iterator-in-insertTar.patch | 56 ++++++++++++++++++++++ recipes-devtools/clang/common.inc | 1 + 2 files changed, 57 insertions(+) create mode 100644 recipes-devtools/clang/clang/0009-clang-Driver-Avoid-invalidated-iterator-in-insertTar.patch diff --git a/recipes-devtools/clang/clang/0009-clang-Driver-Avoid-invalidated-iterator-in-insertTar.patch b/recipes-devtools/clang/clang/0009-clang-Driver-Avoid-invalidated-iterator-in-insertTar.patch new file mode 100644 index 0000000..2f7b921 --- /dev/null +++ b/recipes-devtools/clang/clang/0009-clang-Driver-Avoid-invalidated-iterator-in-insertTar.patch @@ -0,0 +1,56 @@ +From 19c832f5017f796012812414705f8d57e77b28ce Mon Sep 17 00:00:00 2001 +From: Serge Pavlov +Date: Mon, 19 Mar 2018 16:13:43 +0000 +Subject: [PATCH 9/9] clang: [Driver] Avoid invalidated iterator in + insertTargetAndModeArgs + +Doing an .insert() can potentially invalidate iterators by reallocating the +vector's storage. When all the stars align just right, this causes segfaults +or glibc aborts. + +Gentoo Linux bug (crashes while building Chromium): https://bugs.gentoo.org/650082. + +Patch by Hector Martin! + +Differential Revision: https://reviews.llvm.org/D44607 + +git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@327863 91177308-0d34-0410-b5e6-96231b3b80d8 +--- +Upstream-Status: Backport + + tools/driver/driver.cpp | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/tools/driver/driver.cpp b/tools/driver/driver.cpp +index fa757da953..1b614accb2 100644 +--- a/tools/driver/driver.cpp ++++ b/tools/driver/driver.cpp +@@ -212,20 +212,21 @@ static void insertTargetAndModeArgs(const ParsedClangName &NameParts, + // Put target and mode arguments at the start of argument list so that + // arguments specified in command line could override them. Avoid putting + // them at index 0, as an option like '-cc1' must remain the first. +- auto InsertionPoint = ArgVector.begin(); +- if (InsertionPoint != ArgVector.end()) ++ int InsertionPoint = 0; ++ if (ArgVector.size() > 0) + ++InsertionPoint; + + if (NameParts.DriverMode) { + // Add the mode flag to the arguments. +- ArgVector.insert(InsertionPoint, ++ ArgVector.insert(ArgVector.begin() + InsertionPoint, + GetStableCStr(SavedStrings, NameParts.DriverMode)); + } + + if (NameParts.TargetIsValid) { + const char *arr[] = {"-target", GetStableCStr(SavedStrings, + NameParts.TargetPrefix)}; +- ArgVector.insert(InsertionPoint, std::begin(arr), std::end(arr)); ++ ArgVector.insert(ArgVector.begin() + InsertionPoint, ++ std::begin(arr), std::end(arr)); + } + } + +-- +2.17.0 + diff --git a/recipes-devtools/clang/common.inc b/recipes-devtools/clang/common.inc index e1543f0..7936405 100644 --- a/recipes-devtools/clang/common.inc +++ b/recipes-devtools/clang/common.inc @@ -19,6 +19,7 @@ CLANGPATCHES = "\ file://0006-clang-Define-releative-gcc-installation-dir.patch;patchdir=tools/clang \ file://0007-clang-Fix-ldso-for-musl-on-x86-and-x32-architectures.patch;patchdir=tools/clang \ file://0008-clang-scan-view-needs-python-2.x.patch;patchdir=tools/clang \ + file://0009-clang-Driver-Avoid-invalidated-iterator-in-insertTar.patch;patchdir=tools/clang \ " #CLANGPATCHES += "${@'file://0007-clang-Enable-SSP-and-PIE-by-default.patch;patchdir=tools/clang' if '${GCCPIE}' else ''}" -- cgit v1.2.3-54-g00ecf