Hi all,

I tried to run seL4 test suite on my ARM Cortex-A7 target board.

There is no error message when boot up seL4 kernel and boot strap test program on seL4 user land.

But I got a “data abort” message after call sel4utils_map_page(..vaddr) and do memset(vaddr, 0, PAGE_SIZE_4K);

 

There are some debug information list below.

 

<1> I add debug message before the program that happen data abort

diff --git a/libsel4utils/src/vspace/bootstrap.c b/libsel4utils/src/vspace/bootstrap.c

index c366a35..70d378a 100644

--- a/libsel4utils/src/vspace/bootstrap.c

+++ b/libsel4utils/src/vspace/bootstrap.c

@@ -107,13 +107,13 @@ static void *alloc_and_map(vspace_t *vspace, size_t size) {

 

             error = sel4utils_map_page(data->vka, data->vspace_root, frame.cptr, vaddr,

                                        seL4_AllRights, 1, objects, &num);

+               LOG_ERROR("my-hacker\n");

             if (error) {

                 vka_free_object(data->vka, &frame);

                 LOG_ERROR("Failed to map bootstrap frame at %p, error: %d", vaddr, error);

                 return NULL;

             }

+               LOG_ERROR("my-hacker alloc_and_map() before memset vaddr=0x%x\n",vaddr);

             /* Zero the memory */

             memset(vaddr, 0, PAGE_SIZE_4K);

 

 

<2>Printed messages:

 

ELF-loader started on CPU: ARM Ltd. Cortex-A7 r0p5

  paddr=[20000000..2051881f]

ELF-loading image 'kernel'

  paddr=[22000000..22032fff]

  vaddr=[e0000000..e0032fff]

  virt_entry=e0000000

ELF-loading image 'sel4test-driver'

  paddr=[22033000..22463fff]

  vaddr=[8000..438fff]

  virt_entry=15f50

Enabling MMU and paging

Jumping to kernel-image entry point...

 

Bootstrapping kernel

Booting all finished, dropped to user space

Warning: using printf before serial is set up. This only works as your

printf is backed by seL4_Debug_PutChar()

alloc_and_map@bootstrap.c:111 my-hacker

alloc_and_map@bootstrap.c:119 my-hacker alloc_and_map() before memset() vaddr=0xdf7fe000

 

<3>When happen data abort, the value of CPU registers:

r1:0

r3:0xdf7fe000

lr:0xcbe8

 

 

<4>Objdump sel4test-driver.

0000cbc8 <memset>:

    cbc8:       e3520000        cmp     r2, #0

    cbcc:       e92d4030        push    {r4, r5, lr}

    cbd0:       08bd8030        popeq   {r4, r5, pc}

    cbd4:       e0803002        add     r3, r0, r2

    cbd8:       e6ef1071        uxtb    r1, r1

    cbdc:       e3520002        cmp     r2, #2

    cbe0:       e5431001        strb    r1, [r3, #-1]

    cbe4:       e5c01000        strb    r1, [r0]

    cbe8:       98bd8030        popls   {r4, r5, pc}

    cbec:       e3520006        cmp     r2, #6

It seems to write virtual address 0xdf7ff000.

 

<5>The virtual address 0xdf7fe000 is not map in page table

 

 

It seems sel4utils_map_page() not create page table for user land program correctly.

Can anyone help me, how to solve this problem? Thanks!

 

 

Joyce Peng(彭美僑)