#!/usr/bin/env python3 # SPDX-License-Identifier: MIT """Task/root binding and bounded native user-page reader tests.""" from pathlib import Path import runpy import struct import unittest import copy API = runpy.run_path(str(Path(__file__).with_name('process-user-memory.py'))) class ProcessMemoryTests(unittest.TestCase): def setUp(self): self.task = 0xfffffe0010000000 self.map = self.task+0x4000 self.pmap = self.map+0x4000 self.root, self.l2, self.l3 = 0x10000, 0x14000, 0x18000 self.mem = {} self.reads = [] self.instructions = dict(API['WITNESSES']) self.q(self.task+0x28, self.map & 0xffffffffffff) self.q(self.map+0x58, self.pmap & 0xffffffffffff) self.q(self.pmap+8, self.root) self.q(self.root, self.l2 | 3) self.q(self.l2, self.l3 | 3) self.q(self.l3+8, 0x20000 | 3) self.q(self.l3+16, 0x30000 | 3) self.put(0x20000, b'A'*0x4000) self.put(0x30000, b'B'*0x4000) self.rows = [dict(root=hex(self.root), format=0, flags='0x2', mappings_equal=True)] def put(self, address, raw): self.mem.update((address+i, value) for i, value in enumerate(raw)) def q(self, address, value): self.put(address, struct.pack('