Load the hypervisor symbols twice, once with an address mask so that we can get symbols for where it's copied to in memory
Add the ability to use an address mask for symbol loading Rather then silently failing on platform accesses panic Move BadAddr/IsaFake no Device from Tsunami Let the system kernel be none, but warn about it configs/common/FSConfig.py: We don't have a kernel for sparc yet src/arch/sparc/system.cc: Load the hypervisor symbols twice, once with an address mask so that we can get symbols for where it's copied to in memory src/base/loader/aout_object.cc: src/base/loader/aout_object.hh: src/base/loader/ecoff_object.cc: src/base/loader/ecoff_object.hh: src/base/loader/elf_object.cc: src/base/loader/elf_object.hh: src/base/loader/object_file.hh: src/base/loader/raw_object.cc: src/base/loader/raw_object.hh: Add the ability to use an address mask for symbol loading src/dev/sparc/t1000.cc: Rather then silently failing on platform accesses panic src/dev/sparc/t1000.hh: fix up a couple of platform comments src/python/m5/objects/Bus.py: src/python/m5/objects/Device.py: src/python/m5/objects/T1000.py: src/python/m5/objects/Tsunami.py: Move BadAddr/IsaFake no Device from Tsunami src/python/m5/objects/System.py: Let kernel be none src/sim/system.cc: Let the system kernel be none, but warn about it --HG-- extra : convert_revision : 92f6afef599a3d3c7c5026d03434102c41c7b5f4
This commit is contained in:
parent
7b9ef9716b
commit
8c4f7a0404
19 changed files with 90 additions and 72 deletions
|
@ -99,7 +99,6 @@ def makeSparcSystem(mem_mode, mdesc = None):
|
||||||
self.partition_desc.port = self.membus.port
|
self.partition_desc.port = self.membus.port
|
||||||
self.intrctrl = IntrControl()
|
self.intrctrl = IntrControl()
|
||||||
self.mem_mode = mem_mode
|
self.mem_mode = mem_mode
|
||||||
self.kernel = binary('vmlinux')
|
|
||||||
|
|
||||||
self.reset_bin = binary('reset.bin')
|
self.reset_bin = binary('reset.bin')
|
||||||
self.hypervisor_bin = binary('q.bin')
|
self.hypervisor_bin = binary('q.bin')
|
||||||
|
|
|
@ -155,6 +155,11 @@ SparcSystem::SparcSystem(Params *p)
|
||||||
if (!hypervisor->loadLocalSymbols(debugSymbolTable))
|
if (!hypervisor->loadLocalSymbols(debugSymbolTable))
|
||||||
panic("could not load hypervisor symbols\n");
|
panic("could not load hypervisor symbols\n");
|
||||||
|
|
||||||
|
// Strip off the rom address so when the hypervisor is copied into memory we
|
||||||
|
// have symbols still
|
||||||
|
if (!hypervisor->loadLocalSymbols(debugSymbolTable, 0xFFFFFF))
|
||||||
|
panic("could not load hypervisor symbols\n");
|
||||||
|
|
||||||
if (!nvram->loadGlobalSymbols(debugSymbolTable))
|
if (!nvram->loadGlobalSymbols(debugSymbolTable))
|
||||||
panic("could not load reset symbols\n");
|
panic("could not load reset symbols\n");
|
||||||
|
|
||||||
|
|
|
@ -82,14 +82,14 @@ AoutObject::AoutObject(const string &_filename, int _fd,
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
AoutObject::loadGlobalSymbols(SymbolTable *symtab)
|
AoutObject::loadGlobalSymbols(SymbolTable *symtab, Addr addrMask)
|
||||||
{
|
{
|
||||||
// a.out symbols not supported yet
|
// a.out symbols not supported yet
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
AoutObject::loadLocalSymbols(SymbolTable *symtab)
|
AoutObject::loadLocalSymbols(SymbolTable *symtab, Addr addrMask)
|
||||||
{
|
{
|
||||||
// a.out symbols not supported yet
|
// a.out symbols not supported yet
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -48,8 +48,10 @@ class AoutObject : public ObjectFile
|
||||||
public:
|
public:
|
||||||
virtual ~AoutObject() {}
|
virtual ~AoutObject() {}
|
||||||
|
|
||||||
virtual bool loadGlobalSymbols(SymbolTable *symtab);
|
virtual bool loadGlobalSymbols(SymbolTable *symtab, Addr addrMask =
|
||||||
virtual bool loadLocalSymbols(SymbolTable *symtab);
|
std::numeric_limits<Addr>::max());
|
||||||
|
virtual bool loadLocalSymbols(SymbolTable *symtab, Addr addrMask =
|
||||||
|
std::numeric_limits<Addr>::max());
|
||||||
|
|
||||||
static ObjectFile *tryFile(const std::string &fname, int fd,
|
static ObjectFile *tryFile(const std::string &fname, int fd,
|
||||||
size_t len, uint8_t *data);
|
size_t len, uint8_t *data);
|
||||||
|
|
|
@ -86,7 +86,7 @@ EcoffObject::EcoffObject(const string &_filename, int _fd,
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
EcoffObject::loadGlobalSymbols(SymbolTable *symtab)
|
EcoffObject::loadGlobalSymbols(SymbolTable *symtab, Addr addrMask)
|
||||||
{
|
{
|
||||||
if (!symtab)
|
if (!symtab)
|
||||||
return false;
|
return false;
|
||||||
|
@ -115,7 +115,7 @@ EcoffObject::loadGlobalSymbols(SymbolTable *symtab)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
EcoffObject::loadLocalSymbols(SymbolTable *symtab)
|
EcoffObject::loadLocalSymbols(SymbolTable *symtab, Addr addrMask)
|
||||||
{
|
{
|
||||||
if (!symtab)
|
if (!symtab)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -52,8 +52,10 @@ class EcoffObject : public ObjectFile
|
||||||
public:
|
public:
|
||||||
virtual ~EcoffObject() {}
|
virtual ~EcoffObject() {}
|
||||||
|
|
||||||
virtual bool loadGlobalSymbols(SymbolTable *symtab);
|
virtual bool loadGlobalSymbols(SymbolTable *symtab, Addr addrMask =
|
||||||
virtual bool loadLocalSymbols(SymbolTable *symtab);
|
std::numeric_limits<Addr>::max());
|
||||||
|
virtual bool loadLocalSymbols(SymbolTable *symtab, Addr addrMask =
|
||||||
|
std::numeric_limits<Addr>::max());
|
||||||
|
|
||||||
static ObjectFile *tryFile(const std::string &fname, int fd,
|
static ObjectFile *tryFile(const std::string &fname, int fd,
|
||||||
size_t len, uint8_t *data);
|
size_t len, uint8_t *data);
|
||||||
|
|
|
@ -330,13 +330,13 @@ ElfObject::loadSomeSymbols(SymbolTable *symtab, int binding)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ElfObject::loadGlobalSymbols(SymbolTable *symtab)
|
ElfObject::loadGlobalSymbols(SymbolTable *symtab, Addr addrMask)
|
||||||
{
|
{
|
||||||
return loadSomeSymbols(symtab, STB_GLOBAL);
|
return loadSomeSymbols(symtab, STB_GLOBAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ElfObject::loadLocalSymbols(SymbolTable *symtab)
|
ElfObject::loadLocalSymbols(SymbolTable *symtab, Addr addrMask)
|
||||||
{
|
{
|
||||||
return loadSomeSymbols(symtab, STB_LOCAL);
|
return loadSomeSymbols(symtab, STB_LOCAL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,8 +53,10 @@ class ElfObject : public ObjectFile
|
||||||
public:
|
public:
|
||||||
virtual ~ElfObject() {}
|
virtual ~ElfObject() {}
|
||||||
|
|
||||||
virtual bool loadGlobalSymbols(SymbolTable *symtab);
|
virtual bool loadGlobalSymbols(SymbolTable *symtab, Addr addrMask =
|
||||||
virtual bool loadLocalSymbols(SymbolTable *symtab);
|
std::numeric_limits<Addr>::max());
|
||||||
|
virtual bool loadLocalSymbols(SymbolTable *symtab, Addr addrMask =
|
||||||
|
std::numeric_limits<Addr>::max());
|
||||||
|
|
||||||
static ObjectFile *tryFile(const std::string &fname, int fd,
|
static ObjectFile *tryFile(const std::string &fname, int fd,
|
||||||
size_t len, uint8_t *data);
|
size_t len, uint8_t *data);
|
||||||
|
|
|
@ -78,8 +78,10 @@ class ObjectFile
|
||||||
|
|
||||||
virtual bool loadSections(Port *memPort, Addr addrMask =
|
virtual bool loadSections(Port *memPort, Addr addrMask =
|
||||||
std::numeric_limits<Addr>::max());
|
std::numeric_limits<Addr>::max());
|
||||||
virtual bool loadGlobalSymbols(SymbolTable *symtab) = 0;
|
virtual bool loadGlobalSymbols(SymbolTable *symtab, Addr addrMask =
|
||||||
virtual bool loadLocalSymbols(SymbolTable *symtab) = 0;
|
std::numeric_limits<Addr>::max()) = 0;
|
||||||
|
virtual bool loadLocalSymbols(SymbolTable *symtab, Addr addrMask =
|
||||||
|
std::numeric_limits<Addr>::max()) = 0;
|
||||||
|
|
||||||
Arch getArch() const { return arch; }
|
Arch getArch() const { return arch; }
|
||||||
OpSys getOpSys() const { return opSys; }
|
OpSys getOpSys() const { return opSys; }
|
||||||
|
|
|
@ -61,21 +61,21 @@ RawObject::RawObject(const std::string &_filename, int _fd, size_t _len,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
RawObject::loadGlobalSymbols(SymbolTable *symtab)
|
RawObject::loadGlobalSymbols(SymbolTable *symtab, Addr addrMask)
|
||||||
{
|
{
|
||||||
int fnameStart = filename.rfind('/',filename.size()) + 1;
|
int fnameStart = filename.rfind('/',filename.size()) + 1;
|
||||||
int extStart = filename.rfind('.',filename.size());
|
int extStart = filename.rfind('.',filename.size());
|
||||||
symtab->insert(text.baseAddr, filename.substr(fnameStart,
|
symtab->insert(text.baseAddr & addrMask, filename.substr(fnameStart,
|
||||||
extStart-fnameStart) + "_start");
|
extStart-fnameStart) + "_start");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
RawObject::loadLocalSymbols(SymbolTable *symtab)
|
RawObject::loadLocalSymbols(SymbolTable *symtab, Addr addrMask)
|
||||||
{
|
{
|
||||||
int fnameStart = filename.rfind('/',filename.size()) + 1;
|
int fnameStart = filename.rfind('/',filename.size()) + 1;
|
||||||
int extStart = filename.rfind('.',filename.size());
|
int extStart = filename.rfind('.',filename.size());
|
||||||
symtab->insert(text.baseAddr, filename.substr(fnameStart,
|
symtab->insert(text.baseAddr & addrMask, filename.substr(fnameStart,
|
||||||
extStart-fnameStart) + "_start");
|
extStart-fnameStart) + "_start");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,8 +41,10 @@ class RawObject: public ObjectFile
|
||||||
public:
|
public:
|
||||||
virtual ~RawObject() {}
|
virtual ~RawObject() {}
|
||||||
|
|
||||||
virtual bool loadGlobalSymbols(SymbolTable *symtab);
|
virtual bool loadGlobalSymbols(SymbolTable *symtab, Addr addrMask =
|
||||||
virtual bool loadLocalSymbols(SymbolTable *symtab);
|
std::numeric_limits<Addr>::max());
|
||||||
|
virtual bool loadLocalSymbols(SymbolTable *symtab, Addr addrMask =
|
||||||
|
std::numeric_limits<Addr>::max());
|
||||||
|
|
||||||
static ObjectFile *tryFile(const std::string &fname, int fd, size_t len,
|
static ObjectFile *tryFile(const std::string &fname, int fd, size_t len,
|
||||||
uint8_t *data);
|
uint8_t *data);
|
||||||
|
|
|
@ -56,50 +56,56 @@ T1000::T1000(const string &name, System *s, IntrControl *ic)
|
||||||
Tick
|
Tick
|
||||||
T1000::intrFrequency()
|
T1000::intrFrequency()
|
||||||
{
|
{
|
||||||
return (Tick)0;
|
panic("Need implementation\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
T1000::postConsoleInt()
|
T1000::postConsoleInt()
|
||||||
{
|
{
|
||||||
|
panic("Need implementation\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
T1000::clearConsoleInt()
|
T1000::clearConsoleInt()
|
||||||
{
|
{
|
||||||
|
panic("Need implementation\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
T1000::postPciInt(int line)
|
T1000::postPciInt(int line)
|
||||||
{
|
{
|
||||||
|
panic("Need implementation\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
T1000::clearPciInt(int line)
|
T1000::clearPciInt(int line)
|
||||||
{
|
{
|
||||||
|
panic("Need implementation\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
Addr
|
Addr
|
||||||
T1000::pciToDma(Addr pciAddr) const
|
T1000::pciToDma(Addr pciAddr) const
|
||||||
{
|
{
|
||||||
return (Addr)0;
|
panic("Need implementation\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Addr
|
Addr
|
||||||
T1000::calcConfigAddr(int bus, int dev, int func)
|
T1000::calcConfigAddr(int bus, int dev, int func)
|
||||||
{
|
{
|
||||||
return (Addr)0;
|
panic("Need implementation\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
T1000::serialize(std::ostream &os)
|
T1000::serialize(std::ostream &os)
|
||||||
{
|
{
|
||||||
|
panic("Need implementation\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
T1000::unserialize(Checkpoint *cp, const std::string §ion)
|
T1000::unserialize(Checkpoint *cp, const std::string §ion)
|
||||||
{
|
{
|
||||||
|
panic("Need implementation\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
BEGIN_DECLARE_SIM_OBJECT_PARAMS(T1000)
|
BEGIN_DECLARE_SIM_OBJECT_PARAMS(T1000)
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file
|
* @file
|
||||||
* Declaration of top level class for the Tsunami chipset. This class just
|
* Declaration of top level class for the T1000 platform chips. This class just
|
||||||
* retains pointers to all its children so the children can communicate.
|
* retains pointers to all its children so the children can communicate.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ class T1000 : public Platform
|
||||||
virtual void postConsoleInt();
|
virtual void postConsoleInt();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear a posted CPU interrupt (id=55)
|
* Clear a posted CPU interrupt
|
||||||
*/
|
*/
|
||||||
virtual void clearConsoleInt();
|
virtual void clearConsoleInt();
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ from m5 import build_env
|
||||||
from m5.params import *
|
from m5.params import *
|
||||||
from m5.proxy import *
|
from m5.proxy import *
|
||||||
from MemObject import MemObject
|
from MemObject import MemObject
|
||||||
from Tsunami import BadAddr
|
from Device import BadAddr
|
||||||
|
|
||||||
class Bus(MemObject):
|
class Bus(MemObject):
|
||||||
type = 'Bus'
|
type = 'Bus'
|
||||||
|
@ -12,7 +12,7 @@ class Bus(MemObject):
|
||||||
width = Param.Int(64, "bus width (bytes)")
|
width = Param.Int(64, "bus width (bytes)")
|
||||||
responder_set = Param.Bool(False, "Did the user specify a default responder.")
|
responder_set = Param.Bool(False, "Did the user specify a default responder.")
|
||||||
if build_env['FULL_SYSTEM']:
|
if build_env['FULL_SYSTEM']:
|
||||||
default = Port(Self.responder.pio, "Default port for requests that aren't handled by a device.")
|
|
||||||
responder = BadAddr(pio_addr=0x0, pio_latency="1ps")
|
responder = BadAddr(pio_addr=0x0, pio_latency="1ps")
|
||||||
|
default = Port(Self.responder.pio, "Default port for requests that aren't handled by a device.")
|
||||||
else:
|
else:
|
||||||
default = Port("Default port for requests that aren't handled by a device.")
|
default = Port("Default port for requests that aren't handled by a device.")
|
||||||
|
|
|
@ -19,3 +19,14 @@ class DmaDevice(PioDevice):
|
||||||
type = 'DmaDevice'
|
type = 'DmaDevice'
|
||||||
abstract = True
|
abstract = True
|
||||||
dma = Port(Self.pio.peerObj.port, "DMA port")
|
dma = Port(Self.pio.peerObj.port, "DMA port")
|
||||||
|
|
||||||
|
class IsaFake(BasicPioDevice):
|
||||||
|
type = 'IsaFake'
|
||||||
|
pio_size = Param.Addr(0x8, "Size of address range")
|
||||||
|
ret_data = Param.UInt8(0xFF, "Default data to return")
|
||||||
|
ret_bad_addr = Param.Bool(False, "Return pkt status bad address on access")
|
||||||
|
|
||||||
|
class BadAddr(IsaFake):
|
||||||
|
ret_bad_addr = Param.Bool(True, "Return pkt status bad address on access")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ class System(SimObject):
|
||||||
"boot processor frequency")
|
"boot processor frequency")
|
||||||
init_param = Param.UInt64(0, "numerical value to pass into simulator")
|
init_param = Param.UInt64(0, "numerical value to pass into simulator")
|
||||||
boot_osflags = Param.String("a", "boot flags to pass to the kernel")
|
boot_osflags = Param.String("a", "boot flags to pass to the kernel")
|
||||||
kernel = Param.String("file that contains the kernel code")
|
kernel = Param.String("", "file that contains the kernel code")
|
||||||
readfile = Param.String("", "file to read startup script from")
|
readfile = Param.String("", "file to read startup script from")
|
||||||
symbolfile = Param.String("", "file to get the symbols from")
|
symbolfile = Param.String("", "file to get the symbols from")
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,10 @@
|
||||||
from m5.params import *
|
from m5.params import *
|
||||||
from m5.proxy import *
|
from m5.proxy import *
|
||||||
from Device import BasicPioDevice
|
from Device import BasicPioDevice, IsaFake, BadAddr
|
||||||
from Uart import Uart8250
|
from Uart import Uart8250
|
||||||
from Platform import Platform
|
from Platform import Platform
|
||||||
from SimConsole import SimConsole, ConsoleListener
|
from SimConsole import SimConsole, ConsoleListener
|
||||||
|
|
||||||
class IsaFake(BasicPioDevice):
|
|
||||||
type = 'IsaFake'
|
|
||||||
pio_size = Param.Addr(0x8, "Size of address range")
|
|
||||||
ret_data = Param.UInt8(0xFF, "Default data to return")
|
|
||||||
ret_bad_addr = Param.Bool(False, "Return pkt status bad address on access")
|
|
||||||
|
|
||||||
class BadAddr(IsaFake):
|
|
||||||
ret_bad_addr = Param.Bool(True, "Return pkt status bad address on access")
|
|
||||||
|
|
||||||
class T1000(Platform):
|
class T1000(Platform):
|
||||||
type = 'T1000'
|
type = 'T1000'
|
||||||
system = Param.System(Parent.any, "system")
|
system = Param.System(Parent.any, "system")
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from m5.params import *
|
from m5.params import *
|
||||||
from m5.proxy import *
|
from m5.proxy import *
|
||||||
from Device import BasicPioDevice
|
from Device import BasicPioDevice, IsaFake, BadAddr
|
||||||
from Platform import Platform
|
from Platform import Platform
|
||||||
from AlphaConsole import AlphaConsole
|
from AlphaConsole import AlphaConsole
|
||||||
from Uart import Uart8250
|
from Uart import Uart8250
|
||||||
|
@ -11,15 +11,6 @@ class TsunamiCChip(BasicPioDevice):
|
||||||
type = 'TsunamiCChip'
|
type = 'TsunamiCChip'
|
||||||
tsunami = Param.Tsunami(Parent.any, "Tsunami")
|
tsunami = Param.Tsunami(Parent.any, "Tsunami")
|
||||||
|
|
||||||
class IsaFake(BasicPioDevice):
|
|
||||||
type = 'IsaFake'
|
|
||||||
pio_size = Param.Addr(0x8, "Size of address range")
|
|
||||||
ret_data = Param.UInt8(0xFF, "Default data to return")
|
|
||||||
ret_bad_addr = Param.Bool(False, "Return pkt status bad address on access")
|
|
||||||
|
|
||||||
class BadAddr(IsaFake):
|
|
||||||
ret_bad_addr = Param.Bool(True, "Return pkt status bad address on access")
|
|
||||||
|
|
||||||
class TsunamiIO(BasicPioDevice):
|
class TsunamiIO(BasicPioDevice):
|
||||||
type = 'TsunamiIO'
|
type = 'TsunamiIO'
|
||||||
time = Param.UInt64(1136073600,
|
time = Param.UInt64(1136073600,
|
||||||
|
|
|
@ -89,36 +89,41 @@ System::System(Params *p)
|
||||||
/**
|
/**
|
||||||
* Load the kernel code into memory
|
* Load the kernel code into memory
|
||||||
*/
|
*/
|
||||||
// Load kernel code
|
if (params()->kernel_path == "") {
|
||||||
kernel = createObjectFile(params()->kernel_path);
|
warn("No kernel set for full system simulation. Assuming you know what"
|
||||||
if (kernel == NULL)
|
" you're doing...\n");
|
||||||
fatal("Could not load kernel file %s", params()->kernel_path);
|
} else {
|
||||||
|
// Load kernel code
|
||||||
|
kernel = createObjectFile(params()->kernel_path);
|
||||||
|
if (kernel == NULL)
|
||||||
|
fatal("Could not load kernel file %s", params()->kernel_path);
|
||||||
|
|
||||||
// Load program sections into memory
|
// Load program sections into memory
|
||||||
kernel->loadSections(&functionalPort, LoadAddrMask);
|
kernel->loadSections(&functionalPort, LoadAddrMask);
|
||||||
|
|
||||||
// setup entry points
|
// setup entry points
|
||||||
kernelStart = kernel->textBase();
|
kernelStart = kernel->textBase();
|
||||||
kernelEnd = kernel->bssBase() + kernel->bssSize();
|
kernelEnd = kernel->bssBase() + kernel->bssSize();
|
||||||
kernelEntry = kernel->entryPoint();
|
kernelEntry = kernel->entryPoint();
|
||||||
|
|
||||||
// load symbols
|
// load symbols
|
||||||
if (!kernel->loadGlobalSymbols(kernelSymtab))
|
if (!kernel->loadGlobalSymbols(kernelSymtab))
|
||||||
panic("could not load kernel symbols\n");
|
panic("could not load kernel symbols\n");
|
||||||
|
|
||||||
if (!kernel->loadLocalSymbols(kernelSymtab))
|
if (!kernel->loadLocalSymbols(kernelSymtab))
|
||||||
panic("could not load kernel local symbols\n");
|
panic("could not load kernel local symbols\n");
|
||||||
|
|
||||||
if (!kernel->loadGlobalSymbols(debugSymbolTable))
|
if (!kernel->loadGlobalSymbols(debugSymbolTable))
|
||||||
panic("could not load kernel symbols\n");
|
panic("could not load kernel symbols\n");
|
||||||
|
|
||||||
if (!kernel->loadLocalSymbols(debugSymbolTable))
|
if (!kernel->loadLocalSymbols(debugSymbolTable))
|
||||||
panic("could not load kernel local symbols\n");
|
panic("could not load kernel local symbols\n");
|
||||||
|
|
||||||
DPRINTF(Loader, "Kernel start = %#x\n", kernelStart);
|
DPRINTF(Loader, "Kernel start = %#x\n", kernelStart);
|
||||||
DPRINTF(Loader, "Kernel end = %#x\n", kernelEnd);
|
DPRINTF(Loader, "Kernel end = %#x\n", kernelEnd);
|
||||||
DPRINTF(Loader, "Kernel entry = %#x\n", kernelEntry);
|
DPRINTF(Loader, "Kernel entry = %#x\n", kernelEntry);
|
||||||
DPRINTF(Loader, "Kernel loaded...\n");
|
DPRINTF(Loader, "Kernel loaded...\n");
|
||||||
|
}
|
||||||
#endif // FULL_SYSTEM
|
#endif // FULL_SYSTEM
|
||||||
|
|
||||||
// increment the number of running systms
|
// increment the number of running systms
|
||||||
|
|
Loading…
Reference in a new issue