On Wed, Dec 8, 2010 at 5:36 AM, <[email protected]> wrote:

>
> Hi,
>
> I've just started using marss. I've run simulations successfully with the
> sample images. However, I have to use Android for my phd (the x86 version of
> Android). The Android image works fine with QEMU, but I get this error when
> I run PTLSim:
>
>  Completed        249000 cycles,         81357 commits:    259706 Hz,
>  108557 insns/sec: rip 00000000c01f6e1cqemu-system-x86_64:
> ptlsim/build/core/ooopipe.cpp:2181: int
> OutOfOrderModel::ReorderBufferEntry::commit(): Assertion `physreg->data'
> failed.
>
> Aborted
>
>
> After analyzing the log files generated by PTLSim (with loglevel set to 99)
> I realized that there was a problem with some x86 instructions that are not
> implemented in marss:
>
> 0x07  - POP ES - Pop top of stack into ES; increment stack pointer.
> 0x1F  - POP DS - Pop top of stack into DS; increment stack pointer.
> 0x1A1 - POP FS - Pop top of stack into FS; increment stack pointer.
>
> So I modified the decoder in order to implement these x86 instructions. I
> reviewed the code for the corresponding PUSH instructions, since the PUSH
> ES, PUSH DS and PUSH FS were already implemented. These were the
> modifications to the decode-fast.cpp file:
>
> $ diff a/ptlsim/x86/decode-fast.cpp b/ptlsim/x86/decode-fast.cpp
>
> 61a62,83
>
>     case 7: {
>>
>
>         // 0x07 pop es
>>
>
>           // 0x17 pop ss
>>
>
>           // 0x1f pop ds
>>
>
>         EndOfDecode();
>>
>
>
>>
>         int sizeshift = 2;
>>
>
>         int size = (1 << sizeshift);
>>
>
>         int seg_reg = (op >> 3);
>>
>
>         int r = REG_temp0;
>>
>
>
>>
>         TransOp ldp(OP_ld, r, REG_ctx, REG_imm, REG_zero, size,
>>
>
>                     offsetof_t(Context, segs[seg_reg].selector));
>>
>
>         ldp.internal = 1;
>>
>
>         this << ldp;
>>
>
>
>>
>         this << TransOp(OP_ld, REG_mem, REG_rsp, REG_imm, r, sizeshift,
>> -size);
>>
>
>         this << TransOp(OP_add, REG_rsp, REG_rsp, REG_imm, REG_zero, 3,
>> size);
>>
>
>
>>
>         push_op = true;
>>
>
>         break;
>>
>
>     }
>>
>
> 907a930,948
>
>   case 0x1a1: {
>>
>
>     // pop fs
>>
>
>     EndOfDecode();
>>
>
>
>>
>     int sizeshift = 2; // fix 32 bit shift of stack
>>
>
>     int size = (1 << sizeshift);
>>
>
>     int seg_reg = (op >> 3) & 7;
>>
>
>     int r = REG_temp0;
>>
>
>
>>
>     TransOp ldp(OP_ld, r, REG_ctx, REG_imm, REG_zero, size,
>>
>
>                 offsetof_t(Context, segs[seg_reg].selector));
>>
>
>     ldp.internal = 1;
>>
>
>     this << ldp;
>>
>
>
>>
>     this << TransOp(OP_ld, REG_mem, REG_rsp, REG_imm, r, sizeshift, -size);
>>
>
>     this << TransOp(OP_add, REG_rsp, REG_rsp, REG_imm, REG_zero, 3, size);
>>
>
>     break;
>>
>
>   }
>>
>
>
>>
> Thanks for finding the issue and try to fix it. One quick thing I noticed
that all these 'pop' instructions read from stack and store into CPU's
Segment registers. So your code should be in following order:
1. Load data from stack into some temporary register:
2. Store data from temporary register to CPU Context's segment register
(here you have load that value to REG_ctx which is incorrect)
3. Increase the stack pointer



After applying these changes, the Android image works successfully.
> Nevertheless, since this is the first time I've tried to modify marss I'm
> not sure whether I've implemented these instructions correctly. Is there any
> problem with these modifications? Is there any better way to solve this
> problem (for example, by using assists)?
>
> This is a great news that Android is working on Marss. If its possible, I
would like to put the android disk image on our website for others to
download, can you share that image with us?

- Avadh


> Thank you very much,
>
> jarnau
>
>
> _______________________________________________
> http://www.marss86.org
> Marss86-Devel mailing list
> [email protected]
> https://www.cs.binghamton.edu/mailman/listinfo/marss86-devel
>
_______________________________________________
http://www.marss86.org
Marss86-Devel mailing list
[email protected]
https://www.cs.binghamton.edu/mailman/listinfo/marss86-devel

Reply via email to