Skip to content

Commit

Permalink
start separating out obj
Browse files Browse the repository at this point in the history
  • Loading branch information
WalterBright committed Jul 11, 2012
1 parent 23cd426 commit 1565a26
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 69 deletions.
68 changes: 3 additions & 65 deletions src/backend/global.h
@@ -1,5 +1,5 @@
// Copyright (C) 1984-1996 by Symantec
// Copyright (C) 2000-2009 by Digital Mars
// Copyright (C) 2000-2012 by Digital Mars
// All Rights Reserved
// http://www.digitalmars.com
// Written by Walter Bright
Expand All @@ -20,6 +20,8 @@
#include "el.h"
#endif

#include "obj.h"

#ifdef DEBUG
CEXTERN char debuga; /* cg - watch assignaddr() */
CEXTERN char debugb; /* watch block optimization */
Expand Down Expand Up @@ -361,70 +363,6 @@ unsigned char loadconst(elem *e, int im);
/* From cgopt.c */
CEXTERN void opt(void);

/* cgobj.c */
void obj_init(Outbuffer *, const char *filename, const char *csegname);
void obj_initfile(const char *filename, const char *csegname, const char *modname);
size_t obj_mangle(Symbol *s,char *dest);
void obj_termfile(void);
void obj_term(void);
void obj_import(elem *e);
void objlinnum(Srcpos srcpos, targ_size_t offset);
void obj_dosseg(void);
void obj_startaddress(Symbol *);
bool obj_includelib(const char *);
bool obj_allowZeroSize();
void obj_exestr(const char *p);
void obj_user(const char *p);
void obj_compiler();
void obj_wkext(Symbol *,Symbol *);
void obj_lzext(Symbol *,Symbol *);
void obj_alias(const char *n1,const char *n2);
void obj_theadr(const char *modname);
void objseggrp(targ_size_t codesize, targ_size_t datasize, targ_size_t cdatasize, targ_size_t udatasize);
void obj_staticctor(Symbol *s,int dtor,int seg);
void obj_staticdtor(Symbol *s);
void obj_funcptr(Symbol *s);
void obj_ehtables(Symbol *sfunc,targ_size_t size,Symbol *ehsym);
void obj_ehsections();
void obj_moduleinfo(Symbol *scc);
int obj_comdat(Symbol *);
int obj_comdatsize(Symbol *, targ_size_t symsize);
void obj_setcodeseg(int seg);
int obj_codeseg(char *name,int suffix);
seg_data *obj_tlsseg();
seg_data *obj_tlsseg_bss();
int obj_fardata(char *name, targ_size_t size, targ_size_t *poffset);
void obj_browse(char *, unsigned);
void objend(void);
void obj_export(Symbol *s, unsigned argsize);
void objpubdef(int seg, Symbol *s, targ_size_t offset);
void objpubdefsize(int seg, Symbol *s, targ_size_t offset, targ_size_t symsize);
#if ELFOBJ
void objpubdefsize(int seg, Symbol *s, targ_size_t offset, targ_size_t symsize);
#elif MACHOBJ
#define objpubdefsize(seg, s, offset, symsize) objpubdef(seg, s, offset)
#endif
int objextdef(const char *);
int elf_data_start(Symbol *sdata, targ_size_t datasize, int seg);
int objextern(Symbol *);
int obj_comdef(Symbol *s, int flag, targ_size_t size, targ_size_t count);
void obj_lidata(int seg, targ_size_t offset, targ_size_t count);
void obj_write_zeros(seg_data *pseg, targ_size_t count);
void obj_write_byte(seg_data *pseg, unsigned byte);
void obj_write_bytes(seg_data *pseg, unsigned nbytes, void *p);
void obj_byte(int seg, targ_size_t offset, unsigned byte);
unsigned obj_bytes(int seg, targ_size_t offset, unsigned nbytes, void *p);
void objledata(int seg, targ_size_t offset, targ_size_t data, unsigned lcfd, unsigned idx1, unsigned idx2);
void obj_long(int seg, targ_size_t offset, unsigned long data, unsigned lcfd, unsigned idx1, unsigned idx2);
void reftodatseg(int seg, targ_size_t offset, targ_size_t val, unsigned targetdatum, int flags);
void reftofarseg(int seg, targ_size_t offset, targ_size_t val, int farseg, int flags);
void reftocodseg(int seg, targ_size_t offset, targ_size_t val);
int reftoident(int seg, targ_size_t offset, Symbol *s, targ_size_t val, int flags);
void obj_far16thunk(Symbol *s);
void obj_fltused();
int elf_data_cdata(char *p, int len, int *pseg);
int elf_data_cdata(char *p, int len);


// objrecor.c
void objfile_open(const char *);
Expand Down
87 changes: 87 additions & 0 deletions src/backend/obj.h
@@ -0,0 +1,87 @@
// Copyright (C) 1984-1996 by Symantec
// Copyright (C) 2000-2012 by Digital Mars
// All Rights Reserved
// http://www.digitalmars.com
// Written by Walter Bright
/*
* This source file is made available for personal use
* only. The license is in /dmd/src/dmd/backendlicense.txt
* or /dm/src/dmd/backendlicense.txt
* For any other uses, please contact Digital Mars.
*/

/* Interface to object file format
*/

//#pragma once
#ifndef OBJ_H
#define OBJ_H 1

struct seg_data;

/* cgobj.c */
void obj_init(Outbuffer *, const char *filename, const char *csegname);
void obj_initfile(const char *filename, const char *csegname, const char *modname);
size_t obj_mangle(Symbol *s,char *dest);
void obj_termfile(void);
void obj_term(void);
void obj_import(elem *e);
void objlinnum(Srcpos srcpos, targ_size_t offset);
void obj_dosseg(void);
void obj_startaddress(Symbol *);
bool obj_includelib(const char *);
bool obj_allowZeroSize();
void obj_exestr(const char *p);
void obj_user(const char *p);
void obj_compiler();
void obj_wkext(Symbol *,Symbol *);
void obj_lzext(Symbol *,Symbol *);
void obj_alias(const char *n1,const char *n2);
void obj_theadr(const char *modname);
void objseggrp(targ_size_t codesize, targ_size_t datasize, targ_size_t cdatasize, targ_size_t udatasize);
void obj_staticctor(Symbol *s,int dtor,int seg);
void obj_staticdtor(Symbol *s);
void obj_funcptr(Symbol *s);
void obj_ehtables(Symbol *sfunc,targ_size_t size,Symbol *ehsym);
void obj_ehsections();
void obj_moduleinfo(Symbol *scc);
int obj_comdat(Symbol *);
int obj_comdatsize(Symbol *, targ_size_t symsize);
void obj_setcodeseg(int seg);
int obj_codeseg(char *name,int suffix);
seg_data *obj_tlsseg();
seg_data *obj_tlsseg_bss();
int obj_fardata(char *name, targ_size_t size, targ_size_t *poffset);
void obj_browse(char *, unsigned);
void objend(void);
void obj_export(Symbol *s, unsigned argsize);
void objpubdef(int seg, Symbol *s, targ_size_t offset);
void objpubdefsize(int seg, Symbol *s, targ_size_t offset, targ_size_t symsize);
#if ELFOBJ
void objpubdefsize(int seg, Symbol *s, targ_size_t offset, targ_size_t symsize);
#elif MACHOBJ
#define objpubdefsize(seg, s, offset, symsize) objpubdef(seg, s, offset)
#endif
int objextdef(const char *);
int elf_data_start(Symbol *sdata, targ_size_t datasize, int seg);
int objextern(Symbol *);
int obj_comdef(Symbol *s, int flag, targ_size_t size, targ_size_t count);
void obj_lidata(int seg, targ_size_t offset, targ_size_t count);
void obj_write_zeros(seg_data *pseg, targ_size_t count);
void obj_write_byte(seg_data *pseg, unsigned byte);
void obj_write_bytes(seg_data *pseg, unsigned nbytes, void *p);
void obj_byte(int seg, targ_size_t offset, unsigned byte);
unsigned obj_bytes(int seg, targ_size_t offset, unsigned nbytes, void *p);
void objledata(int seg, targ_size_t offset, targ_size_t data, unsigned lcfd, unsigned idx1, unsigned idx2);
void obj_long(int seg, targ_size_t offset, unsigned long data, unsigned lcfd, unsigned idx1, unsigned idx2);
void reftodatseg(int seg, targ_size_t offset, targ_size_t val, unsigned targetdatum, int flags);
void reftofarseg(int seg, targ_size_t offset, targ_size_t val, int farseg, int flags);
void reftocodseg(int seg, targ_size_t offset, targ_size_t val);
int reftoident(int seg, targ_size_t offset, Symbol *s, targ_size_t val, int flags);
void obj_far16thunk(Symbol *s);
void obj_fltused();
int elf_data_cdata(char *p, int len, int *pseg);
int elf_data_cdata(char *p, int len);


#endif
4 changes: 2 additions & 2 deletions src/posix.mak
Expand Up @@ -68,7 +68,7 @@ CFLAGS = $(GFLAGS) -I$(ROOT) -DMARS=1 -DTARGET_$(TARGET)=1
MFLAGS = $(GFLAGS) -I$C -I$(TK) -I$(ROOT) -DMARS=1 -DTARGET_$(TARGET)=1

CH= $C/cc.h $C/global.h $C/oper.h $C/code.h $C/type.h \
$C/dt.h $C/cgcv.h $C/el.h $C/iasm.h
$C/dt.h $C/cgcv.h $C/el.h $C/iasm.h $C/obj.h

DMD_OBJS = \
access.o array.o attrib.o bcomplex.o blockopt.o \
Expand Down Expand Up @@ -132,7 +132,7 @@ SRC = win32.mak posix.mak \
$C/dwarf.c $C/dwarf.h $C/aa.h $C/aa.c $C/tinfo.h $C/ti_achar.c \
$C/ti_pvoid.c \
$C/machobj.c $C/mscoffobj.c \
$C/xmm.h \
$C/xmm.h $C/obj.h \
$(TK)/filespec.h $(TK)/mem.h $(TK)/list.h $(TK)/vec.h \
$(TK)/filespec.c $(TK)/mem.c $(TK)/vec.c $(TK)/list.c \
$(ROOT)/root.h $(ROOT)/root.c $(ROOT)/array.c \
Expand Down
4 changes: 2 additions & 2 deletions src/win32.mak
Expand Up @@ -214,7 +214,7 @@ BACKSRC= $C\cdef.h $C\cc.h $C\oper.h $C\ty.h $C\optabgen.c \
$C\dwarf.c $C\dwarf.h $C\cppman.c $C\machobj.c \
$C\strtold.c $C\aa.h $C\aa.c $C\tinfo.h $C\ti_achar.c \
$C\md5.h $C\md5.c $C\ti_pvoid.c $C\xmm.h \
$C\mscoffobj.c \
$C\mscoffobj.c $C\obj.h \
$C\backend.txt

# Toolkit
Expand All @@ -240,7 +240,7 @@ ROOTSRC= $(ROOT)\root.h $(ROOT)\root.c $(ROOT)\array.c \
#TOTALH=total.sym # Use with pre-compiled headers
TOTALH=id.h
CH= $C\cc.h $C\global.h $C\oper.h $C\code.h $C\type.h $C\dt.h $C\cgcv.h \
$C\el.h $C\iasm.h
$C\el.h $C\iasm.h $C\obj.h

# Makefiles
MAKEFILES=win32.mak posix.mak
Expand Down

0 comments on commit 1565a26

Please sign in to comment.