On January 29,2017 a patch (9b457baf8d46329f7d7ee2aa084022bb0df88551)by mirabilos m@mirbsd.org was accepted in the repository.  I have a few questions on this patch.

 

1)      The patch created a new file syscall6.S in the i386 directory.   It seems functionally equivalent to the syscall.S.  Both process 6 arguments plus the NR.  Both use the exact same registers.   Only an alignment directive has been added and the order of loading the registers is reverse.  It also appears that glib does not have a special syscall6.S.  Why did we go this route special casing 6 argument syscalls only?

2)      The LOADARGS_6, RESTOREARGS_6 and ASMFMT_6 defines are removed from <bits/syscall.h>.  It is not clear why from the patch.

3)      There seems to be a deficiency in the syscall setup that is not present in glibc making it impossible to get a backtrace from a syscall.  For example, If one looks at uclibs-ng’s sysdeps.h in i386, one can see cfi_adjust_cfa_offset/cfi_rel_offset usage in the _PUSH_ARGS_1 and _POP_ARGS_N macros allowing backtrace information to be present on the stack.  However, syscall/syscall6.S as well as bits/syscalls.h do not allow for this. In addition, it appears that glibc does have this mechanism in its syscall.S.

 

Thoughts anyone?

 

Thanks,

----
John Ata, CISSP

Senior Principal Software Engineer

Electronics Systems

STOP Operating System Software Development

 

T 703-563-8115 | F 703-668-4359 | john.ata@baesystems.com

http://www.baesystems.com/csp

cid:image001.png@01D138BC.8E54E330cid:image003.png@01D138BC.8E54E330cid:image004.png@01D138BC.8E54E330cid:image006.png@01D138BC.8E54E330