comparison dmd2/objfile.h @ 1452:638d16625da2

LDC 2 compiles again.
author Robert Clipsham <robert@octarineparrot.com>
date Sat, 30 May 2009 17:23:32 +0100
parents
children
comparison
equal deleted inserted replaced
1423:42bd767ec5a4 1452:638d16625da2
1
2
3 #ifndef OBJFILE_H
4 #define OBJFILE_H
5
6 #include "root.h"
7
8 typedef void *SymHandle;
9 typedef unsigned SegOffset;
10
11 enum ObjFormat
12 {
13 NTCOFF,
14 ELF
15 };
16
17 struct ObjFile : File
18 {
19 ObjFile(FileName *);
20 ~ObjFile();
21
22 ObjFile *init(ObjFormat);
23
24 void comment(const char *); // insert comment into object file
25 void modulename(const char *); // set module name
26 void library(const char *); // add default library
27 void startaddress(SegHandle seg, SegOffset offset); // set start address
28
29 // Segments
30 enum SegHandle
31 { code = 1,
32 data, bss
33 };
34
35 SymHandle defineSym(const char *name, SegHandle seg, SegOffset offset);
36 SymHandle externSym(const char *name);
37
38 SegOffset write(SegHandle seg, const void *data, unsigned nbytes);
39 SegOffset writestring(SegHandle seg, char *string);
40 SegOffset write8(SegHandle seg, unsigned b);
41 SegOffset write16(SegHandle seg, unsigned w);
42 SegOffset write32(SegHandle seg, unsigned long v);
43 SegOffset write64(SegHandle seg, unsigned long long v);
44 SegOffset fill0(SegHandle seg, unsigned nbytes);
45 SegOffset align(SegHandle seg, unsigned size);
46 SegOffset writefixup(SegHandle seg, SymHandle sym, unsigned value, int selfrelative);
47
48 // Non-binding hint as to how big seg will grow
49 void reserve(SegHandle seg, SegOffset size);
50
51 // Set actual size
52 void setSize(SegHandle seg, SegOffset size);
53
54 // Get/set offset for subsequent writes
55 void setOffset(SegHandle seg, SegOffset offset);
56 SegOffset getOffset(SegHandle seg);
57
58 SegHandle createSeg(const char *name);
59 };
60
61 #endif