mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 03:55:41 +00:00
Don't map NOLOAD sections
svn path=/trunk/; revision=1748
This commit is contained in:
parent
74412de062
commit
381057612c
6 changed files with 54 additions and 31 deletions
|
@ -1,2 +1,2 @@
|
||||||
ne2000.coff
|
ne2000.coff
|
||||||
objects
|
objects
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#define IMAGE_SECTION_CHAR_EXECUTABLE 0x20000000
|
#define IMAGE_SECTION_CHAR_EXECUTABLE 0x20000000
|
||||||
#define IMAGE_SECTION_CHAR_READABLE 0x40000000
|
#define IMAGE_SECTION_CHAR_READABLE 0x40000000
|
||||||
#define IMAGE_SECTION_CHAR_WRITABLE 0x80000000
|
#define IMAGE_SECTION_CHAR_WRITABLE 0x80000000
|
||||||
|
#define IMAGE_SECTION_NOLOAD 0x00000002
|
||||||
|
|
||||||
#define IMAGE_DOS_MAGIC 0x5a4d
|
#define IMAGE_DOS_MAGIC 0x5a4d
|
||||||
#define IMAGE_PE_MAGIC 0x00004550
|
#define IMAGE_PE_MAGIC 0x00004550
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $Id: makefile,v 1.44 2001/02/17 17:41:17 ekohl Exp $
|
# $Id: makefile,v 1.45 2001/03/30 15:14:52 dwelch Exp $
|
||||||
#
|
#
|
||||||
# ReactOS Operating System
|
# ReactOS Operating System
|
||||||
#
|
#
|
||||||
|
@ -8,7 +8,7 @@ TARGET = kernel32
|
||||||
|
|
||||||
KERNEL32_BASE = 0x77f00000
|
KERNEL32_BASE = 0x77f00000
|
||||||
|
|
||||||
CFLAGS = -DKERNEL32_BASE=$(KERNEL32_BASE)
|
CFLAGS := -DKERNEL32_BASE=$(KERNEL32_BASE) -g
|
||||||
|
|
||||||
DLLTARGET=$(TARGET).dll
|
DLLTARGET=$(TARGET).dll
|
||||||
|
|
||||||
|
|
|
@ -313,6 +313,7 @@ KiTrapHandler(PKTRAP_FRAME Tf, ULONG ExceptionNr)
|
||||||
PULONG stack;
|
PULONG stack;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
ULONG Esp0;
|
ULONG Esp0;
|
||||||
|
ULONG StackLimit;
|
||||||
static char *TypeStrings[] =
|
static char *TypeStrings[] =
|
||||||
{
|
{
|
||||||
"Divide Error",
|
"Divide Error",
|
||||||
|
@ -437,6 +438,15 @@ KiTrapHandler(PKTRAP_FRAME Tf, ULONG ExceptionNr)
|
||||||
stack = (PULONG)(((ULONG)stack) & (~0x3));
|
stack = (PULONG)(((ULONG)stack) & (~0x3));
|
||||||
|
|
||||||
DbgPrint("stack<%p>: ", stack);
|
DbgPrint("stack<%p>: ", stack);
|
||||||
|
|
||||||
|
if (PsGetCurrentThread() != NULL)
|
||||||
|
{
|
||||||
|
StackLimit = (ULONG)PsGetCurrentThread()->Tcb.StackBase;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StackLimit = (ULONG)&init_stack_top;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < 18; i = i + 6)
|
for (i = 0; i < 18; i = i + 6)
|
||||||
{
|
{
|
||||||
|
@ -446,7 +456,7 @@ KiTrapHandler(PKTRAP_FRAME Tf, ULONG ExceptionNr)
|
||||||
stack[i+4], stack[i+5]);
|
stack[i+4], stack[i+5]);
|
||||||
}
|
}
|
||||||
DbgPrint("Frames:\n");
|
DbgPrint("Frames:\n");
|
||||||
for (i = 0; i < 32; i++)
|
for (i = 0; i < 32 && ((ULONG)&stack[i] < StackLimit); i++)
|
||||||
{
|
{
|
||||||
if (stack[i] > ((unsigned int) &_text_start__) &&
|
if (stack[i] > ((unsigned int) &_text_start__) &&
|
||||||
!(stack[i] >= ((ULONG)&init_stack) &&
|
!(stack[i] >= ((ULONG)&init_stack) &&
|
||||||
|
@ -508,10 +518,12 @@ KiTrapHandler(PKTRAP_FRAME Tf, ULONG ExceptionNr)
|
||||||
for(;;);
|
for(;;);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID KeDumpStackFrames(PVOID _Stack, ULONG NrFrames)
|
VOID
|
||||||
|
KeDumpStackFrames(PVOID _Stack, ULONG NrFrames)
|
||||||
{
|
{
|
||||||
PULONG Stack = (PULONG)_Stack;
|
PULONG Stack = (PULONG)_Stack;
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
ULONG StackLimit;
|
||||||
|
|
||||||
Stack = (PVOID)(((ULONG)Stack) & (~0x3));
|
Stack = (PVOID)(((ULONG)Stack) & (~0x3));
|
||||||
DbgPrint("Stack: %x\n", Stack);
|
DbgPrint("Stack: %x\n", Stack);
|
||||||
|
@ -520,14 +532,21 @@ VOID KeDumpStackFrames(PVOID _Stack, ULONG NrFrames)
|
||||||
DbgPrint("kernel stack base %x\n",
|
DbgPrint("kernel stack base %x\n",
|
||||||
PsGetCurrentThread()->Tcb.StackLimit);
|
PsGetCurrentThread()->Tcb.StackLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (PsGetCurrentThread() != NULL)
|
||||||
|
{
|
||||||
|
StackLimit = (ULONG)PsGetCurrentThread()->Tcb.StackBase;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StackLimit = (ULONG)&init_stack_top;
|
||||||
|
}
|
||||||
|
|
||||||
DbgPrint("Frames:\n");
|
DbgPrint("Frames:\n");
|
||||||
for (i=0; i<NrFrames; i++)
|
for (i=0; i<NrFrames && ((ULONG)&Stack[i] < StackLimit); i++)
|
||||||
{
|
{
|
||||||
// if (Stack[i] > KERNEL_BASE && Stack[i] < ((ULONG)&etext))
|
|
||||||
if (Stack[i] > KERNEL_BASE)
|
if (Stack[i] > KERNEL_BASE)
|
||||||
{
|
{
|
||||||
// DbgPrint("%.8x ",Stack[i]);
|
|
||||||
print_address((PVOID)Stack[i]);
|
print_address((PVOID)Stack[i]);
|
||||||
DbgPrint(" ");
|
DbgPrint(" ");
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: section.c,v 1.53 2001/03/29 17:24:43 dwelch Exp $
|
/* $Id: section.c,v 1.54 2001/03/30 15:14:53 dwelch Exp $
|
||||||
*
|
*
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* FILE: ntoskrnl/mm/section.c
|
* FILE: ntoskrnl/mm/section.c
|
||||||
|
@ -1557,7 +1557,6 @@ MmMapViewOfSegment(PEPROCESS Process,
|
||||||
FALSE);
|
FALSE);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
MmUnlockAddressSpace(AddressSpace);
|
|
||||||
return(Status);
|
return(Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1680,27 +1679,30 @@ NtMapViewOfSection(HANDLE SectionHandle,
|
||||||
{
|
{
|
||||||
PVOID SBaseAddress;
|
PVOID SBaseAddress;
|
||||||
|
|
||||||
SBaseAddress = (PVOID)
|
if (!(Section->Segments[i].Characteristics & IMAGE_SECTION_NOLOAD))
|
||||||
((ULONG)Section->ImageBase +
|
|
||||||
(ULONG)Section->Segments[i].VirtualAddress);
|
|
||||||
|
|
||||||
MmLockSectionSegment(&Section->Segments[i]);
|
|
||||||
Status = MmMapViewOfSegment(Process,
|
|
||||||
&Process->AddressSpace,
|
|
||||||
Section,
|
|
||||||
&Section->Segments[i],
|
|
||||||
&SBaseAddress,
|
|
||||||
Section->Segments[i].Length,
|
|
||||||
Section->Segments[i].Protection,
|
|
||||||
Section->Segments[i].FileOffset);
|
|
||||||
MmUnlockSectionSegment(&Section->Segments[i]);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
{
|
||||||
MmUnlockSection(Section);
|
SBaseAddress = (PVOID)
|
||||||
MmUnlockAddressSpace(AddressSpace);
|
((ULONG)Section->ImageBase +
|
||||||
ObDereferenceObject(Section);
|
(ULONG)Section->Segments[i].VirtualAddress);
|
||||||
ObDereferenceObject(Process);
|
|
||||||
return(Status);
|
MmLockSectionSegment(&Section->Segments[i]);
|
||||||
|
Status = MmMapViewOfSegment(Process,
|
||||||
|
&Process->AddressSpace,
|
||||||
|
Section,
|
||||||
|
&Section->Segments[i],
|
||||||
|
&SBaseAddress,
|
||||||
|
Section->Segments[i].Length,
|
||||||
|
Section->Segments[i].Protection,
|
||||||
|
Section->Segments[i].FileOffset);
|
||||||
|
MmUnlockSectionSegment(&Section->Segments[i]);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
MmUnlockSection(Section);
|
||||||
|
MmUnlockAddressSpace(AddressSpace);
|
||||||
|
ObDereferenceObject(Section);
|
||||||
|
ObDereferenceObject(Process);
|
||||||
|
return(Status);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*BaseAddress = Section->ImageBase;
|
*BaseAddress = Section->ImageBase;
|
||||||
|
|
|
@ -80,10 +80,12 @@ SECTIONS
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
__bss_end__ = . ;
|
__bss_end__ = . ;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
.reloc BLOCK(__section_alignment__) :
|
.reloc BLOCK(__section_alignment__) :
|
||||||
{
|
{
|
||||||
*(.reloc)
|
*(.reloc)
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
.stab BLOCK(__section_alignment__) (NOLOAD) :
|
.stab BLOCK(__section_alignment__) (NOLOAD) :
|
||||||
{
|
{
|
||||||
[ .stab ]
|
[ .stab ]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue