Greetings. 

I have merged MIPS port with 4.0.0 release. Now I would like to clean up my 
code and need to remove many small issues that I did not fix during the porting 
before making the code public. In fact, most of the current problems are 
related to toolchains:

1. The first problem is a position independent code. Could you please describe 
me seL4' vision about it? muclibs is building with -fPIC, but everything else 
doesn't, right? I have a very tricky set of GCC’ flags, related to MIPS’ GOT, 
small data, abicalls, pic/non-pic, etc, and many of them are not working 
together.

2. MIPS assembler has several features, one of them is that the -O0 code 
requires having an addition space above the top of the stack for 4 registers: 

> 43b610: 27bdffe8 addiu sp,sp,-24  <— start of the function
> 43b614: afbf0014 sw ra,20(sp)
> 43b618: afbe0010 sw s8,16(sp)
> 43b61c: afb0000c sw s0,12(sp)
> 43b620: 03a0f021 move s8,sp     <— frame stack
> 43b624: afc40018 sw a0,24(s8)   <— save 1st arg for a subroutine call
> 43b628: afc5001c sw a1,28(s8)   <— save 2nd arg for the subroutine
> 43b62c: afc60020 sw a2,32(s8)   <— save 3rd arg for  the subroutine


So, each time when I am allocating new stack I should return not top of the 
stack, but top_of_the_stack - 4*sizeof(seL4_Word). As result, 
sel4utils_configure_thread_config becomes platform specific. Could you please 
consider a possibility to put it into the «arch» as 
sel4utils_arch_init_context, or add something like «sel4utils_arch_configure». 
Also, it is important: this is an issue only for -O0 code, as far I see, -O2 
uses different methods for arguments passing. I am trying to build toolchains 
which do not use frame pointer this style for -O0 code, but I am not sure about 
the result. 

3. I really like how you redesigned declaration syscalls. Now I have a freedom 
to modify syscalls and do not care about the mainline declarations because now 
there are syscall wrappers. However, my toolchain generates very poor code for 
CONFIG_LIB_SEL4_PUBLIC_SYMBOLS  and «DEFAULT» — I have proper working code only 
for CONFIG_LIB_SEL4_INLINE_INVOCATIONS. What is the conceptual difference of 
these declaration attributes, what they affect? 

4. Could you please tell me what was the C equivalent of this asm code: 

.global __syscall
.type __syscall,%function
__syscall:
    sub sp, sp, #4
    push {r5,r6}
    adr r5, 1f
    ldr r6, 1f
    ldr r5, [r5,r6]
    str r5, [sp, #8]
    pop {r5, r6}
    pop {pc}

.hidden __sysinfo
1:  .word __sysinfo-1b

something similar to __syscall6 from libmuslc/arch/<arch>_sel4/syscall_arch.h, 
right? 


Thank you.

P/s    Happy new year/merry xmass/happy holidays! 



-- 
Vasily A. Sartakov
[email protected]





_______________________________________________
Devel mailing list
[email protected]
https://sel4.systems/lists/listinfo/devel

Reply via email to