Changeset 21633 for trunk/include
- Timestamp:
- Jun 2, 2011, 1:49:51 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/excpt.h
r21624 r21633 66 66 /* +56 */ int state; 67 67 /* +60 */ DWORD pPrevFrameWin32; 68 /* +64 */ DWORD Win32FS; 68 69 } 69 70 __seh_EXCEPTION_FRAME; … … 96 97 /* install exception handler (both Win32 and OS/2 chains) */ \ 97 98 __asm__ ("leal %0, %%ecx; " \ 99 "movl %%fs, %%eax; " \ 100 "andl $0x0000FFFF, %%eax; " \ 101 "movl %%eax, 64(%%ecx); " \ 98 102 "movl %%fs:0, %%eax; " \ 99 103 "movl %%eax, 0(%%ecx); " \ … … 133 137 } \ 134 138 else if (__seh_frame.state == 3) \ 135 /* remove exception handler */ \ 136 __asm__ ("push $1; " \ 137 "call _SetWin32TIB@4; " \ 138 "" \ 139 "movl %%fs:0, %%ecx; " \ 139 /* remove exception handler (note that for some reason SMP kernel \ 140 * seems to garbage the Win32FS:[0] cell with the OS/2 exception \ 141 * registration record, so use the original __seh_frame value) */ \ 142 __asm__ ("leal %0, %%ecx; " \ 143 "" \ 144 "movl 64(%%ecx), %%eax; " \ 145 "movl %%eax, %%fs; " \ 146 "" \ 140 147 "movl 60(%%ecx), %%eax; " \ 141 148 "movl %%eax, %%fs:0; " \ … … 147 154 "movl %%eax, %%fs:0; " \ 148 155 "popl %%fs; " \ 149 : : 156 : : "m"(__seh_frame) \ 150 157 : "%eax", "%ecx"); \ 151 158 else /* __seh_frame.state == 2 -> execute except block */ … … 164 171 } \ 165 172 else if (__seh_frame.state == 3) \ 166 /* remove exception handler */ \ 167 __asm__ ("push $1; " \ 168 "call _SetWin32TIB@4; " \ 169 "" \ 170 "movl %%fs:0, %%ecx; " \ 173 /* remove exception handler (note that for some reason SMP kernel \ 174 * seems to garbage the Win32FS:[0] cell with the OS/2 exception \ 175 * registration record, so use the original __seh_frame value) */ \ 176 __asm__ ("leal %0, %%ecx; " \ 177 "" \ 178 "movl 64(%%ecx), %%eax; " \ 179 "movl %%eax, %%fs; " \ 180 "" \ 171 181 "movl 60(%%ecx), %%eax; " \ 172 182 "movl %%eax, %%fs:0; " \ … … 178 188 "movl %%eax, %%fs:0; " \ 179 189 "popl %%fs; " \ 180 : : 190 : : "m"(__seh_frame) \ 181 191 : "%eax", "%ecx"); \ 182 192 else /* __seh_frame.state == 2 -> execute finally block */
Note:
See TracChangeset
for help on using the changeset viewer.