Example #1
0
    // emit the header (bestFormat) return amount emitted
    unsigned __stdcall IlmethodEmit(unsigned size, COR_ILMETHOD_FAT* header,
                                    BOOL moreSections, BYTE* outBuff)
    {
#ifdef _DEBUG
        BYTE* origBuff = outBuff;
#endif
        if (size == 1) {
            // Tiny format
            *outBuff++ = (BYTE) (CorILMethod_TinyFormat | (header->GetCodeSize() << 2));
        }
        else {
            // Fat format
            _ASSERTE((((size_t) outBuff) & 3) == 0);               // header is dword aligned
            COR_ILMETHOD_FAT* fatHeader = (COR_ILMETHOD_FAT*) outBuff;
            outBuff += sizeof(COR_ILMETHOD_FAT);
            *fatHeader = *header;
            fatHeader->SetFlags(fatHeader->GetFlags() | CorILMethod_FatFormat);
            _ASSERTE((fatHeader->GetFlags() & CorILMethod_FormatMask) == CorILMethod_FatFormat);
            if (moreSections)
                fatHeader->SetFlags(fatHeader->GetFlags() | CorILMethod_MoreSects);
            fatHeader->SetSize(sizeof(COR_ILMETHOD_FAT) / 4);
        }
        _ASSERTE(&origBuff[size] == outBuff);
        return(size);
    }