From ac63e8ce1ee8c18357e3fb8c75584144cf795288 Mon Sep 17 00:00:00 2001 From: Jan Michael Auer Date: Sun, 5 Apr 2020 18:44:35 +0200 Subject: [PATCH] build: Require a C++14 compiler and switch to manylinux 2010 --- .craft.yml | 4 +- .travis.yml | 4 +- README.md | 2 +- demangle/build.rs | 2 +- demangle/vendor/swift/2-cpp11.patch | 320 ---------------------------- demangle/vendor/swift/README.md | 16 +- 6 files changed, 13 insertions(+), 335 deletions(-) delete mode 100644 demangle/vendor/swift/2-cpp11.patch diff --git a/.craft.yml b/.craft.yml index 5dba8c4cb..d7cdb0312 100644 --- a/.craft.yml +++ b/.craft.yml @@ -11,6 +11,6 @@ targets: changelogPolicy: simple requireNames: - /^symbolic-.*-py2.py3-none-macosx_10_13_x86_64.whl$/ - - /^symbolic-.*-py2.py3-none-manylinux1_i686.whl$/ - - /^symbolic-.*-py2.py3-none-manylinux1_x86_64.whl$/ + - /^symbolic-.*-py2.py3-none-manylinux2010_i686.whl$/ + - /^symbolic-.*-py2.py3-none-manylinux2010_x86_64.whl$/ - /^symbolic-.*.zip$/ diff --git a/.travis.yml b/.travis.yml index ca35591e6..1ba50755a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -59,12 +59,12 @@ jobs: env: DEPLOY=mac-wheel osx_image: xcode9.4 - if: branch ~= /^release\/.+$/ - script: make wheel-manylinux IMAGE=quay.io/pypa/manylinux1_x86_64 + script: make wheel-manylinux IMAGE=quay.io/pypa/manylinux2010_x86_64 env: DEPLOY=linux-x86_64-wheel services: - docker - if: branch ~= /^release\/.+$/ - script: make wheel-manylinux IMAGE=quay.io/pypa/manylinux1_i686 + script: make wheel-manylinux IMAGE=quay.io/pypa/manylinux2010_i686 env: DEPLOY=linux-x86-wheel services: - docker diff --git a/README.md b/README.md index 5dd257d57..82b48e430 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ the features: information. Currently, this comprises MachO and ELF (with DWARF debugging), PE and PDB, as well as Breakpad symbols. - **`demangle`**: Demangling for Rust, C++, Swift and Objective C symbols. This feature requires a - C++11 compiler on the PATH. + C++14 compiler on the PATH. - **`minidump`**: Rust bindings for the Breakpad Minidump processor. Additionally, this includes facilities to extract stack unwinding information (sometimes called CFI) from object files. This feature requires a C++11 compiler on the PATH. diff --git a/demangle/build.rs b/demangle/build.rs index 1016c4173..1dbe38d87 100644 --- a/demangle/build.rs +++ b/demangle/build.rs @@ -13,7 +13,7 @@ fn main() { "vendor/swift/lib/Demangling/Punycode.cpp", // "vendor/swift/lib/Demangling/Remangler.cpp", ]) - .flag_if_supported("-std=c++11") + .flag_if_supported("-std=c++14") .flag("-DLLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING=1") .warnings(false) .include("vendor/swift/include") diff --git a/demangle/vendor/swift/2-cpp11.patch b/demangle/vendor/swift/2-cpp11.patch deleted file mode 100644 index 9688cc2b3..000000000 --- a/demangle/vendor/swift/2-cpp11.patch +++ /dev/null @@ -1,320 +0,0 @@ -From 44e309b01857d947c5fe579bc07a5e6f99757568 Mon Sep 17 00:00:00 2001 -From: Jan Michael Auer -Date: Thu, 25 Apr 2019 17:12:44 +0200 -Subject: [PATCH] fix(demangle): Swift compatibility with C++11 - ---- - .../vendor/swift/lib/Demangling/Demangler.cpp | 46 +++++++++---------- - .../swift/lib/Demangling/NodePrinter.cpp | 12 ++--- - .../swift/lib/Demangling/OldDemangler.cpp | 16 +++---- - .../swift/lib/Demangling/OldRemangler.cpp | 8 ++-- - .../vendor/swift/lib/Demangling/Remangler.cpp | 28 +++++------ - 5 files changed, 55 insertions(+), 55 deletions(-) - -diff --git a/demangle/vendor/swift/lib/Demangling/Demangler.cpp b/demangle/vendor/swift/lib/Demangling/Demangler.cpp -index 522944f6..01b3f186 100644 ---- a/demangle/vendor/swift/lib/Demangling/Demangler.cpp -+++ b/demangle/vendor/swift/lib/Demangling/Demangler.cpp -@@ -2283,47 +2283,47 @@ NodePointer Demangler::demangleFuncSpecParam(Node::IndexType ParamIdx) { - } - case 'e': { - unsigned Value = -- unsigned(FunctionSigSpecializationParamKind::ExistentialToGeneric); -+ (unsigned) FunctionSigSpecializationParamKind::ExistentialToGeneric; - if (nextIf('D')) -- Value |= unsigned(FunctionSigSpecializationParamKind::Dead); -+ Value |= (unsigned) FunctionSigSpecializationParamKind::Dead; - if (nextIf('G')) - Value |= -- unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed); -+ (unsigned) FunctionSigSpecializationParamKind::OwnedToGuaranteed; - if (nextIf('O')) - Value |= -- unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned); -+ (unsigned) FunctionSigSpecializationParamKind::GuaranteedToOwned; - if (nextIf('X')) -- Value |= unsigned(FunctionSigSpecializationParamKind::SROA); -+ Value |= (unsigned) FunctionSigSpecializationParamKind::SROA; - return addChild( - Param, - createNode(Node::Kind::FunctionSignatureSpecializationParamKind, - Value)); - } - case 'd': { -- unsigned Value = unsigned(FunctionSigSpecializationParamKind::Dead); -+ unsigned Value = (unsigned) FunctionSigSpecializationParamKind::Dead; - if (nextIf('G')) -- Value |= unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed); -+ Value |= (unsigned) FunctionSigSpecializationParamKind::OwnedToGuaranteed; - if (nextIf('O')) - Value |= -- unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned); -+ (unsigned) FunctionSigSpecializationParamKind::GuaranteedToOwned; - if (nextIf('X')) -- Value |= unsigned(FunctionSigSpecializationParamKind::SROA); -+ Value |= (unsigned) FunctionSigSpecializationParamKind::SROA; - return addChild(Param, createNode( - Node::Kind::FunctionSignatureSpecializationParamKind, Value)); - } - case 'g': { -- unsigned Value = unsigned(FunctionSigSpecializationParamKind:: -- OwnedToGuaranteed); -+ unsigned Value = (unsigned) FunctionSigSpecializationParamKind:: -+ OwnedToGuaranteed; - if (nextIf('X')) -- Value |= unsigned(FunctionSigSpecializationParamKind::SROA); -+ Value |= (unsigned) FunctionSigSpecializationParamKind::SROA; - return addChild(Param, createNode( - Node::Kind::FunctionSignatureSpecializationParamKind, Value)); - } - case 'o': { - unsigned Value = -- unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned); -+ (unsigned) FunctionSigSpecializationParamKind::GuaranteedToOwned; - if (nextIf('X')) -- Value |= unsigned(FunctionSigSpecializationParamKind::SROA); -+ Value |= (unsigned) FunctionSigSpecializationParamKind::SROA; - return addChild( - Param, - createNode(Node::Kind::FunctionSignatureSpecializationParamKind, -@@ -2332,15 +2332,15 @@ NodePointer Demangler::demangleFuncSpecParam(Node::IndexType ParamIdx) { - case 'x': - return addChild(Param, createNode( - Node::Kind::FunctionSignatureSpecializationParamKind, -- unsigned(FunctionSigSpecializationParamKind::SROA))); -+ (unsigned) FunctionSigSpecializationParamKind::SROA)); - case 'i': - return addChild(Param, createNode( - Node::Kind::FunctionSignatureSpecializationParamKind, -- unsigned(FunctionSigSpecializationParamKind::BoxToValue))); -+ (unsigned) FunctionSigSpecializationParamKind::BoxToValue)); - case 's': - return addChild(Param, createNode( - Node::Kind::FunctionSignatureSpecializationParamKind, -- unsigned(FunctionSigSpecializationParamKind::BoxToStack))); -+ (unsigned) FunctionSigSpecializationParamKind::BoxToStack)); - default: - return nullptr; - } -@@ -2349,7 +2349,7 @@ NodePointer Demangler::demangleFuncSpecParam(Node::IndexType ParamIdx) { - NodePointer Demangler::addFuncSpecParamNumber(NodePointer Param, - FunctionSigSpecializationParamKind Kind) { - Param->addChild(createNode( -- Node::Kind::FunctionSignatureSpecializationParamKind, unsigned(Kind)), -+ Node::Kind::FunctionSignatureSpecializationParamKind, (unsigned) Kind), - *this); - CharVector Str; - while (isDigit(peekChar())) { -@@ -2387,14 +2387,14 @@ NodePointer Demangler::demangleWitness() { - return createWithChild(Node::Kind::ValueWitnessTable, - popNode(Node::Kind::Type)); - case 'v': { -- unsigned Directness; -+ unsigned directness; - switch (nextChar()) { -- case 'd': Directness = unsigned(Directness::Direct); break; -- case 'i': Directness = unsigned(Directness::Indirect); break; -+ case 'd': directness = (unsigned) Directness::Direct; break; -+ case 'i': directness = (unsigned) Directness::Indirect; break; - default: return nullptr; - } - return createWithChildren(Node::Kind::FieldOffset, -- createNode(Node::Kind::Directness, Directness), -+ createNode(Node::Kind::Directness, directness), - popNode(isEntity)); - } - case 'S': -@@ -2966,7 +2966,7 @@ NodePointer Demangler::demangleValueWitness() { - int Kind = decodeValueWitnessKind(StringRef(Code, 2)); - if (Kind < 0) - return nullptr; -- NodePointer VW = createNode(Node::Kind::ValueWitness, unsigned(Kind)); -+ NodePointer VW = createNode(Node::Kind::ValueWitness, (unsigned) Kind); - return addChild(VW, popNode(Node::Kind::Type)); - } - -diff --git a/demangle/vendor/swift/lib/Demangling/NodePrinter.cpp b/demangle/vendor/swift/lib/Demangling/NodePrinter.cpp -index 60755e23..7df9f6f0 100644 ---- a/demangle/vendor/swift/lib/Demangling/NodePrinter.cpp -+++ b/demangle/vendor/swift/lib/Demangling/NodePrinter.cpp -@@ -873,11 +873,11 @@ unsigned NodePrinter::printFunctionSigSpecializationParam(NodePointer Node, - } - - assert( -- ((V & unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed)) || -- (V & unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned)) || -- (V & unsigned(FunctionSigSpecializationParamKind::SROA)) || -- (V & unsigned(FunctionSigSpecializationParamKind::Dead))|| -- (V & unsigned( -+ ((V & ((unsigned) FunctionSigSpecializationParamKind::OwnedToGuaranteed)) || -+ (V & ((unsigned) FunctionSigSpecializationParamKind::GuaranteedToOwned)) || -+ (V & ((unsigned) FunctionSigSpecializationParamKind::SROA)) || -+ (V & ((unsigned) FunctionSigSpecializationParamKind::Dead))|| -+ (V & ((unsigned) - FunctionSigSpecializationParamKind::ExistentialToGeneric))) && - "Invalid OptionSet"); - print(Node->getChild(Idx++)); -@@ -1528,7 +1528,7 @@ NodePointer NodePrinter::print(NodePointer Node, bool asPrefixContext) { - if (Node->getKind() == Node::Kind::ReabstractionThunkHelper) - Printer << "helper "; - auto generics = getFirstChildOfKind(Node, Node::Kind::DependentGenericSignature); -- assert(Node->getNumChildren() == 2 + unsigned(generics != nullptr)); -+ assert(Node->getNumChildren() == 2 + (unsigned)(generics != nullptr)); - if (generics) { - print(generics); - Printer << " "; -diff --git a/demangle/vendor/swift/lib/Demangling/OldDemangler.cpp b/demangle/vendor/swift/lib/Demangling/OldDemangler.cpp -index 4ac94dad..3caff7d6 100644 ---- a/demangle/vendor/swift/lib/Demangling/OldDemangler.cpp -+++ b/demangle/vendor/swift/lib/Demangling/OldDemangler.cpp -@@ -185,7 +185,7 @@ class OldDemangler { - auto _kind = demangle##CHILD_KIND(); \ - if (!_kind.hasValue()) return nullptr; \ - addChild(PARENT, Factory.createNode(Node::Kind::CHILD_KIND, \ -- unsigned(*_kind))); \ -+ (unsigned)(*_kind))); \ - } while (false) - - /// Attempt to demangle the source string. The root node will -@@ -378,7 +378,7 @@ class OldDemangler { - if (!w.hasValue()) - return nullptr; - auto witness = -- Factory.createNode(Node::Kind::ValueWitness, unsigned(w.getValue())); -+ Factory.createNode(Node::Kind::ValueWitness, (unsigned) w.getValue()); - DEMANGLE_CHILD_OR_RETURN(witness, Type); - return witness; - } -@@ -641,21 +641,21 @@ class OldDemangler { - unsigned Value = 0; - if (Mangled.nextIf('d')) { - Value |= -- unsigned(FunctionSigSpecializationParamKind::Dead); -+ (unsigned) FunctionSigSpecializationParamKind::Dead; - } - - if (Mangled.nextIf('g')) { - Value |= -- unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed); -+ (unsigned) FunctionSigSpecializationParamKind::OwnedToGuaranteed; - } - - if (Mangled.nextIf('o')) { - Value |= -- unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned); -+ (unsigned) FunctionSigSpecializationParamKind::GuaranteedToOwned; - } - - if (Mangled.nextIf('s')) { -- Value |= unsigned(FunctionSigSpecializationParamKind::SROA); -+ Value |= (unsigned) FunctionSigSpecializationParamKind::SROA; - } - - if (!Mangled.nextIf('_')) -@@ -696,7 +696,7 @@ class OldDemangler { - - // Create a node for the pass id. - spec->addChild(Factory.createNode(Node::Kind::SpecializationPassID, -- unsigned(Mangled.next() - 48)), Factory); -+ (unsigned)(Mangled.next() - 48)), Factory); - - // And then mangle the generic specialization. - return demangleGenericSpecialization(spec); -@@ -713,7 +713,7 @@ class OldDemangler { - - // Add the pass id. - spec->addChild(Factory.createNode(Node::Kind::SpecializationPassID, -- unsigned(Mangled.next() - 48)), Factory); -+ (unsigned)(Mangled.next() - 48)), Factory); - - // Then perform the function signature specialization. - return demangleFunctionSignatureSpecialization(spec); -diff --git a/demangle/vendor/swift/lib/Demangling/OldRemangler.cpp b/demangle/vendor/swift/lib/Demangling/OldRemangler.cpp -index 69e44b23..5c9efa7f 100644 ---- a/demangle/vendor/swift/lib/Demangling/OldRemangler.cpp -+++ b/demangle/vendor/swift/lib/Demangling/OldRemangler.cpp -@@ -649,15 +649,15 @@ void Remangler::mangleFunctionSignatureSpecializationParam(Node *node) { - return; - default: - if (kindValue & -- unsigned(FunctionSigSpecializationParamKind::Dead)) -+ (unsigned) FunctionSigSpecializationParamKind::Dead) - Out << 'd'; - if (kindValue & -- unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed)) -+ (unsigned) FunctionSigSpecializationParamKind::OwnedToGuaranteed) - Out << 'g'; - if (kindValue & -- unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned)) -+ (unsigned) FunctionSigSpecializationParamKind::GuaranteedToOwned) - Out << 'o'; -- if (kindValue & unsigned(FunctionSigSpecializationParamKind::SROA)) -+ if (kindValue & (unsigned) FunctionSigSpecializationParamKind::SROA) - Out << 's'; - Out << '_'; - return; -diff --git a/demangle/vendor/swift/lib/Demangling/Remangler.cpp b/demangle/vendor/swift/lib/Demangling/Remangler.cpp -index 85a1c70e..b2f4ed47 100644 ---- a/demangle/vendor/swift/lib/Demangling/Remangler.cpp -+++ b/demangle/vendor/swift/lib/Demangling/Remangler.cpp -@@ -903,10 +903,10 @@ void Remangler::mangleDidSet(Node *node) { - } - - void Remangler::mangleDirectness(Node *node) { -- if (node->getIndex() == unsigned(Directness::Direct)) { -+ if (node->getIndex() == (unsigned) Directness::Direct) { - Buffer << 'd'; - } else { -- assert(node->getIndex() == unsigned(Directness::Indirect)); -+ assert(node->getIndex() == (unsigned) Directness::Indirect); - Buffer << 'i'; - } - } -@@ -1107,35 +1107,35 @@ void Remangler::mangleFunctionSignatureSpecializationParam(Node *node) { - return; - default: - if (kindValue & -- unsigned( -- FunctionSigSpecializationParamKind::ExistentialToGeneric)) { -+ (unsigned) -+ FunctionSigSpecializationParamKind::ExistentialToGeneric) { - Buffer << 'e'; -- if (kindValue & unsigned(FunctionSigSpecializationParamKind::Dead)) -+ if (kindValue & (unsigned) FunctionSigSpecializationParamKind::Dead) - Buffer << 'D'; - if (kindValue & -- unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed)) -+ (unsigned) FunctionSigSpecializationParamKind::OwnedToGuaranteed) - Buffer << 'G'; - if (kindValue & -- unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned)) -+ (unsigned) FunctionSigSpecializationParamKind::GuaranteedToOwned) - Buffer << 'O'; - } else if (kindValue & -- unsigned(FunctionSigSpecializationParamKind::Dead)) { -+ (unsigned) FunctionSigSpecializationParamKind::Dead) { - Buffer << 'd'; - if (kindValue & -- unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed)) -+ (unsigned) FunctionSigSpecializationParamKind::OwnedToGuaranteed) - Buffer << 'G'; - if (kindValue & -- unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned)) -+ (unsigned) FunctionSigSpecializationParamKind::GuaranteedToOwned) - Buffer << 'O'; - } else if (kindValue & -- unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed)) { -+ (unsigned) FunctionSigSpecializationParamKind::OwnedToGuaranteed) { - Buffer << 'g'; - } else if (kindValue & -- unsigned( -- FunctionSigSpecializationParamKind::GuaranteedToOwned)) { -+ (unsigned) -+ FunctionSigSpecializationParamKind::GuaranteedToOwned) { - Buffer << 'o'; - } -- if (kindValue & unsigned(FunctionSigSpecializationParamKind::SROA)) -+ if (kindValue & (unsigned) FunctionSigSpecializationParamKind::SROA) - Buffer << 'X'; - return; - } diff --git a/demangle/vendor/swift/README.md b/demangle/vendor/swift/README.md index 3fd12ca64..9d5b1641f 100644 --- a/demangle/vendor/swift/README.md +++ b/demangle/vendor/swift/README.md @@ -7,10 +7,8 @@ The current version is **Swift 5.0.1**. ## Sentry Modifications -The library has been modified by patches in this order: - -1. `1-arguments.patch`: Adds an option to hide function arguments. -2. `2-cpp11.patch`: Creates compatibility with C++11 compilers. +The library has been modified to add an option to hide function arguments during demangling. This +patch is maintained in `1-arguments.patch`. ## How to Update @@ -43,17 +41,17 @@ The library has been modified by patches in this order: ``` 2. Check for modifications. 3. Commit _"feat(demangle): Import libswift demangle x.x.x"_ before proceeding. -3. **Apply the patches incrementally:** - 1. Apply the [`1-arguments.patch`] and compile with a C++14 compiler, then commit. - 2. Apply the [`2-cpp11.patch`] and fix all merge issues. - 3. Compile with a **C++11** compiler and iterate until it compiles, then commit. +3. **Apply the patch:** + 1. Apply the [`1-arguments.patch`]. + 2. Build the library and ensure tests work. + 3. Commit the changes. 4. **Add tests for new mangling schemes:** 1. Identify new mangling schemes. Skip if there are no known changes. 2. Add test cases to [`tests/swift.rs`] 5. **Update Repository metadata**: 1. Bump the Swift version number in this README. 2. Check for changes in the license and update the files. - 3. Update the patch files with the commits generated in step 3: + 3. Update the patch file with the commit generated in step 3: ``` $ git show > 1-arguments.patch ```