Moved LDT handling to libwine.so. Changed the interface to use the
exported LDT_ENTRY structure.
diff --git a/loader/ne/segment.c b/loader/ne/segment.c
index 9459ef5a8..c2b0201 100644
--- a/loader/ne/segment.c
+++ b/loader/ne/segment.c
@@ -410,7 +410,7 @@
selfloadheader->EntryAddrProc = NE_GetEntryPoint(hselfload,27);
selfloadheader->MyAlloc = NE_GetEntryPoint(hselfload,28);
selfloadheader->SetOwner = NE_GetEntryPoint(GetModuleHandle16("KERNEL"),403);
- pModule->self_loading_sel = SEL(GLOBAL_Alloc(GMEM_ZEROINIT, 0xFF00, pModule->self, FALSE, FALSE, FALSE));
+ pModule->self_loading_sel = SEL(GLOBAL_Alloc(GMEM_ZEROINIT, 0xFF00, pModule->self, WINE_LDT_FLAGS_DATA));
oldstack = NtCurrentTeb()->cur_stack;
NtCurrentTeb()->cur_stack = PTR_SEG_OFF_TO_SEGPTR(pModule->self_loading_sel,
0xff00 - sizeof(STACK16FRAME) );
@@ -845,6 +845,7 @@
{
SEGTABLEENTRY *pSeg = NE_SEG_TABLE( pModule ) + segnum - 1;
int minsize;
+ unsigned char selflags;
assert( !(pModule->flags & NE_FFLAGS_WIN32) );
@@ -861,11 +862,9 @@
if ( segnum == pModule->ss ) minsize += pModule->stack_size;
if ( segnum == pModule->dgroup ) minsize += pModule->heap_size;
- pSeg->hSeg = GLOBAL_Alloc( NE_Ne2MemFlags(pSeg->flags),
- minsize, pModule->self,
- !(pSeg->flags & NE_SEGFLAGS_DATA),
- (pSeg->flags & NE_SEGFLAGS_32BIT) != 0,
- FALSE /*pSeg->flags & NE_SEGFLAGS_READONLY*/ );
+ selflags = (pSeg->flags & NE_SEGFLAGS_DATA) ? WINE_LDT_FLAGS_DATA : WINE_LDT_FLAGS_CODE;
+ if (pSeg->flags & NE_SEGFLAGS_32BIT) selflags |= WINE_LDT_FLAGS_32BIT;
+ pSeg->hSeg = GLOBAL_Alloc( NE_Ne2MemFlags(pSeg->flags), minsize, pModule->self, selflags );
if (!pSeg->hSeg) return FALSE;
pSeg->flags |= NE_SEGFLAGS_ALLOCATED;