Skip to content

Commit

Permalink
compile success
Browse files Browse the repository at this point in the history
  • Loading branch information
spinpx committed Apr 4, 2019
1 parent 4d548ac commit 517718c
Show file tree
Hide file tree
Showing 7 changed files with 263 additions and 248 deletions.
5 changes: 4 additions & 1 deletion llvm_mode/Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
PREFIX = ../bin/
PROGS = ${PREFIX}angora-clang ${PREFIX}angora-llvm-pass.so ${PREFIX}unfold-branch-pass.so ${PREFIX}angora-llvm-rt.o ${PREFIX}io-func.o ${PREFIX}globals.o ${PREFIX}stdalloc.o ${PREFIX}alloc-preload.so ${PREFIX}pin_stub.o
PROGS = ${PREFIX}angora-clang ${PREFIX}angora-llvm-pass.so ${PREFIX}unfold-branch-pass.so ${PREFIX}angora-llvm-rt.o ${PREFIX}io-func.o ${PREFIX}globals.o ${PREFIX}stdalloc.o ${PREFIX}alloc-preload.so ${PREFIX}pin_stub.o ${PREFIX}llvm-catch-dlclose.so

all: test_deps $(PROGS) rule_list ext_lib dfsan_lib

Expand Down Expand Up @@ -49,6 +49,9 @@ ${PREFIX}alloc-preload.so: alloc-preload.so.c
${PREFIX}pin_stub.o: pin_stub.c
$(CC) $(CFLAGS) -fPIC -c $< -o $@

${PREFIX}llvm-catch-dlclose.so: llvm-catch-dlclose.c
$(CC) $(CFLAGS) -fPIC -shared $< -o $@

.NOTPARALLEL: clean

clean:
Expand Down
3 changes: 3 additions & 0 deletions llvm_mode/angora-clang.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,9 @@ static void edit_params(u32 argc, char **argv) {

cc_params = ck_alloc((argc + 128) * sizeof(u8 *));

// https: // bugs.llvm.org/show_bug.cgi?id=39321
setenv("LD_PRELOAD", alloc_printf("%s/llvm-catch-dlclose.so", obj_path), 1);

name = strrchr(argv[0], '/');
if (!name)
name = argv[0];
Expand Down
26 changes: 13 additions & 13 deletions llvm_mode/angora-llvm-pass.so.cc
Original file line number Diff line number Diff line change
Expand Up @@ -256,18 +256,18 @@ void AngoraLLVMPass::initVariables(Module &M) {
TraceCmpTy = FunctionType::get(Int32Ty, TraceCmpArgs, false);
TraceCmp = M.getOrInsertFunction("__angora_trace_cmp", TraceCmpTy);
if (Function *F = dyn_cast<Function>(TraceCmp)) {
F->addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind);
F->addAttribute(AttributeSet::FunctionIndex, Attribute::ReadNone);
F->addAttribute(AttributeList::FunctionIndex, Attribute::NoUnwind);
F->addAttribute(AttributeList::FunctionIndex, Attribute::ReadNone);
// F->addAttribute(1, Attribute::ZExt);
}

Type *TraceSwArgs[3] = {Int32Ty, Int32Ty, Int64Ty};
TraceSwTy = FunctionType::get(Int64Ty, TraceSwArgs, false);
TraceSw = M.getOrInsertFunction("__angora_trace_switch", TraceSwTy);
if (Function *F = dyn_cast<Function>(TraceSw)) {
F->addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind);
F->addAttribute(AttributeSet::FunctionIndex, Attribute::ReadNone);
// F->addAttribute(AttributeSet::ReturnIndex, Attribute::ZExt);
F->addAttribute(AttributeList::FunctionIndex, Attribute::NoUnwind);
F->addAttribute(AttributeList::FunctionIndex, Attribute::ReadNone);
// F->addAttribute(AttributeList::ReturnIndex, Attribute::ZExt);
// F->addAttribute(1, Attribute::ZExt);
}

Expand All @@ -277,34 +277,34 @@ void AngoraLLVMPass::initVariables(Module &M) {
TraceCmpTtTy = FunctionType::get(VoidTy, TraceCmpTtArgs, false);
TraceCmpTT = M.getOrInsertFunction("__angora_trace_cmp_tt", TraceCmpTtTy);
if (Function *F = dyn_cast<Function>(TraceCmpTT)) {
F->addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind);
F->addAttribute(AttributeSet::FunctionIndex, Attribute::ReadNone);
F->addAttribute(AttributeList::FunctionIndex, Attribute::NoUnwind);
F->addAttribute(AttributeList::FunctionIndex, Attribute::ReadNone);
}

Type *TraceSwTtArgs[6] = {Int32Ty, Int32Ty, Int32Ty,
Int64Ty, Int32Ty, Int64PtrTy};
TraceSwTtTy = FunctionType::get(VoidTy, TraceSwTtArgs, false);
TraceSwTT = M.getOrInsertFunction("__angora_trace_switch_tt", TraceSwTtTy);
if (Function *F = dyn_cast<Function>(TraceSwTT)) {
F->addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind);
F->addAttribute(AttributeSet::FunctionIndex, Attribute::ReadNone);
F->addAttribute(AttributeList::FunctionIndex, Attribute::NoUnwind);
F->addAttribute(AttributeList::FunctionIndex, Attribute::ReadNone);
}

Type *TraceFnTtArgs[5] = {Int32Ty, Int32Ty, Int32Ty, Int8PtrTy, Int8PtrTy};
TraceFnTtTy = FunctionType::get(VoidTy, TraceFnTtArgs, false);
TraceFnTT = M.getOrInsertFunction("__angora_trace_fn_tt", TraceFnTtTy);
if (Function *F = dyn_cast<Function>(TraceFnTT)) {
F->addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind);
F->addAttribute(AttributeSet::FunctionIndex, Attribute::ReadOnly);
F->addAttribute(AttributeList::FunctionIndex, Attribute::NoUnwind);
F->addAttribute(AttributeList::FunctionIndex, Attribute::ReadOnly);
}

Type *TraceExploitTtArgs[5] = {Int32Ty, Int32Ty, Int32Ty, Int32Ty, Int64Ty};
TraceExploitTtTy = FunctionType::get(VoidTy, TraceExploitTtArgs, false);
TraceExploitTT = M.getOrInsertFunction("__angora_trace_exploit_val_tt",
TraceExploitTtTy);
if (Function *F = dyn_cast<Function>(TraceExploitTT)) {
F->addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind);
F->addAttribute(AttributeSet::FunctionIndex, Attribute::ReadNone);
F->addAttribute(AttributeList::FunctionIndex, Attribute::NoUnwind);
F->addAttribute(AttributeList::FunctionIndex, Attribute::ReadNone);
}
}

Expand Down
10 changes: 6 additions & 4 deletions llvm_mode/dfsan/pass/DFSanPass.cc
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,6 @@ class DFSanABIList {
/// given category.
bool isIn(const Function &F, StringRef Category) const {
return isIn(*F.getParent(), Category) ||
// FIXME:
SCL->inSection("dataflow", "fun", F.getName(), Category);
}

Expand Down Expand Up @@ -669,6 +668,7 @@ DataFlowSanitizer::buildWrapperFunction(Function *F, StringRef NewFName,
AttributeFuncs::typeIncompatible(NewFT->getReturnType()));

BasicBlock *BB = BasicBlock::Create(*Ctx, "entry", NewF);

if (F->isVarArg() && getWrapperKind(F) != WK_Discard) {
NewF->removeAttributes(AttributeList::FunctionIndex,
AttrBuilder().addAttribute("split-stack"));
Expand Down Expand Up @@ -813,7 +813,8 @@ bool DataFlowSanitizer::runOnModule(Module &M) {
if (!i.isIntrinsic() && &i != DFSanUnionFn && &i != DFSanCheckedUnionFn &&
&i != DFSanUnionLoadFn && &i != DFSanUnimplementedFn &&
&i != DFSanSetLabelFn && &i != DFSanNonzeroLabelFn &&
&i != DFSanVarargWrapperFn)
&i != DFSanVarargWrapperFn && &i != DFSanMarkSignedFn &&
&i != DFSanCombineAndFn && &i != DFSanInferShapeFn)
FnsToInstrument.push_back(&i);
}

Expand Down Expand Up @@ -1176,8 +1177,9 @@ Value *DFSanFunction::combineShadows(Value *V1, Value *V2, Instruction *Pos) {
if (V1 == DFS.ZeroShadow)
return V2;
if (V2 == DFS.ZeroShadow)
if (V1 == V2)
return V1;
return V1;
if (V1 == V2)
return V1;

auto V1Elems = ShadowElements.find(V1);
auto V2Elems = ShadowElements.find(V2);
Expand Down
Loading

0 comments on commit 517718c

Please sign in to comment.