Bug #1528
ktrace does not show proper return values for pipe(2)
| Status: | New | Start date: | ||
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | - | % Done: | 0% |
|
| Category: | - | |||
| Target version: | - |
Description
When ktracing a pipe syscall, the output is:
57705 a.out CALL pipe
57705 a.out RET pipe 3
However, the return value of pipe is 0, and the returned value for the
file descs is {3, 4}.
Related todos
History
Updated by Beket over 3 years ago
I've added a kprintf in ktrsysret() and here is what printed:
1126 a.out CALL pipe
1126 a.out RET ret=3 error=0 code=42 pipe 3
Question is why `ret' contains the first file descriptor of the pair at all.
(and not zero as ought to)
Stathis
Updated by corecode over 3 years ago
Stathis Kamperis (via DragonFly issue tracker) wrote:
> Stathis Kamperis <ekamperi@gmail.com> added the comment:
>
> I've added a kprintf in ktrsysret() and here is what printed:
>
> 1126 a.out CALL pipe
> 1126 a.out RET ret=3 error=0 code=42 pipe 3
>
> Question is why `ret' contains the first file descriptor of the pair at all.
> (and not zero as ought to)
This is because sys_pipe returns both fds as return value, namely
sysmsg_fds[0] and sysmsg_fds[1]. However ktrsysret is only called with
sysmsg_result, which covers only the first fd.
I guess the pipe libc glue code copies this result into the array.
cheers
simon