Skip to content

Commit 6658b17

Browse files
committed
keep user vdso base addr in task.mm
we need a convient method to get the userspace addr of the loaded vdso page. For example, vdso is required for aarch64 to set up the return trampoline for sigreturn. This is a mockup and may need refactoring. Signed-off-by: Tianhao Wang <[email protected]>
1 parent cd72760 commit 6658b17

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

qlib/kernel/loader/loader.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ pub fn Load(
279279
extraAuxv: &[AuxEntry],
280280
) -> Result<(u64, u64, u64)> {
281281
let vdsoAddr = LoadVDSO(task)?;
282+
task.mm.SetUserVDSOBase(vdsoAddr);
282283

283284
let (loaded, executable, tmpArgv) = LoadExecutable(task, filename, argv)?;
284285
let argv = tmpArgv;

qlib/kernel/memmgr/mm.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ pub struct MemoryManagerInternal {
158158
pub vcpuMapping: AtomicU64,
159159
pub tlbShootdownMask: AtomicU64,
160160

161+
pub userVDSOBase: AtomicU64,
161162
pub mappingLock: QUpgradableLock,
162163
pub mapping: QMutex<MMMapping>,
163164

@@ -284,6 +285,7 @@ impl MemoryManager {
284285
inited: true,
285286
vcpuMapping: AtomicU64::new(0),
286287
tlbShootdownMask: AtomicU64::new(0),
288+
userVDSOBase: AtomicU64::new(0),
287289
mappingLock: QUpgradableLock::default(),
288290
mapping: QMutex::new(mapping),
289291
pagetable: QRwLock::new(pagetable),
@@ -299,6 +301,14 @@ impl MemoryManager {
299301
return mm;
300302
}
301303

304+
pub fn SetUserVDSOBase(&self, addr: u64) {
305+
return self.userVDSOBase.store(addr, Ordering::Release);
306+
}
307+
308+
pub fn GetUserVDSOBase(&self) -> u64 {
309+
return self.userVDSOBase.load(Ordering::Acquire);
310+
}
311+
302312
pub fn EnableMembarrierPrivate(&self) {
303313
return self.membarrierPrivateEnabled.store(true, Ordering::Release);
304314
}
@@ -1526,6 +1536,9 @@ impl MemoryManager {
15261536
let ptInternal1 = self.pagetable.write();
15271537
let mut ptInternal2 = mm2.pagetable.write();
15281538

1539+
let vdsoAddr = self.GetUserVDSOBase();
1540+
mm2.SetUserVDSOBase(vdsoAddr);
1541+
15291542
ptInternal2.sharedLoadsOffset = ptInternal1.sharedLoadsOffset;
15301543
ptInternal2.curRSS = ptInternal1.curRSS;
15311544
ptInternal2.maxRSS = ptInternal1.maxRSS;

0 commit comments

Comments
 (0)