syscall: td_retval and zero return value
gerarra at tin.it
gerarra at tin.it
Wed Nov 10 06:00:28 PST 2004
>I have very little assembler/x86 knowledge.
>Could anyone please help me understand what it means to assign a
>non-zero value to td_retval in a system call when return value of the
>call is zero/success?
>
>I see in syscall() in src/sys/i386/i386/trap.c (btw is this the right
>place?) that in such circumstances value from td_retval[] is put into
>EAX and EDX registers and PSL_C (carry bit) is cleared in status/flags
>register in a stack frame of a calling process. But I don't understand
>what it practically means for the calling process.
>
>Thank you in advance.
The way the handler advice you about syscalls failing is setting (and not
clearing as you were saying) the carry bit in eflags register (about ia32).
A sort of errno (if you see in a C-coder view) value is set in eax (or,
alternatively, edx) to show the reason of failing. There's no way to know
where error code is set; you can just verify pratically.
You can find all these things on "Programmers handbook".
cheers,
rookie
More information about the freebsd-hackers
mailing list