Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
b5448369
Commit
b5448369
authored
Apr 01, 2020
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
krnl386: Avoid using the LDT definitions from libwine.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
a02d2773
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
48 additions
and
37 deletions
+48
-37
dosmem.c
dlls/krnl386.exe16/dosmem.c
+5
-5
global.c
dlls/krnl386.exe16/global.c
+3
-3
instr.c
dlls/krnl386.exe16/instr.c
+3
-5
int31.c
dlls/krnl386.exe16/int31.c
+2
-6
kernel.c
dlls/krnl386.exe16/kernel.c
+1
-1
kernel16_private.h
dlls/krnl386.exe16/kernel16_private.h
+19
-1
local.c
dlls/krnl386.exe16/local.c
+2
-2
ne_module.c
dlls/krnl386.exe16/ne_module.c
+1
-1
ne_segment.c
dlls/krnl386.exe16/ne_segment.c
+2
-2
selector.c
dlls/krnl386.exe16/selector.c
+0
-0
snoop.c
dlls/krnl386.exe16/snoop.c
+3
-3
task.c
dlls/krnl386.exe16/task.c
+3
-3
thunk.c
dlls/krnl386.exe16/thunk.c
+3
-4
wowthunk.c
dlls/krnl386.exe16/wowthunk.c
+1
-1
No files found.
dlls/krnl386.exe16/dosmem.c
View file @
b5448369
...
@@ -319,7 +319,7 @@ static void DOSMEM_InitSegments(void)
...
@@ -319,7 +319,7 @@ static void DOSMEM_InitSegments(void)
/*
/*
* PM / offset N*5: Interrupt N in 16-bit protected mode.
* PM / offset N*5: Interrupt N in 16-bit protected mode.
*/
*/
int16_sel
=
GLOBAL_Alloc
(
GMEM_FIXED
,
5
*
256
,
0
,
WINE_
LDT_FLAGS_CODE
);
int16_sel
=
GLOBAL_Alloc
(
GMEM_FIXED
,
5
*
256
,
0
,
LDT_FLAGS_CODE
);
ptr
=
GlobalLock16
(
int16_sel
);
ptr
=
GlobalLock16
(
int16_sel
);
for
(
i
=
0
;
i
<
256
;
i
++
)
{
for
(
i
=
0
;
i
<
256
;
i
++
)
{
/*
/*
...
@@ -340,7 +340,7 @@ static void DOSMEM_InitSegments(void)
...
@@ -340,7 +340,7 @@ static void DOSMEM_InitSegments(void)
* PM / offset 3: Stub which swaps back to 32-bit application code/stack.
* PM / offset 3: Stub which swaps back to 32-bit application code/stack.
* PM / offset 5: Stub which enables interrupts
* PM / offset 5: Stub which enables interrupts
*/
*/
relay_code_sel
=
GLOBAL_Alloc
(
GMEM_FIXED
,
sizeof
(
relay
),
0
,
WINE_
LDT_FLAGS_CODE
);
relay_code_sel
=
GLOBAL_Alloc
(
GMEM_FIXED
,
sizeof
(
relay
),
0
,
LDT_FLAGS_CODE
);
ptr
=
GlobalLock16
(
relay_code_sel
);
ptr
=
GlobalLock16
(
relay_code_sel
);
memcpy
(
ptr
,
relay
,
sizeof
(
relay
)
);
memcpy
(
ptr
,
relay
,
sizeof
(
relay
)
);
GlobalUnlock16
(
relay_code_sel
);
GlobalUnlock16
(
relay_code_sel
);
...
@@ -472,11 +472,11 @@ BOOL DOSMEM_Init(void)
...
@@ -472,11 +472,11 @@ BOOL DOSMEM_Init(void)
vectored_handler
=
AddVectoredExceptionHandler
(
FALSE
,
dosmem_handler
);
vectored_handler
=
AddVectoredExceptionHandler
(
FALSE
,
dosmem_handler
);
DOSMEM_0000H
=
GLOBAL_CreateBlock
(
GMEM_FIXED
,
DOSMEM_sysmem
,
DOSMEM_0000H
=
GLOBAL_CreateBlock
(
GMEM_FIXED
,
DOSMEM_sysmem
,
DOSMEM_64KB
,
0
,
WINE_
LDT_FLAGS_DATA
);
DOSMEM_64KB
,
0
,
LDT_FLAGS_DATA
);
DOSMEM_BiosDataSeg
=
GLOBAL_CreateBlock
(
GMEM_FIXED
,
DOSMEM_sysmem
+
0x400
,
DOSMEM_BiosDataSeg
=
GLOBAL_CreateBlock
(
GMEM_FIXED
,
DOSMEM_sysmem
+
0x400
,
0x100
,
0
,
WINE_
LDT_FLAGS_DATA
);
0x100
,
0
,
LDT_FLAGS_DATA
);
DOSMEM_BiosSysSeg
=
GLOBAL_CreateBlock
(
GMEM_FIXED
,
DOSMEM_dosmem
+
0xf0000
,
DOSMEM_BiosSysSeg
=
GLOBAL_CreateBlock
(
GMEM_FIXED
,
DOSMEM_dosmem
+
0xf0000
,
DOSMEM_64KB
,
0
,
WINE_
LDT_FLAGS_DATA
);
DOSMEM_64KB
,
0
,
LDT_FLAGS_DATA
);
return
TRUE
;
return
TRUE
;
}
}
...
...
dlls/krnl386.exe16/global.c
View file @
b5448369
...
@@ -144,7 +144,7 @@ HGLOBAL16 GLOBAL_CreateBlock( WORD flags, void *ptr, DWORD size,
...
@@ -144,7 +144,7 @@ HGLOBAL16 GLOBAL_CreateBlock( WORD flags, void *ptr, DWORD size,
pArena
->
flags
=
flags
&
GA_MOVEABLE
;
pArena
->
flags
=
flags
&
GA_MOVEABLE
;
if
(
flags
&
GMEM_DISCARDABLE
)
pArena
->
flags
|=
GA_DISCARDABLE
;
if
(
flags
&
GMEM_DISCARDABLE
)
pArena
->
flags
|=
GA_DISCARDABLE
;
if
(
flags
&
GMEM_DDESHARE
)
pArena
->
flags
|=
GA_IPCSHARE
;
if
(
flags
&
GMEM_DDESHARE
)
pArena
->
flags
|=
GA_IPCSHARE
;
if
(
!
(
selflags
&
(
WINE_LDT_FLAGS_CODE
^
WINE_
LDT_FLAGS_DATA
)))
pArena
->
flags
|=
GA_DGROUP
;
if
(
!
(
selflags
&
(
LDT_FLAGS_CODE
^
LDT_FLAGS_DATA
)))
pArena
->
flags
|=
GA_DGROUP
;
pArena
->
selCount
=
selcount
;
pArena
->
selCount
=
selcount
;
if
(
selcount
>
1
)
/* clear the next arena blocks */
if
(
selcount
>
1
)
/* clear the next arena blocks */
memset
(
pArena
+
1
,
0
,
(
selcount
-
1
)
*
sizeof
(
GLOBALARENA
)
);
memset
(
pArena
+
1
,
0
,
(
selcount
-
1
)
*
sizeof
(
GLOBALARENA
)
);
...
@@ -260,7 +260,7 @@ HGLOBAL16 WINAPI GlobalAlloc16(
...
@@ -260,7 +260,7 @@ HGLOBAL16 WINAPI GlobalAlloc16(
STACK16FRAME
*
frame
=
CURRENT_STACK16
;
STACK16FRAME
*
frame
=
CURRENT_STACK16
;
owner
=
GetExePtr
(
frame
->
cs
);
owner
=
GetExePtr
(
frame
->
cs
);
}
}
return
GLOBAL_Alloc
(
flags
,
size
,
owner
,
WINE_
LDT_FLAGS_DATA
);
return
GLOBAL_Alloc
(
flags
,
size
,
owner
,
LDT_FLAGS_DATA
);
}
}
...
@@ -785,7 +785,7 @@ DWORD WINAPI GlobalDOSAlloc16(
...
@@ -785,7 +785,7 @@ DWORD WINAPI GlobalDOSAlloc16(
WORD
wSelector
;
WORD
wSelector
;
GLOBALARENA
*
pArena
;
GLOBALARENA
*
pArena
;
wSelector
=
GLOBAL_CreateBlock
(
GMEM_FIXED
,
lpBlock
,
size
,
hModule
,
WINE_
LDT_FLAGS_DATA
);
wSelector
=
GLOBAL_CreateBlock
(
GMEM_FIXED
,
lpBlock
,
size
,
hModule
,
LDT_FLAGS_DATA
);
pArena
=
GET_ARENA_PTR
(
wSelector
);
pArena
=
GET_ARENA_PTR
(
wSelector
);
pArena
->
flags
|=
GA_DOSMEM
;
pArena
->
flags
|=
GA_DOSMEM
;
return
MAKELONG
(
wSelector
,
uParagraph
);
return
MAKELONG
(
wSelector
,
uParagraph
);
...
...
dlls/krnl386.exe16/instr.c
View file @
b5448369
...
@@ -174,7 +174,6 @@ static BYTE *INSTR_GetOperandAddr( CONTEXT *context, BYTE *instr,
...
@@ -174,7 +174,6 @@ static BYTE *INSTR_GetOperandAddr( CONTEXT *context, BYTE *instr,
int
long_addr
,
int
segprefix
,
int
*
len
)
int
long_addr
,
int
segprefix
,
int
*
len
)
{
{
int
mod
,
rm
,
base
=
0
,
index
=
0
,
ss
=
0
,
seg
=
0
,
off
;
int
mod
,
rm
,
base
=
0
,
index
=
0
,
ss
=
0
,
seg
=
0
,
off
;
LDT_ENTRY
entry
;
#define GET_VAL(val,type) \
#define GET_VAL(val,type) \
{ *val = *(type *)instr; instr += sizeof(type); *len += sizeof(type); }
{ *val = *(type *)instr; instr += sizeof(type); *len += sizeof(type); }
...
@@ -317,10 +316,9 @@ static BYTE *INSTR_GetOperandAddr( CONTEXT *context, BYTE *instr,
...
@@ -317,10 +316,9 @@ static BYTE *INSTR_GetOperandAddr( CONTEXT *context, BYTE *instr,
/* Make sure the segment and offset are valid */
/* Make sure the segment and offset are valid */
if
(
ldt_is_system
(
seg
))
return
(
BYTE
*
)(
base
+
(
index
<<
ss
));
if
(
ldt_is_system
(
seg
))
return
(
BYTE
*
)(
base
+
(
index
<<
ss
));
if
((
seg
&
7
)
!=
7
)
return
NULL
;
if
((
seg
&
7
)
!=
7
)
return
NULL
;
if
(
!
ldt_get_entry
(
seg
,
&
entry
))
return
NULL
;
if
(
!
ldt_is_valid
(
seg
))
return
NULL
;
if
(
wine_ldt_is_empty
(
&
entry
))
return
NULL
;
if
(
ldt_get_limit
(
seg
)
<
(
base
+
(
index
<<
ss
)))
return
NULL
;
if
(
wine_ldt_get_limit
(
&
entry
)
<
(
base
+
(
index
<<
ss
)))
return
NULL
;
return
(
BYTE
*
)
ldt_get_base
(
seg
)
+
base
+
(
index
<<
ss
);
return
(
BYTE
*
)
wine_ldt_get_base
(
&
entry
)
+
base
+
(
index
<<
ss
);
#undef GET_VAL
#undef GET_VAL
}
}
...
...
dlls/krnl386.exe16/int31.c
View file @
b5448369
...
@@ -240,21 +240,17 @@ void WINAPI DOSVM_Int31Handler( CONTEXT *context )
...
@@ -240,21 +240,17 @@ void WINAPI DOSVM_Int31Handler( CONTEXT *context )
case
0x0006
:
/* Get selector base address */
case
0x0006
:
/* Get selector base address */
TRACE
(
"get selector base address (0x%04x)
\n
"
,
BX_reg
(
context
)
);
TRACE
(
"get selector base address (0x%04x)
\n
"
,
BX_reg
(
context
)
);
{
if
(
!
ldt_is_valid
(
BX_reg
(
context
)
))
LDT_ENTRY
entry
;
if
(
!
ldt_get_entry
(
BX_reg
(
context
),
&
entry
)
||
wine_ldt_is_empty
(
&
entry
))
{
{
context
->
Eax
=
0x8022
;
/* invalid selector */
context
->
Eax
=
0x8022
;
/* invalid selector */
SET_CFLAG
(
context
);
SET_CFLAG
(
context
);
}
}
else
else
{
{
void
*
base
=
wine_ldt_get_base
(
&
entry
);
void
*
base
=
ldt_get_base
(
BX_reg
(
context
)
);
SET_CX
(
context
,
HIWORD
(
base
)
);
SET_CX
(
context
,
HIWORD
(
base
)
);
SET_DX
(
context
,
LOWORD
(
base
)
);
SET_DX
(
context
,
LOWORD
(
base
)
);
}
}
}
break
;
break
;
case
0x0007
:
/* Set selector base address */
case
0x0007
:
/* Set selector base address */
...
...
dlls/krnl386.exe16/kernel.c
View file @
b5448369
...
@@ -129,7 +129,7 @@ BOOL WINAPI KERNEL_DllEntryPoint( DWORD reasion, HINSTANCE16 inst, WORD ds,
...
@@ -129,7 +129,7 @@ BOOL WINAPI KERNEL_DllEntryPoint( DWORD reasion, HINSTANCE16 inst, WORD ds,
#define SET_ENTRY_POINT( num, addr ) \
#define SET_ENTRY_POINT( num, addr ) \
NE_SetEntryPoint( inst, (num), GLOBAL_CreateBlock( GMEM_FIXED, \
NE_SetEntryPoint( inst, (num), GLOBAL_CreateBlock( GMEM_FIXED, \
DOSMEM_MapDosToLinear(addr), 0x10000, inst, \
DOSMEM_MapDosToLinear(addr), 0x10000, inst, \
WINE_
LDT_FLAGS_DATA ))
LDT_FLAGS_DATA ))
SET_ENTRY_POINT
(
174
,
0xa0000
);
/* KERNEL.174: __A000H */
SET_ENTRY_POINT
(
174
,
0xa0000
);
/* KERNEL.174: __A000H */
SET_ENTRY_POINT
(
181
,
0xb0000
);
/* KERNEL.181: __B000H */
SET_ENTRY_POINT
(
181
,
0xb0000
);
/* KERNEL.181: __B000H */
...
...
dlls/krnl386.exe16/kernel16_private.h
View file @
b5448369
...
@@ -232,8 +232,26 @@ extern void NE_DllProcessAttach( HMODULE16 hModule ) DECLSPEC_HIDDEN;
...
@@ -232,8 +232,26 @@ extern void NE_DllProcessAttach( HMODULE16 hModule ) DECLSPEC_HIDDEN;
extern
void
NE_CallUserSignalProc
(
HMODULE16
hModule
,
UINT16
code
)
DECLSPEC_HIDDEN
;
extern
void
NE_CallUserSignalProc
(
HMODULE16
hModule
,
UINT16
code
)
DECLSPEC_HIDDEN
;
/* selector.c */
/* selector.c */
#define LDT_SIZE 8192
struct
ldt_copy
{
void
*
base
[
LDT_SIZE
];
unsigned
int
limit
[
LDT_SIZE
];
unsigned
char
flags
[
LDT_SIZE
];
};
extern
const
struct
ldt_copy
*
ldt_copy
DECLSPEC_HIDDEN
;
#define LDT_FLAGS_DATA 0x13
/* Data segment */
#define LDT_FLAGS_CODE 0x1b
/* Code segment */
#define LDT_FLAGS_32BIT 0x40
/* Segment is 32-bit (code or stack) */
static
inline
void
*
ldt_get_base
(
WORD
sel
)
{
return
ldt_copy
->
base
[
sel
>>
3
];
}
static
inline
unsigned
int
ldt_get_limit
(
WORD
sel
)
{
return
ldt_copy
->
limit
[
sel
>>
3
];
}
static
inline
unsigned
char
ldt_get_flags
(
WORD
sel
)
{
return
ldt_copy
->
flags
[
sel
>>
3
];
}
extern
void
init_selectors
(
void
)
DECLSPEC_HIDDEN
;
extern
void
init_selectors
(
void
)
DECLSPEC_HIDDEN
;
extern
BOOL
ldt_is_system
(
WORD
sel
)
DECLSPEC_HIDDEN
;
extern
BOOL
ldt_is_system
(
WORD
sel
)
DECLSPEC_HIDDEN
;
extern
BOOL
ldt_is_valid
(
WORD
sel
)
DECLSPEC_HIDDEN
;
extern
void
*
ldt_get_ptr
(
WORD
sel
,
DWORD
offset
)
DECLSPEC_HIDDEN
;
extern
void
*
ldt_get_ptr
(
WORD
sel
,
DWORD
offset
)
DECLSPEC_HIDDEN
;
extern
BOOL
ldt_get_entry
(
WORD
sel
,
LDT_ENTRY
*
entry
)
DECLSPEC_HIDDEN
;
extern
BOOL
ldt_get_entry
(
WORD
sel
,
LDT_ENTRY
*
entry
)
DECLSPEC_HIDDEN
;
extern
void
ldt_set_entry
(
WORD
sel
,
LDT_ENTRY
entry
)
DECLSPEC_HIDDEN
;
extern
void
ldt_set_entry
(
WORD
sel
,
LDT_ENTRY
entry
)
DECLSPEC_HIDDEN
;
...
@@ -241,7 +259,7 @@ extern WORD SELECTOR_AllocBlock( const void *base, DWORD size, unsigned char fla
...
@@ -241,7 +259,7 @@ extern WORD SELECTOR_AllocBlock( const void *base, DWORD size, unsigned char fla
extern
WORD
SELECTOR_ReallocBlock
(
WORD
sel
,
const
void
*
base
,
DWORD
size
)
DECLSPEC_HIDDEN
;
extern
WORD
SELECTOR_ReallocBlock
(
WORD
sel
,
const
void
*
base
,
DWORD
size
)
DECLSPEC_HIDDEN
;
extern
void
SELECTOR_FreeBlock
(
WORD
sel
)
DECLSPEC_HIDDEN
;
extern
void
SELECTOR_FreeBlock
(
WORD
sel
)
DECLSPEC_HIDDEN
;
#define IS_SELECTOR_32BIT(sel) \
#define IS_SELECTOR_32BIT(sel) \
(ldt_is_system(sel) || (
wine_ldt_copy.flags[LOWORD(sel) >> 3] & WINE_
LDT_FLAGS_32BIT))
(ldt_is_system(sel) || (
ldt_copy->flags[LOWORD(sel) >> 3] &
LDT_FLAGS_32BIT))
/* relay16.c */
/* relay16.c */
extern
int
relay_call_from_16
(
void
*
entry_point
,
unsigned
char
*
args16
,
CONTEXT
*
context
)
DECLSPEC_HIDDEN
;
extern
int
relay_call_from_16
(
void
*
entry_point
,
unsigned
char
*
args16
,
CONTEXT
*
context
)
DECLSPEC_HIDDEN
;
...
...
dlls/krnl386.exe16/local.c
View file @
b5448369
...
@@ -1785,8 +1785,8 @@ HANDLE WINAPI Local32Init16( WORD segment, DWORD tableSize,
...
@@ -1785,8 +1785,8 @@ HANDLE WINAPI Local32Init16( WORD segment, DWORD tableSize,
nrBlocks
=
(
totSize
+
0x7fff
)
>>
15
;
nrBlocks
=
(
totSize
+
0x7fff
)
>>
15
;
selectorTable
=
HeapAlloc
(
header
->
heap
,
0
,
nrBlocks
*
2
);
selectorTable
=
HeapAlloc
(
header
->
heap
,
0
,
nrBlocks
*
2
);
selectorEven
=
SELECTOR_AllocBlock
(
base
,
totSize
,
WINE_
LDT_FLAGS_DATA
);
selectorEven
=
SELECTOR_AllocBlock
(
base
,
totSize
,
LDT_FLAGS_DATA
);
selectorOdd
=
SELECTOR_AllocBlock
(
base
+
0x8000
,
totSize
-
0x8000
,
WINE_
LDT_FLAGS_DATA
);
selectorOdd
=
SELECTOR_AllocBlock
(
base
+
0x8000
,
totSize
-
0x8000
,
LDT_FLAGS_DATA
);
if
(
!
selectorTable
||
!
selectorEven
||
!
selectorOdd
)
if
(
!
selectorTable
||
!
selectorEven
||
!
selectorOdd
)
{
{
HeapFree
(
header
->
heap
,
0
,
selectorTable
);
HeapFree
(
header
->
heap
,
0
,
selectorTable
);
...
...
dlls/krnl386.exe16/ne_module.c
View file @
b5448369
...
@@ -921,7 +921,7 @@ static HMODULE16 NE_DoLoadBuiltinModule( const IMAGE_DOS_HEADER *mz_header, cons
...
@@ -921,7 +921,7 @@ static HMODULE16 NE_DoLoadBuiltinModule( const IMAGE_DOS_HEADER *mz_header, cons
}
}
patch_code_segment
(
pModule
);
patch_code_segment
(
pModule
);
*
(
void
**
)
mz_header
->
e_res2
=
&
wine_ldt_copy
;
*
(
const
void
**
)
mz_header
->
e_res2
=
ldt_copy
->
base
;
return
hInstance
;
return
hInstance
;
}
}
...
...
dlls/krnl386.exe16/ne_segment.c
View file @
b5448369
...
@@ -1018,8 +1018,8 @@ BOOL NE_CreateSegment( NE_MODULE *pModule, int segnum )
...
@@ -1018,8 +1018,8 @@ BOOL NE_CreateSegment( NE_MODULE *pModule, int segnum )
if
(
segnum
==
SELECTOROF
(
pModule
->
ne_sssp
)
)
minsize
+=
pModule
->
ne_stack
;
if
(
segnum
==
SELECTOROF
(
pModule
->
ne_sssp
)
)
minsize
+=
pModule
->
ne_stack
;
if
(
segnum
==
pModule
->
ne_autodata
)
minsize
+=
pModule
->
ne_heap
;
if
(
segnum
==
pModule
->
ne_autodata
)
minsize
+=
pModule
->
ne_heap
;
selflags
=
(
pSeg
->
flags
&
NE_SEGFLAGS_DATA
)
?
WINE_LDT_FLAGS_DATA
:
WINE_
LDT_FLAGS_CODE
;
selflags
=
(
pSeg
->
flags
&
NE_SEGFLAGS_DATA
)
?
LDT_FLAGS_DATA
:
LDT_FLAGS_CODE
;
if
(
pSeg
->
flags
&
NE_SEGFLAGS_32BIT
)
selflags
|=
WINE_
LDT_FLAGS_32BIT
;
if
(
pSeg
->
flags
&
NE_SEGFLAGS_32BIT
)
selflags
|=
LDT_FLAGS_32BIT
;
pSeg
->
hSeg
=
GLOBAL_Alloc
(
NE_Ne2MemFlags
(
pSeg
->
flags
),
minsize
,
pModule
->
self
,
selflags
);
pSeg
->
hSeg
=
GLOBAL_Alloc
(
NE_Ne2MemFlags
(
pSeg
->
flags
),
minsize
,
pModule
->
self
,
selflags
);
if
(
!
pSeg
->
hSeg
)
return
FALSE
;
if
(
!
pSeg
->
hSeg
)
return
FALSE
;
...
...
dlls/krnl386.exe16/selector.c
View file @
b5448369
This diff is collapsed.
Click to expand it.
dlls/krnl386.exe16/snoop.c
View file @
b5448369
...
@@ -107,7 +107,7 @@ SNOOP16_RegisterDLL(HMODULE16 hModule,LPCSTR name) {
...
@@ -107,7 +107,7 @@ SNOOP16_RegisterDLL(HMODULE16 hModule,LPCSTR name) {
TRACE
(
"hmod=%x, name=%s
\n
"
,
hModule
,
name
);
TRACE
(
"hmod=%x, name=%s
\n
"
,
hModule
,
name
);
if
(
!
snr
)
{
if
(
!
snr
)
{
xsnr
=
GLOBAL_Alloc
(
GMEM_ZEROINIT
,
2
*
sizeof
(
*
snr
),
0
,
WINE_LDT_FLAGS_CODE
|
WINE_
LDT_FLAGS_32BIT
);
xsnr
=
GLOBAL_Alloc
(
GMEM_ZEROINIT
,
2
*
sizeof
(
*
snr
),
0
,
LDT_FLAGS_CODE
|
LDT_FLAGS_32BIT
);
snr
=
GlobalLock16
(
xsnr
);
snr
=
GlobalLock16
(
xsnr
);
snr
[
0
].
pushbp
=
0x5566
;
snr
[
0
].
pushbp
=
0x5566
;
snr
[
0
].
pusheax
=
0x50
;
snr
[
0
].
pusheax
=
0x50
;
...
@@ -152,7 +152,7 @@ SNOOP16_RegisterDLL(HMODULE16 hModule,LPCSTR name) {
...
@@ -152,7 +152,7 @@ SNOOP16_RegisterDLL(HMODULE16 hModule,LPCSTR name) {
strcpy
(
(
*
dll
)
->
name
,
name
);
strcpy
(
(
*
dll
)
->
name
,
name
);
if
((
q
=
strrchr
((
*
dll
)
->
name
,
'.'
)))
if
((
q
=
strrchr
((
*
dll
)
->
name
,
'.'
)))
*
q
=
'\0'
;
*
q
=
'\0'
;
(
*
dll
)
->
funhandle
=
GlobalHandleToSel16
(
GLOBAL_Alloc
(
GMEM_ZEROINIT
,
65535
,
0
,
WINE_
LDT_FLAGS_CODE
));
(
*
dll
)
->
funhandle
=
GlobalHandleToSel16
(
GLOBAL_Alloc
(
GMEM_ZEROINIT
,
65535
,
0
,
LDT_FLAGS_CODE
));
(
*
dll
)
->
funs
=
GlobalLock16
((
*
dll
)
->
funhandle
);
(
*
dll
)
->
funs
=
GlobalLock16
((
*
dll
)
->
funhandle
);
if
(
!
(
*
dll
)
->
funs
)
{
if
(
!
(
*
dll
)
->
funs
)
{
HeapFree
(
GetProcessHeap
(),
0
,
*
dll
);
HeapFree
(
GetProcessHeap
(),
0
,
*
dll
);
...
@@ -270,7 +270,7 @@ static void WINAPI SNOOP16_Entry(FARPROC proc, LPBYTE args, CONTEXT *context) {
...
@@ -270,7 +270,7 @@ static void WINAPI SNOOP16_Entry(FARPROC proc, LPBYTE args, CONTEXT *context) {
rets
=
&
((
*
rets
)
->
next
);
rets
=
&
((
*
rets
)
->
next
);
}
}
if
(
!*
rets
)
{
if
(
!*
rets
)
{
HANDLE16
hand
=
GlobalHandleToSel16
(
GLOBAL_Alloc
(
GMEM_ZEROINIT
,
65535
,
0
,
WINE_
LDT_FLAGS_CODE
));
HANDLE16
hand
=
GlobalHandleToSel16
(
GLOBAL_Alloc
(
GMEM_ZEROINIT
,
65535
,
0
,
LDT_FLAGS_CODE
));
*
rets
=
GlobalLock16
(
hand
);
*
rets
=
GlobalLock16
(
hand
);
(
*
rets
)
->
rethandle
=
hand
;
(
*
rets
)
->
rethandle
=
hand
;
i
=
0
;
/* entry 0 is free */
i
=
0
;
/* entry 0 is free */
...
...
dlls/krnl386.exe16/task.c
View file @
b5448369
...
@@ -201,7 +201,7 @@ static SEGPTR TASK_AllocThunk(void)
...
@@ -201,7 +201,7 @@ static SEGPTR TASK_AllocThunk(void)
if
(
!
sel
)
/* Allocate a new segment */
if
(
!
sel
)
/* Allocate a new segment */
{
{
sel
=
GLOBAL_Alloc
(
GMEM_FIXED
,
FIELD_OFFSET
(
THUNKS
,
thunks
[
MIN_THUNKS
]
),
sel
=
GLOBAL_Alloc
(
GMEM_FIXED
,
FIELD_OFFSET
(
THUNKS
,
thunks
[
MIN_THUNKS
]
),
pTask
->
hPDB
,
WINE_
LDT_FLAGS_CODE
);
pTask
->
hPDB
,
LDT_FLAGS_CODE
);
if
(
!
sel
)
return
0
;
if
(
!
sel
)
return
0
;
TASK_CreateThunks
(
sel
,
0
,
MIN_THUNKS
);
TASK_CreateThunks
(
sel
,
0
,
MIN_THUNKS
);
pThunk
->
next
=
sel
;
pThunk
->
next
=
sel
;
...
@@ -300,7 +300,7 @@ static TDB *TASK_Create( NE_MODULE *pModule, UINT16 cmdShow, LPCSTR cmdline, BYT
...
@@ -300,7 +300,7 @@ static TDB *TASK_Create( NE_MODULE *pModule, UINT16 cmdShow, LPCSTR cmdline, BYT
/* Allocate a selector for the PDB */
/* Allocate a selector for the PDB */
pTask
->
hPDB
=
GLOBAL_CreateBlock
(
GMEM_FIXED
,
&
pTask
->
pdb
,
sizeof
(
PDB16
),
pTask
->
hPDB
=
GLOBAL_CreateBlock
(
GMEM_FIXED
,
&
pTask
->
pdb
,
sizeof
(
PDB16
),
hModule
,
WINE_
LDT_FLAGS_DATA
);
hModule
,
LDT_FLAGS_DATA
);
/* Fill the PDB */
/* Fill the PDB */
...
@@ -341,7 +341,7 @@ static TDB *TASK_Create( NE_MODULE *pModule, UINT16 cmdShow, LPCSTR cmdline, BYT
...
@@ -341,7 +341,7 @@ static TDB *TASK_Create( NE_MODULE *pModule, UINT16 cmdShow, LPCSTR cmdline, BYT
/* Allocate a code segment alias for the TDB */
/* Allocate a code segment alias for the TDB */
pTask
->
hCSAlias
=
GLOBAL_CreateBlock
(
GMEM_FIXED
,
pTask
,
sizeof
(
TDB
),
pTask
->
hCSAlias
=
GLOBAL_CreateBlock
(
GMEM_FIXED
,
pTask
,
sizeof
(
TDB
),
pTask
->
hPDB
,
WINE_
LDT_FLAGS_CODE
);
pTask
->
hPDB
,
LDT_FLAGS_CODE
);
/* Default DTA overwrites command line */
/* Default DTA overwrites command line */
...
...
dlls/krnl386.exe16/thunk.c
View file @
b5448369
...
@@ -1075,7 +1075,7 @@ AllocSLCallback(
...
@@ -1075,7 +1075,7 @@ AllocSLCallback(
*
(
DWORD
*
)(
thunk
+
18
)
=
GetCurrentProcessId
();
*
(
DWORD
*
)(
thunk
+
18
)
=
GetCurrentProcessId
();
sel
=
SELECTOR_AllocBlock
(
thunk
,
32
,
WINE_
LDT_FLAGS_CODE
);
sel
=
SELECTOR_AllocBlock
(
thunk
,
32
,
LDT_FLAGS_CODE
);
return
(
sel
<<
16
)
|
0
;
return
(
sel
<<
16
)
|
0
;
}
}
...
@@ -1617,7 +1617,7 @@ static BOOL THUNK_Init(void)
...
@@ -1617,7 +1617,7 @@ static BOOL THUNK_Init(void)
ThunkletHeap
=
HeapCreate
(
HEAP_CREATE_ENABLE_EXECUTE
,
0x10000
,
0x10000
);
ThunkletHeap
=
HeapCreate
(
HEAP_CREATE_ENABLE_EXECUTE
,
0x10000
,
0x10000
);
if
(
!
ThunkletHeap
)
return
FALSE
;
if
(
!
ThunkletHeap
)
return
FALSE
;
ThunkletCodeSel
=
SELECTOR_AllocBlock
(
ThunkletHeap
,
0x10000
,
WINE_
LDT_FLAGS_CODE
);
ThunkletCodeSel
=
SELECTOR_AllocBlock
(
ThunkletHeap
,
0x10000
,
LDT_FLAGS_CODE
);
thunk
=
HeapAlloc
(
ThunkletHeap
,
0
,
5
);
thunk
=
HeapAlloc
(
ThunkletHeap
,
0
,
5
);
if
(
!
thunk
)
return
FALSE
;
if
(
!
thunk
)
return
FALSE
;
...
@@ -2048,8 +2048,7 @@ SEGPTR WINAPI Get16DLLAddress(HMODULE16 handle, LPSTR func_name)
...
@@ -2048,8 +2048,7 @@ SEGPTR WINAPI Get16DLLAddress(HMODULE16 handle, LPSTR func_name)
if
(
!
code_sel32
)
if
(
!
code_sel32
)
{
{
if
(
!
ThunkletHeap
)
THUNK_Init
();
if
(
!
ThunkletHeap
)
THUNK_Init
();
code_sel32
=
SELECTOR_AllocBlock
(
ThunkletHeap
,
0x10000
,
code_sel32
=
SELECTOR_AllocBlock
(
ThunkletHeap
,
0x10000
,
LDT_FLAGS_CODE
|
LDT_FLAGS_32BIT
);
WINE_LDT_FLAGS_CODE
|
WINE_LDT_FLAGS_32BIT
);
if
(
!
code_sel32
)
return
0
;
if
(
!
code_sel32
)
return
0
;
}
}
if
(
!
(
thunk
=
HeapAlloc
(
ThunkletHeap
,
0
,
32
)))
return
0
;
if
(
!
(
thunk
=
HeapAlloc
(
ThunkletHeap
,
0
,
32
)))
return
0
;
...
...
dlls/krnl386.exe16/wowthunk.c
View file @
b5448369
...
@@ -59,7 +59,7 @@ BOOL WOWTHUNK_Init(void)
...
@@ -59,7 +59,7 @@ BOOL WOWTHUNK_Init(void)
/* allocate the code selector for CallTo16 routines */
/* allocate the code selector for CallTo16 routines */
WORD
codesel
=
SELECTOR_AllocBlock
(
__wine_call16_start
,
WORD
codesel
=
SELECTOR_AllocBlock
(
__wine_call16_start
,
(
BYTE
*
)(
&
CallTo16_TebSelector
+
1
)
-
__wine_call16_start
,
(
BYTE
*
)(
&
CallTo16_TebSelector
+
1
)
-
__wine_call16_start
,
WINE_LDT_FLAGS_CODE
|
WINE_
LDT_FLAGS_32BIT
);
LDT_FLAGS_CODE
|
LDT_FLAGS_32BIT
);
if
(
!
codesel
)
return
FALSE
;
if
(
!
codesel
)
return
FALSE
;
/* Patch the return addresses for CallTo16 routines */
/* Patch the return addresses for CallTo16 routines */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment