Ignore:
Timestamp:
Apr 19, 2002, 2:09:12 AM (23 years ago)
Author:
bird
Message:

FS Fixes. Level 3 is enabled. (the best one)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/profilerfix/cppopa4.asm

    r8281 r8282  
    1 ; $Id: cppopa4.asm,v 1.2 2002-04-18 01:35:24 bird Exp $
     1; $Id: cppopa4.asm,v 1.3 2002-04-19 00:09:12 bird Exp $
     2;
     3
     4;
     5; Copyright 1990-1998 IBM Corp.
     6;
     7
    28;
    39; File Name         : G:\fun\cpppan40.obj\cpppan40.obj
     
    1218        .MODEL FLAT
    1319
    14     large EQU
     20;
     21;   Defined Constants And Macros
     22;
     23
     24;
     25; FS selector fixes.
     26;
     27;FS_FIXES_1      EQU     1               ; Level 1 - Load correct fs when ever it's accessed
     28                                        ;           And save it before calling Dos* and initAddr.
     29;FS_FIXES_2      EQU     1               ; Level 2 - Save and load correct fs before every
     30                                        ;           indirect call.
     31FS_FIXES_3      EQU     1               ; Level 3 - Save and load correct fs upon entry.
     32                                        ;
     33ifdef FS_FIXES_3
     34FS_FIXES_STACK  EQU     4
     35else
     36FS_FIXES_STACK  EQU     0
     37endif
     38
     39
     40large           EQU                     ; workaround for IDA code.
     41
     42
    1543
    1644;
     
    3866                extrn DosQueryProcAddr:near
    3967                extrn DosUnwindException:near
     68ifdef FS_FIXES_1
     69                extrn Dos32TIB:abs
     70elseifdef FS_FIXES_2
     71                extrn Dos32TIB:abs
     72elseifdef FS_FIXES_3
     73                extrn Dos32TIB:abs
     74endif
    4075
    4176
     
    78113    proseg_logBufNext       dd ?
    79114    proseg_logBufWrap       dd ?
     115if 0
    80116    proseg_procAddrs        dd 7 dup(?)
     117else
     118    proseg_pfnINIT_PROSEG   dd ?        ; 00h + proseg_procAddrs
     119    proseg_pfnINIT_IDT      dd ?        ; 04h + proseg_procAddrs
     120    proseg_pfnINIT_ID4T     dd ?        ; 08h + proseg_procAddrs
     121    proseg_pfnINIT_ID44     dd ?        ; 0ch + proseg_procAddrs
     122    proseg_pfnINIT_ID44T    dd ?        ; 10h + proseg_procAddrs
     123    proseg_pfnUnknown1      dd ?        ; 14h + proseg_procAddrs
     124    proseg_pfnUnknown2      dd ?        ; 18h + proseg_procAddrs
     125endif
    81126    proseg_maxTid           dd ?
    82127    proseg_ptrCurTid        dd ?
     
    159204
    160205; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
    161 
    162 
    163206                public _ProfileHook32
    164207_ProfileHook32  proc near               ; CODE XREF: $$PROFSETJMPp longjmpp
     
    182225                push    edx
    183226                push    eax
     227ifdef FS_FIXES_3
     228                push    fs
     229                push    Dos32TIB
     230                pop     fs
     231endif
    184232                mov     esi, $$PROSEGPTR32
     233                ASSUME  esi:ptr PROSEG
    185234                or      esi, esi
    186235                jnz     short loc_6_4E
     
    199248
    200249loc_6_4E:                               ; CODE XREF: $$PROFCALL32+Dj
    201                 mov     ebx, large fs:0Ch
    202                 test    dword ptr [esi], 10h
     250ifdef FS_FIXES_1
     251                push    fs
     252                push    Dos32TIB
     253                pop     fs
     254                mov     ebx, fs:tib_s.tib_ptib2
     255                pop     fs
     256else
     257                mov     ebx, fs:tib_s.tib_ptib2
     258endif
     259                test    dword ptr [esi.proseg_flags], 10h
    203260                jnz     loc_6_FD
    204261                movzx   ebx, word ptr [ebx]
    205262                dec     ebx
    206                 cmp     ebx, [esi+64h]
     263                cmp     ebx, [esi.proseg_maxTid]
    207264                jnb     loc_6_FD
    208                 mov     eax, [esi+164h]
     265                mov     eax, [esi.conditionalExit]
    209266                mov     dword ptr [eax+ebx*4], 0FFFFFFFFh
    210                 mov     eax, [esi+160h]
     267                mov     eax, [esi.proseg_tidTrigger]
    211268                cmp     dword ptr [eax+ebx*4], 0
    212                 jz      short loc_6_FD
    213                 nop
    214                 nop
    215                 nop
    216                 nop
    217                 mov     eax, [esi+158h]
     269                jz      loc_6_FD
     270                nop
     271                nop
     272                nop
     273                nop
     274                mov     eax, [esi.proseg_tidDecNest]
    218275                dec     dword ptr [eax+ebx*4]
    219                 js      short loc_6_104
     276                js      loc_6_104
    220277                nop
    221278                nop
     
    223280                nop
    224281                push    edi
    225                 lea     eax, [esp+18h]
     282                lea     eax, [esp+18h + FS_FIXES_STACK]
    226283                call    verifyStackFrame
    227284                or      eax, eax
    228285                jnz     short loc_6_103
    229                 mov     eax, offset _ProfileHook32+0FFh
    230                 xchg    eax, [esp+18h+arg_0]
     286                mov     eax, offset $$PROFRET32
     287                xchg    eax, [esp+18h+arg_0 + FS_FIXES_STACK]
    231288                mov     edi, ebx
    232289                shl     edi, 0Ch
    233                 add     edi, [esi+154h]
    234                 push    eax
    235                 lea     eax, [esp+1Ch]
     290                add     edi, [esi.proseg_retStacks]
     291                push    eax
     292                lea     eax, [esp+1Ch + FS_FIXES_STACK]
    236293                call    checkForUnwindAtCall
    237294                pop     eax
     
    239296                add     edi, [edi]
    240297                mov     [edi], eax
    241                 lea     eax, [esp+18h]
     298                lea     eax, [esp+18h + FS_FIXES_STACK]
    242299                mov     [edi+4], eax
    243300                mov     eax, [eax]
    244                 test    dword ptr [esi], 20h
     301                test    dword ptr [esi.proseg_flags], 20h
    245302                jz      short loc_6_F4
    246303                nop
     
    250307                shl     ebx, 10h
    251308                mov     bl, 1
    252                 mov     edx, [esp+18h+var_14]
    253                 call    dword ptr [esi+58h]
     309                mov     edx, [esp+18h+var_14 + FS_FIXES_STACK]
     310ifdef FS_FIXES_2
     311                push    fs
     312                push    Dos32TIB
     313                pop     fs
     314                call    dword ptr [esi.proseg_pfnINIT_ID44T]
     315                pop     fs
     316else
     317                call    dword ptr [esi.proseg_pfnINIT_ID44T]
     318endif
    254319                jmp     short loc_6_FC
    255320; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
     
    262327                shl     ebx, 10h
    263328                mov     bl, 40h ; '@'
    264                 call    dword ptr [esi+50h]
     329ifdef FS_FIXES_2
     330                push    fs
     331                push    Dos32TIB
     332                pop     fs
     333                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     334                pop     fs
     335else
     336                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     337endif
    265338
    266339loc_6_FC:                               ; CODE XREF: $$PROFCALL32+DEj
     
    269342loc_6_FD:                               ; CODE XREF: $$PROFCALL32+1Aj
    270343                                        ; $$PROFCALL32+37j ...
     344ifdef FS_FIXES_3
     345                pop     fs
     346endif
    271347                pop     eax
    272348                pop     edx
     
    281357
    282358loc_6_104:                              ; CODE XREF: $$PROFCALL32+83j
    283                 mov     eax, [esi+158h]
     359                mov     eax, [esi.proseg_tidDecNest]
    284360                inc     dword ptr [eax+ebx*4]
    285361                jmp     short loc_6_FD
     
    293369                public $$PROFRET32
    294370$$PROFRET32     proc near
     371;                assume esi:nothing
    295372
    296373;var_8          = byte ptr -8
     
    304381                push    esi
    305382                push    edi
    306                 mov     ebx, large fs:0Ch
     383ifdef FS_FIXES_3
     384                push    fs
     385                push    Dos32TIB
     386                pop     fs
     387endif
     388ifdef FS_FIXES_1
     389                push    fs
     390                push    Dos32TIB
     391                pop     fs
     392                mov     ebx, fs:tib_s.tib_ptib2
     393                pop     fs
     394else
     395                mov     ebx, fs:tib_s.tib_ptib2
     396endif
    307397                mov     esi, $$PROSEGPTR32
    308398                movzx   ebx, word ptr [ebx]
    309399                dec     ebx
    310                 mov     eax, [esi+158h]
     400                mov     eax, [esi].proseg_tidDecNest
    311401                inc     dword ptr [eax+ebx*4]
    312402                mov     edi, ebx
    313403                shl     edi, 0Ch
    314                 add     edi, [esi+154h]
    315                 push    eax
    316                 lea     eax, [esp+18h+var_4]
     404                add     edi, [esi].proseg_retStacks
     405                push    eax
     406                lea     eax, [esp+18h+var_4 + FS_FIXES_STACK]
    317407                call    checkForUnwindAtReturn
    318408                pop     eax
     
    320410                add     edi, [edi]
    321411                mov     eax, [edi+8]
    322                 mov     [esp+14h], eax
     412                mov     [esp+14h + FS_FIXES_STACK], eax
    323413                shl     ebx, 10h
    324414                mov     bl, 0
    325                 call    dword ptr [esi+4Ch]
     415ifdef FS_FIXES_2
     416                push    fs
     417                push    Dos32TIB
     418                pop     fs
     419                call    dword ptr [esi.proseg_pfnINIT_IDT]
     420                pop     fs
     421else
     422                call    dword ptr [esi.proseg_pfnINIT_IDT]
     423endif
     424ifdef FS_FIXES_3
     425                pop     fs
     426endif
    326427                pop     edi
    327428                pop     esi
     
    348449                push    edx
    349450                push    eax
     451ifdef FS_FIXES_3
     452                push    fs
     453                push    Dos32TIB
     454                pop     fs
     455endif
    350456                mov     esi, $$PROSEGPTR32
    351457                or      esi, esi
     
    365471
    366472loc_6_19F:                              ; CODE XREF: $$PROFTRIG32+Dj
    367                 test    dword ptr [esi], 10h
     473                test    dword ptr [esi].proseg_flags, 10h
    368474                jnz     loc_6_24A
    369                 mov     ebx, large fs:0Ch
     475ifdef FS_FIXES_1
     476                push    fs
     477                push    Dos32TIB
     478                pop     fs
     479                mov     ebx, fs:tib_s.tib_ptib2
     480                pop     fs
     481else
     482                mov     ebx, fs:tib_s.tib_ptib2
     483endif
    370484                movzx   ebx, word ptr [ebx]
    371485                dec     ebx
    372                 cmp     ebx, [esi+64h]
     486                cmp     ebx, [esi].proseg_maxTid
    373487                jnb     loc_6_24A
    374                 mov     eax, [esi+164h]
     488                mov     eax, [esi].conditionalExit
    375489                mov     dword ptr [eax+ebx*4], 0FFFFFFFFh
    376                 mov     eax, [esi+158h]
     490                mov     eax, [esi].proseg_tidDecNest
    377491                dec     dword ptr [eax+ebx*4]
    378                 js      short loc_6_251
     492                js      loc_6_251
    379493                push    edi
    380                 lea     eax, [esp+18h]
     494                lea     eax, [esp+18h + FS_FIXES_STACK]
    381495                call    verifyStackFrame
    382496                or      eax, eax
    383                 jnz     short loc_6_250
    384                 mov     eax, offset _ProfileHook32+24Ch
    385                 xchg    eax, [esp+18h+arg_0]
    386                 cmp     eax, offset _ProfileHook32+24Ch
     497                jnz     loc_6_250
     498                mov     eax, offset $$PROFTRIGRET32
     499                xchg    eax, [esp+18h+arg_0 + FS_FIXES_STACK]
     500                cmp     eax, offset $$PROFTRIGRET32
    387501                jz      short loc_6_250
    388                 mov     edi, [esi+160h]
     502                mov     edi, [esi].proseg_tidTrigger
    389503                inc     dword ptr [edi+ebx*4]
    390504                mov     edi, ebx
    391505                shl     edi, 0Ch
    392                 add     edi, [esi+154h]
    393                 push    eax
    394                 lea     eax, [esp+1Ch]
     506                add     edi, [esi].proseg_retStacks
     507                push    eax
     508                lea     eax, [esp+1Ch + FS_FIXES_STACK]
    395509                call    checkForUnwindAtCall
    396510                pop     eax
     
    398512                add     edi, [edi]
    399513                mov     [edi], eax
    400                 lea     eax, [esp+18h]
     514                lea     eax, [esp+18h + FS_FIXES_STACK]
    401515                mov     [edi+4], eax
    402516                mov     eax, [eax]
    403                 test    dword ptr [esi], 20h
     517                test    dword ptr [esi].proseg_flags, 20h
    404518                jz      short loc_6_241
    405519                nop
     
    409523                shl     ebx, 10h
    410524                mov     bl, 1
    411                 mov     edx, [esp+18h+var_14]
    412                 call    dword ptr [esi+58h]
     525                mov     edx, [esp+18h+var_14 + FS_FIXES_STACK]
     526ifdef FS_FIXES_2
     527                push    fs
     528                push    Dos32TIB
     529                pop     fs
     530                call    dword ptr [esi.proseg_pfnINIT_ID44T]
     531                pop     fs
     532else
     533                call    dword ptr [esi.proseg_pfnINIT_ID44T]
     534endif
    413535                jmp     short loc_6_249
    414536; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
     
    423545                shl     ebx, 10h
    424546                mov     bl, 40h ; '@'
    425                 call    dword ptr [esi+50h]
     547ifdef FS_FIXES_2
     548                push    fs
     549                push    Dos32TIB
     550                pop     fs
     551                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     552                pop     fs
     553else
     554                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     555endif
    426556
    427557loc_6_249:                              ; CODE XREF: $$PROFTRIG32+DAj
     
    430560loc_6_24A:                              ; CODE XREF: $$PROFTRIG32+1Aj
    431561                                        ; $$PROFTRIG32+37j ...
     562ifdef FS_FIXES_3
     563                pop     fs
     564endif
    432565                pop     eax
    433566                pop     edx
     
    443576
    444577loc_6_251:                              ; CODE XREF: $$PROFTRIG32+73j
    445                 mov     eax, [esi+158h]
     578                mov     eax, [esi].proseg_tidDecNest
    446579                inc     dword ptr [eax+ebx*4]
    447580                jmp     short loc_6_24A
     
    466599                push    esi
    467600                push    edi
    468                 mov     ebx, large fs:0Ch
     601ifdef FS_FIXES_3
     602                push    fs
     603                push    Dos32TIB
     604                pop     fs
     605endif
     606ifdef FS_FIXES_1
     607                push    fs
     608                push    Dos32TIB
     609                pop     fs
     610                mov     ebx, fs:tib_s.tib_ptib2
     611                pop     fs
     612else
     613                mov     ebx, fs:tib_s.tib_ptib2
     614endif
    469615                mov     esi, $$PROSEGPTR32
    470616                movzx   ebx, word ptr [ebx]
    471617                dec     ebx
    472                 mov     eax, [esi+158h]
     618                mov     eax, [esi].proseg_tidDecNest
    473619                inc     dword ptr [eax+ebx*4]
    474620                mov     edi, ebx
    475621                shl     edi, 0Ch
    476                 add     edi, [esi+154h]
    477                 push    eax
    478                 lea     eax, [esp+1Ch+var_8]
     622                add     edi, [esi].proseg_retStacks
     623                push    eax
     624                lea     eax, [esp+1Ch+var_8 + FS_FIXES_STACK]
    479625                call    checkForUnwindAtReturn
    480626                pop     eax
     
    482628                add     edi, [edi]
    483629                mov     eax, [edi+8]
    484                 mov     [esp+18h+var_4], eax
    485                 mov     eax, [esi+160h]
     630                mov     [esp+18h+var_4 + FS_FIXES_STACK], eax
     631                mov     eax, [esi].proseg_tidTrigger
    486632                dec     dword ptr [eax+ebx*4]
    487633                shl     ebx, 10h
    488                 call    dword ptr [esi+4Ch]
     634ifdef FS_FIXES_2
     635                push    fs
     636                push    Dos32TIB
     637                pop     fs
     638                call    dword ptr [esi.proseg_pfnINIT_IDT]
     639                pop     fs
     640else
     641                call    dword ptr [esi.proseg_pfnINIT_IDT]
     642endif
     643ifdef FS_FIXES_3
     644                pop     fs
     645endif
    489646                pop     edi
    490647                pop     esi
     
    524681                push    edx
    525682                push    eax
     683ifdef FS_FIXES_3
     684                push    fs
     685                push    Dos32TIB
     686                pop     fs
     687endif
    526688                mov     esi, $$PROSEGPTR32
    527689                or      esi, esi
     
    541703
    542704loc_6_2F4:                              ; CODE XREF: $$PROFEYEC32+Dj
    543                 test    dword ptr [esi], 10h
     705                test    dword ptr [esi].proseg_flags, 10h
    544706                jnz     loc_6_40B
    545                 mov     ebx, large fs:0Ch
     707ifdef FS_FIXES_1
     708                push    fs
     709                push    Dos32TIB
     710                pop     fs
     711                mov     ebx, fs:tib_s.tib_ptib2
     712                pop     fs
     713else
     714                mov     ebx, fs:tib_s.tib_ptib2
     715endif
    546716                movzx   ebx, word ptr [ebx]
    547717                dec     ebx
    548                 cmp     ebx, [esi+64h]
     718                cmp     ebx, [esi].proseg_maxTid
    549719                jnb     loc_6_40B
    550                 mov     eax, [esi+160h]
     720                mov     eax, [esi].proseg_tidTrigger
    551721                cmp     dword ptr [eax+ebx*4], 0
    552722                jz      loc_6_40B
    553                 mov     eax, [esi+158h]
     723                mov     eax, [esi].proseg_tidDecNest
    554724                dec     dword ptr [eax+ebx*4]
    555725                js      loc_6_412
    556726                push    edi
    557                 lea     eax, [esp+18h]
     727                lea     eax, [esp+18h + FS_FIXES_STACK]
    558728                call    verifyStackFrame
    559729                or      eax, eax
    560730                jnz     loc_6_411
    561                 mov     eax, offset _ProfileHook32+0FFh
    562                 xchg    eax, [esp+18h+arg_0]
    563                 cmp     eax, offset _ProfileHook32+0FFh
     731                mov     eax, offset $$PROFRET32
     732                xchg    eax, [esp+18h+arg_0 + FS_FIXES_STACK]
     733                cmp     eax, offset $$PROFRET32
    564734                jnz     short loc_6_36A
    565735                mov     eax, 0FFFFFFFDh
    566736                call    PERF
    567                 inc     dword ptr [esi+134h]
     737                inc     dword ptr [esi._counterArray+14h]
    568738                jmp     loc_6_411
    569739; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
     
    572742                mov     edi, ebx
    573743                shl     edi, 0Ch
    574                 add     edi, [esi+154h]
    575                 push    eax
    576                 lea     eax, [esp+1Ch]
     744                add     edi, [esi].proseg_retStacks
     745                push    eax
     746                lea     eax, [esp+1Ch + FS_FIXES_STACK]
    577747                call    checkForUnwindAtCall
    578748                pop     eax
     
    580750                add     edi, [edi]
    581751                mov     [edi], eax
    582                 lea     eax, [esp+18h]
     752                lea     eax, [esp+18h + FS_FIXES_STACK]
    583753                mov     [edi+4], eax
    584754                mov     eax, [eax]
    585755                push    dword ptr [edi]
    586                 test    dword ptr [esi], 20h
     756                test    dword ptr [esi].proseg_flags, 20h
    587757                jz      short loc_6_3AF
    588758                nop
     
    592762                shl     ebx, 10h
    593763                mov     bl, 1
    594                 mov     edx, [esp+1Ch+var_10]
    595                 call    dword ptr [esi+58h]
     764                mov     edx, [esp+1Ch+var_10 + FS_FIXES_STACK]
     765ifdef FS_FIXES_2
     766                push    fs
     767                push    Dos32TIB
     768                pop     fs
     769                call    dword ptr [esi.proseg_pfnINIT_ID44T]
     770                pop     fs
     771else
     772                call    dword ptr [esi.proseg_pfnINIT_ID44T]
     773endif
    596774                jmp     short loc_6_3B7
    597775; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
     
    605783                shl     ebx, 10h
    606784                mov     bl, 40h ; '@'
    607                 call    dword ptr [esi+50h]
     785ifdef FS_FIXES_2
     786                push    fs
     787                push    Dos32TIB
     788                pop     fs
     789                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     790                pop     fs
     791else
     792                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     793endif
    608794
    609795loc_6_3B7:                              ; CODE XREF: $$PROFEYEC32+F3j
     
    613799                jnz     short loc_6_40A
    614800                xor     bl, bl
    615                 lea     edi, [esp+18h+arg_4]
    616                 mov     eax, [esp+18h+var_14]
    617                 mov     esi, offset _ProfileHook32+3E1h
     801                lea     edi, [esp+18h+arg_4 + FS_FIXES_STACK]
     802                mov     eax, [esp+18h+var_14 + FS_FIXES_STACK]
     803                mov     esi, offset jmpback_1
    618804
    619805loc_6_3CE:                              ; CODE XREF: $$PROFEYEC32+124j
     
    645831                jmp     esi
    646832; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    647                 mov     esi, offset _ProfileHook32+3EBh
     833jmpback_1:
     834                mov     esi, offset jmpback_2
    648835                mov     [edi-4], eax
    649836                jmp     short loc_6_3CE
    650837; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    651                 mov     esi, offset _ProfileHook32+3F5h
     838jmpback_2:
     839                mov     esi, offset jmpback_3
    652840                mov     [edi-4], edx
    653841                jmp     short loc_6_3CE
    654842; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
     843jmpback_3:
    655844                mov     [edi-4], ecx
    656845                jmp     short loc_6_3CE
     
    663852loc_6_40B:                              ; CODE XREF: $$PROFEYEC32+1Aj
    664853                                        ; $$PROFEYEC32+37j ...
     854ifdef FS_FIXES_3
     855                pop     fs
     856endif
    665857                pop     eax
    666858                pop     edx
     
    676868
    677869loc_6_412:                              ; CODE XREF: $$PROFEYEC32+76j
    678                 mov     eax, [esi+158h]
     870                mov     eax, [esi].proseg_tidDecNest
    679871                inc     dword ptr [eax+ebx*4]
    680872                jmp     short loc_6_40B
     
    705897                push    ecx
    706898                push    edx
     899ifdef FS_FIXES_3
     900                push    fs
     901                push    Dos32TIB
     902                pop     fs
     903endif
    707904                mov     esi, $$PROSEGPTR32
    708905                or      esi, esi
     
    730927
    731928loc_6_45A:                              ; CODE XREF: PROFITCAL+Cj
    732                 test    dword ptr [esi], 10h
     929                test    dword ptr [esi].proseg_flags, 10h
    733930                jnz     short loc_6_494
    734931                nop
     
    736933                nop
    737934                nop
    738                 mov     ebx, large fs:0Ch
     935ifdef FS_FIXES_1
     936                push    fs
     937                push    Dos32TIB
     938                pop     fs
     939                mov     ebx, fs:tib_s.tib_ptib2
     940                pop     fs
     941else
     942                mov     ebx, fs:tib_s.tib_ptib2
     943endif
    739944                movzx   ebx, word ptr [ebx]
    740945                dec     ebx
    741                 cmp     ebx, [esi+64h]
     946                cmp     ebx, [esi].proseg_maxTid
    742947                jnb     short loc_6_494
    743                 mov     edx, [esi+158h]
     948                mov     edx, [esi].proseg_tidDecNest
    744949                mov     edx, [edx+ebx*4]
    745                 mov     ecx, [esi+15Ch]
     950                mov     ecx, [esi].proseg_tidMaxNest
    746951                cmp     edx, [ecx+ebx*4]
    747952                jz      short loc_6_494
     
    749954                shl     ebx, 10h
    750955                mov     bl, 20h ; ' '
    751                 call    dword ptr [esi+50h]
     956ifdef FS_FIXES_2
     957                push    fs
     958                push    Dos32TIB
     959                pop     fs
     960                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     961                pop     fs
     962else
     963                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     964endif
    752965                pop     edi
    753966
    754967loc_6_494:                              ; CODE XREF: PROFITCAL+19j
    755968                                        ; PROFITCAL+36j ...
     969ifdef FS_FIXES_3
     970                pop     fs
     971endif
    756972                pop     edx
    757973                pop     ecx
     
    781997                xor     ecx, ecx
    782998                xor     edx, edx
    783                 mov     dx, [esi]
     999                mov     dx, [esi].proseg_flags
    7841000                mov     cx, dx
    7851001                and     dx, 10h
    7861002                xor     cx, dx
    787                 mov     [esi], cx
     1003                mov     [esi].proseg_flags, cx
    7881004                mov     eax, 0FFFFFFFEh
    7891005                call    PERF
     
    8191035                xor     ecx, ecx
    8201036                xor     edx, edx
    821                 mov     cx, [esi]
     1037                mov     cx, [esi].proseg_flags
    8221038                or      cx, 10h
    823                 mov     [esi], cx
     1039                mov     [esi].proseg_flags, cx
    8241040
    8251041loc_6_4F8:                              ; CODE XREF: PerfStop+Cj
     
    8481064
    8491065                call    _ProfileHook32
     1066ifdef FS_FIXES_3
     1067                push    fs
     1068                push    Dos32TIB
     1069                pop     fs
     1070endif
    8501071                mov     [eax+4], ecx
    8511072                mov     [eax+0Ch], ebx
     
    8551076                lea     edx, [esp+arg_0]
    8561077                mov     [eax+8], edx
    857                 mov     edx, large fs:0
     1078ifdef FS_FIXES_1
     1079                push    fs
     1080                push    Dos32TIB
     1081                pop     fs
     1082                mov     edx, fs:tib_s.tib_pexchain
     1083                pop     fs
     1084else
     1085                mov     edx, fs:tib_s.tib_pexchain
     1086endif
    8581087                mov     [eax+18h], edx
    8591088                fstcw   word ptr [eax+1Ch]
    8601089                xor     eax, eax
    861                 retn
    862 ;$$PROFSETJMP   endp
     1090ifdef FS_FIXES_3
     1091                pop     fs
     1092endif
     1093                retn
    8631094setjmp          endp
    8641095
     
    8711102longjmp         proc near
    8721103                call    _ProfileHook32
     1104ifdef FS_FIXES_3
     1105                push    fs
     1106                push    Dos32TIB
     1107                pop     fs
     1108endif
    8731109                push    eax
    8741110                push    edx
     1111ifdef FS_FIXES_1
     1112                push    fs
     1113endif
    8751114                push    0
    876                 push    offset _ProfileHook32+53Bh
     1115                push    offset unwind_callback
    8771116                push    dword ptr [eax+18h]
    8781117                call    DosUnwindException
     
    8811120
    8821121; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
     1122unwind_callback:
    8831123                add     esp, 0Ch
     1124ifdef FS_FIXES_1
     1125                pop     fs
     1126endif
    8841127                pop     edx
    8851128                pop     eax
     1129ifdef FS_FIXES_1
    8861130                mov     ecx, $$PROSEGPTR32
    887                 jecxz   short loc_6_5C2
    888                 mov     ebx, large fs:0Ch
     1131                jecxz   @@jump
     1132                jmp     @@ok
     1133@@jump:
     1134                jmp     loc_6_5C2
     1135@@ok:
     1136                push    fs
     1137                push    Dos32TIB
     1138                pop     fs
     1139                mov     ebx, fs:tib_s.tib_ptib2
     1140                pop     fs
     1141else
     1142                mov     ecx, $$PROSEGPTR32
     1143                jecxz   loc_6_5C2
     1144                mov     ebx, fs:tib_s.tib_ptib2
     1145endif
    8891146                mov     esi, ecx
    8901147                movzx   ebx, word ptr [ebx]
    8911148                dec     ebx
    892                 cmp     ebx, [esi+64h]
     1149                cmp     ebx, [esi].proseg_maxTid
    8931150                jnb     short loc_6_5C2
    8941151                push    eax
     
    8981155                mov     edi, ebx
    8991156                shl     edi, 0Ch
    900                 add     edi, [esi+154h]
     1157                add     edi, [esi].proseg_retStacks
    9011158
    9021159loc_6_57C:                              ; CODE XREF: CODE32:000005B0j
     
    9081165                mov     edx, [edi+edx+4]
    9091166                mov     edx, [edx+4]
    910                 cmp     edx, offset _ProfileHook32+24Ch
     1167                cmp     edx, offset $$PROFTRIGRET32
    9111168                jnz     short loc_6_5A2
    9121169                push    eax
    913                 mov     eax, [esi+160h]
     1170                mov     eax, [esi].proseg_tidTrigger
    9141171                dec     dword ptr [eax+ebx*4]
    9151172                pop     eax
     
    9171174loc_6_5A2:                              ; CODE XREF: CODE32:00000595j
    9181175                push    eax
    919                 mov     eax, [esi+158h]
     1176                mov     eax, [esi].proseg_tidDecNest
    9201177                inc     dword ptr [eax+ebx*4]
    9211178                pop     eax
     
    9261183                                        ; CODE32:00000586j
    9271184                neg     ecx
    928                 jz      short loc_6_5DD
     1185                jz      short bailout2
    9291186                mov     eax, ecx
    9301187                shl     ebx, 10h
    9311188                mov     bl, 10h
    932                 call    dword ptr [esi+50h]
     1189ifdef FS_FIXES_2
     1190                push    fs
     1191                push    Dos32TIB
     1192                pop     fs
     1193                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     1194                pop     fs
     1195else
     1196                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     1197endif
    9331198                pop     edx
    9341199                pop     eax
     
    9401205                wait
    9411206                fldcw   word ptr [edx+1Ch]
     1207ifdef FS_FIXES_3
     1208                pop     fs
     1209endif
    9421210                mov     ebx, [edx+0Ch]
    9431211                mov     esi, [edx+14h]
     
    9461214                mov     esp, [edx+8]
    9471215                or      eax, eax
    948                 jnz     short loc_6_5DD
     1216                jnz     short bailout1
    9491217                inc     eax
    9501218
    951 loc_6_5DD:                              ; CODE XREF: CODE32:000005B4j
     1219bailout1:                               ; CODE XREF: CODE32:000005B4j
    9521220                                        ; CODE32:000005DAj
    9531221                jmp     dword ptr [edx+4]
     1222
     1223bailout2:
     1224ifdef FS_FIXES_3
     1225                pop     fs
     1226endif
     1227                jmp     dword ptr [edx+4]
     1228
    9541229longjmp         endp
    9551230; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
     
    9631238_ProfileThrow32 proc near
    9641239                push    eax
    965                 mov     eax, offset _ProfileHook32+5D0h
     1240                mov     eax, offset ExceptionThrownString
    9661241                call    PERF
    9671242                pop     eax
     
    9791254                push    esi
    9801255                push    edi
     1256ifdef FS_FIXES_3
     1257                push    fs
     1258                push    Dos32TIB
     1259                pop     fs
     1260endif
     1261
    9811262                mov     esi, $$PROSEGPTR32
    9821263                or      esi, esi
    9831264                jz      short loc_6_67A
    984                 mov     ebx, large fs:0Ch
     1265ifdef FS_FIXES_1
     1266                push    fs
     1267                push    Dos32TIB
     1268                pop     fs
     1269                mov     ebx, fs:tib_s.tib_ptib2
     1270                pop     fs
     1271else
     1272                mov     ebx, fs:tib_s.tib_ptib2
     1273endif
    9851274                movzx   ebx, word ptr [ebx]
    9861275                dec     ebx
    987                 cmp     ebx, [esi+64h]
     1276                cmp     ebx, [esi].proseg_maxTid
    9881277                jnb     short loc_6_67A
    9891278                xor     ecx, ecx
    9901279                mov     edi, ebx
    9911280                shl     edi, 0Ch
    992                 add     edi, [esi+154h]
     1281                add     edi, [esi].proseg_retStacks
    9931282
    9941283loc_6_636:                              ; CODE XREF: _ProfileUnwind32+5Ej
     
    10001289                mov     edx, [edi+edx+4]
    10011290                mov     edx, [edx+4]
    1002                 cmp     edx, offset _ProfileHook32+24Ch
     1291                cmp     edx, offset $$PROFTRIGRET32
    10031292                jnz     short loc_6_65C
    10041293                push    eax
    1005                 mov     eax, [esi+160h]
     1294                mov     eax, [esi].proseg_tidTrigger
    10061295                dec     dword ptr [eax+ebx*4]
    10071296                pop     eax
     
    10091298loc_6_65C:                              ; CODE XREF: _ProfileUnwind32+43j
    10101299                push    eax
    1011                 mov     eax, [esi+158h]
     1300                mov     eax, [esi].proseg_tidDecNest
    10121301                inc     dword ptr [eax+ebx*4]
    10131302                pop     eax
     
    10221311                shl     ebx, 10h
    10231312                mov     bl, 10h
    1024                 call    dword ptr [esi+50h]
     1313ifdef FS_FIXES_2
     1314                push    fs
     1315                push    Dos32TIB
     1316                pop     fs
     1317                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     1318                pop     fs
     1319else
     1320                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     1321endif
    10251322
    10261323loc_6_67A:                              ; CODE XREF: _ProfileUnwind32+Bj
    10271324                                        ; _ProfileUnwind32+1Bj ...
     1325ifdef FS_FIXES_3
     1326                pop     fs
     1327endif
    10281328                pop     edi
    10291329                pop     esi
     
    10411341                push    esi
    10421342                mov     esi, $$PROSEGPTR32
    1043                 mov     ecx, [esi+158h]
     1343                mov     ecx, [esi].proseg_tidDecNest
    10441344                dec     dword ptr [ecx]
    10451345                mov     ecx, 8
    10461346
    10471347loc_6_692:                              ; CODE XREF: CODE32:000006A7j
    1048                 push    offset _ProfileHook32+696h
    1049                 push    offset _ProfileHook32+697h
    1050                 push    offset _ProfileHook32+1
     1348                push    offset eCal_arg2
     1349                push    offset eCal_arg1
     1350                push    offset $$PROFCALL32
    10511351                jmp     $$PROFCALL32
    10521352
    10531353; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    1054                 retn
    1055 ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
     1354eCal_arg2:
     1355                retn
     1356; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
     1357eCal_arg1:
    10561358                loop    loc_6_692
    10571359                push    eax
    1058                 mov     eax, [esi+158h]
     1360                mov     eax, [esi].proseg_tidDecNest
    10591361                inc     dword ptr [eax]
    10601362                pop     eax
    10611363                pop     esi
    10621364                retn
    1063 ; Type idx: 513
    10641365eCal            endp
     1366; Type idx: 513
    10651367
    10661368; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
     
    10921394                public CrashAndBurn
    10931395CrashAndBurn    proc near               ; CODE XREF: longjmp+1Bj DoInit+1Fj ...
    1094                 mov     [esi+4], edx
    1095                 mov     [esi+8], eax
     1396                mov     [esi].proseg_rc, edx
     1397                mov     [esi].proseg_rcSys, eax
    10961398                push    eax
    10971399                push    1
     
    11101412                                        ; $$PROFTRIG32+20p ...
    11111413                pushad
     1414ifdef FS_FIXES_3
     1415                push    fs
     1416                push    Dos32TIB
     1417                pop     fs
     1418endif
    11121419                xor     ebx, ebx
    11131420                push    ebx
    11141421                mov     eax, esp
     1422ifdef FS_FIXES_1
     1423                push    fs
     1424endif
    11151425                push    eax
    11161426                lea     eax, logDllName ; "CPPPAN40"
     
    11201430                call    DosLoadModule
    11211431                add     esp, 10h
     1432ifdef FS_FIXES_1
     1433                pop     fs
     1434endif
    11221435                mov     edx, 0FAD8h
    11231436                or      eax, eax
     
    11251438                pop     edx
    11261439                mov     ecx, 7
     1440ifdef FS_FIXES_1
     1441                push    fs
     1442endif
     1443
    11271444                lea     edi, initAdr
    11281445                push    edi
     
    11331450                call    DosQueryProcAddr
    11341451                add     esp, 10h
     1452ifdef FS_FIXES_1
     1453                pop     fs
     1454endif
    11351455                mov     edx, 0FB3Ch
    11361456                or      eax, eax
    11371457                jnz     short CrashAndBurn
    11381458                xor     ebx, ebx
     1459
    11391460                push    ebx
    11401461                push    ebx
    11411462                mov     eax, esp
    1142                 mov     edx, offset _ProfileHook32+66Eh
    1143                 mov     ecx, offset _ProfileHook32+6A5h
     1463                mov     edx, offset eCal
     1464                mov     ecx, offset uCal
     1465ifdef FS_FIXES_1
     1466                push    fs
     1467endif
    11441468                lea     esi, $$PROSEGPTR32
    11451469                push    esi
     
    11471471                call    initAdr
    11481472                add     esp, 10h
     1473ifdef FS_FIXES_1
     1474                pop     fs
     1475endif
    11491476                or      eax, eax
    11501477                pop     edx
    11511478                pop     eax
    11521479                jnz     CrashAndBurn
     1480ifdef FS_FIXES_3
     1481                pop     fs
     1482endif
    11531483                popad
    11541484                mov     esi, $$PROSEGPTR32
     
    11641494checkForUnwindAtCall proc near          ; CODE XREF: $$PROFCALL32+B0p
    11651495                                        ; $$PROFTRIG32+ACp ...
    1166                 test    word ptr [esi], 40h
     1496ifdef FS_FIXES_3
     1497                push    fs
     1498                push    Dos32TIB
     1499                pop     fs
     1500endif
     1501                test    word ptr [esi].proseg_flags, 40h
    11671502                jz      short locret_6_7D0
    1168                 test    word ptr [esi], 80h
     1503                test    word ptr [esi].proseg_flags, 80h
    11691504                jz      short locret_6_7D0
    11701505                push    edx
     
    11971532                mov     bl, 10h
    11981533                mov     eax, ecx
    1199                 call    dword ptr [esi+50h]
     1534ifdef FS_FIXES_2
     1535                push    fs
     1536                push    Dos32TIB
     1537                pop     fs
     1538                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     1539                pop     fs
     1540else
     1541                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     1542endif
    12001543                pop     edi
    12011544                pop     ebx
     
    12071550locret_6_7D0:                           ; CODE XREF: checkForUnwindAtCall+5j
    12081551                                        ; checkForUnwindAtCall+Cj
     1552ifdef FS_FIXES_3
     1553                pop     fs
     1554endif
    12091555                retn
    12101556checkForUnwindAtCall endp
     
    12181564checkForUnwindAtReturn proc near        ; CODE XREF: $$PROFRET32+33p
    12191565                                        ; $$PROFTRIGRET32+33p
    1220                 test    word ptr [esi], 40h
     1566ifdef FS_FIXES_3
     1567                push    fs
     1568                push    Dos32TIB
     1569                pop     fs
     1570endif
     1571                test    word ptr [esi].proseg_flags, 40h
    12211572                jz      short locret_6_82F
    1222                 test    word ptr [esi], 80h
     1573                test    word ptr [esi].proseg_flags, 80h
    12231574                jz      short locret_6_82F
    12241575                cmp     dword ptr [edi], 10h
     
    12551606                mov     bl, 10h
    12561607                mov     eax, ecx
    1257                 call    dword ptr [esi+50h]
     1608ifdef FS_FIXES_2
     1609                push    fs
     1610                push    Dos32TIB
     1611                pop     fs
     1612                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     1613                pop     fs
     1614else
     1615                call    dword ptr [esi.proseg_pfnINIT_ID4T]
     1616endif
    12581617                pop     edi
    12591618                pop     ebx
     
    12651624locret_6_82F:                           ; CODE XREF: checkForUnwindAtReturn+5j
    12661625                                        ; checkForUnwindAtReturn+Cj ...
     1626ifdef FS_FIXES_3
     1627                pop     fs
     1628endif
    12671629                retn
    12681630checkForUnwindAtReturn endp
     
    12761638verifyStackFrame proc near              ; CODE XREF: $$PROFCALL32+8Ep
    12771639                                        ; $$PROFTRIG32+7Ap ...
     1640ifdef FS_FIXES_3
     1641                push    fs
     1642                push    Dos32TIB
     1643                pop     fs
     1644endif
    12781645                push    edi
    1279                 test    word ptr [esi], 40h
     1646                test    word ptr [esi].proseg_flags, 40h
    12801647                jz      short loc_6_85F
    1281                 test    word ptr [esi], 80h
     1648                test    word ptr [esi].proseg_flags, 80h
    12821649                jz      short loc_6_85F
    12831650                mov     edi, ebx
    12841651                shl     edi, 0Ch
    1285                 add     edi, [esi+154h]
     1652                add     edi, [esi].proseg_retStacks
    12861653                cmp     dword ptr [edi], 0
    12871654                jz      short loc_6_85F
     
    13161683loc_6_879:                              ; CODE XREF: verifyStackFrame+31j
    13171684                pop     edi
     1685ifdef FS_FIXES_3
     1686                pop     fs
     1687endif
    13181688                retn
    13191689verifyStackFrame endp
     
    13301700                mov     ebp, esp
    13311701                pushfd
     1702ifdef FS_FIXES_3
     1703                push    fs
     1704                push    Dos32TIB
     1705                pop     fs
     1706endif
    13321707                push    esi
    13331708                mov     esi, $$PROSEGPTR32
    13341709                or      esi, esi
     1710                jz      loc_6_8EE
     1711                test    word ptr [esi].proseg_flags, 2
    13351712                jz      short loc_6_8EE
    1336                 test    word ptr [esi], 2
    1337                 jz      short loc_6_8EE
    1338                 test    word ptr [esi], 10h
     1713                test    word ptr [esi].proseg_flags, 10h
    13391714                jnz     short loc_6_8EE
    13401715                push    edi
    13411716                push    ebx
    13421717                push    ecx
    1343                 mov     ebx, large fs:0Ch
     1718ifdef FS_FIXES_1
     1719                push    fs
     1720                push    Dos32TIB
     1721                pop     fs
     1722                mov     ebx, fs:tib_s.tib_ptib2
     1723                pop     fs
     1724else
     1725                mov     ebx, fs:tib_s.tib_ptib2
     1726endif
    13441727                mov     ebx, [ebx]
    1345                 cmp     ebx, [esi+64h]
     1728                cmp     ebx, [esi].proseg_maxTid
    13461729                ja      short loc_6_8EB
    13471730                dec     ebx
    1348                 mov     eax, [esi+160h]
     1731                mov     eax, [esi].proseg_tidTrigger
    13491732                cmp     dword ptr [eax+ebx*4], 0
    13501733                jz      short loc_6_8EB
     
    13531736                mov     eax, [ebp+4]
    13541737                push    edx
    1355                 mov     ecx, [esi+164h]
     1738                mov     ecx, [esi].conditionalExit
    13561739                mov     edx, [ecx+edi*4]
    13571740                cmp     edx, 0FFFFFFFFh
     
    13611744                push    ebx
    13621745                push    edi
    1363                 call    dword ptr [esi+58h]
     1746ifdef FS_FIXES_2
     1747                push    fs
     1748                push    Dos32TIB
     1749                pop     fs
     1750                call    dword ptr [esi.proseg_pfnINIT_ID44T]
     1751                pop     fs
     1752else
     1753                call    dword ptr [esi.proseg_pfnINIT_ID44T]
     1754endif
    13641755                pop     edi
    13651756                pop     ebx
    13661757                pop     eax
    1367                 mov     ecx, [esi+164h]
     1758                mov     ecx, [esi].conditionalExit
    13681759                mov     dword ptr [ecx+edi*4], 0FFFFFFFFh
    13691760
     
    13711762                mov     bl, 4
    13721763                pop     edx
    1373                 call    dword ptr [esi+58h]
     1764ifdef FS_FIXES_2
     1765                push    fs
     1766                push    Dos32TIB
     1767                pop     fs
     1768                call    dword ptr [esi.proseg_pfnINIT_ID44T]
     1769                pop     fs
     1770else
     1771                call    dword ptr [esi.proseg_pfnINIT_ID44T]
     1772endif
    13741773
    13751774loc_6_8EB:                              ; CODE XREF: _ProfileEnterParagraph32+2Cj
     
    13821781                                        ; _ProfileEnterParagraph32+14j ...
    13831782                pop     esi
     1783ifdef FS_FIXES_3
     1784                pop     fs
     1785endif
    13841786                popfd
    13851787                pop     ebp
     
    13981800                mov     ebp, esp
    13991801                pushfd
     1802ifdef FS_FIXES_3
     1803                push    fs
     1804                push    Dos32TIB
     1805                pop     fs
     1806endif
    14001807                push    esi
    14011808                mov     esi, $$PROSEGPTR32
    14021809                or      esi, esi
    14031810                jz      short loc_6_939
    1404                 test    word ptr [esi], 2
     1811                test    word ptr [esi].proseg_flags, 2
    14051812                jz      short loc_6_939
    1406                 test    word ptr [esi], 10h
     1813                test    word ptr [esi].proseg_flags, 10h
    14071814                jnz     short loc_6_939
    14081815                push    ebx
    1409                 mov     ebx, large fs:0Ch
     1816ifdef FS_FIXES_1
     1817                push    fs
     1818                push    Dos32TIB
     1819                pop     fs
     1820                mov     ebx, fs:tib_s.tib_ptib2
     1821                pop     fs
     1822else
     1823                mov     ebx, fs:tib_s.tib_ptib2
     1824endif
    14101825                mov     ebx, [ebx]
    1411                 cmp     ebx, [esi+64h]
     1826                cmp     ebx, [esi].proseg_maxTid
    14121827                ja      short loc_6_938
    14131828                dec     ebx
    1414                 mov     edx, [esi+160h]
     1829                mov     edx, [esi].proseg_tidTrigger
    14151830                cmp     dword ptr [edx+ebx*4], 0
    14161831                jz      short loc_6_938
     
    14191834                shl     ebx, 10h
    14201835                mov     bl, 5
    1421                 call    dword ptr [esi+58h]
     1836ifdef FS_FIXES_2
     1837                push    fs
     1838                push    Dos32TIB
     1839                pop     fs
     1840                call    dword ptr [esi.proseg_pfnINIT_ID44T]
     1841                pop     fs
     1842else
     1843                call    dword ptr [esi.proseg_pfnINIT_ID44T]
     1844endif
    14221845
    14231846loc_6_938:                              ; CODE XREF: _ProfileExitParagraph32+2Aj
     
    14281851                                        ; _ProfileExitParagraph32+14j ...
    14291852                pop     esi
     1853ifdef FS_FIXES_3
     1854                pop     fs
     1855endif
    14301856                popfd
    14311857                pop     ebp
     
    14411867_ProfileConditionalExit32 proc near
    14421868                pushfd
     1869ifdef FS_FIXES_3
     1870                push    fs
     1871                push    Dos32TIB
     1872                pop     fs
     1873endif
    14431874                push    esi
    14441875                mov     esi, $$PROSEGPTR32
    14451876                or      esi, esi
    14461877                jz      short loc_6_973
    1447                 test    word ptr [esi], 2
     1878                test    word ptr [esi].proseg_flags, 2
    14481879                jz      short loc_6_973
    1449                 test    word ptr [esi], 10h
     1880                test    word ptr [esi].proseg_flags, 10h
    14501881                jnz     short loc_6_973
    14511882                push    ebx
    14521883                push    ecx
    1453                 mov     ebx, large fs:0Ch
     1884ifdef FS_FIXES_1
     1885                push    fs
     1886                push    Dos32TIB
     1887                pop     fs
     1888                mov     ebx, fs:tib_s.tib_ptib2
     1889                pop     fs
     1890else
     1891                mov     ebx, fs:tib_s.tib_ptib2
     1892endif
    14541893                mov     ebx, [ebx]
    1455                 cmp     ebx, [esi+64h]
     1894                cmp     ebx, [esi].proseg_maxTid
    14561895                ja      short loc_6_971
    14571896                dec     ebx
    1458                 mov     ecx, [esi+164h]
     1897                mov     ecx, [esi].conditionalExit
    14591898                mov     [ecx+ebx*4], eax
    14601899
     
    14661905                                        ; _ProfileConditionalExit32+11j ...
    14671906                pop     esi
     1907ifdef FS_FIXES_3
     1908                pop     fs
     1909endif
    14681910                popfd
    14691911                retn
     
    14781920_ProfileCancelExit32 proc near
    14791921                pushfd
     1922ifdef FS_FIXES_3
     1923                push    fs
     1924                push    Dos32TIB
     1925                pop     fs
     1926endif
    14801927                push    esi
    14811928                mov     esi, $$PROSEGPTR32
    14821929                or      esi, esi
    14831930                jz      short loc_6_9B0
    1484                 test    word ptr [esi], 2
     1931                test    word ptr [esi].proseg_flags, 2
    14851932                jz      short loc_6_9B0
    1486                 test    word ptr [esi], 10h
     1933                test    word ptr [esi].proseg_flags, 10h
    14871934                jnz     short loc_6_9B0
    14881935                push    ebx
    14891936                push    ecx
    1490                 mov     ebx, large fs:0Ch
     1937ifdef FS_FIXES_1
     1938                push    fs
     1939                push    Dos32TIB
     1940                pop     fs
     1941                mov     ebx, fs:tib_s.tib_ptib2
     1942                pop     fs
     1943else
     1944                mov     ebx, fs:tib_s.tib_ptib2
     1945endif
    14911946                mov     ebx, [ebx]
    1492                 cmp     ebx, [esi+64h]
     1947                cmp     ebx, [esi].proseg_maxTid
    14931948                ja      short loc_6_9AE
    14941949                dec     ebx
    1495                 mov     ecx, [esi+164h]
     1950                mov     ecx, [esi].conditionalExit
    14961951                mov     dword ptr [ecx+ebx*4], 0FFFFFFFFh
    14971952
     
    15031958                                        ; _ProfileCancelExit32+11j ...
    15041959                pop     esi
     1960ifdef FS_FIXES_3
     1961                pop     fs
     1962endif
    15051963                popfd
    15061964                retn
     
    15181976                mov     ebp, esp
    15191977                pushfd
     1978ifdef FS_FIXES_3
     1979                push    fs
     1980                push    Dos32TIB
     1981                pop     fs
     1982endif
    15201983                push    esi
    15211984                mov     esi, $$PROSEGPTR32
    15221985                or      esi, esi
    15231986                jz      short loc_6_A11
    1524                 test    word ptr [esi], 2
     1987                test    word ptr [esi].proseg_flags, 2
    15251988                jz      short loc_6_A11
    1526                 test    word ptr [esi], 10h
     1989                test    word ptr [esi].proseg_flags, 10h
    15271990                jnz     short loc_6_A11
    15281991                push    ebx
    15291992                push    ecx
    1530                 mov     ebx, large fs:0Ch
     1993ifdef FS_FIXES_1
     1994                push    fs
     1995                push    Dos32TIB
     1996                pop     fs
     1997                mov     ebx, fs:tib_s.tib_ptib2
     1998                pop     fs
     1999else
     2000                mov     ebx, fs:tib_s.tib_ptib2
     2001endif
    15312002                mov     ebx, [ebx]
    1532                 cmp     ebx, [esi+64h]
     2003                cmp     ebx, [esi].proseg_maxTid
    15332004                ja      short loc_6_A0F
    15342005                dec     ebx
    1535                 mov     ecx, [esi+160h]
     2006                mov     ecx, [esi].proseg_tidTrigger
    15362007                cmp     dword ptr [ecx+ebx*4], 0
    15372008                jz      short loc_6_A0F
    15382009                mov     ecx, [ebp+4]
    1539                 mov     [esi+148h], ecx
    1540                 mov     [esi+14Ch], eax
    1541                 mov     [esi+150h], edx
    1542                 mov     dword ptr [esi+144h], 2
     2010                mov     [esi._parm   ], ecx
     2011                mov     [esi._parm+4h], eax
     2012                mov     [esi._parm+8h], edx
     2013                mov     dword ptr [esi]._command, 2
    15432014                int     3               ; Trap to Debugger
    15442015                wait
     
    15532024                                        ; _ProfileNameString32+14j ...
    15542025                pop     esi
     2026ifdef FS_FIXES_3
     2027                pop     fs
     2028endif
    15552029                popfd
    15562030                pop     ebp
Note: See TracChangeset for help on using the changeset viewer.