예제 #1
0
def test_segment_relocations():
    memory = MemoryDict()

    temp_segment = RelocatableValue(segment_index=-1, offset=0)
    memory[5] = temp_segment + 2
    assert memory[5] == RelocatableValue(segment_index=-1, offset=2)
    relocation_target = RelocatableValue(segment_index=4, offset=25)
    memory.add_relocation_rule(src_ptr=temp_segment, dest_ptr=relocation_target)
    assert memory[5] == relocation_target + 2

    memory[temp_segment + 3] = 17
    memory.relocate_memory()
    assert memory.data == {
        5: relocation_target + 2,
        relocation_target + 3: 17,
    }
예제 #2
0
def test_segment_relocation_failures():
    memory = MemoryDict()

    relocation_target = RelocatableValue(segment_index=4, offset=25)
    with pytest.raises(AssertionError, match='src_ptr.segment_index must be < 0, src_ptr=1:2.'):
        memory.add_relocation_rule(src_ptr=RelocatableValue(
            segment_index=1, offset=2), dest_ptr=relocation_target)

    with pytest.raises(AssertionError, match='src_ptr.offset must be 0, src_ptr=-3:2.'):
        memory.add_relocation_rule(src_ptr=RelocatableValue(
            segment_index=-3, offset=2), dest_ptr=relocation_target)

    memory.add_relocation_rule(src_ptr=RelocatableValue(
        segment_index=-3, offset=0), dest_ptr=relocation_target)

    with pytest.raises(
            AssertionError, match='The segment with index -3 already has a relocation rule.'):
        memory.add_relocation_rule(src_ptr=RelocatableValue(
            segment_index=-3, offset=0), dest_ptr=relocation_target)