Commit f6c41e46 by Thomas Lively

Updates in preparation of wrapper script

parent 6a661ced
......@@ -3,12 +3,12 @@ import subprocess
import sys
def GetObjcopyCmd():
"""Return a suitable objcopy command."""
return 'arm-nacl-objcopy'
"""Return a suitable objcopy command."""
return 'arm-nacl-objcopy'
def GetObjdumpCmd():
"""Return a suitable objdump command."""
return 'arm-nacl-objdump'
"""Return a suitable objdump command."""
return 'arm-nacl-objdump'
def shellcmd(command, echo=True):
if not isinstance(command, str):
......
......@@ -23,6 +23,7 @@
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#define RZ_SIZE (32)
......@@ -153,6 +154,13 @@ void *__asan_malloc(size_t size) {
return ret;
}
void *__asan_calloc(size_t nmemb, size_t size) {
size_t alloc_size = nmemb * size;
void *ret = __asan_malloc(alloc_size);
memset(ret, 0, alloc_size);
return ret;
}
void __asan_free(char *ptr) {
DUMP("free() called on %p\n", ptr);
void *rz_left = ptr - RZ_SIZE;
......
......@@ -31,6 +31,7 @@ namespace Ice {
namespace {
constexpr const char *ASanPrefix = "__asan";
constexpr SizeT RzSize = 32;
constexpr const char *RzPrefix = "__$rz";
constexpr const char *RzArrayName = "__$rz_array";
......@@ -44,7 +45,9 @@ using string_map = std::unordered_map<std::string, std::string>;
using string_set = std::unordered_set<std::string>;
// TODO(tlively): Handle all allocation functions
const string_map FuncSubstitutions = {{"malloc", "__asan_malloc"},
{"free", "__asan_free"}};
{"free", "__asan_free"},
{"calloc", "__asan_calloc"},
{"__asan_dummy_calloc", "__asan_calloc"}};
const string_set FuncBlackList = {"_Balloc"};
llvm::NaClBitcodeRecord::RecordVector sizeToByteVec(SizeT Size) {
......@@ -63,7 +66,8 @@ ICE_TLS_DEFINE_FIELD(std::vector<InstCall *> *, ASanInstrumentation,
bool ASanInstrumentation::isInstrumentable(Cfg *Func) {
std::string FuncName = Func->getFunctionName().toStringOrEmpty();
return FuncName == "" || FuncBlackList.count(FuncName) == 0;
return FuncName == "" ||
(FuncBlackList.count(FuncName) == 0 && FuncName.find(ASanPrefix) != 0);
}
// Create redzones around all global variables, ensuring that the initializer
......
; Test that calls made through pointers are unchanged by ASan
; REQUIRES: allow_dump
; RUN: %p2i -i %s --args -verbose=inst -threads=0 -fsanitize-address \
; RUN: | FileCheck --check-prefix=DUMP %s
define internal i32 @caller(i32 %callee_addr, i32 %arg) {
%callee = inttoptr i32 %callee_addr to i32 (i32)*
%result = call i32 %callee(i32 %arg)
ret i32 %result
}
; DUMP-LABEL: ================ Initial CFG ================
; DUMP-NEXT: define internal i32 @caller(i32 %callee_addr, i32 %arg) {
; DUMP-NEXT: __0:
; DUMP-NEXT: %result = call i32 %callee_addr(i32 %arg)
; DUMP-NEXT: ret i32 %result
; DUMP-NEXT: }
; DUMP-LABEL: ================ Instrumented CFG ================
; DUMP-NEXT: define internal i32 @caller(i32 %callee_addr, i32 %arg) {
; DUMP-NEXT: __0:
; DUMP-NEXT: %result = call i32 %callee_addr(i32 %arg)
; DUMP-NEXT: ret i32 %result
; DUMP-NEXT: }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment