g2gps opened a new pull request, #8643:
URL: https://github.com/apache/nuttx/pull/8643

   I'm working on implementing SV32 support (from #8602). I've opened a PR for 
my current WIP as a draft, as the implementation is not working as expected. 
   
   With my current implantation, I'm able to go through the mapping for the IO, 
kflash, ksram and pgram sections and enable the MMU, in  `qemu_rv_mm_init()`. 
From there, execution continues into and through `nx_start`, until ` 
nxmsg_initialize`. At which point the program falls over when accessing the 
global variable `g_msgfreelist` members.
   
   On inspecting with GDB, I can see that the initial values for the list have 
changed from when they were originally set with `struct list_node g_msgfreelist 
= LIST_INITIAL_VALUE(g_msgfreelist);`. Curiously, these changes occur during 
the both before and after the MMU is enabled. Including if I set the values 
again, just before using them (like this):
   ```
   void nxmsg_initialize(void)
   {
     FAR struct msgbuf_s *msg;
     g_msgfreelist.next = &g_msgfreelist;
     g_msgfreelist.prev = &g_msgfreelist;
   
   
     msg = (FAR struct msgbuf_s *)kmm_malloc(sizeof(*msg) *
                                             CONFIG_PREALLOC_MQ_MSGS);
     if (msg)
       {
         int i;
         for (i = 0; i < CONFIG_PREALLOC_MQ_MSGS; i++)
           {
             list_add_tail(&g_msgfreelist, &msg->node);
             msg++;
           }
       }
   }
   
   ```
   Obviously, something is incorrect either which the MMU mapping, or the 
linker script setup. However, I can't seem to see the issue. Possibly @pussuw  
could give me some pointers?
   
   If you want to build locally, I'm using the compiler suggested in the readme 
(`https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz`).
 I'm building like this:
   ```
   make distclean
   /tools/configure.sh rv-virt:knsh32
   make -j 16
   make export
   cd ../apps
   ./tools/mkimport.sh -z -x ../nuttx/nuttx-export-*.tar.gz
   make import
   cd ../nuttx
   ```
   Then running qemu with:
   ```
   qemu-system-riscv32 -semihosting -s -S -M virt,aclint=on -cpu rv32 -smp 1 
-bios none -kernel nuttx -nographic -serial mon:stdio
   ```
   I'm then using `gdb-multiarch` to debug.
   
   You'll need to apply the following to the 'apps' repo, in order to get the 
correct elf format, when linking. This would have to be amended as a separate 
PR, once resolved.
   ```
   diff --git a/import/Make.defs b/import/Make.defs
   index 0405e412b..7b6fb7ed5 100644
   --- a/import/Make.defs
   +++ b/import/Make.defs
   @@ -90,5 +90,6 @@ endif
    
    # ELF module definitions
    
   -LDELFFLAGS = -r -e _start -Bstatic
   +LDELFFLAGS = -melf32lriscv
   +LDELFFLAGS += -r -e _start -Bstatic
    LDELFFLAGS += $(addprefix -T,$(call 
CONVERT_PATH,$(TOPDIR)/scripts/gnu-elf.ld))
   ```
   
   Keep in mind that i've 'hacked in' support, to try and get things going, 
there isn't support for both SV32 and SV39 ATM.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to