Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,12 @@ jobs:
path: ${{ github.workspace }}/ASPIS/testing/build/comparison_counter.csv
if-no-files-found: warn

- name: Upload failed test IR artifacts
if: failure()
uses: actions/upload-artifact@v4
with:
name: failed-out-ll
path: |
ASPIS/testing/failed-out-ll/**
if-no-files-found: warn

3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "libs/TypeDeductionAnalysis"]
path = libs/TypeDeductionAnalysis
url = https://github.com/NiccoloN/TypeDeductionAnalysis.git
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@ include_directories(SYSTEM ${LLVM_INCLUDE_DIRS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
#endif()

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")

message(STATUS "Found LLVM definitions ${LLVM_DEFINITIONS_LIST}")
message(STATUS "Found LLVM include dirs ${LLVM_INCLUDE_DIRS}")
message(STATUS "RTTI: ${LLVM_ENABLE_RTTI}")

add_subdirectory(libs/TypeDeductionAnalysis)
add_subdirectory(passes)
1 change: 1 addition & 0 deletions libs/TypeDeductionAnalysis
Submodule TypeDeductionAnalysis added at f9f6e4
9 changes: 7 additions & 2 deletions passes/ASPIS.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "llvm/Pass.h"
#include <llvm/IR/Instructions.h>
#include "Utils/Utils.h"
#include "TypeDeductionAnalysis.hpp"
#include <map>
#include <set>
#include <unordered_set>
Expand Down Expand Up @@ -44,6 +45,8 @@ class EDDI : public PassInfoMixin<EDDI> {
std::unordered_multimap<Value *, Value *> DuplicatedInstructionMap;
std::unordered_set<Instruction *> ClonedInstructions;

tda::TypeDeductionAnalysis tda;
tda::TypeDeductionAnalysis::Result deducedTypes;
std::string entryPoint;

LinkageMap linkageMap;
Expand All @@ -60,7 +63,8 @@ class EDDI : public PassInfoMixin<EDDI> {
Instruction* cloneInstr(Instruction &I);
void duplicateOperands (Instruction &I, BasicBlock &ErrBB);
Value* getPtrFinalValue(Value &V);
Value* comparePtrs(Value &V1, Value &V2, IRBuilder<> &B);
bool ptrNotDereferenceable(Value &V);
void comparePtrs(std::vector<Value *> *CmpInstructions, Value &V1, Value &V2, IRBuilder<> &B);
void addConsistencyChecks(Instruction &I, BasicBlock &ErrBB);
void fixFuncValsPassedByReference(Instruction &I, IRBuilder<> &B);
int transformCallBaseInst(CallBase *CInstr, IRBuilder<> &B, BasicBlock &ErrBB) ;
Expand All @@ -74,7 +78,8 @@ class EDDI : public PassInfoMixin<EDDI> {
void CreateErrBB(Module &Md, Function &Fn, BasicBlock *ErrBB);
bool temporaryArgumentDuplication(Module &Md, llvm::Value *value, IRBuilder<> &B);
Value *getDuplicateValue(Value *V, Instruction *I);

void createCompareOnOperand(std::vector<Value *> *CmpInstructions, Value *V, Instruction &I, IRBuilder<> &B);
void compareValues(std::vector<Value *> *CmpInstructions, Value &V1, Value &V2, IRBuilder<> &B);
void fixGlobalCtors(Module &M);
void repairBasicBlock(BasicBlock &BB);
public:
Expand Down
9 changes: 9 additions & 0 deletions passes/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ add_library(EDDI SHARED
FuncRetToRef.cpp
Utils/Utils.cpp
)
target_link_libraries(EDDI PUBLIC TypeDeductionAnalysis)
target_compile_definitions(EDDI PRIVATE DUPLICATE_ALL SELECTIVE_CHECKING=0 CHECK_AT_STORES CHECK_AT_CALLS CHECK_AT_BRANCH)

# REDDI
Expand All @@ -16,6 +17,7 @@ add_library(REDDI SHARED
FuncRetToRef.cpp
Utils/Utils.cpp
)
target_link_libraries(REDDI PUBLIC TypeDeductionAnalysis)
target_compile_definitions(REDDI PRIVATE SELECTIVE_CHECKING=0 CHECK_AT_STORES CHECK_AT_CALLS CHECK_AT_BRANCH)


Expand All @@ -26,6 +28,7 @@ add_library(FDSC SHARED
FuncRetToRef.cpp
Utils/Utils.cpp
)
target_link_libraries(FDSC PUBLIC TypeDeductionAnalysis)
target_compile_definitions(FDSC PRIVATE DUPLICATE_ALL SELECTIVE_CHECKING=1 CHECK_AT_STORES CHECK_AT_CALLS CHECK_AT_BRANCH)

# sEDDI
Expand All @@ -35,6 +38,7 @@ add_library(SEDDI SHARED
FuncRetToRef.cpp
Utils/Utils.cpp
)
target_link_libraries(SEDDI PUBLIC TypeDeductionAnalysis)
target_compile_definitions(SEDDI PRIVATE DUPLICATE_ALL SELECTIVE_CHECKING=0 CHECK_AT_CALLS CHECK_AT_BRANCH)


Expand All @@ -43,12 +47,14 @@ add_library(CFCSS SHARED
CFCSS.cpp
Utils/Utils.cpp
)
target_link_libraries(CFCSS PUBLIC TypeDeductionAnalysis)

# RASM
add_library(RASM SHARED
RASM.cpp
Utils/Utils.cpp
)
target_link_libraries(RASM PUBLIC TypeDeductionAnalysis)
target_compile_definitions(RASM PRIVATE INTER_FUNCTION_CFC=0)


Expand All @@ -57,15 +63,18 @@ add_library(INTER_RASM SHARED
RASM.cpp
Utils/Utils.cpp
)
target_link_libraries(INTER_RASM PUBLIC TypeDeductionAnalysis)
target_compile_definitions(INTER_RASM PRIVATE INTER_FUNCTION_CFC=1)

# RACFED
add_library(RACFED SHARED
RACFED.cpp
Utils/Utils.cpp
)
target_link_libraries(RACFED PUBLIC TypeDeductionAnalysis)

add_library(PROFILER SHARED
Profiling/ASPISCheckProfiler.cpp
Utils/Utils.cpp
)
target_link_libraries(PROFILER PUBLIC TypeDeductionAnalysis)
Loading
Loading