New "TargetObjInfo" class. This holds information that the object writers will
[oota-llvm.git] / include / llvm / Target / TargetObjInfo.h
1 //===-- llvm/Target/TargetObjInfo.h - Object File Info ----------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by Bill Wendling and is distributed under the
6 // University of Illinois Open Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file contains a class to be used as the basis for target specific object
11 // writers.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_TARGET_OBJ_INFO_H
16 #define LLVM_TARGET_OBJ_INFO_H
17
18 #include <string>
19 #include <vector>
20
21 namespace llvm {
22
23   struct TargetObjInfo {
24     TargetObjInfo() {}
25     virtual ~TargetObjInfo() {}
26
27     typedef std::vector<unsigned char> DataBuffer;
28
29     virtual void align(DataBuffer &Output, unsigned Boundary) const = 0;
30
31     //===------------------------------------------------------------------===//
32     // Out Functions - Output the specified value to the data buffer.
33
34     virtual void outbyte(DataBuffer &Output, unsigned char X) const = 0;
35     virtual void outhalf(DataBuffer &Output, unsigned short X) const = 0;
36     virtual void outword(DataBuffer &Output, unsigned X) const = 0;
37     virtual void outxword(DataBuffer &Output, uint64_t X) const = 0;
38     virtual void outaddr32(DataBuffer &Output, unsigned X) const = 0;
39     virtual void outaddr64(DataBuffer &Output, uint64_t X) const = 0;
40     virtual void outaddr(DataBuffer &Output, uint64_t X) const = 0;
41     virtual void outstring(DataBuffer &Output, std::string &S,
42                            unsigned Length) const = 0;
43
44     //===------------------------------------------------------------------===//
45     // Fix Functions - Replace an existing entry at an offset.
46
47     virtual void fixhalf(DataBuffer &Output, unsigned short X,
48                          unsigned Offset) const = 0;
49     virtual void fixword(DataBuffer &Output, unsigned X,
50                          unsigned Offset) const = 0;
51     virtual void fixaddr(DataBuffer &Output, uint64_t X,
52                          unsigned Offset) const = 0;
53   };
54
55 } // end llvm namespace
56
57 #endif // LLVM_TARGET_OBJ_INFO_H