diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dmd2/objfile.h	Sat May 30 17:23:32 2009 +0100
@@ -0,0 +1,61 @@
+
+
+#ifndef OBJFILE_H
+#define OBJFILE_H
+
+#include "root.h"
+
+typedef void *SymHandle;
+typedef unsigned SegOffset;
+
+enum ObjFormat
+{
+	NTCOFF,
+	ELF
+};
+
+struct ObjFile : File
+{
+    ObjFile(FileName *);
+    ~ObjFile();
+
+    ObjFile *init(ObjFormat);
+
+    void comment(const char *);		// insert comment into object file
+    void modulename(const char *);	// set module name
+    void library(const char *);		// add default library
+    void startaddress(SegHandle seg, SegOffset offset);		// set start address
+
+    // Segments
+    enum SegHandle
+    {	code = 1,
+	data, bss
+    };
+
+    SymHandle defineSym(const char *name, SegHandle seg, SegOffset offset);
+    SymHandle externSym(const char *name);
+
+    SegOffset write(SegHandle seg, const void *data, unsigned nbytes);
+    SegOffset writestring(SegHandle seg, char *string);
+    SegOffset write8(SegHandle seg, unsigned b);
+    SegOffset write16(SegHandle seg, unsigned w);
+    SegOffset write32(SegHandle seg, unsigned long v);
+    SegOffset write64(SegHandle seg, unsigned long long v);
+    SegOffset fill0(SegHandle seg, unsigned nbytes);
+    SegOffset align(SegHandle seg, unsigned size);
+    SegOffset writefixup(SegHandle seg, SymHandle sym, unsigned value, int selfrelative);
+
+    // Non-binding hint as to how big seg will grow
+    void reserve(SegHandle seg, SegOffset size);
+
+    // Set actual size
+    void setSize(SegHandle seg, SegOffset size);
+
+    // Get/set offset for subsequent writes
+    void setOffset(SegHandle seg, SegOffset offset);
+    SegOffset getOffset(SegHandle seg);
+
+    SegHandle createSeg(const char *name);
+};
+
+#endif