On 05/07/2018 03:25 PM, Jan Kiszka wrote:
> On 2018-05-07 14:12, Ralf Ramsauer wrote:
>> Don't jump directly to inmate_main from assembly, jump to c_entry.
>>
>> At the moment, c_entry does nothing else than jumping to inmate_main and
>> ending up in an endless loop if inmate_main returns.
>>
>> Later we can use c_entry to do platform independant setup/checks.
>>
>> Signed-off-by: Ralf Ramsauer <[email protected]>
>> ---
>>  inmates/lib/arm-common/Makefile.lib | 2 +-
>>  inmates/lib/arm/header.S            | 2 +-
>>  inmates/lib/arm64/header.S          | 2 +-
>>  inmates/lib/setup.c                 | 9 +++++++++
>>  inmates/lib/x86/Makefile            | 2 +-
>>  inmates/lib/x86/header.S            | 2 +-
>>  6 files changed, 14 insertions(+), 5 deletions(-)
>>  create mode 100644 inmates/lib/setup.c
>>
>> diff --git a/inmates/lib/arm-common/Makefile.lib 
>> b/inmates/lib/arm-common/Makefile.lib
>> index fb3b6585..9edb2d9f 100644
>> --- a/inmates/lib/arm-common/Makefile.lib
>> +++ b/inmates/lib/arm-common/Makefile.lib
>> @@ -36,7 +36,7 @@
>>  # THE POSSIBILITY OF SUCH DAMAGE.
>>  #
>>  
>> -objs-y := ../string.o ../cmdline.o
>> +objs-y := ../string.o ../cmdline.o ../setup.o
>>  objs-y += printk.o gic.o timer.o
>>  objs-y += uart-jailhouse.o uart-pl011.o uart-8250.o uart-8250-8.o
>>  objs-y += uart-xuartps.o uart-mvebu.o uart-hscif.o uart-scifa.o uart-imx.o
>> diff --git a/inmates/lib/arm/header.S b/inmates/lib/arm/header.S
>> index d0a8f219..be1d23a8 100644
>> --- a/inmates/lib/arm/header.S
>> +++ b/inmates/lib/arm/header.S
>> @@ -85,6 +85,6 @@ __reset_entry:
>>  
>>  2:  ldr     sp, =stack_top
>>  
>> -    b       inmate_main
>> +    b       c_entry
>>  
>>      .ltorg
>> diff --git a/inmates/lib/arm64/header.S b/inmates/lib/arm64/header.S
>> index e284aa5a..011aeb63 100644
>> --- a/inmates/lib/arm64/header.S
>> +++ b/inmates/lib/arm64/header.S
>> @@ -57,7 +57,7 @@ __reset_entry:
>>  
>>      isb
>>  
>> -    b       inmate_main
>> +    b       c_entry
>>  
>>  handle_irq:
>>      bl      vector_irq
>> diff --git a/inmates/lib/setup.c b/inmates/lib/setup.c
>> new file mode 100644
>> index 00000000..ed35b6f8
>> --- /dev/null
>> +++ b/inmates/lib/setup.c
>> @@ -0,0 +1,9 @@
>> +#include <inmate.h>
>> +
>> +void __attribute__((noreturn)) c_entry(void);
>> +
>> +void __attribute__((noreturn)) c_entry(void)
>> +{
>> +    inmate_main();
>> +    spin_forever();
> 
> When spin_forever/halt used like that, we should ensure first that
> interrupts are disabled.
> 
>> +}
>> diff --git a/inmates/lib/x86/Makefile b/inmates/lib/x86/Makefile
>> index de4d74b7..6561d0cf 100644
>> --- a/inmates/lib/x86/Makefile
>> +++ b/inmates/lib/x86/Makefile
>> @@ -41,7 +41,7 @@ include $(INMATES_LIB)/Makefile.lib
>>  always := lib.a lib32.a
>>  
>>  TARGETS := header.o hypercall.o ioapic.o printk.o smp.o
>> -TARGETS += ../pci.o ../string.o ../cmdline.o
>> +TARGETS += ../pci.o ../string.o ../cmdline.o ../setup.o
>>  TARGETS_64_ONLY := int.o mem.o pci.o timing.o
>>  
>>  ccflags-y := -ffunction-sections
>> diff --git a/inmates/lib/x86/header.S b/inmates/lib/x86/header.S
>> index 95c7a5a4..1df4345b 100644
>> --- a/inmates/lib/x86/header.S
>> +++ b/inmates/lib/x86/header.S
>> @@ -116,7 +116,7 @@ start64:
>>      mov $bss_qwords,%rcx
>>      rep stosq
>>  
>> -    mov $inmate_main,%rbx
>> +    mov $c_entry,%rbx
>>  
>>  call_entry:
>>      mov $stack_top,%rsp
>>
> 
> x86 has assembly code after the call that also does cli; hlt. That can
> go when moving it to C.

Unfortunatelly it can't go, as the stop label is referenced in early
bootup code...

  Ralf

> 
> And you forgot header-32.S on x86.
> 
> Might be worth checking at some point if there is more to convert,
> though we would then need arch_c_entry() as well.
> 
> Jan
> 

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to