mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 07:13:54 -06:00
linux-user: Use correct target SHMLBA in shmat()
The shmat() handling needs to do target-specific handling of the attach address for shmat(): * if the SHM_RND flag is passed, the address is rounded down to a SHMLBA boundary * if SHM_RND is not passed, then the call is failed EINVAL if the address is not a multiple of SHMLBA Since SHMLBA is target-specific, we need to do this checking and rounding in QEMU and can't leave it up to the host syscall. Allow targets to define TARGET_FORCE_SHMLBA and provide a target_shmlba() function if appropriate, and update do_shmat() to honour them. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
parent
0ef9ea290e
commit
ee8e76141b
6 changed files with 83 additions and 6 deletions
|
@ -22,4 +22,20 @@ struct target_pt_regs {
|
|||
#define TARGET_MLOCKALL_MCL_CURRENT 0x2000
|
||||
#define TARGET_MLOCKALL_MCL_FUTURE 0x4000
|
||||
|
||||
/* For SPARC SHMLBA is determined at runtime in the kernel, and
|
||||
* libc has to runtime-detect it using the hwcaps (see glibc
|
||||
* sysdeps/unix/sysv/linux/sparc/getshmlba; we follow the same
|
||||
* logic here, though we know we're not the sparc v9 64-bit case).
|
||||
*/
|
||||
#define TARGET_FORCE_SHMLBA
|
||||
|
||||
static inline abi_ulong target_shmlba(CPUSPARCState *env)
|
||||
{
|
||||
if (!(env->def->features & CPU_FEATURE_FLUSH)) {
|
||||
return 64 * 1024;
|
||||
} else {
|
||||
return 256 * 1024;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SPARC_TARGET_SYSCALL_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue