diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/arch/alpha/process.cc | 2 | ||||
-rw-r--r-- | src/arch/alpha/process.hh | 4 | ||||
-rw-r--r-- | src/arch/arm/process.cc | 4 | ||||
-rw-r--r-- | src/arch/mips/process.cc | 2 | ||||
-rw-r--r-- | src/arch/power/process.cc | 2 | ||||
-rw-r--r-- | src/arch/sparc/process.hh | 7 | ||||
-rw-r--r-- | src/arch/x86/linux/linux.hh | 2 | ||||
-rw-r--r-- | src/arch/x86/process.cc | 4 | ||||
-rw-r--r-- | src/gpu-compute/shader.cc | 19 | ||||
-rw-r--r-- | src/kern/operatingsystem.hh | 4 | ||||
-rw-r--r-- | src/sim/process.cc | 4 | ||||
-rw-r--r-- | src/sim/process.hh | 6 | ||||
-rw-r--r-- | src/sim/syscall_emul.hh | 4 |
13 files changed, 31 insertions, 33 deletions
diff --git a/src/arch/alpha/process.cc b/src/arch/alpha/process.cc index eb1a2ee6d..54ef338f3 100644 --- a/src/arch/alpha/process.cc +++ b/src/arch/alpha/process.cc @@ -57,7 +57,7 @@ AlphaLiveProcess::AlphaLiveProcess(LiveProcessParams *params, // Set up region for mmaps. Tru64 seems to start just above 0 and // grow up from there. - mmap_start = mmap_end = 0x10000; + mmap_end = 0x10000; // Set pointer for next thread stack. Reserve 8M for main stack. next_thread_stack_base = stack_base - (8 * 1024 * 1024); diff --git a/src/arch/alpha/process.hh b/src/arch/alpha/process.hh index fcaa6539c..c41ece837 100644 --- a/src/arch/alpha/process.hh +++ b/src/arch/alpha/process.hh @@ -54,6 +54,10 @@ class AlphaLiveProcess : public LiveProcess void setSyscallArg(ThreadContext *tc, int i, AlphaISA::IntReg val) override; void setSyscallReturn(ThreadContext *tc, SyscallReturn return_value) override; + + // override default implementation in LiveProcess as the mmap + // region for Alpha platforms grows upward + virtual bool mmapGrowsDown() const override { return false; } }; /* No architectural page table defined for this ISA */ diff --git a/src/arch/arm/process.cc b/src/arch/arm/process.cc index ba56f0cdc..0c6f48fb5 100644 --- a/src/arch/arm/process.cc +++ b/src/arch/arm/process.cc @@ -77,7 +77,7 @@ ArmLiveProcess32::ArmLiveProcess32(LiveProcessParams *params, brk_point = roundUp(brk_point, PageBytes); // Set up region for mmaps. For now, start at bottom of kuseg space. - mmap_start = mmap_end = 0x40000000L; + mmap_end = 0x40000000L; } ArmLiveProcess64::ArmLiveProcess64(LiveProcessParams *params, @@ -94,7 +94,7 @@ ArmLiveProcess64::ArmLiveProcess64(LiveProcessParams *params, brk_point = roundUp(brk_point, PageBytes); // Set up region for mmaps. For now, start at bottom of kuseg space. - mmap_start = mmap_end = 0x4000000000L; + mmap_end = 0x4000000000L; } void diff --git a/src/arch/mips/process.cc b/src/arch/mips/process.cc index 404c84da6..8754191fa 100644 --- a/src/arch/mips/process.cc +++ b/src/arch/mips/process.cc @@ -61,7 +61,7 @@ MipsLiveProcess::MipsLiveProcess(LiveProcessParams * params, brk_point = roundUp(brk_point, PageBytes); // Set up region for mmaps. Start it 1GB above the top of the heap. - mmap_start = mmap_end = brk_point + 0x40000000L; + mmap_end = brk_point + 0x40000000L; } void diff --git a/src/arch/power/process.cc b/src/arch/power/process.cc index 3dc2c0d17..a770d8137 100644 --- a/src/arch/power/process.cc +++ b/src/arch/power/process.cc @@ -59,7 +59,7 @@ PowerLiveProcess::PowerLiveProcess(LiveProcessParams *params, brk_point = roundUp(brk_point, PageBytes); // Set up region for mmaps. For now, start at bottom of kuseg space. - mmap_start = mmap_end = 0x70000000L; + mmap_end = 0x70000000L; } void diff --git a/src/arch/sparc/process.hh b/src/arch/sparc/process.hh index 2eda40aac..e9d81367b 100644 --- a/src/arch/sparc/process.hh +++ b/src/arch/sparc/process.hh @@ -82,7 +82,7 @@ class Sparc32LiveProcess : public SparcLiveProcess stack_base = (Addr)0xf0000000ULL; // Set up region for mmaps. - mmap_start = mmap_end = 0x70000000; + mmap_end = 0x70000000; } void initState(); @@ -111,9 +111,8 @@ class Sparc64LiveProcess : public SparcLiveProcess // downward, less the hole for the kernel address space. stack_base = (Addr)0x80000000000ULL; - // Set up region for mmaps. Tru64 seems to start just above 0 and - // grow up from there. - mmap_start = mmap_end = 0xfffff80000000000ULL; + // Set up region for mmaps. + mmap_end = 0xfffff80000000000ULL; } void initState(); diff --git a/src/arch/x86/linux/linux.hh b/src/arch/x86/linux/linux.hh index ce395f17d..47eac12b8 100644 --- a/src/arch/x86/linux/linux.hh +++ b/src/arch/x86/linux/linux.hh @@ -290,8 +290,6 @@ class X86Linux32 : public Linux uint32_t freehigh; /* Available high memory size */ uint32_t mem_unit; /* Memory unit size in bytes */ } tgt_sysinfo; - - static bool mmapGrowsDown() { return true; } }; #endif diff --git a/src/arch/x86/process.cc b/src/arch/x86/process.cc index 13cbf6edd..f0b8370c0 100644 --- a/src/arch/x86/process.cc +++ b/src/arch/x86/process.cc @@ -114,7 +114,7 @@ X86_64LiveProcess::X86_64LiveProcess(LiveProcessParams *params, // Set up region for mmaps. This was determined empirically and may not // always be correct. - mmap_start = mmap_end = (Addr)0x2aaaaaaab000ULL; + mmap_end = (Addr)0x2aaaaaaab000ULL; } void @@ -151,7 +151,7 @@ I386LiveProcess::I386LiveProcess(LiveProcessParams *params, // Set up region for mmaps. This was determined empirically and may not // always be correct. - mmap_start = mmap_end = (Addr)0xf7ffe000ULL; + mmap_end = (Addr)0xf7ffe000ULL; } SyscallDesc* diff --git a/src/gpu-compute/shader.cc b/src/gpu-compute/shader.cc index e8d7946ff..31aa1e4cf 100644 --- a/src/gpu-compute/shader.cc +++ b/src/gpu-compute/shader.cc @@ -78,25 +78,24 @@ Shader::mmap(int length) // round up length to the next page length = roundUp(length, TheISA::PageBytes); - if (X86Linux64::mmapGrowsDown()) { + Process *proc = gpuTc->getProcessPtr(); + + if (proc->mmapGrowsDown()) { DPRINTF(HSAIL, "GROWS DOWN"); - start = gpuTc->getProcessPtr()->mmap_end -length; - gpuTc->getProcessPtr()->mmap_end = start; + start = proc->mmap_end - length; + proc->mmap_end = start; } else { DPRINTF(HSAIL, "GROWS UP"); - start = gpuTc->getProcessPtr()->mmap_end; - gpuTc->getProcessPtr()->mmap_end += length; + start = proc->mmap_end; + proc->mmap_end += length; // assertion to make sure we don't overwrite the stack (it grows down) - assert(gpuTc->getProcessPtr()->mmap_end < - gpuTc->getProcessPtr()->stack_base - - gpuTc->getProcessPtr()->max_stack_size); - + assert(proc->mmap_end < proc->stack_base - proc->max_stack_size); } DPRINTF(HSAIL,"Shader::mmap start= %#x, %#x\n", start, length); - gpuTc->getProcessPtr()->allocateMem(start,length); + proc->allocateMem(start, length); return start; } diff --git a/src/kern/operatingsystem.hh b/src/kern/operatingsystem.hh index f6f035f43..12aff946c 100644 --- a/src/kern/operatingsystem.hh +++ b/src/kern/operatingsystem.hh @@ -116,10 +116,6 @@ class OperatingSystem { static int openSpecialFile(std::string path, LiveProcess *process, ThreadContext *tc); - static const bool mmapGrowsUp = true; - - static bool mmapGrowsDown() { return false; } - }; // class OperatingSystem #endif // __OPERATINGSYSTEM_HH__ diff --git a/src/sim/process.cc b/src/sim/process.cc index 6c12b8100..81a7ec89e 100644 --- a/src/sim/process.cc +++ b/src/sim/process.cc @@ -182,7 +182,7 @@ Process::Process(ProcessParams * params) fde_stderr->set(sim_fd, params->errout, O_WRONLY | O_CREAT | O_TRUNC, 0664, false); - mmap_start = mmap_end = 0; + mmap_end = 0; nxm_start = nxm_end = 0; // other parameters will be initialized when the program is loaded } @@ -412,7 +412,6 @@ Process::serialize(CheckpointOut &cp) const SERIALIZE_SCALAR(stack_size); SERIALIZE_SCALAR(stack_min); SERIALIZE_SCALAR(next_thread_stack_base); - SERIALIZE_SCALAR(mmap_start); SERIALIZE_SCALAR(mmap_end); SERIALIZE_SCALAR(nxm_start); SERIALIZE_SCALAR(nxm_end); @@ -432,7 +431,6 @@ Process::unserialize(CheckpointIn &cp) UNSERIALIZE_SCALAR(stack_size); UNSERIALIZE_SCALAR(stack_min); UNSERIALIZE_SCALAR(next_thread_stack_base); - UNSERIALIZE_SCALAR(mmap_start); UNSERIALIZE_SCALAR(mmap_end); UNSERIALIZE_SCALAR(nxm_start); UNSERIALIZE_SCALAR(nxm_end); diff --git a/src/sim/process.hh b/src/sim/process.hh index df007c9f2..72f789ec7 100644 --- a/src/sim/process.hh +++ b/src/sim/process.hh @@ -107,9 +107,13 @@ class Process : public SimObject Addr next_thread_stack_base; // Base of region for mmaps (when user doesn't specify an address). - Addr mmap_start; Addr mmap_end; + // Does mmap region grow upward or downward from mmap_end? Most + // platforms grow downward, but a few (such as Alpha) grow upward + // instead, so they can override thie method to return false. + virtual bool mmapGrowsDown() const { return true; } + // Base of region for nxm data Addr nxm_start; Addr nxm_end; diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh index a859fbe43..71c0dd090 100644 --- a/src/sim/syscall_emul.hh +++ b/src/sim/syscall_emul.hh @@ -1297,8 +1297,8 @@ mmapImpl(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc, // Extend global mmap region if necessary. Note that we ignore the // start address unless MAP_FIXED is specified. if (!(tgt_flags & OS::TGT_MAP_FIXED)) { - start = (OS::mmapGrowsDown()) ? p->mmap_end - length : p->mmap_end; - p->mmap_end = (OS::mmapGrowsDown()) ? start : p->mmap_end + length; + start = p->mmapGrowsDown() ? p->mmap_end - length : p->mmap_end; + p->mmap_end = p->mmapGrowsDown() ? start : p->mmap_end + length; } DPRINTF_SYSCALL(Verbose, " mmap range is 0x%x - 0x%x\n", |