mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 01:24:38 +00:00
If symbols are available then pass them to the OS as multiboot modules
svn path=/trunk/; revision=3213
This commit is contained in:
parent
84b74a9cd9
commit
66b0087b28
5 changed files with 111 additions and 18 deletions
|
@ -1,5 +1,6 @@
|
||||||
Changes in v1.4 (6/27/2002)
|
Changes in v1.4 (6/27/2002)
|
||||||
|
|
||||||
|
- If symbols are available then pass them to the OS as multiboot modules
|
||||||
- Added separate configuration for a SETUPLDR version
|
- Added separate configuration for a SETUPLDR version
|
||||||
|
|
||||||
Changes in v1.3.1 (6/8/2002)
|
Changes in v1.3.1 (6/8/2002)
|
||||||
|
|
|
@ -112,7 +112,7 @@ else
|
||||||
#############################################
|
#############################################
|
||||||
# COMPILER COMMAND LINE OPTIONS
|
# COMPILER COMMAND LINE OPTIONS
|
||||||
#
|
#
|
||||||
COMPILER_OPTIONS = -Wall -nostdlib -nostdinc -fno-builtin -O1 -MD
|
COMPILER_OPTIONS = -Wall -nostdlib -fno-builtin -O1 -MD
|
||||||
|
|
||||||
#############################################
|
#############################################
|
||||||
# COMPILER DEFINES
|
# COMPILER DEFINES
|
||||||
|
|
|
@ -31,6 +31,7 @@ int strlen(char *str);
|
||||||
char * strcpy(char *dest, char *src);
|
char * strcpy(char *dest, char *src);
|
||||||
char * strncpy(char *dest, char *src, size_t count);
|
char * strncpy(char *dest, char *src, size_t count);
|
||||||
char * strcat(char *dest, char *src);
|
char * strcat(char *dest, char *src);
|
||||||
|
char * strncat(char *dst, const char *src, size_t n);
|
||||||
char * strchr(const char *s, int c);
|
char * strchr(const char *s, int c);
|
||||||
char * strrchr(const char *s, int c);
|
char * strrchr(const char *s, int c);
|
||||||
int strcmp(const char *string1, const char *string2);
|
int strcmp(const char *string1, const char *string2);
|
||||||
|
|
|
@ -75,6 +75,69 @@ LoadKernel(PCHAR szFileName, int nPos)
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BOOL
|
||||||
|
LoadSymbolFile(PCHAR szSystemRoot,
|
||||||
|
PCHAR ModuleName,
|
||||||
|
int nPos)
|
||||||
|
{
|
||||||
|
CHAR SymbolFileName[1024];
|
||||||
|
PFILE FilePointer;
|
||||||
|
DWORD Length;
|
||||||
|
PCHAR Start;
|
||||||
|
PCHAR Ext;
|
||||||
|
char value[256];
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
/* Get the path to the symbol store */
|
||||||
|
strcpy(SymbolFileName, szSystemRoot);
|
||||||
|
strcat(SymbolFileName, "symbols\\");
|
||||||
|
|
||||||
|
/* Get the symbol filename from the module name */
|
||||||
|
Start = strrchr(ModuleName, '\\');
|
||||||
|
if (Start == NULL)
|
||||||
|
Start = ModuleName;
|
||||||
|
else
|
||||||
|
Start++;
|
||||||
|
|
||||||
|
Ext = strrchr(ModuleName, '.');
|
||||||
|
if (Ext != NULL)
|
||||||
|
Length = Ext - Start;
|
||||||
|
else
|
||||||
|
Length = strlen(Start);
|
||||||
|
|
||||||
|
strncat(SymbolFileName, Start, Length);
|
||||||
|
strcat(SymbolFileName, ".sym");
|
||||||
|
|
||||||
|
FilePointer = OpenFile((PCHAR)&SymbolFileName[0]);
|
||||||
|
if (FilePointer == NULL)
|
||||||
|
{
|
||||||
|
DbgPrint((DPRINT_REACTOS, "Symbol file %s not loaded.\n", SymbolFileName));
|
||||||
|
/* This is not critical */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
DbgPrint((DPRINT_REACTOS, "Symbol file %s is loaded.\n", SymbolFileName));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update the status bar with the current file
|
||||||
|
*/
|
||||||
|
strcpy(value, "Reading ");
|
||||||
|
p = strrchr(SymbolFileName, '\\');
|
||||||
|
if (p == NULL)
|
||||||
|
strcat(value, SymbolFileName);
|
||||||
|
else
|
||||||
|
strcat(value, p + 1);
|
||||||
|
UiDrawStatusText(value);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Load the symbol file
|
||||||
|
*/
|
||||||
|
MultiBootLoadModule(FilePointer, SymbolFileName, NULL);
|
||||||
|
|
||||||
|
UiDrawProgressBarCenter(nPos, 100);
|
||||||
|
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
LoadDriver(PCHAR szFileName, int nPos)
|
LoadDriver(PCHAR szFileName, int nPos)
|
||||||
|
@ -256,6 +319,7 @@ LoadBootDrivers(PCHAR szSystemRoot, int nPos)
|
||||||
nPos += 5;
|
nPos += 5;
|
||||||
|
|
||||||
LoadDriver(ImagePath, nPos);
|
LoadDriver(ImagePath, nPos);
|
||||||
|
LoadSymbolFile(szSystemRoot, ImagePath, nPos);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -364,6 +428,8 @@ LoadAndBootReactOS(PUCHAR OperatingSystemName)
|
||||||
PFILE FilePointer;
|
PFILE FilePointer;
|
||||||
char name[1024];
|
char name[1024];
|
||||||
char value[1024];
|
char value[1024];
|
||||||
|
char szKernelName[1024];
|
||||||
|
char szHalName[1024];
|
||||||
char szFileName[1024];
|
char szFileName[1024];
|
||||||
char szBootPath[256];
|
char szBootPath[256];
|
||||||
// int i;
|
// int i;
|
||||||
|
@ -454,7 +520,7 @@ LoadAndBootReactOS(PUCHAR OperatingSystemName)
|
||||||
szBootPath[strlen(szBootPath)] != '\\')
|
szBootPath[strlen(szBootPath)] != '\\')
|
||||||
strcat(szBootPath, "\\");
|
strcat(szBootPath, "\\");
|
||||||
|
|
||||||
DebugPrint(DPRINT_REACTOS,"SystemRoot: '%s'", szBootPath);
|
DebugPrint(DPRINT_REACTOS,"SystemRoot: '%s'\n", szBootPath);
|
||||||
|
|
||||||
UiDrawBackdrop();
|
UiDrawBackdrop();
|
||||||
UiDrawStatusText("Loading...");
|
UiDrawStatusText("Loading...");
|
||||||
|
@ -480,24 +546,24 @@ LoadAndBootReactOS(PUCHAR OperatingSystemName)
|
||||||
*/
|
*/
|
||||||
if (value[0] == '\\')
|
if (value[0] == '\\')
|
||||||
{
|
{
|
||||||
strcpy(szFileName, value);
|
strcpy(szKernelName, value);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strcpy(szFileName, szBootPath);
|
strcpy(szKernelName, szBootPath);
|
||||||
strcat(szFileName, "SYSTEM32\\");
|
strcat(szKernelName, "SYSTEM32\\");
|
||||||
strcat(szFileName, value);
|
strcat(szKernelName, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strcpy(value, "NTOSKRNL.EXE");
|
strcpy(value, "NTOSKRNL.EXE");
|
||||||
strcpy(szFileName, szBootPath);
|
strcpy(szKernelName, szBootPath);
|
||||||
strcat(szFileName, "SYSTEM32\\");
|
strcat(szKernelName, "SYSTEM32\\");
|
||||||
strcat(szFileName, value);
|
strcat(szKernelName, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!LoadKernel(szFileName, 5))
|
if (!LoadKernel(szKernelName, 5))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -511,24 +577,24 @@ LoadAndBootReactOS(PUCHAR OperatingSystemName)
|
||||||
*/
|
*/
|
||||||
if (value[0] == '\\')
|
if (value[0] == '\\')
|
||||||
{
|
{
|
||||||
strcpy(szFileName, value);
|
strcpy(szHalName, value);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strcpy(szFileName, szBootPath);
|
strcpy(szHalName, szBootPath);
|
||||||
strcat(szFileName, "SYSTEM32\\");
|
strcat(szHalName, "SYSTEM32\\");
|
||||||
strcat(szFileName, value);
|
strcat(szHalName, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strcpy(value, "HAL.DLL");
|
strcpy(value, "HAL.DLL");
|
||||||
strcpy(szFileName, szBootPath);
|
strcpy(szHalName, szBootPath);
|
||||||
strcat(szFileName, "SYSTEM32\\");
|
strcat(szHalName, "SYSTEM32\\");
|
||||||
strcat(szFileName, value);
|
strcat(szHalName, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!LoadDriver(szFileName, 10))
|
if (!LoadDriver(szHalName, 10))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -615,6 +681,9 @@ LoadAndBootReactOS(PUCHAR OperatingSystemName)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
LoadSymbolFile(szBootPath, szKernelName, 25);
|
||||||
|
LoadSymbolFile(szBootPath, szHalName, 25);
|
||||||
|
|
||||||
UiDrawProgressBarCenter(25, 100);
|
UiDrawProgressBarCenter(25, 100);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -64,6 +64,28 @@ char *strcat(char *dest, char *src)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *strncat(char *dst, const char *src, size_t n)
|
||||||
|
{
|
||||||
|
if (n != 0)
|
||||||
|
{
|
||||||
|
char *d = dst;
|
||||||
|
const char *s = src;
|
||||||
|
|
||||||
|
while (*d != 0)
|
||||||
|
d++;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if ((*d = *s++) == 0)
|
||||||
|
break;
|
||||||
|
d++;
|
||||||
|
}
|
||||||
|
while (--n != 0);
|
||||||
|
*d = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
|
||||||
char *strchr(const char *s, int c)
|
char *strchr(const char *s, int c)
|
||||||
{
|
{
|
||||||
char cc = c;
|
char cc = c;
|
||||||
|
|
Loading…
Reference in a new issue