qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH for-1.2 v2] target-xtensa: return ENOSYS for uni


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH for-1.2 v2] target-xtensa: return ENOSYS for unimplemented simcalls
Date: Wed, 29 Aug 2012 11:34:29 +0100

On 29 August 2012 11:13, Max Filippov <address@hidden> wrote:
> On Wed, Aug 29, 2012 at 1:38 PM, Peter Maydell <address@hidden> wrote:
>> On 22 August 2012 19:03, Max Filippov <address@hidden> wrote:
>>> --- a/target-xtensa/xtensa-semi.c
>>> +++ b/target-xtensa/xtensa-semi.c
>>> @@ -218,6 +218,8 @@ void HELPER(simcall)(CPUXtensaState *env)
>>>
>>>      default:
>>>          qemu_log("%s(%d): not implemented\n", __func__, regs[2]);
>>> +        regs[2] = -1;
>>> +        regs[3] = ENOSYS;
>>>          break;
>>>      }
>>
>> This doesn't look right -- ENOSYS is a host errno, and may vary
>> between host OSes and CPU architectures. I would have thought you'd
>> want to return a value defined by whatever guest ABI we're
>> emulating here.
>
> That means also converting errno after open/close/read/write...
> Is there a way to reuse linux-user errno convertor in the softmmu target?

I don't think so, no.

I've just looked at the ARM semihosting code, and we also return
host errnos, though in the ARM case we can sort of justify this
because the definition of the SYS_ERRNO semihosting call says
"Whether errno is set or not, and to what value, is entirely
host-specific, except where the ANSI C standard defines the behavior"

...so although returning host errnos is not very useful in some
ways it's not in breach of the semihosting spec.

Since xtensa-semi.c currently works by returning host errnos
elsewhere I'm happy for this patch to go into 1.2 if you think
it merits it, and maybe look at the errno issue more generally
after that.

-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]