Hi everyone,

I've been getting the following error:

fatal: Unable to find destination for addr 0x8000000000000048 on
system.piobus

The following microbenchmark reproduces the problem:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("doing test\n");
    fflush(stdout);
    asm("in $72, %eax\n");
    return 0;
}

To compile: gcc test.c -o test (I used gcc-5.4.0 to compile, in case that
helps)

To run: The simplest configuration this error occurs in is
configs/learning_gem5/part1/simple.py (I changed the path/benchmark name to
the test executable).  The same error happens for other systems though.  I
ran it with the current HEAD of the public/gem5 branch.

After looking through some traces, I noticed that the X86 "in" instruction
is the source of this large address.  More specifically, the address
causing the problem is created when the PhysAddrPrefixIO (a constant set to
0x8000000000000000 in x86_traits.hh) is bitwise OR’d with the immediate
(0x48) to create the physical address for the third micro-op of the "in"
instruction in tlb.cc: translateInt().  Thus the (physical) address seems
to be legitimate, but is not mapped and thus causes the above error.

My question is: is this the expected behavior for the "in" instruction?  If
so, how should we go about mapping this address properly?  Or is the
mapping not the problem and the PhysAddrPrefixIO value is simply
out-of-date?  I noticed that PhysAddrPrefixIO was set to 0x8000000000000000
a long time ago.

Thanks in advance for any help you may be able to provide.

Thanks,
Matt
_______________________________________________
gem5-users mailing list
gem5-users@gem5.org
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to