extern void DFObjInitDbgInfo( void ) { /*****************************************************/ /* called by objinit to init segments and dwarf writing library */ static const dw_funcs cli_funcs = { CLIReloc, CLIWrite, CLISeek, CLITell, CLIAlloc, CLIFree }; dw_init_info info; cg_sym_handle abbrev_sym; cg_sym_handle debug_pch; fe_attr attr; if( _IsntModel( DBG_LOCALS | DBG_TYPES ) ){ return; } info.compiler_options = DW_CM_DEBUGGER; info.abbrev_sym = 0; info.producer_name = SetDwarfProducer(); info.language = SetLang(); if( setjmp( info.exception_handler ) == 0 ) { info.funcs = cli_funcs; InitSegBck(); // start each seg with a ref label if( _IsModel( DBG_PREDEF ) ) { abbrev_sym = FEAuxInfo( NULL, DBG_PREDEF_SYM ); info.abbrev_sym = (dw_sym_handle)abbrev_sym; attr = FEAttr( abbrev_sym ); if( (attr & FE_IMPORT) ) { info.compiler_options |= DW_CM_ABBREV_PRE; }else{ back_handle bck; segment_id old; info.compiler_options |= DW_CM_ABBREV_GEN; bck = FEBack( abbrev_sym ); // dump out export label bck->seg = DwarfSegs[DW_DEBUG_ABBREV].seg; old = SetOP( DwarfSegs[DW_DEBUG_ABBREV].seg ); DataLabel( bck->lbl ); SetOP( old ); } } debug_pch = FEAuxInfo( NULL, DBG_PCH_SYM ); if( debug_pch != NULL ){ attr = FEAttr( debug_pch ); if( !(attr & FE_IMPORT) ) { back_handle bck; segment_id old; bck = FEBack( debug_pch ); bck->seg = DwarfSegs[DW_DEBUG_INFO].seg; old = SetOP( DwarfSegs[DW_DEBUG_INFO].seg ); DataLabel( bck->lbl ); SetOP( old ); debug_pch = NULL; } } Client = DWInit( &info ); if( Client == NULL ) { Zoiks( ZOIKS_107 ); /* Bad */ } DFBegCCU( AskCodeSeg(), (dw_sym_handle)debug_pch ); } else { Zoiks( ZOIKS_107 ); /* Big Error */ } }
void CVObjInitDbgInfo( void ) /******************************/ /* called by objinit to init segments and for codeview */ { cv_out out[1]; cs_objname *optr; cs_compile *cptr; char *name; InitSegBck(); if( _IsModel( DBG_LOCALS ) ) { NewBuff( out, CVSyms ); optr = StartSym( out, SG_OBJNAME ); optr->signature = 0; name = FEAuxInfo( NULL, OBJECT_FILE_NAME ); CVPutStr( out, name ); EndSym( out ); buffEnd( out ); NewBuff( out, CVSyms ); cptr = StartSym( out, SG_COMPILE ); cptr->language = SetLang(); cptr->flags.s = 0; /* set default */ #if _TARGET & _TARG_IAPX86 cptr->flags.f.Mode32 = false; cptr->machine = MACH_INTEL_8080; #elif _TARGET & _TARG_80386 cptr->machine = MACH_INTEL_80386; cptr->flags.f.Mode32 = true; #elif _TARGET & _TARG_AXP cptr->machine = MACH_DECALPHA; cptr->flags.f.Mode32 = true; cptr->flags.f.FloatPrecision = 1; #endif switch( GetMemModel() ){ case 'h': cptr->flags.f.AmbientData = AMBIENT_HUGE; cptr->flags.f.AmbientCode = AMBIENT_FAR; break; case 'l': cptr->flags.f.AmbientData = AMBIENT_FAR; cptr->flags.f.AmbientCode = AMBIENT_FAR; break; case 'f': case 's': cptr->flags.f.AmbientData = AMBIENT_NEAR; cptr->flags.f.AmbientCode = AMBIENT_NEAR; break; case 'c': cptr->flags.f.AmbientData = AMBIENT_FAR; cptr->flags.f.AmbientCode = AMBIENT_NEAR; break; case 'm': cptr->flags.f.AmbientData = AMBIENT_NEAR; cptr->flags.f.AmbientCode = AMBIENT_FAR; break; default: break; } CVPutStr( out, "WATCOM CV 10.5 " ); EndSym( out ); buffEnd( out ); } }