I found this trying to work on "#3740: Libld does not load incrementially linked object file”. When I updated it hung loading the text segment (line 1005 in rtl-elf.c, hard hang, debug output below). I tracked it down to a change that adds locking to the allocator.
- BSP: xilinx_zynq_a9_qemu. Followed instructions in rtems-libbsd README.md. - rtems version: works in bdec62c, broken in 22afb03. - rtems-libbsd: You need to go back to before renaming of some SMP symbols, I went back to 5432c6b. **** This is the change that broke it: [dufault@gen6 rtems]$ git log --pretty=format:"%h %ad %s" bdec62c...22afb03 22afb03 Mon Feb 18 11:46:22 2019 +1100 libdl/alloc: Add a locking interface to the allocator. [dufault@gen6 rtems]$ **** Loading works in bdec62c: -> ld 0,0,"foo.o" value = 4070648 = 0x3e1cf8 -> foo() FOO value = 10 = 0xa -> **** Loading hangs in 22afb03: -> ld 0,0,”foo.o” **** HANG **** GDB output during hang and info on (extremely simple) downloaded object. In GDB attached to qemu you see the hang loading the text segment at line 1005 of rtl-elf.c: (gdb) target remote :1234 Remote debugging using :1234 bsp_start_vector_table_end () at /home/dufault/development/rtems/kernel/rtems/c/src/lib/libbsp/arm/xilinx-zynq/../../../../../../bsps/arm/shared/start/start.S:146 146 mov r5, r1 /* machine type number or ~0 for DT boot */ (gdb) b rtl-elf.c:1005 Breakpoint 1 at 0x13a0a6: file /home/dufault/development/rtems/kernel/rtems/c/src/../../cpukit/libdl/rtl-elf.c, line 1005. (gdb) c Continuing. Breakpoint 1, rtems_rtl_elf_loader (obj=0x3e1cf8, fd=43, sect=0x3e1eb8, data=0x2928a8) at /home/dufault/development/rtems/kernel/rtems/c/src/../../cpukit/libdl/rtl-elf.c:1005 1005 ssize_t r = read (fd, base_offset, len); (gdb) next ^C *** HANG HERE *** Program received signal SIGINT, Interrupt. 0x0015bd4a in _CPU_Thread_Idle_body (ignored=0) at /home/dufault/development/rtems/kernel/rtems/c/src/../../cpukit/score/cpu/arm/armv7-thread-idle.c:32 32 __asm__ volatile ("wfi"); (gdb) **** Info on downloaded object. It’s just a simple “.o” file with extra symbols stripped. Zynq dufault@gen6 fubar]$ cat foo.c #include <stdio.h> extern void foo(void); void foo(void) { puts("FOO\n"); } Zynq dufault@gen6 fubar]$ arm-rtems5-gcc -march=armv7-a -mthumb -c foo.c Zynq dufault@gen6 fubar]$ arm-rtems5-strip --strip-unneeded foo.o Zynq dufault@gen6 fubar]$ arm-rtems5-readelf --all foo.o ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: REL (Relocatable file) Machine: ARM Version: 0x1 Entry point address: 0x0 Start of program headers: 0 (bytes into file) Start of section headers: 552 (bytes into file) Flags: 0x5000000, Version5 EABI Size of this header: 52 (bytes) Size of program headers: 0 (bytes) Number of program headers: 0 Size of section headers: 40 (bytes) Number of section headers: 11 Section header string table index: 10 Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .text PROGBITS 00000000 000034 000014 00 AX 0 0 2 [ 2] .rel.text REL 00000000 0001bc 000018 08 I 8 1 4 [ 3] .data PROGBITS 00000000 000048 000000 00 WA 0 0 1 [ 4] .bss NOBITS 00000000 000048 000000 00 WA 0 0 1 [ 5] .rodata PROGBITS 00000000 000048 000005 00 A 0 0 4 [ 6] .comment PROGBITS 00000000 00004d 000065 01 MS 0 0 1 [ 7] .ARM.attributes ARM_ATTRIBUTES 00000000 0000b2 00002f 00 0 0 1 [ 8] .symtab SYMTAB 00000000 0000e4 0000c0 10 9 10 4 [ 9] .strtab STRTAB 00000000 0001a4 000015 00 0 0 1 [10] .shstrtab STRTAB 00000000 0001d4 000051 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings), I (info), L (link order), O (extra OS processing required), G (group), T (TLS), C (compressed), x (unknown), o (OS specific), E (exclude), y (purecode), p (processor specific) There are no section groups in this file. There are no program headers in this file. There is no dynamic section in this file. Relocation section '.rel.text' at offset 0x1bc contains 3 entries: Offset Info Type Sym.Value Sym. Name 00000004 0000022f R_ARM_THM_MOVW_AB 00000000 .LC0 00000008 00000230 R_ARM_THM_MOVT_AB 00000000 .LC0 0000000c 00000b0a R_ARM_THM_CALL 00000000 puts There are no unwind sections in this file. Symbol table '.symtab' contains 12 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 NOTYPE LOCAL DEFAULT 5 $d 2: 00000000 0 NOTYPE LOCAL DEFAULT 5 .LC0 3: 00000000 0 NOTYPE LOCAL DEFAULT 1 $t 4: 00000000 0 SECTION LOCAL DEFAULT 1 5: 00000000 0 SECTION LOCAL DEFAULT 3 6: 00000000 0 SECTION LOCAL DEFAULT 4 7: 00000000 0 SECTION LOCAL DEFAULT 5 8: 00000000 0 SECTION LOCAL DEFAULT 6 9: 00000000 0 SECTION LOCAL DEFAULT 7 10: 00000001 20 FUNC GLOBAL DEFAULT 1 foo 11: 00000000 0 NOTYPE GLOBAL DEFAULT UND puts No version information found in this file. Attribute Section: aeabi File Attributes Tag_CPU_name: "7-A" Tag_CPU_arch: v7 Tag_CPU_arch_profile: Application Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-2 Tag_ABI_PCS_wchar_t: 4 Tag_ABI_FP_denormal: Needed Tag_ABI_FP_exceptions: Needed Tag_ABI_FP_number_model: IEEE 754 Tag_ABI_align_needed: 8-byte Tag_ABI_align_preserved: 8-byte, except leaf SP Tag_ABI_enum_size: int Tag_ABI_optimization_goals: Aggressive Debug Tag_CPU_unaligned_access: v6 **** Disassembly Zynq dufault@gen6 fubar]$ arm-rtems5-objdump --disassemble --source foo.o foo.o: file format elf32-littlearm Disassembly of section .text: 00000000 <foo>: 0: b580 push {r7, lr} 2: af00 add r7, sp, #0 4: f240 0000 movw r0, #0 8: f2c0 0000 movt r0, #0 c: f7ff fffe bl 0 <puts> 10: bf00 nop 12: bd80 pop {r7, pc} Zynq dufault@gen6 fubar]$ Peter ----------------- Peter Dufault HD Associates, Inc. Software and System Engineering This email is delivered through the public internet using protocols subject to interception and tampering. _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel