Bug #1528
open
ktrace does not show proper return values for pipe(2)
Added by corecode about 15 years ago.
Updated over 3 years ago.
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}.
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
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_fds0 and sysmsg_fds1. 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
- Description updated (diff)
- Category set to Kernel
- Status changed from New to In Progress
- Assignee changed from 0 to tuxillo
- Target version set to 3.8
- Target version changed from 3.8 to 6.0
Also available in: Atom
PDF