summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/alpha/process.cc7
-rw-r--r--src/arch/alpha/system.cc4
-rw-r--r--src/arch/arm/freebsd/system.cc2
-rw-r--r--src/arch/arm/linux/system.cc2
-rw-r--r--src/arch/arm/process.cc2
-rw-r--r--src/arch/arm/system.cc2
-rw-r--r--src/arch/mips/process.cc2
-rw-r--r--src/arch/power/process.cc2
-rw-r--r--src/arch/riscv/bare_metal/system.cc2
-rw-r--r--src/arch/riscv/process.cc2
-rw-r--r--src/arch/sparc/process.cc2
-rw-r--r--src/arch/sparc/system.cc12
-rw-r--r--src/arch/x86/process.cc2
-rw-r--r--src/base/loader/aout_object.cc21
-rw-r--r--src/base/loader/dtb_object.cc14
-rw-r--r--src/base/loader/ecoff_object.cc18
-rw-r--r--src/base/loader/elf_object.cc40
-rw-r--r--src/base/loader/elf_object.hh5
-rw-r--r--src/base/loader/hex_file.cc2
-rw-r--r--src/base/loader/hex_file.hh2
-rw-r--r--src/base/loader/object_file.cc23
-rw-r--r--src/base/loader/object_file.hh41
-rw-r--r--src/base/loader/raw_object.cc26
-rw-r--r--src/sim/system.cc4
24 files changed, 113 insertions, 126 deletions
diff --git a/src/arch/alpha/process.cc b/src/arch/alpha/process.cc
index ea1cb0819..d0bfa79c8 100644
--- a/src/arch/alpha/process.cc
+++ b/src/arch/alpha/process.cc
@@ -58,9 +58,8 @@ AlphaProcess::AlphaProcess(ProcessParams *params, ObjectFile *objFile)
objFile->bssSize();
brk_point = roundUp(brk_point, PageBytes);
- // Set up stack. On Alpha, stack goes below text section. This
- // code should get moved to some architecture-specific spot.
- Addr stack_base = objFile->textBase() - (409600+4096);
+ // Set up stack. On Alpha, stack goes below the image.
+ Addr stack_base = objFile->textBase() - (409600 + 4096);
// Set up region for mmaps.
Addr mmap_end = 0x10000;
@@ -80,7 +79,7 @@ AlphaProcess::argsInit(int intSize, int pageSize)
// Patch the ld_bias for dynamic executables.
updateBias();
- objFile->loadSections(initVirtMem);
+ objFile->loadSegments(initVirtMem);
std::vector<AuxVector<uint64_t>> auxv;
diff --git a/src/arch/alpha/system.cc b/src/arch/alpha/system.cc
index b72821ed1..7bff6da01 100644
--- a/src/arch/alpha/system.cc
+++ b/src/arch/alpha/system.cc
@@ -109,8 +109,8 @@ AlphaSystem::initState()
System::initState();
// Load program sections into memory
- pal->loadSections(physProxy, loadAddrMask);
- console->loadSections(physProxy, loadAddrMask);
+ pal->loadSegments(physProxy, loadAddrMask);
+ console->loadSegments(physProxy, loadAddrMask);
/**
* Copy the osflags (kernel arguments) into the consoles
diff --git a/src/arch/arm/freebsd/system.cc b/src/arch/arm/freebsd/system.cc
index 84538e18e..6e544a70e 100644
--- a/src/arch/arm/freebsd/system.cc
+++ b/src/arch/arm/freebsd/system.cc
@@ -133,7 +133,7 @@ FreebsdArmSystem::initState()
bootReleaseAddr = ra & ~ULL(0x7F);
dtb_file->setTextBase(params()->atags_addr + loadAddrOffset);
- dtb_file->loadSections(physProxy);
+ dtb_file->loadSegments(physProxy);
delete dtb_file;
// Kernel boot requirements to set up r0, r1 and r2 in ARMv7
diff --git a/src/arch/arm/linux/system.cc b/src/arch/arm/linux/system.cc
index 094e4d7a7..f03a5c6cb 100644
--- a/src/arch/arm/linux/system.cc
+++ b/src/arch/arm/linux/system.cc
@@ -152,7 +152,7 @@ LinuxArmSystem::initState()
}
dtb_file->setTextBase(params()->atags_addr + loadAddrOffset);
- dtb_file->loadSections(physProxy);
+ dtb_file->loadSegments(physProxy);
delete dtb_file;
} else {
// Using ATAGS
diff --git a/src/arch/arm/process.cc b/src/arch/arm/process.cc
index 8e3cfd91d..1a1d4a2a0 100644
--- a/src/arch/arm/process.cc
+++ b/src/arch/arm/process.cc
@@ -272,7 +272,7 @@ ArmProcess::argsInit(int pageSize, IntRegIndex spIndex)
updateBias();
// load object file into target memory
- objFile->loadSections(initVirtMem);
+ objFile->loadSegments(initVirtMem);
//Setup the auxilliary vectors. These will already have endian conversion.
//Auxilliary vectors are loaded only for elf formatted executables.
diff --git a/src/arch/arm/system.cc b/src/arch/arm/system.cc
index 4ea0d1a91..efc347d9d 100644
--- a/src/arch/arm/system.cc
+++ b/src/arch/arm/system.cc
@@ -143,7 +143,7 @@ ArmSystem::initState()
if (bootldr) {
bool isGICv3System = dynamic_cast<Gicv3 *>(getGIC()) != nullptr;
- bootldr->loadSections(physProxy);
+ bootldr->loadSegments(physProxy);
inform("Using bootloader at address %#x\n", bootldr->entryPoint());
diff --git a/src/arch/mips/process.cc b/src/arch/mips/process.cc
index fb78cee24..e3405fdaa 100644
--- a/src/arch/mips/process.cc
+++ b/src/arch/mips/process.cc
@@ -94,7 +94,7 @@ MipsProcess::argsInit(int pageSize)
updateBias();
// load object file into target memory
- objFile->loadSections(initVirtMem);
+ objFile->loadSegments(initVirtMem);
std::vector<AuxVector<IntType>> auxv;
diff --git a/src/arch/power/process.cc b/src/arch/power/process.cc
index 6362027de..467c820f2 100644
--- a/src/arch/power/process.cc
+++ b/src/arch/power/process.cc
@@ -100,7 +100,7 @@ PowerProcess::argsInit(int intSize, int pageSize)
updateBias();
// load object file into target memory
- objFile->loadSections(initVirtMem);
+ objFile->loadSegments(initVirtMem);
//Setup the auxilliary vectors. These will already have endian conversion.
//Auxilliary vectors are loaded only for elf formatted executables.
diff --git a/src/arch/riscv/bare_metal/system.cc b/src/arch/riscv/bare_metal/system.cc
index 5cbd63af2..3fb07a489 100644
--- a/src/arch/riscv/bare_metal/system.cc
+++ b/src/arch/riscv/bare_metal/system.cc
@@ -55,7 +55,7 @@ BareMetalRiscvSystem::initState()
RiscvSystem::initState();
// load program sections into memory
- if (!bootloader->loadSections(physProxy)) {
+ if (!bootloader->loadSegments(physProxy)) {
warn("could not load sections to memory");
}
}
diff --git a/src/arch/riscv/process.cc b/src/arch/riscv/process.cc
index ab8305257..ca3f0e2b8 100644
--- a/src/arch/riscv/process.cc
+++ b/src/arch/riscv/process.cc
@@ -126,7 +126,7 @@ RiscvProcess::argsInit(int pageSize)
const int addrSize = sizeof(IntType);
updateBias();
- objFile->loadSections(initVirtMem);
+ objFile->loadSegments(initVirtMem);
ElfObject* elfObject = dynamic_cast<ElfObject*>(objFile);
memState->setStackMin(memState->getStackBase());
diff --git a/src/arch/sparc/process.cc b/src/arch/sparc/process.cc
index d89c606a3..cca61c1be 100644
--- a/src/arch/sparc/process.cc
+++ b/src/arch/sparc/process.cc
@@ -208,7 +208,7 @@ SparcProcess::argsInit(int pageSize)
updateBias();
// load object file into target memory
- objFile->loadSections(initVirtMem);
+ objFile->loadSegments(initVirtMem);
enum hardwareCaps
{
diff --git a/src/arch/sparc/system.cc b/src/arch/sparc/system.cc
index a68b11cad..5896061a6 100644
--- a/src/arch/sparc/system.cc
+++ b/src/arch/sparc/system.cc
@@ -138,22 +138,22 @@ SparcSystem::initState()
// Load reset binary into memory
reset->setTextBase(params()->reset_addr);
- reset->loadSections(physProxy);
+ reset->loadSegments(physProxy);
// Load the openboot binary
openboot->setTextBase(params()->openboot_addr);
- openboot->loadSections(physProxy);
+ openboot->loadSegments(physProxy);
// Load the hypervisor binary
hypervisor->setTextBase(params()->hypervisor_addr);
- hypervisor->loadSections(physProxy);
+ hypervisor->loadSegments(physProxy);
// Load the nvram image
nvram->setTextBase(params()->nvram_addr);
- nvram->loadSections(physProxy);
+ nvram->loadSegments(physProxy);
// Load the hypervisor description image
hypervisor_desc->setTextBase(params()->hypervisor_desc_addr);
- hypervisor_desc->loadSections(physProxy);
+ hypervisor_desc->loadSegments(physProxy);
// Load the partition description image
partition_desc->setTextBase(params()->partition_desc_addr);
- partition_desc->loadSections(physProxy);
+ partition_desc->loadSegments(physProxy);
// @todo any fixup code over writing data in binaries on setting break
diff --git a/src/arch/x86/process.cc b/src/arch/x86/process.cc
index 0765adea5..60f4f474b 100644
--- a/src/arch/x86/process.cc
+++ b/src/arch/x86/process.cc
@@ -776,7 +776,7 @@ X86Process::argsInit(int pageSize,
updateBias();
// load object file into target memory
- objFile->loadSections(initVirtMem);
+ objFile->loadSegments(initVirtMem);
enum X86CpuFeature {
X86_OnboardFPU = 1 << 0,
diff --git a/src/base/loader/aout_object.cc b/src/base/loader/aout_object.cc
index b731c9a83..e3f703e1d 100644
--- a/src/base/loader/aout_object.cc
+++ b/src/base/loader/aout_object.cc
@@ -46,9 +46,8 @@ AoutObject::tryFile(const string &fname, size_t len, uint8_t *data)
// right now this is only used for Alpha PAL code
return new AoutObject(fname, len, data,
ObjectFile::Alpha, ObjectFile::UnknownOpSys);
- }
- else {
- return NULL;
+ } else {
+ return nullptr;
}
}
@@ -62,21 +61,21 @@ AoutObject::AoutObject(const string &_filename,
entry = execHdr->entry;
- text.baseAddr = N_TXTADDR(*execHdr);
+ text.base = N_TXTADDR(*execHdr);
text.size = execHdr->tsize;
- text.fileImage = fileData + N_TXTOFF(*execHdr);
+ text.data = fileData + N_TXTOFF(*execHdr);
- data.baseAddr = N_DATADDR(*execHdr);
+ data.base = N_DATADDR(*execHdr);
data.size = execHdr->dsize;
- data.fileImage = fileData + N_DATOFF(*execHdr);
+ data.data = fileData + N_DATOFF(*execHdr);
- bss.baseAddr = N_BSSADDR(*execHdr);
+ bss.base = N_BSSADDR(*execHdr);
bss.size = execHdr->bsize;
- bss.fileImage = NULL;
+ bss.data = NULL;
DPRINTFR(Loader, "text: 0x%x %d\ndata: 0x%x %d\nbss: 0x%x %d\n",
- text.baseAddr, text.size, data.baseAddr, data.size,
- bss.baseAddr, bss.size);
+ text.base, text.size, data.base, data.size,
+ bss.base, bss.size);
}
diff --git a/src/base/loader/dtb_object.cc b/src/base/loader/dtb_object.cc
index fab6a762d..92e305ffa 100644
--- a/src/base/loader/dtb_object.cc
+++ b/src/base/loader/dtb_object.cc
@@ -55,17 +55,17 @@ DtbObject::DtbObject(const std::string &_filename, size_t _len, uint8_t *_data,
Arch _arch, OpSys _opSys)
: ObjectFile(_filename, _len, _data, _arch, _opSys)
{
- text.baseAddr = 0;
+ text.base = 0;
text.size = len;
- text.fileImage = fileData;
+ text.data = fileData;
- data.baseAddr = 0;
+ data.base = 0;
data.size = 0;
- data.fileImage = NULL;
+ data.data = nullptr;
- bss.baseAddr = 0;
+ bss.base = 0;
bss.size = 0;
- bss.fileImage = NULL;
+ bss.data = nullptr;
fileDataMmapped = true;
}
@@ -141,7 +141,7 @@ DtbObject::addBootCmdLine(const char* _args, size_t len)
}
text.size = newLen;
- text.fileImage = fdt_buf_w_space;
+ text.data = fdt_buf_w_space;
// clean up old buffer and set to new fdt blob
munmap(fileData, this->len);
diff --git a/src/base/loader/ecoff_object.cc b/src/base/loader/ecoff_object.cc
index caeab5f8f..76b91dd66 100644
--- a/src/base/loader/ecoff_object.cc
+++ b/src/base/loader/ecoff_object.cc
@@ -73,21 +73,21 @@ EcoffObject::EcoffObject(const string &_filename, size_t _len, uint8_t *_data,
entry = aoutHdr->entry;
- text.baseAddr = aoutHdr->text_start;
+ text.base = aoutHdr->text_start;
text.size = aoutHdr->tsize;
- text.fileImage = fileData + ECOFF_TXTOFF(execHdr);
+ text.data = fileData + ECOFF_TXTOFF(execHdr);
- data.baseAddr = aoutHdr->data_start;
+ data.base = aoutHdr->data_start;
data.size = aoutHdr->dsize;
- data.fileImage = fileData + ECOFF_DATOFF(execHdr);
+ data.data = fileData + ECOFF_DATOFF(execHdr);
- bss.baseAddr = aoutHdr->bss_start;
+ bss.base = aoutHdr->bss_start;
bss.size = aoutHdr->bsize;
- bss.fileImage = NULL;
+ bss.data = nullptr;
- DPRINTFR(Loader, "text: 0x%x %d\ndata: 0x%x %d\nbss: 0x%x %d\n",
- text.baseAddr, text.size, data.baseAddr, data.size,
- bss.baseAddr, bss.size);
+ DPRINTFR(Loader, "text: %#x %d\ndata: %#x %d\nbss: %#x %d\n",
+ text.base, text.size, data.base, data.size,
+ bss.base, bss.size);
}
bool
diff --git a/src/base/loader/elf_object.cc b/src/base/loader/elf_object.cc
index 2a8fb04ea..327919540 100644
--- a/src/base/loader/elf_object.cc
+++ b/src/base/loader/elf_object.cc
@@ -295,7 +295,7 @@ ElfObject::ElfObject(const std::string &_filename, size_t _len,
// initialize segment sizes to 0 in case they're not present
text.size = data.size = bss.size = 0;
- text.baseAddr = data.baseAddr = bss.baseAddr = 0;
+ text.base = data.base = bss.base = 0;
int sec_idx = 1;
@@ -352,9 +352,9 @@ ElfObject::ElfObject(const std::string &_filename, size_t _len,
if (phdr.p_paddr <= bss_sec_start &&
phdr.p_paddr + phdr.p_memsz > bss_sec_start &&
phdr.p_memsz - phdr.p_filesz > 0) {
- bss.baseAddr = phdr.p_paddr + phdr.p_filesz;
+ bss.base = phdr.p_paddr + phdr.p_filesz;
bss.size = phdr.p_memsz - phdr.p_filesz;
- bss.fileImage = NULL;
+ bss.data = nullptr;
}
// Check to see if this is the text or data segment
@@ -365,21 +365,21 @@ ElfObject::ElfObject(const std::string &_filename, size_t _len,
if (phdr.p_vaddr != 0)
relocate = false;
- text.baseAddr = phdr.p_paddr;
+ text.base = phdr.p_paddr;
text.size = phdr.p_filesz;
- text.fileImage = fileData + phdr.p_offset;
+ text.data = fileData + phdr.p_offset;
} else if (phdr.p_vaddr <= data_sec_start &&
phdr.p_vaddr + phdr.p_filesz > data_sec_start) {
- data.baseAddr = phdr.p_paddr;
+ data.base = phdr.p_paddr;
data.size = phdr.p_filesz;
- data.fileImage = fileData + phdr.p_offset;
+ data.data = fileData + phdr.p_offset;
} else {
// If it's none of the above but is loadable,
// load the filesize worth of data
Segment extra;
- extra.baseAddr = phdr.p_paddr;
+ extra.base = phdr.p_paddr;
extra.size = phdr.p_filesz;
- extra.fileImage = fileData + phdr.p_offset;
+ extra.data = fileData + phdr.p_offset;
extraSegments.push_back(extra);
}
}
@@ -389,9 +389,9 @@ ElfObject::ElfObject(const std::string &_filename, size_t _len,
"Empty .text segment in '%s'. ELF file corrupted?\n",
filename);
- DPRINTFR(Loader, "text: 0x%x %d\ndata: 0x%x %d\nbss: 0x%x %d\n",
- text.baseAddr, text.size, data.baseAddr, data.size,
- bss.baseAddr, bss.size);
+ DPRINTFR(Loader, "text: %#x %d\ndata: %#x %d\nbss: %#x %d\n",
+ text.base, text.size, data.base, data.size,
+ bss.base, bss.size);
elf_end(elf);
@@ -498,20 +498,20 @@ ElfObject::loadWeakSymbols(SymbolTable *symtab, Addr base, Addr offset,
}
bool
-ElfObject::loadSections(const PortProxy& mem_proxy, Addr addr_mask,
+ElfObject::loadSegments(const PortProxy& mem_proxy, Addr addr_mask,
Addr offset)
{
- if (!ObjectFile::loadSections(mem_proxy, addr_mask, offset))
+ if (!ObjectFile::loadSegments(mem_proxy, addr_mask, offset))
return false;
for (auto seg : extraSegments) {
- if (!loadSection(&seg, mem_proxy, addr_mask, offset)) {
+ if (!loadSegment(&seg, mem_proxy, addr_mask, offset)) {
return false;
}
}
if (interpreter)
- interpreter->loadSections(mem_proxy, addr_mask, offset);
+ interpreter->loadSegments(mem_proxy, addr_mask, offset);
return true;
}
@@ -570,9 +570,9 @@ ElfObject::updateBias(Addr bias_addr)
entry += bias_addr;
// Patch segments with the bias_addr.
- text.baseAddr += bias_addr;
- data.baseAddr += bias_addr;
- bss.baseAddr += bias_addr;
+ text.base += bias_addr;
+ data.base += bias_addr;
+ bss.base += bias_addr;
for (auto &segment : extraSegments)
- segment.baseAddr += bias_addr;
+ segment.base += bias_addr;
}
diff --git a/src/base/loader/elf_object.hh b/src/base/loader/elf_object.hh
index 9585684d4..244b9fc3f 100644
--- a/src/base/loader/elf_object.hh
+++ b/src/base/loader/elf_object.hh
@@ -51,9 +51,6 @@
class ElfObject : public ObjectFile
{
protected:
- // The global definition of a gem5 "Section" is closest to ELF's segments.
- typedef ObjectFile::Section Segment;
-
// These values are provided to a linux process by the kernel, so we
// need to keep them around.
Addr _programHeaderTable;
@@ -94,7 +91,7 @@ class ElfObject : public ObjectFile
public:
virtual ~ElfObject() {}
- bool loadSections(const PortProxy& mem_proxy, Addr addr_mask = maxAddr,
+ bool loadSegments(const PortProxy& mem_proxy, Addr addr_mask = maxAddr,
Addr offset = 0) override;
virtual bool loadAllSymbols(SymbolTable *symtab, Addr base = 0,
diff --git a/src/base/loader/hex_file.cc b/src/base/loader/hex_file.cc
index 32de90588..4c9ffa516 100644
--- a/src/base/loader/hex_file.cc
+++ b/src/base/loader/hex_file.cc
@@ -62,7 +62,7 @@ HexFile::~HexFile()
}
bool
-HexFile::loadSections(PortProxy& memProxy)
+HexFile::loadSegments(PortProxy& memProxy)
{
char Line[64];
Addr MemAddr;
diff --git a/src/base/loader/hex_file.hh b/src/base/loader/hex_file.hh
index fe34fddf0..befd7f320 100644
--- a/src/base/loader/hex_file.hh
+++ b/src/base/loader/hex_file.hh
@@ -52,7 +52,7 @@ class HexFile
virtual ~HexFile();
void close();
- bool loadSections(PortProxy& memProxy);
+ bool loadSegments(PortProxy& memProxy);
};
#endif // __BASE_LOADER_HEX_FILE_HH__
diff --git a/src/base/loader/object_file.cc b/src/base/loader/object_file.cc
index 0bb897cee..8a6b063de 100644
--- a/src/base/loader/object_file.cc
+++ b/src/base/loader/object_file.cc
@@ -73,17 +73,16 @@ ObjectFile::~ObjectFile()
bool
-ObjectFile::loadSection(Section *sec, const PortProxy& mem_proxy,
+ObjectFile::loadSegment(Segment *seg, const PortProxy& mem_proxy,
Addr addr_mask, Addr offset)
{
- if (sec->size != 0) {
- Addr addr = (sec->baseAddr & addr_mask) + offset;
- if (sec->fileImage) {
- mem_proxy.writeBlob(addr, sec->fileImage, sec->size);
- }
- else {
+ if (seg->size != 0) {
+ Addr addr = (seg->base & addr_mask) + offset;
+ if (seg->data) {
+ mem_proxy.writeBlob(addr, seg->data, seg->size);
+ } else {
// no image: must be bss
- mem_proxy.memsetBlob(addr, 0, sec->size);
+ mem_proxy.memsetBlob(addr, 0, seg->size);
}
}
return true;
@@ -91,12 +90,12 @@ ObjectFile::loadSection(Section *sec, const PortProxy& mem_proxy,
bool
-ObjectFile::loadSections(const PortProxy& mem_proxy, Addr addr_mask,
+ObjectFile::loadSegments(const PortProxy& mem_proxy, Addr addr_mask,
Addr offset)
{
- return (loadSection(&text, mem_proxy, addr_mask, offset)
- && loadSection(&data, mem_proxy, addr_mask, offset)
- && loadSection(&bss, mem_proxy, addr_mask, offset));
+ return (loadSegment(&text, mem_proxy, addr_mask, offset)
+ && loadSegment(&data, mem_proxy, addr_mask, offset)
+ && loadSegment(&bss, mem_proxy, addr_mask, offset));
}
namespace
diff --git a/src/base/loader/object_file.hh b/src/base/loader/object_file.hh
index 14dee3be0..db995f5d7 100644
--- a/src/base/loader/object_file.hh
+++ b/src/base/loader/object_file.hh
@@ -88,17 +88,17 @@ class ObjectFile
static const Addr maxAddr = std::numeric_limits<Addr>::max();
- virtual bool loadSections(const PortProxy& mem_proxy,
- Addr mask = maxAddr, Addr offset = 0);
+ virtual bool loadSegments(const PortProxy &mem_proxy,
+ Addr mask=maxAddr, Addr offset=0);
virtual bool loadAllSymbols(SymbolTable *symtab, Addr base = 0,
- Addr offset = 0, Addr mask = maxAddr) = 0;
+ Addr offset=0, Addr mask=maxAddr) = 0;
virtual bool loadGlobalSymbols(SymbolTable *symtab, Addr base = 0,
- Addr offset = 0, Addr mask = maxAddr) = 0;
- virtual bool loadLocalSymbols(SymbolTable *symtab, Addr base = 0,
- Addr offset = 0, Addr mask = maxAddr) = 0;
- virtual bool loadWeakSymbols(SymbolTable *symtab, Addr base = 0,
- Addr offset = 0, Addr mask = maxAddr)
+ Addr offset=0, Addr mask=maxAddr) = 0;
+ virtual bool loadLocalSymbols(SymbolTable *symtab, Addr base=0,
+ Addr offset=0, Addr mask=maxAddr) = 0;
+ virtual bool loadWeakSymbols(SymbolTable *symtab, Addr base=0,
+ Addr offset=0, Addr mask=maxAddr)
{ return false; }
virtual ObjectFile *getInterpreter() const { return nullptr; }
@@ -116,27 +116,28 @@ class ObjectFile
protected:
- struct Section {
- Addr baseAddr;
- uint8_t *fileImage;
+ struct Segment
+ {
+ Addr base;
+ uint8_t *data;
size_t size;
};
Addr entry;
- Section text;
- Section data;
- Section bss;
+ Segment text;
+ Segment data;
+ Segment bss;
- bool loadSection(Section *sec, const PortProxy& mem_proxy, Addr mask,
- Addr offset = 0);
+ bool loadSegment(Segment *seg, const PortProxy &mem_proxy, Addr mask,
+ Addr offset=0);
public:
Addr entryPoint() const { return entry; }
- Addr textBase() const { return text.baseAddr; }
- Addr dataBase() const { return data.baseAddr; }
- Addr bssBase() const { return bss.baseAddr; }
+ Addr textBase() const { return text.base; }
+ Addr dataBase() const { return data.base; }
+ Addr bssBase() const { return bss.base; }
size_t textSize() const { return text.size; }
size_t dataSize() const { return data.size; }
@@ -147,7 +148,7 @@ class ObjectFile
* blob that doesn't include an object header.
* @param a address to load the binary/text section at
*/
- void setTextBase(Addr a) { text.baseAddr = a; }
+ void setTextBase(Addr a) { text.base = a; }
/**
* Each instance of a Loader subclass will have a chance to try to load
diff --git a/src/base/loader/raw_object.cc b/src/base/loader/raw_object.cc
index 4a04f7dfc..9662d8613 100644
--- a/src/base/loader/raw_object.cc
+++ b/src/base/loader/raw_object.cc
@@ -45,21 +45,21 @@ RawObject::RawObject(const std::string &_filename, size_t _len,
uint8_t *_data, Arch _arch, OpSys _opSys)
: ObjectFile(_filename, _len, _data, _arch, _opSys)
{
- text.baseAddr = 0;
+ text.base = 0;
text.size = len;
- text.fileImage = fileData;
+ text.data = fileData;
- data.baseAddr = 0;
+ data.base = 0;
data.size = 0;
- data.fileImage = NULL;
+ data.data = nullptr;
- bss.baseAddr = 0;
+ bss.base = 0;
bss.size = 0;
- bss.fileImage = NULL;
+ bss.data = nullptr;
- DPRINTFR(Loader, "text: 0x%x %d\ndata: 0x%x %d\nbss: 0x%x %d\n",
- text.baseAddr, text.size, data.baseAddr, data.size,
- bss.baseAddr, bss.size);
+ DPRINTFR(Loader, "text: %#x %d\ndata: %#x %d\nbss: %#x %d\n",
+ text.base, text.size, data.base, data.size,
+ bss.base, bss.size);
}
bool
@@ -73,10 +73,6 @@ bool
RawObject::loadGlobalSymbols(SymbolTable *symtab, Addr base, Addr offset,
Addr addr_mask)
{
-/* int fnameStart = filename.rfind('/',filename.size()) + 1;
- int extStart = filename.rfind('.',filename.size());
- symtab->insert(text.baseAddr & addr_mask, filename.substr(fnameStart,
- extStart-fnameStart) + "_start");*/
return true;
}
@@ -84,9 +80,5 @@ bool
RawObject::loadLocalSymbols(SymbolTable *symtab, Addr base, Addr offset,
Addr addr_mask)
{
-/* int fnameStart = filename.rfind('/',filename.size()) + 1;
- int extStart = filename.rfind('.',filename.size());
- symtab->insert(text.baseAddr & addr_mask, filename.substr(fnameStart,
- extStart-fnameStart) + "_start");*/
return true;
}
diff --git a/src/sim/system.cc b/src/sim/system.cc
index 74769654b..73f93a257 100644
--- a/src/sim/system.cc
+++ b/src/sim/system.cc
@@ -327,9 +327,9 @@ System::initState()
}
}
// Load program sections into memory
- kernel->loadSections(physProxy, loadAddrMask, loadAddrOffset);
+ kernel->loadSegments(physProxy, loadAddrMask, loadAddrOffset);
for (const auto &extra_kernel : kernelExtras) {
- extra_kernel->loadSections(physProxy, loadAddrMask,
+ extra_kernel->loadSegments(physProxy, loadAddrMask,
loadAddrOffset);
}