mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 05:00:16 +03:00
move object generation files away from extern(C++) (#15477)
This commit is contained in:
parent
dfabf0a914
commit
f7b3fab00f
7 changed files with 39 additions and 141 deletions
|
@ -35,8 +35,6 @@ import dmd.backend.type;
|
|||
|
||||
import dmd.common.outbuffer;
|
||||
|
||||
extern (C++):
|
||||
|
||||
nothrow:
|
||||
@safe:
|
||||
|
||||
|
@ -392,7 +390,7 @@ static if (MULTISCOPE)
|
|||
|
||||
__gshared
|
||||
{
|
||||
Rarray!(seg_data*) SegData;
|
||||
extern (C++) Rarray!(seg_data*) SegData;
|
||||
Objstate obj;
|
||||
}
|
||||
|
||||
|
@ -418,49 +416,16 @@ void objrecord(uint rectyp, const(char)* record, uint reclen)
|
|||
o.writeByten(0); // use 0 for checksum
|
||||
}
|
||||
|
||||
@trusted
|
||||
void too_many_symbols()
|
||||
{
|
||||
error(null, 0, 0, "more than %d symbols in object file", 0x7FFF);
|
||||
error(null, 0, 0, "more than %d symbols in object file %s", 0x7FFF, obj.modname);
|
||||
fatal();
|
||||
}
|
||||
|
||||
version (X86) version (DigitalMars)
|
||||
version = X86ASM;
|
||||
|
||||
version (X86ASM)
|
||||
{
|
||||
@trusted
|
||||
int insidx(char *p,uint index)
|
||||
{
|
||||
asm nothrow
|
||||
{
|
||||
naked ;
|
||||
mov EAX,[ESP+8] ; // index
|
||||
mov ECX,[ESP+4] ; // p
|
||||
|
||||
cmp EAX,0x7F ;
|
||||
jae L1 ;
|
||||
mov [ECX],AL ;
|
||||
mov EAX,1 ;
|
||||
ret ;
|
||||
|
||||
|
||||
L1: ;
|
||||
cmp EAX,0x7FFF ;
|
||||
ja L2 ;
|
||||
|
||||
mov [ECX+1],AL ;
|
||||
or EAX,0x8000 ;
|
||||
mov [ECX],AH ;
|
||||
mov EAX,2 ;
|
||||
ret ;
|
||||
}
|
||||
L2:
|
||||
too_many_symbols();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@trusted
|
||||
int insidx(char *p,uint index)
|
||||
{
|
||||
|
@ -485,7 +450,6 @@ int insidx(char *p,uint index)
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**************************
|
||||
* Insert a type index number.
|
||||
|
@ -619,8 +583,7 @@ segidx_t OmfObj_seg_debugT()
|
|||
* filename source file name
|
||||
* csegname code segment name (can be null)
|
||||
*/
|
||||
|
||||
@trusted
|
||||
@system
|
||||
Obj OmfObj_init(OutBuffer *objbuf, const(char)* filename, const(char)* csegname)
|
||||
{
|
||||
//printf("OmfObj_init()\n");
|
||||
|
|
|
@ -42,8 +42,6 @@ import dmd.backend.type;
|
|||
|
||||
import dmd.common.outbuffer;
|
||||
|
||||
extern (C++):
|
||||
|
||||
nothrow:
|
||||
|
||||
import dmd.backend.dwarf;
|
||||
|
@ -273,7 +271,7 @@ IDXSYM MAP_SEG2SYMIDX(int seg) { return SegData[seg].SDsymidx; }
|
|||
Elf32_Shdr* MAP_SEG2SEC(int seg) { return &SecHdrTab[MAP_SEG2SECIDX(seg)]; }
|
||||
int MAP_SEG2TYP(int seg) { return MAP_SEG2SEC(seg).sh_flags & SHF_EXECINSTR ? CODE : DATA; }
|
||||
|
||||
extern Rarray!(seg_data*) SegData;
|
||||
extern (C++) extern Rarray!(seg_data*) SegData;
|
||||
|
||||
int seg_tlsseg = UNKNOWN;
|
||||
int seg_tlsseg_bss = UNKNOWN;
|
||||
|
@ -626,7 +624,6 @@ int ElfObj_string_literal_segment(uint sz)
|
|||
* csegname = name for code segment
|
||||
*/
|
||||
|
||||
private
|
||||
Obj ElfObj_init(OutBuffer *objbuf, const(char)* filename, const(char)* csegname)
|
||||
{
|
||||
//printf("ElfObj_init(filename = %s, csegname = %s)\n",filename,csegname);
|
||||
|
|
|
@ -35,8 +35,6 @@ import dmd.backend.type;
|
|||
|
||||
import dmd.common.outbuffer;
|
||||
|
||||
extern (C++):
|
||||
|
||||
nothrow:
|
||||
@safe:
|
||||
|
||||
|
@ -220,7 +218,7 @@ int mach_seg_data_isCode(const ref seg_data sd)
|
|||
|
||||
__gshared
|
||||
{
|
||||
extern Rarray!(seg_data*) SegData;
|
||||
extern (C++) extern Rarray!(seg_data*) SegData;
|
||||
|
||||
/**
|
||||
* Section index for the __thread_vars/__tls_data section.
|
||||
|
@ -439,7 +437,7 @@ int MachObj_string_literal_segment(uint sz)
|
|||
* Perform initialization that applies to all .o output files.
|
||||
* Called before any other obj_xxx routines
|
||||
*/
|
||||
@trusted
|
||||
@system
|
||||
Obj MachObj_init(OutBuffer *objbuf, const(char)* filename, const(char)* csegname)
|
||||
{
|
||||
//printf("MachObj_init()\n");
|
||||
|
|
|
@ -37,8 +37,6 @@ import dmd.backend.mscoff;
|
|||
|
||||
import dmd.common.outbuffer;
|
||||
|
||||
extern (C++):
|
||||
|
||||
nothrow:
|
||||
@safe:
|
||||
|
||||
|
@ -234,7 +232,7 @@ int MsCoffObj_string_literal_segment(uint sz)
|
|||
* One source file can generate multiple .obj files.
|
||||
*/
|
||||
|
||||
@trusted
|
||||
@system
|
||||
Obj MsCoffObj_init(OutBuffer *objbuf, const(char)* filename, const(char)* csegname)
|
||||
{
|
||||
//printf("MsCoffObj_init()\n");
|
||||
|
|
|
@ -23,8 +23,6 @@ import dmd.backend.el;
|
|||
|
||||
import dmd.common.outbuffer;
|
||||
|
||||
extern (C++):
|
||||
|
||||
nothrow:
|
||||
|
||||
version (Windows)
|
||||
|
@ -38,65 +36,6 @@ else
|
|||
|
||||
/******************************************************************/
|
||||
|
||||
/* Functions common to all object formats
|
||||
*/
|
||||
mixin(ObjMemDecl("Obj $Obj_init(OutBuffer *, const(char)* filename, const(char)* csegname)"));
|
||||
mixin(ObjMemDecl("void $Obj_initfile(const(char)* filename, const(char)* csegname, const(char)* modname)"));
|
||||
mixin(ObjMemDecl("void $Obj_termfile()"));
|
||||
mixin(ObjMemDecl("void $Obj_term(const(char)* objfilename)"));
|
||||
mixin(ObjMemDecl("void $Obj_linnum(Srcpos srcpos, int seg, targ_size_t offset)"));
|
||||
mixin(ObjMemDecl("int $Obj_codeseg(const char *name,int suffix)"));
|
||||
mixin(ObjMemDecl("void $Obj_startaddress(Symbol *)"));
|
||||
mixin(ObjMemDecl("bool $Obj_includelib(const(char)* )"));
|
||||
mixin(ObjMemDecl("bool $Obj_linkerdirective(const(char)* )"));
|
||||
mixin(ObjMemDecl("bool $Obj_allowZeroSize()"));
|
||||
mixin(ObjMemDecl("void $Obj_exestr(const(char)* p)"));
|
||||
mixin(ObjMemDecl("void $Obj_user(const(char)* p)"));
|
||||
mixin(ObjMemDecl("void $Obj_compiler(const(char)* p)"));
|
||||
mixin(ObjMemDecl("void $Obj_wkext(Symbol *,Symbol *)"));
|
||||
mixin(ObjMemDecl("void $Obj_alias(const(char)* n1,const(char)* n2)"));
|
||||
mixin(ObjMemDecl("void $Obj_staticctor(Symbol *s,int dtor,int seg)"));
|
||||
mixin(ObjMemDecl("void $Obj_staticdtor(Symbol *s)"));
|
||||
mixin(ObjMemDecl("void $Obj_setModuleCtorDtor(Symbol *s, bool isCtor)"));
|
||||
mixin(ObjMemDecl("void $Obj_ehtables(Symbol *sfunc,uint size,Symbol *ehsym)"));
|
||||
mixin(ObjMemDecl("void $Obj_ehsections()"));
|
||||
mixin(ObjMemDecl("void $Obj_moduleinfo(Symbol *scc)"));
|
||||
mixin(ObjMemDecl("int $Obj_comdat(Symbol *)"));
|
||||
mixin(ObjMemDecl("int $Obj_comdatsize(Symbol *, targ_size_t symsize)"));
|
||||
mixin(ObjMemDecl("int $Obj_readonly_comdat(Symbol *s)"));
|
||||
mixin(ObjMemDecl("void $Obj_setcodeseg(int seg)"));
|
||||
mixin(ObjMemDecl("seg_data* $Obj_tlsseg()"));
|
||||
mixin(ObjMemDecl("seg_data* $Obj_tlsseg_bss()"));
|
||||
mixin(ObjMemDecl("seg_data* $Obj_tlsseg_data()"));
|
||||
mixin(ObjMemDecl("void $Obj_export_symbol(Symbol *s, uint argsize)"));
|
||||
mixin(ObjMemDecl("void $Obj_pubdef(int seg, Symbol *s, targ_size_t offset)"));
|
||||
mixin(ObjMemDecl("void $Obj_pubdefsize(int seg, Symbol *s, targ_size_t offset, targ_size_t symsize)"));
|
||||
mixin(ObjMemDecl("int $Obj_external_def(const(char)*)"));
|
||||
mixin(ObjMemDecl("int $Obj_data_start(Symbol *sdata, targ_size_t datasize, int seg)"));
|
||||
mixin(ObjMemDecl("int $Obj_external(Symbol *)"));
|
||||
mixin(ObjMemDecl("int $Obj_common_block(Symbol *s, targ_size_t size, targ_size_t count)"));
|
||||
mixin(ObjMemDecl("int $Obj_common_block(Symbol *s, int flag, targ_size_t size, targ_size_t count)"));
|
||||
mixin(ObjMemDecl("void $Obj_lidata(int seg, targ_size_t offset, targ_size_t count)"));
|
||||
mixin(ObjMemDecl("void $Obj_write_zeros(seg_data *pseg, targ_size_t count)"));
|
||||
mixin(ObjMemDecl("void $Obj_write_byte(seg_data *pseg, uint _byte)"));
|
||||
mixin(ObjMemDecl("void $Obj_write_bytes(seg_data *pseg, uint nbytes, const(void)* p)"));
|
||||
mixin(ObjMemDecl("void $Obj_byte(int seg, targ_size_t offset, uint _byte)"));
|
||||
mixin(ObjMemDecl("uint $Obj_bytes(int seg, targ_size_t offset, uint nbytes, const(void)* p)"));
|
||||
mixin(ObjMemDecl("void $Obj_reftodatseg(int seg, targ_size_t offset, targ_size_t val, uint targetdatum, int flags)"));
|
||||
mixin(ObjMemDecl("void $Obj_reftocodeseg(int seg, targ_size_t offset, targ_size_t val)"));
|
||||
mixin(ObjMemDecl("int $Obj_reftoident(int seg, targ_size_t offset, Symbol *s, targ_size_t val, int flags)"));
|
||||
mixin(ObjMemDecl("void $Obj_far16thunk(Symbol *s)"));
|
||||
mixin(ObjMemDecl("void $Obj_fltused()"));
|
||||
mixin(ObjMemDecl("int $Obj_data_readonly(char *p, int len, int *pseg)"));
|
||||
mixin(ObjMemDecl("int $Obj_data_readonly(char *p, int len)"));
|
||||
mixin(ObjMemDecl("int $Obj_string_literal_segment(uint sz)"));
|
||||
mixin(ObjMemDecl("Symbol* $Obj_sym_cdata(tym_t, char *, int)"));
|
||||
mixin(ObjMemDecl("void $Obj_func_start(Symbol *sfunc)"));
|
||||
mixin(ObjMemDecl("void $Obj_func_term(Symbol *sfunc)"));
|
||||
mixin(ObjMemDecl("void $Obj_write_pointerRef(Symbol* s, uint off)"));
|
||||
mixin(ObjMemDecl("int $Obj_jmpTableSegment(Symbol* s)"));
|
||||
mixin(ObjMemDecl("Symbol* $Obj_tlv_bootstrap()"));
|
||||
|
||||
import dmd.backend.cgobj;
|
||||
import dmd.backend.mscoffobj;
|
||||
import dmd.backend.elfobj;
|
||||
|
|
|
@ -342,6 +342,9 @@ private void obj_start(ref OutBuffer objbuf, const(char)* srcfile)
|
|||
|
||||
version (Windows)
|
||||
{
|
||||
import dmd.backend.mscoffobj;
|
||||
import dmd.backend.cgobj;
|
||||
|
||||
// Produce Ms COFF files by default, OMF for -m32omf
|
||||
assert(objbuf.length() == 0);
|
||||
switch (target.objectFormat())
|
||||
|
|
|
@ -243,11 +243,11 @@ void test12()
|
|||
{
|
||||
real x = 3;
|
||||
creal a = (2 + 4i) % 3;
|
||||
printf("%Lg %Lgi\n", a.re, a.im);
|
||||
//printf("%Lg %Lgi\n", a.re, a.im);
|
||||
assert(a == 2 + 1i);
|
||||
|
||||
creal b = (2 + 4i) % x;
|
||||
printf("%Lg %Lgi\n", b.re, b.im);
|
||||
//printf("%Lg %Lgi\n", b.re, b.im);
|
||||
assert(b == a);
|
||||
}
|
||||
|
||||
|
@ -257,7 +257,7 @@ void test13()
|
|||
{
|
||||
ireal a = 5i;
|
||||
ireal b = a % 2;
|
||||
printf("%Lg %Lgi\n", b.re, b.im);
|
||||
//printf("%Lg %Lgi\n", b.re, b.im);
|
||||
assert(b == 1i);
|
||||
}
|
||||
|
||||
|
@ -530,9 +530,9 @@ void test22()
|
|||
{
|
||||
static creal[] params = [1+0i, 3+0i, 5+0i];
|
||||
|
||||
printf("params[0] = %Lf + %Lfi\n", params[0].re, params[0].im);
|
||||
printf("params[1] = %Lf + %Lfi\n", params[1].re, params[1].im);
|
||||
printf("params[2] = %Lf + %Lfi\n", params[2].re, params[2].im);
|
||||
//printf("params[0] = %Lf + %Lfi\n", params[0].re, params[0].im);
|
||||
//printf("params[1] = %Lf + %Lfi\n", params[1].re, params[1].im);
|
||||
//printf("params[2] = %Lf + %Lfi\n", params[2].re, params[2].im);
|
||||
|
||||
creal[] sums = new creal[3];
|
||||
sums[] = 0+0i;
|
||||
|
@ -603,19 +603,19 @@ float func_24_4(float f, double d)
|
|||
void test24()
|
||||
{
|
||||
ifloat f = func_24_1(10i, 8);
|
||||
printf("%fi\n", f);
|
||||
//printf("%fi\n", f);
|
||||
// assert(f == 1.25i);
|
||||
|
||||
f = func_24_2(10i, 8);
|
||||
printf("%fi\n", f);
|
||||
//printf("%fi\n", f);
|
||||
assert(f == 1.25i);
|
||||
|
||||
float g = func_24_3(10, 8);
|
||||
printf("%f\n", g);
|
||||
//printf("%f\n", g);
|
||||
// assert(g == 1.25);
|
||||
|
||||
g = func_24_4(10, 8);
|
||||
printf("%f\n", g);
|
||||
//printf("%f\n", g);
|
||||
assert(g == 1.25);
|
||||
}
|
||||
|
||||
|
@ -647,9 +647,9 @@ void test26()
|
|||
foreach( cdouble z; A )
|
||||
{
|
||||
s = toString26(z);
|
||||
printf("%.*s ", cast(int)s.length, s.ptr);
|
||||
//printf("%.*s ", cast(int)s.length, s.ptr);
|
||||
}
|
||||
printf("\n");
|
||||
//printf("\n");
|
||||
|
||||
for(int ii=0; ii<A.length; ii++ )
|
||||
A[ii] += -1i*A[ii];
|
||||
|
@ -661,9 +661,9 @@ void test26()
|
|||
foreach( cdouble z; A )
|
||||
{
|
||||
s = toString26(z);
|
||||
printf("%.*s ", cast(int)s.length, s.ptr);
|
||||
//printf("%.*s ", cast(int)s.length, s.ptr);
|
||||
}
|
||||
printf("\n");
|
||||
//printf("\n");
|
||||
}
|
||||
|
||||
/*************************************/
|
||||
|
@ -698,19 +698,19 @@ void test28()
|
|||
void test29()
|
||||
{
|
||||
ireal a = 6.5i % 3i;
|
||||
printf("%Lfi %Lfi\n", a, a - .5i);
|
||||
//printf("%Lfi %Lfi\n", a, a - .5i);
|
||||
assert(a == .5i);
|
||||
|
||||
a = 6.5i % 3;
|
||||
printf("%Lfi %Lfi\n", a, a - .5i);
|
||||
//printf("%Lfi %Lfi\n", a, a - .5i);
|
||||
assert(a == .5i);
|
||||
|
||||
real b = 6.5 % 3i;
|
||||
printf("%Lf %Lf\n", b, b - .5);
|
||||
//printf("%Lf %Lf\n", b, b - .5);
|
||||
assert(b == .5);
|
||||
|
||||
b = 6.5 % 3;
|
||||
printf("%Lf %Lf\n", b, b - .5);
|
||||
//printf("%Lf %Lf\n", b, b - .5);
|
||||
assert(b == .5);
|
||||
}
|
||||
|
||||
|
@ -720,17 +720,17 @@ void test30()
|
|||
{
|
||||
cfloat f = 1+0i;
|
||||
f %= 2fi;
|
||||
printf("%f + %fi\n", f.re, f.im);
|
||||
//printf("%f + %fi\n", f.re, f.im);
|
||||
assert(f == 1 + 0i);
|
||||
|
||||
cdouble d = 1+0i;
|
||||
d %= 2i;
|
||||
printf("%f + %fi\n", d.re, d.im);
|
||||
//printf("%f + %fi\n", d.re, d.im);
|
||||
assert(d == 1 + 0i);
|
||||
|
||||
creal r = 1+0i;
|
||||
r %= 2i;
|
||||
printf("%Lf + %Lfi\n", r.re, r.im);
|
||||
//printf("%Lf + %Lfi\n", r.re, r.im);
|
||||
assert(r == 1 + 0i);
|
||||
}
|
||||
|
||||
|
@ -740,17 +740,17 @@ void test31()
|
|||
{
|
||||
cfloat f = 1+0i;
|
||||
f %= 2i;
|
||||
printf("%f + %fi\n", f.re, f.im);
|
||||
//printf("%f + %fi\n", f.re, f.im);
|
||||
assert(f == 1);
|
||||
|
||||
cdouble d = 1+0i;
|
||||
d = d % 2i;
|
||||
printf("%f + %fi\n", d.re, d.im);
|
||||
//printf("%f + %fi\n", d.re, d.im);
|
||||
assert(d == 1);
|
||||
|
||||
creal r = 1+0i;
|
||||
r = r % 2i;
|
||||
printf("%Lf + %Lfi\n", r.re, r.im);
|
||||
//printf("%Lf + %Lfi\n", r.re, r.im);
|
||||
assert(r == 1);
|
||||
}
|
||||
|
||||
|
@ -770,7 +770,7 @@ void assertEqual(real* a, real* b, string file = __FILE__, size_t line = __LINE_
|
|||
{
|
||||
if (x[i] != y[i])
|
||||
{
|
||||
printf("%02zd: %02x %02x\n", i, x[i], y[i]);
|
||||
//printf("%02zd: %02x %02x\n", i, x[i], y[i]);
|
||||
import core.exception;
|
||||
throw new AssertError(file, line);
|
||||
}
|
||||
|
@ -856,7 +856,7 @@ void test35()
|
|||
void test36()
|
||||
{
|
||||
ireal imag = 2.5i;
|
||||
printf ("test of imag*imag = %Lf\n",imag*imag);
|
||||
//printf ("test of imag*imag = %Lf\n",imag*imag);
|
||||
assert(imag * imag == -6.25);
|
||||
}
|
||||
|
||||
|
@ -885,7 +885,7 @@ void test39()
|
|||
creal z = 1 + 2.5i;
|
||||
real e = z.im;
|
||||
|
||||
printf ("e = %Lf\n", e);
|
||||
//printf ("e = %Lf\n", e);
|
||||
assert(e == 2.5);
|
||||
}
|
||||
|
||||
|
@ -942,7 +942,7 @@ void test44()
|
|||
{
|
||||
ifloat f = 1.0fi;
|
||||
// f *= 2.0fi; // illegal but compiles
|
||||
printf("%g\n", f);
|
||||
//printf("%g\n", f);
|
||||
// assert(f == 0i);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue