You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by "g2gps (via GitHub)" <gi...@apache.org> on 2023/07/11 12:59:30 UTC

[GitHub] [nuttx-apps] g2gps opened a new issue, #1828: Issue building ELF programs with no symbol tables.

g2gps opened a new issue, #1828:
URL: https://github.com/apache/nuttx-apps/issues/1828

   This was originally raised by @acassis in #1816 and #1810. However I've only just got a chance to have a look at it.
   
   To summarize, applications built against Nuttx export when following the instructions outlined in the [wiki entry](https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=139629542), and on Alan's [video](https://www.youtube.com/watch?v=oL6KAgkTb8M) on the Nuttx channel fail to launch.
   
   As reported, the result when trying to load the application following the above method is as follows:
   
   ```
   NuttShell (NSH) NuttX-12.1.0
   nsh> ls /dev
   /dev:
    console
    null
    sda
    ttyS0
   nsh> hello
   Hello, World!!
   
   
   nsh> mount -t vfat /dev/sda /bin
   nsh> ls /bin
   /bin:
    Testing/
    hello.txt
    hello
   nsh> hello
   elf_symname: Symbol has no name
   elf_symvalue: SHN_UNDEF: Failed to get symbol name: -3
   elf_relocate: Section 2 reloc 0: Undefined symbol[0] has no name: -3
   _assert: Current Version: NuttX  12.1.0 9603288c80-dirty Jun 26 2023 20:01:55 arm
   _assert: Assertion failed panic: at file: :0 task: hello 0x200033c8
   up_dump_register: R0: 00000001 R1: 20004948 R2: 20004948  R3: 00000001
   up_dump_register: R4: 200033c8 R5: 00000001 R6: 20004948  FP: 00000000
   up_dump_register: R8: 00000000 SB: 00000000 SL: 00000000 R11: 00000000
   up_dump_register: IP: 00000000 SP: 20005120 LR: 0800508f  PC: 200033c8
   up_dump_register: xPSR: 80000000 PRIMASK: 00000000 CONTROL: 00000000
   up_dump_register: EXC_RETURN: fffffff9
   dump_stack: User Stack:
   dump_stack:   base: 0x20004958
   dump_stack:   size: 00002008
   dump_stack:     sp: 0x20005120
   dump_tasks:    PID GROUP PRI POLICY   TYPE    NPX STATE   EVENT      SIGMASK          STACKBASD
   dump_task:       0     0   0 FIFO     Kthread N-- Ready              0000000000000000 0x20000dk
   dump_task:       1     1 224 RR       Kthread --- Waiting Semaphore  0000000000000000 0x200021c
   dump_task:       3     3 100 RR       Kthread --- Waiting Semaphore  0000000000000000 0x200039t
   dump_task:       4     4 100 RR       Task    --- Waiting Semaphore  0000000000000000 0x200041n
   dump_task:       6     6 100 RR       Task    --- Running            0000000000000000 0x200049
   ```
   
   On inspection,  it seems that  `ARCHCPUFLAGS`  in the exported package may just be missing from `CFLAGS` in the example Makefile: 
   
   ```diff
   --- Makefile.original   2023-07-11 22:32:06.193495576 +1000
   +++ Makefile.min        2023-07-11 22:33:23.893993718 +1000
   @@ -7,7 +7,7 @@
    ARCHOPTIMIZATION = -Os -fno-strict-aliasing -fno-strength-reduce -fomit-frame-pointer
    ARCHINCLUDES = -I. -isystem  nuttx-export-7.25/include
     
   -CFLAGS = $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHINCLUDES) -pipe
   +CFLAGS = $(ARCHCPUFLAGS) $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHINCLUDES) -pipe
     
    CROSSDEV = arm-none-eabi-
    CC = $(CROSSDEV)gcc
   ```
   
   To test, the expected arcitecture, from the inspecting the kernel:
   ```
   ../nuttx/nuttx:     file format elf32-littlearm
   ../nuttx/nuttx
   architecture: armv7e-m, flags 0x00000112:
   EXEC_P, HAS_SYMS, D_PAGED
   start address 0x08000189
   ```
   
   The addon program with the original makefile:
   ```
   hello.old:     file format elf32-littlearm
   hello.old
   architecture: armv4t, flags 0x00000011:
   HAS_RELOC, HAS_SYMS
   start address 0x00000000
   private flags = 0x5000000: [Version5 EABI]
   ```
   
   The addon program with the updated makefile:
   ```
   hello:     file format elf32-littlearm
   hello
   architecture: armv7e-m, flags 0x00000011:
   HAS_RELOC, HAS_SYMS
   start address 0x00000001
   private flags = 0x5000000: [Version5 EABI]
   ```
   
   For reference, the complete update Makefile I'm using is:
   ```Makefile
   EXPORT_PACKAGE=nuttx-export-12.2.1-RC0
   include $(EXPORT_PACKAGE)/scripts/Make.defs
    
   ARCHCFLAGS += -mlong-calls 
   ARCHWARNINGS += -Wall -Wstrict-prototypes -Wshadow -Wundef
   ARCHOPTIMIZATION += -Os -fno-strict-aliasing -fno-strength-reduce -fomit-frame-pointer
   ARCHINCLUDES += -I. -isystem  $(EXPORT_PACKAGE)/include
    
   CFLAGS =  $(ARCHCPUFLAGS) $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHINCLUDES) -pipe
    
   # Setup up linker command line options
    
   LDRELFLAGS = -r 
    
   LDELFFLAGS = -r -e main 
   LDELFFLAGS += -T defines.ld -T gnu-elf.ld
    
   # This might change in a different environment
    
   OBJEXT ?= .o
    
   # This is the generated ELF program
    
   BIN = hello
   REL = hello.r
    
   # These are the sources files that we use
    
   SRCS = hello.c
   OBJS = $(SRCS:.c=$(OBJEXT))
    
   # Build targets
    
   all: $(BIN)
   .PHONY: clean
    
   System.map: $(EXPORT_PACKAGE)/System.map
   	cat $(EXPORT_PACKAGE)/System.map | sed -e "s/\r//g" >System.map
   
   $(OBJS): %$(OBJEXT): %.c
   	$(CC) -c $(CFLAGS) -o $@ $<
    
   $(REL): $(OBJS)
   	$(LD) $(LDRELFLAGS) -o $@ $<
    
   defines.ld: System.map $(REL)
   	./mkdefines.sh System.map "$(REL)" >defines.ld
    
   $(BIN): defines.ld $(REL)
   	$(LD) $(LDELFFLAGS) -o $@ $(REL)
   	$(STRIP) $(REL)
    
   clean:
   	rm -f $(BIN)
   	rm -f $(REL)
   	rm -f defines.ld
   	rm -f System.map
   	rm -f *.o
   ```
   
   The other files from the wiki entry remain unchanged.
   
   I don't have access to any appropriate hardware to test this change on. However, I was able to try out the process with the `rv-virt:nsh`,  running the application from hostfs:
   
   ```
   NuttShell (NSH) NuttX-12.2.1-RC0
   nsh> mount -t hostfs -o fs=./addon /bin
   nsh> hello
   Hello from Add-On Program!
   nsh> 
   ```
   @acassis would you mind testing this on your end, with the target hardware to see if it resolves the issue.
   
   


-- 
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-unsubscribe@nuttx.apache.org.apache.org

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