blob: 43f537a19a6a7721b36281c41a7aa16c2f37c771 [file] [log] [blame]
//===------------ CStdLib.h - Secure C standard library calls -------------===//
//
// The SAFECode Compiler
//
// This file was developed by the LLVM research group and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This pass finds all calls to functions in the C standard library and
// transforms them to a more secure form.
//
//===----------------------------------------------------------------------===//
#ifndef CSTDLIB_H
#define CSTDLIB_H
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instructions.h"
#include "llvm/Pass.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/Passes.h"
#include "llvm/Support/CallSite.h"
#include "llvm/Support/Debug.h"
#include "llvm/InstVisitor.h"
#include "safecode/SAFECode.h"
#include <vector>
using std::vector;
namespace llvm
{
/**
* Pass that secures C standard library string calls via transforms
*/
class StringTransform : public ModulePass
{
private:
typedef struct
{
const char *name;
Type *return_type;
unsigned argc;
} SourceFunction;
typedef struct
{
const char *name;
unsigned source_argc;
unsigned pool_argc;
} DestFunction;
bool transform(Module &M,
const StringRef FunctionName,
const unsigned argc,
const unsigned pool_argc,
Type *ReturnTy,
Statistic &statistic);
bool vtransform(Module &M,
const SourceFunction &from,
const DestFunction &to,
Statistic &stat,
...);
bool gtransform(Module &M,
const SourceFunction &from,
const DestFunction &to,
Statistic &stat,
const vector<unsigned> &append_order);
DataLayout *tdata;
public:
static char ID;
StringTransform() : ModulePass(ID) {}
virtual bool runOnModule(Module &M);
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
// Require DataLayout
AU.addRequired<DataLayout>();
}
};
}
#endif