https://issues.dlang.org/show_bug.cgi?id=24700
--- Comment #1 from Dennis <[email protected]> --- N.b. even a dumb patch like this would mostly fix it, since it's trying to get the same section over and over: ``` --- a/compiler/src/dmd/backend/mscoffobj.d +++ b/compiler/src/dmd/backend/mscoffobj.d @@ -1357,16 +1357,29 @@ int MsCoffObj_jmpTableSegment(Symbol *s) @trusted segidx_t MsCoffObj_getsegment(const(char)* sectname, uint flags) { + __gshared segidx_t lastFind = 1; //printf("getsegment(%s)\n", sectname); assert(strlen(sectname) <= 8); // so it won't go into string_table if (!(flags & IMAGE_SCN_LNK_COMDAT)) { + if (lastFind < SegData.length) + { + seg_data *pseg = SegData[lastFind]; + if (!(ScnhdrTab[pseg.SDshtidx].Characteristics & IMAGE_SCN_LNK_COMDAT) && + strncmp(cast(const(char)* )ScnhdrTab[pseg.SDshtidx].Name, sectname, 8) == 0) + { + //printf("\t%s\n", sectname); + return lastFind; // return existing segment + } + } + for (segidx_t seg = 1; seg < SegData.length; seg++) { seg_data *pseg = SegData[seg]; if (!(ScnhdrTab[pseg.SDshtidx].Characteristics & IMAGE_SCN_LNK_COMDAT) && strncmp(cast(const(char)* )ScnhdrTab[pseg.SDshtidx].Name, sectname, 8) == 0) { //printf("\t%s\n", sectname); + lastFind = seg; return seg; // return existing segment } } ``` --
