Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.


Generate debug info in the CV4 debug format.

Source tocvdebug.d

pure nothrow @nogc @safe uint visibilityToCVAttr(Visibility.Kind vis);
CV4 pg. 25 Convert D visibility attribute to cv attribute.
uint cv_align(ubyte* p, uint n);
Align and pad.
aligned count
void cv_udt(const char* id, uint typidx);
write a UDT record to the object file
char* id name of user defined type
uint typidx type index
void toDebug(EnumDeclaration ed);
Emit symbolic debug info in CV format.
struct CvFieldList;
Helper struct for field list records LF_FIELDLIST/LF_FIELDLIST_V2
if the size exceeds the maximum length of a record, the last entry is an LF_INDEX entry with the type index pointing to the next field list record
Processing is done in two phases:
Phase 1: computing the size of the field list and distributing it over multiple records
  • construct CvFieldList with some precalculated field count/length
  • for each field, call count(length of field)
Phase 2: write the actual data
  • call alloc() to allocate debtyp's
  • for each field,
    • call writePtr() to get a pointer into the current debtyp
    • fill memory with field data
    • call written(length of field)
  • call debtyp() to create type records and return the index of the first one
int cvMember(Dsymbol s, ubyte* p);
Insert CV info into *p.
number of bytes written, or that would be written if p==null