From 1f5407d8510190011f4be1caee96049fb37ce8e5 Mon Sep 17 00:00:00 2001 From: 2over12 Date: Tue, 26 Sep 2023 15:07:30 -0400 Subject: [PATCH 1/6] llvm 17 fixes --- lib/CrossReferenceFolder.cpp | 2 +- lib/Lifters/CodeLifter.cpp | 52 +++++++++++++++----- lib/Passes/TransformRemillJumpIntrinsics.cpp | 2 +- lib/Passes/Utils.cpp | 2 +- 4 files changed, 42 insertions(+), 16 deletions(-) diff --git a/lib/CrossReferenceFolder.cpp b/lib/CrossReferenceFolder.cpp index ed886bcdf..b2fe505ca 100644 --- a/lib/CrossReferenceFolder.cpp +++ b/lib/CrossReferenceFolder.cpp @@ -385,7 +385,7 @@ CrossReferenceFolderImpl::ResolveConstant(llvm::Constant *const_val) { xr.is_valid = false; if (val.isNegative()) { - if (val.getMinSignedBits() <= 64) { + if (val.getNumSignBits() <= 64) { xr.u.address = static_cast(val.getSExtValue()); xr.is_valid = true; } diff --git a/lib/Lifters/CodeLifter.cpp b/lib/Lifters/CodeLifter.cpp index 2b8e921d8..3fc46b125 100644 --- a/lib/Lifters/CodeLifter.cpp +++ b/lib/Lifters/CodeLifter.cpp @@ -9,10 +9,17 @@ #include #include #include +#include #include #include +#include +#include +#include +#include +#include #include #include +#include #include #include #include @@ -299,19 +306,38 @@ void CodeLifter::RecursivelyInlineFunctionCallees(llvm::Function *inf) { DCHECK(!llvm::verifyFunction(*inf, &llvm::errs())); - llvm::legacy::FunctionPassManager fpm(inf->getParent()); - fpm.add(llvm::createCFGSimplificationPass()); - fpm.add(llvm::createPromoteMemoryToRegisterPass()); - fpm.add(llvm::createReassociatePass()); - fpm.add(llvm::createDeadStoreEliminationPass()); - fpm.add(llvm::createDeadCodeEliminationPass()); - fpm.add(llvm::createSROAPass()); - fpm.add(llvm::createDeadCodeEliminationPass()); - fpm.add(llvm::createInstructionCombiningPass()); - fpm.doInitialization(); - fpm.run(*inf); - fpm.doFinalization(); - + llvm::ModuleAnalysisManager mam; + llvm::FunctionAnalysisManager fam; + llvm::LoopAnalysisManager lam; + llvm::CGSCCAnalysisManager cam; + + llvm::ModulePassManager mpm; + llvm::FunctionPassManager fpm; + + + llvm::PassBuilder pb; + pb.registerModuleAnalyses(mam); + pb.registerFunctionAnalyses(fam); + pb.registerLoopAnalyses(lam); + pb.registerCGSCCAnalyses(cam); + pb.crossRegisterProxies(lam, fam, cam, mam); + + fpm.addPass(llvm::SimplifyCFGPass()); + fpm.addPass(llvm::PromotePass()); + fpm.addPass(llvm::ReassociatePass()); + fpm.addPass(llvm::DSEPass()); + fpm.addPass(llvm::DCEPass()); + fpm.addPass(llvm::SROAPass(llvm::SROAOptions::ModifyCFG)); + fpm.addPass(llvm::DCEPass()); + fpm.addPass(llvm::InstCombinePass()); + + mpm.addPass(llvm::createModuleToFunctionPassAdaptor(std::move(fpm))); + mpm.run(*inf->getParent(), mam); + + mam.clear(); + fam.clear(); + lam.clear(); + cam.clear(); ClearVariableNames(inf); } diff --git a/lib/Passes/TransformRemillJumpIntrinsics.cpp b/lib/Passes/TransformRemillJumpIntrinsics.cpp index 1e470fa25..0fca8eab4 100644 --- a/lib/Passes/TransformRemillJumpIntrinsics.cpp +++ b/lib/Passes/TransformRemillJumpIntrinsics.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -23,6 +22,7 @@ #include #include #include +#include #include #include #include diff --git a/lib/Passes/Utils.cpp b/lib/Passes/Utils.cpp index 972daa38f..86c6281ec 100644 --- a/lib/Passes/Utils.cpp +++ b/lib/Passes/Utils.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -19,6 +18,7 @@ #include #include #include +#include #include namespace anvill { From 34b180f39e572b04e888ad59fc4f934375ccda19 Mon Sep 17 00:00:00 2001 From: 2over12 Date: Tue, 26 Sep 2023 17:03:54 -0400 Subject: [PATCH 2/6] bump remill --- remill | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/remill b/remill index 22b3d4b23..300fb6aae 160000 --- a/remill +++ b/remill @@ -1 +1 @@ -Subproject commit 22b3d4b2318c6ba84cb4e66abb2d37a39a5a33bf +Subproject commit 300fb6aae4b15f08a9132418ea7542b3b2dce6f0 From d0fc4e177b0ff127ae4508e68939e7af4805f751 Mon Sep 17 00:00:00 2001 From: 2over12 Date: Tue, 3 Oct 2023 12:42:37 -0400 Subject: [PATCH 3/6] bump llvm, cxx common, xcode, macos, remill --- .github/workflows/build.yml | 12 ++++++------ Dockerfile | 4 ++-- remill | 2 +- scripts/build.sh | 16 ++++++++-------- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7c02b969a..870b9328a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -386,11 +386,11 @@ jobs: strategy: fail-fast: false matrix: - os: ["macos-12"] - llvm: ["16"] - cxxcommon_version: ["v0.3.2"] + os: ["macos-13"] + llvm: ["17"] + cxxcommon_version: ["v0.6.0"] - runs-on: macos-12 + runs-on: macos-13 steps: - name: Setup the build paths @@ -465,7 +465,7 @@ jobs: id: cxxcommon_installer working-directory: ${{ steps.build_paths.outputs.DOWNLOADS }} run: | - folder_name="vcpkg_${{ matrix.os }}_llvm-${{ matrix.llvm }}_xcode-14.2_amd64" + folder_name="vcpkg_${{ matrix.os }}_llvm-${{ matrix.llvm }}_xcode-15.0_amd64" archive_name="${folder_name}.tar.xz" url="https://github.com/lifting-bits/cxx-common/releases/download/${{ matrix.cxxcommon_version}}/${archive_name}" @@ -728,7 +728,7 @@ jobs: strategy: matrix: - llvm: ["16"] + llvm: ["17"] ubuntu: ["22.04"] steps: - uses: actions/checkout@v3 diff --git a/Dockerfile b/Dockerfile index 16a3f2714..3b6cd0041 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ -ARG LLVM_VERSION=16 +ARG LLVM_VERSION=17 ARG ARCH=amd64 ARG UBUNTU_VERSION=22.04 -ARG CXX_COMMON_VERSION=0.3.2 +ARG CXX_COMMON_VERSION=0.6.0 ARG DISTRO_BASE=ubuntu${UBUNTU_VERSION} ARG BUILD_BASE=ubuntu:${UBUNTU_VERSION} ARG LIBRARIES=/opt/trailofbits diff --git a/remill b/remill index 300fb6aae..6bdab4798 160000 --- a/remill +++ b/remill @@ -1 +1 @@ -Subproject commit 300fb6aae4b15f08a9132418ea7542b3b2dce6f0 +Subproject commit 6bdab47982f60f5e6d69f1e9f2968c24493a5008 diff --git a/scripts/build.sh b/scripts/build.sh index 56c8862e4..2eeaa5a93 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -25,8 +25,8 @@ CURR_DIR=$( pwd ) BUILD_DIR="${CURR_DIR}/anvill-build" REMILL_BUILD_DIR="${CURR_DIR}/remill-build" INSTALL_DIR=/usr/local -LLVM_VERSION=llvm-16 -CXX_COMMON_VERSION="0.3.2" +LLVM_VERSION=llvm-17 +CXX_COMMON_VERSION="0.6.0" OS_VERSION=unknown ARCH_VERSION=unknown BUILD_FLAGS= @@ -175,11 +175,11 @@ function DownloadLibraries #BUILD_FLAGS="${BUILD_FLAGS} -DCMAKE_OSX_SYSROOT=${sdk_root}" # Min version supported - OS_VERSION="macos-12" - XCODE_VERSION="14.2" + OS_VERSION="macos-13" + XCODE_VERSION="15.0" if [[ "${SYSTEM_VERSION}" == "13.*" ]]; then echo "Found MacOS Ventura" - OS_VERSION="macos-12" + OS_VERSION="macos-13" elif [[ "${SYSTEM_VERSION}" == "12.*" ]]; then echo "Found MacOS Monterey" OS_VERSION="macos-12" @@ -341,8 +341,8 @@ function Package function GetLLVMVersion { case ${1} in - 16) - LLVM_VERSION=llvm-16 + 17) + LLVM_VERSION=llvm-17 return 0 ;; *) @@ -360,7 +360,7 @@ function Help echo "" echo "Options:" echo " --prefix Change the default (${INSTALL_DIR}) installation prefix." - echo " --llvm-version Change the default (16) LLVM version." + echo " --llvm-version Change the default (17) LLVM version." echo " --build-dir Change the default (${BUILD_DIR}) build directory." echo " --debug Build with Debug symbols." echo " --extra-cmake-args Extra CMake arguments to build with." From 33a7cd6458ec0c2c01a31395b63ddf03715f1e5b Mon Sep 17 00:00:00 2001 From: 2over12 Date: Tue, 3 Oct 2023 12:58:33 -0400 Subject: [PATCH 4/6] bump matrix --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 870b9328a..7b40559a3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -52,8 +52,8 @@ jobs: matrix: image: - { name: "ubuntu", tag: "22.04" } - llvm: ["16"] - cxxcommon_version: ["v0.3.2"] + llvm: ["17"] + cxxcommon_version: ["v0.6.0"] runs-on: labels: gha-ubuntu-32 From 7cf2be870cf8c7eaecbe1789acd96bdd457fa100 Mon Sep 17 00:00:00 2001 From: 2over12 Date: Thu, 12 Oct 2023 16:42:42 -0400 Subject: [PATCH 5/6] bump remill, use irene main --- .github/workflows/build.yml | 1 - remill | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 06e16bfcf..9171cf43b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -154,7 +154,6 @@ jobs: - name: Clone Ghidra Spec Generation uses: actions/checkout@v3 with: - ref: ekilmer/uid-codeblocks path: ${{ steps.build_paths.outputs.REL_SOURCE }}/irene3 repository: "trailofbits/irene3" fetch-depth: 0 diff --git a/remill b/remill index 6bdab4798..018324821 160000 --- a/remill +++ b/remill @@ -1 +1 @@ -Subproject commit 6bdab47982f60f5e6d69f1e9f2968c24493a5008 +Subproject commit 01832482184da13024f5c511fdb582c728ab843c From 48dc3829accb3476af839bde7d0238393a71ea34 Mon Sep 17 00:00:00 2001 From: 2over12 Date: Fri, 13 Oct 2023 10:32:56 -0400 Subject: [PATCH 6/6] fix creffolder and dont run on module in inliner --- lib/CrossReferenceFolder.cpp | 2 +- lib/Lifters/CodeLifter.cpp | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/CrossReferenceFolder.cpp b/lib/CrossReferenceFolder.cpp index b2fe505ca..b57077983 100644 --- a/lib/CrossReferenceFolder.cpp +++ b/lib/CrossReferenceFolder.cpp @@ -385,7 +385,7 @@ CrossReferenceFolderImpl::ResolveConstant(llvm::Constant *const_val) { xr.is_valid = false; if (val.isNegative()) { - if (val.getNumSignBits() <= 64) { + if (val.getSignificantBits() <= 64) { xr.u.address = static_cast(val.getSExtValue()); xr.is_valid = true; } diff --git a/lib/Lifters/CodeLifter.cpp b/lib/Lifters/CodeLifter.cpp index 428d1f27b..c4418cc2f 100644 --- a/lib/Lifters/CodeLifter.cpp +++ b/lib/Lifters/CodeLifter.cpp @@ -202,7 +202,7 @@ llvm::MDNode *CodeLifter::GetAddrAnnotation(uint64_t addr, } llvm::MDNode *CodeLifter::GetUidAnnotation(Uid uid, - llvm::LLVMContext &context) const { + llvm::LLVMContext &context) const { auto uid_val = llvm::ConstantInt::get( remill::RecontextualizeType(uid_type, context), uid.value); auto uid_md = llvm::ValueAsMetadata::get(uid_val); @@ -342,8 +342,7 @@ void CodeLifter::RecursivelyInlineFunctionCallees(llvm::Function *inf) { fpm.addPass(llvm::DCEPass()); fpm.addPass(llvm::InstCombinePass()); - mpm.addPass(llvm::createModuleToFunctionPassAdaptor(std::move(fpm))); - mpm.run(*inf->getParent(), mam); + fpm.run(*inf, fam); mam.clear(); fam.clear();