Load local kernel symbols, and set aic7xxx_no_reset to prevent an initial

(very painful) bus reset from occuring

base/loader/elf_object.cc:
    Fixed to allow proper loading of local symbols

--HG--
extra : convert_revision : 5c9a1f4d7b5748a1c8cabdfd67763c21f988f8fd
This commit is contained in:
Andrew Schultz 2004-02-21 20:31:08 -05:00
parent 43787ad863
commit c82113d022
2 changed files with 15 additions and 1 deletions

View file

@ -225,7 +225,7 @@ ElfObject::loadSomeSymbols(SymbolTable *symtab, int binding)
// loop through all the symbols, only loading global ones
for (ii = 0; ii < count; ++ii) {
gelf_getsym(data, ii, &sym);
if (GELF_ST_BIND(sym.st_info) & binding) {
if (GELF_ST_BIND(sym.st_info) == binding) {
symtab->insert(sym.st_value,
elf_strptr(elf, shdr.sh_link, sym.st_name));
}

View file

@ -77,6 +77,9 @@ LinuxSystem::LinuxSystem(const string _name, const uint64_t _init_param,
panic("could not load kernel symbols\n");
debugSymbolTable = kernelSymtab;
if (!kernel->loadLocalSymbols(kernelSymtab))
panic("could not load kernel local symbols\n");
if (!console->loadGlobalSymbols(consoleSymtab))
panic("could not load console symbols\n");
@ -271,6 +274,7 @@ LinuxSystem::LinuxSystem(const string _name, const uint64_t _init_param,
#endif //FS_MEASURE
Addr addr = 0;
if (kernelSymtab->findAddress("est_cycle_freq", addr)) {
Addr paddr = vtophys(physmem, addr);
uint8_t *est_cycle_frequency =
@ -280,6 +284,16 @@ LinuxSystem::LinuxSystem(const string _name, const uint64_t _init_param,
*(uint64_t *)est_cycle_frequency = ticksPerSecond;
}
if (kernelSymtab->findAddress("aic7xxx_no_reset", addr)) {
Addr paddr = vtophys(physmem, addr);
uint8_t *aic7xxx_no_reset =
physmem->dma_addr(paddr, sizeof(uint32_t));
if (aic7xxx_no_reset) {
*(uint32_t *)aic7xxx_no_reset = 1;
}
}
if (consoleSymtab->findAddress("env_booted_osflags", addr)) {
Addr paddr = vtophys(physmem, addr);
char *osflags = (char *)physmem->dma_addr(paddr, sizeof(uint32_t));