libk  Check-in [6022ec08ab]

Overview
Comment:Push r15 in linux x64 syscall This was causing the static, release, build of kcli.testbin to subtly segfault shortly after writing the first buffer. Still not sure why kcore.testbin seemingly wasn't affected, nor why the shared build still breaks worse.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 6022ec08abfd871e309c6538becb465702b77cfb76e3f76b3f7ac98af7986aa7
User & Date: glowpelt on 2020-01-30 07:13:19
Other Links: manifest | tags
Context
2020-01-30
07:15
Merge the shared library build fixes into trunk check-in: d49a706cc4 user: glowpelt tags: trunk
07:13
Push r15 in linux x64 syscall This was causing the static, release, build of kcli.testbin to subtly segfault shortly after writing the first buffer. Still not sure why kcore.testbin seemingly wasn't affected, nor why the shared build still breaks worse. check-in: 6022ec08ab user: glowpelt tags: trunk
2020-01-19
04:12
Partially fix shared library build by making sure that data_objects are linked in. This means that internal.ident.o is properly linked in, but internal.ident.o itself still references undefined symbols, so this is only a partial fix. check-in: 0d71b71cc8 user: glowpelt tags: trunk
Changes

Modified mod/kcore/syscall.fn.x86.lin.64.s from [3fa83c18de] to [a731f1dad0].

    32     32   	;         r12 = u64* errno
    33     33   	; arg 0 = s64* result
    34     34   	; arg 1 = errno ptr
    35     35   	; arg 2 = syscall num
    36     36   	; arg 3 = valency
    37     37   	; arg 4 = args ptr
    38     38   
    39         -	; we use two registers that are supposed
           39  +	; we use three registers that are supposed
    40     40   	; to be callee-saved, so we need to
    41     41   	; push them to the stack and then pop
    42     42   	; them back off just before the fn rets.
    43     43   	push rbx
    44     44   	push r12
           45  +	push r15
    45     46   
    46     47   	; store the locals in registers that
    47     48   	; are guaranteed not to be clobbered,
    48     49   	; saving us some cycles pushing to
    49     50   	; and popping back from the stack
    50     51   	mov rbx, ccall.reg.0
    51     52   	mov r12, ccall.reg.1
................................................................................
    99    100   	; the errno to its positive equivalent,
   100    101   	; and store -1 in the return variable
   101    102   	.error: neg sys.reg.ret
   102    103   	        mov qword [rbx], -1
   103    104   			mov       [r12], sys.reg.ret
   104    105   			jmp .return
   105    106   
   106         -	.return: pop r12
          107  +	.return: pop r15 
          108  +		 pop r12
   107    109   	         pop rbx
   108    110   			 ret