diff --git a/compiler/src/dmd/backend/cgobj.d b/compiler/src/dmd/backend/cgobj.d index 7f6c17d4a1..545f1be70e 100644 --- a/compiler/src/dmd/backend/cgobj.d +++ b/compiler/src/dmd/backend/cgobj.d @@ -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"); diff --git a/compiler/src/dmd/backend/elfobj.d b/compiler/src/dmd/backend/elfobj.d index c50b39c680..8dd3bfefbb 100644 --- a/compiler/src/dmd/backend/elfobj.d +++ b/compiler/src/dmd/backend/elfobj.d @@ -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); diff --git a/compiler/src/dmd/backend/machobj.d b/compiler/src/dmd/backend/machobj.d index 1f882a477a..2edeb47a94 100644 --- a/compiler/src/dmd/backend/machobj.d +++ b/compiler/src/dmd/backend/machobj.d @@ -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"); diff --git a/compiler/src/dmd/backend/mscoffobj.d b/compiler/src/dmd/backend/mscoffobj.d index c113d621da..4c160ccc62 100644 --- a/compiler/src/dmd/backend/mscoffobj.d +++ b/compiler/src/dmd/backend/mscoffobj.d @@ -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"); diff --git a/compiler/src/dmd/backend/obj.d b/compiler/src/dmd/backend/obj.d index 06eaa299e8..0507dffe47 100644 --- a/compiler/src/dmd/backend/obj.d +++ b/compiler/src/dmd/backend/obj.d @@ -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; diff --git a/compiler/src/dmd/glue.d b/compiler/src/dmd/glue.d index 6a4053d35e..9078a8cccd 100644 --- a/compiler/src/dmd/glue.d +++ b/compiler/src/dmd/glue.d @@ -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()) diff --git a/compiler/test/runnable/complex.d b/compiler/test/runnable/complex.d index 50e793e21e..3a7291d18b 100644 --- a/compiler/test/runnable/complex.d +++ b/compiler/test/runnable/complex.d @@ -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