zephyrproject-rtos / zephyr

Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
https://docs.zephyrproject.org
Apache License 2.0
10.59k stars 6.48k forks source link

llext: build error in `gen_device_deps.py` when exporting devices on `intel_adsp/ace15_mtpm` #79229

Open dcpleung opened 5 hours ago

dcpleung commented 5 hours ago

Describe the bug When building the llext.simple.loader_build test (under tests/subsys/llext/simple) with board intel_adsp/ace15_mtpm, the gen_device_deps.py errors out when unpacking data from the pre0 ELF file. It seems like the exported device symbols for LLEXT, e.g. __device_dts_ord_*_sym, are causing the failure.

To Reproduce Steps to reproduce the behavior:

  1. west build -p -b intel_adsp/ace15_mtpm tests/subsys/llext/simple/
  2. See error

Expected behavior No error.

Impact Annoyance for now. But a full CI run with the board is causing issue.

Logs and console output

[222/233] Generating device_deps.c
FAILED: zephyr/device_deps.c /tmp/build/zephyr/device_deps.c 
cd /tmp/build/zephyr && zephyr/venv/zephyr/bin/python3 zephyr/rtos/zephyr/scripts/build/gen_device_deps.py --output-source device_deps.c --output-graphviz dev_graph.dot --num-dynamic-devices 0 --kernel /tmp/build/zephyr/zephyr_pre0.elf --zephyr-base zephyr/rtos/zephyr --start-symbol _device_list_start
Traceback (most recent call last):
  File "zephyr/rtos/zephyr/scripts/build/gen_device_deps.py", line 168, in <module>
    main()
  File "zephyr/rtos/zephyr/scripts/build/gen_device_deps.py", line 128, in main
    parsed_elf = ZephyrElf(args.kernel, edt, args.start_symbol)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "zephyr/rtos/zephyr/scripts/build/elf_parser.py", line 130, in __init__
    self._device_parse_and_link()
  File "zephyr/rtos/zephyr/scripts/build/elf_parser.py", line 242, in _device_parse_and_link
    self._object_find_named('__device_', _on_device)
  File "zephyr/rtos/zephyr/scripts/build/elf_parser.py", line 186, in _object_find_named
    cb(sym)
  File "zephyr/rtos/zephyr/scripts/build/elf_parser.py", line 241, in _on_device
    self.devices.append(Device(self, sym))
                        ^^^^^^^^^^^^^^^^^
  File "zephyr/rtos/zephyr/scripts/build/elf_parser.py", line 109, in __init__
    self.obj_ordinals = self._data_native_read(ordinal_offset)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "zephyr/rtos/zephyr/scripts/build/elf_parser.py", line 32, in _data_native_read
    return struct.unpack(format, self.data[offset:offset + size])[0]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
struct.error: unpack requires a buffer of 4 bytes
ninja: build stopped: subcommand failed.

Environment (please complete the following information):

Additional context If changing line 185 in scripts/build/elf_parser.py from:

if sym.name.startswith(prefix):

to

if sym.name.startswith(prefix) and not sym.name.endswith('_sym'):

Then the build was fine. Not sure this would be the correct fix though.

dcpleung commented 5 hours ago

These are the __device_* symbols listed via nm:

4005c7f4 D __device_states_start
4005c816 D __device_states_end
a004210c 00000008 r __init___device_dts_ord_40  zephyr/rtos/zephyr/drivers/interrupt_controller/intc_dw_ace.c:179
a0042114 00000008 r __init___device_dts_ord_82  zephyr/rtos/zephyr/soc/intel/intel_adsp/common/mem_window.c:62
a004211c 00000008 r __init___device_dts_ord_83  zephyr/rtos/zephyr/soc/intel/intel_adsp/common/mem_window.c:65
a0042124 00000008 r __init___device_dts_ord_84  zephyr/rtos/zephyr/soc/intel/intel_adsp/common/mem_window.c:68
a004212c 00000008 r __init___device_dts_ord_85  zephyr/rtos/zephyr/soc/intel/intel_adsp/common/mem_window.c:71
a004214c 00000008 r __init___device_dts_ord_42  zephyr/rtos/zephyr/soc/intel/intel_adsp/common/ipc.c:344
a004215c 00000008 r __init___device_dts_ord_90  zephyr/rtos/zephyr/drivers/mm/mm_drv_intel_adsp_mtl_tlb.c:924
a004216c 00000008 r __init___device_dts_ord_65  zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a0042174 00000008 r __init___device_dts_ord_68  zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a004217c 00000008 r __init___device_dts_ord_73  zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a0042184 00000008 r __init___device_dts_ord_91  zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a004218c 00000008 r __init___device_dts_ord_92  zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a0042194 00000008 r __init___device_dts_ord_93  zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a004219c 00000008 r __init___device_dts_ord_94  zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00421a4 00000008 r __init___device_dts_ord_95  zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00421ac 00000008 r __init___device_dts_ord_96  zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00421bc 00000008 r __init___device_dts_ord_46  zephyr/rtos/zephyr/drivers/crypto/crypto_intel_sha.c:342
a00421cc 00000018 R __device_dts_ord_42 zephyr/rtos/zephyr/soc/intel/intel_adsp/common/ipc.c:344
a00421e4 00000018 R __device_dts_ord_90 zephyr/rtos/zephyr/drivers/mm/mm_drv_intel_adsp_mtl_tlb.c:924
a00421fc 00000018 R __device_dts_ord_85 zephyr/rtos/zephyr/soc/intel/intel_adsp/common/mem_window.c:71
a0042214 00000018 R __device_dts_ord_84 zephyr/rtos/zephyr/soc/intel/intel_adsp/common/mem_window.c:68
a004222c 00000018 R __device_dts_ord_83 zephyr/rtos/zephyr/soc/intel/intel_adsp/common/mem_window.c:65
a0042244 00000018 R __device_dts_ord_82 zephyr/rtos/zephyr/soc/intel/intel_adsp/common/mem_window.c:62
a004225c 00000018 R __device_dts_ord_40 zephyr/rtos/zephyr/drivers/interrupt_controller/intc_dw_ace.c:179
a0042274 00000018 R __device_dts_ord_68 zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a004228c 00000018 R __device_dts_ord_91 zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00422a4 00000018 R __device_dts_ord_65 zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00422bc 00000018 R __device_dts_ord_92 zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00422d4 00000018 R __device_dts_ord_93 zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00422ec 00000018 R __device_dts_ord_94 zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a0042304 00000018 R __device_dts_ord_95 zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a004231c 00000018 R __device_dts_ord_96 zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a0042334 00000018 R __device_dts_ord_73 zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a004234c 00000018 R __device_dts_ord_46 zephyr/rtos/zephyr/drivers/crypto/crypto_intel_sha.c:342
a0042364 R __device_deps_start
a0042426 R __device_deps_end
a0042578 00000008 r __device_dts_ord_40_sym zephyr/rtos/zephyr/drivers/interrupt_controller/intc_dw_ace.c:179
a0042580 00000008 r __device_dts_ord_42_sym zephyr/rtos/zephyr/soc/intel/intel_adsp/common/ipc.c:344
a0042588 00000008 r __device_dts_ord_46_sym zephyr/rtos/zephyr/drivers/crypto/crypto_intel_sha.c:342
a0042590 00000008 r __device_dts_ord_65_sym zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a0042598 00000008 r __device_dts_ord_68_sym zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00425a0 00000008 r __device_dts_ord_73_sym zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00425a8 00000008 r __device_dts_ord_82_sym zephyr/rtos/zephyr/soc/intel/intel_adsp/common/mem_window.c:62
a00425b0 00000008 r __device_dts_ord_83_sym zephyr/rtos/zephyr/soc/intel/intel_adsp/common/mem_window.c:65
a00425b8 00000008 r __device_dts_ord_84_sym zephyr/rtos/zephyr/soc/intel/intel_adsp/common/mem_window.c:68
a00425c0 00000008 r __device_dts_ord_85_sym zephyr/rtos/zephyr/soc/intel/intel_adsp/common/mem_window.c:71
a00425c8 00000008 r __device_dts_ord_90_sym zephyr/rtos/zephyr/drivers/mm/mm_drv_intel_adsp_mtl_tlb.c:924
a00425d0 00000008 r __device_dts_ord_91_sym zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00425d8 00000008 r __device_dts_ord_92_sym zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00425e0 00000008 r __device_dts_ord_93_sym zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00425e8 00000008 r __device_dts_ord_94_sym zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00425f0 00000008 r __device_dts_ord_95_sym zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
a00425f8 00000008 r __device_dts_ord_96_sym zephyr/rtos/zephyr/drivers/power_domain/power_domain_intel_adsp.c:106
dcpleung commented 5 hours ago

And readelf output of zephyr_pre0.elf:

There are 50 section headers, starting at offset 0x1859ec:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .imr              PROGBITS        a1048000 022150 0004e3 00  AX  0   0  8
  [ 2] .WindowVectors.text PROGBITS        a0030000 00a870 00016a 00  AX  0   0  4
  [ 3] .Level2InterruptVector.text PROGBITS        a0030180 00a9dc 000029 00  AX  0   0  4
  [ 4] .Level3InterruptVector.text PROGBITS        a00301c0 00aa08 000029 00  AX  0   0  4
  [ 5] .DebugExceptionVector.text PROGBITS        a0030200 00aa34 000029 00  AX  0   0  4
  [ 6] .NMIExceptionVector.text PROGBITS        a00302c0 00aa60 000029 00  AX  0   0  4
  [ 7] .KernelExceptionVector.text PROGBITS        a0030300 00aa89 000003 00  AX  0   0  1
  [ 8] .UserExceptionVector.text PROGBITS        a0030340 00aa8c 000016 00  AX  0   0  1
  [ 9] .DoubleExceptionVector.text PROGBITS        a00303c0 00aaa2 000003 00  AX  0   0  1
  [10] .text             PROGBITS        a0031000 00b000 00cafa 00 WAX  0   0 16
  [11] .rodata           PROGBITS        a003e000 018000 0040f4 00   A  0   0 4096
  [12] initlevel         PROGBITS        a00420f4 01c0f4 0000d8 00   A  0   0  4
  [13] device_area       PROGBITS        a00421cc 01c1cc 000198 00   A  0   0  4
  [14] device_deps       PROGBITS        a0042364 01c364 0000c2 00   A  0   0  2
  [15] ztest             PROGBITS        a0042428 01c428 0000f8 00  WA  0   0  4
  [16] log_const_area    PROGBITS        a0042520 01c520 000048 00   A  0   0  4
  [17] intc_table_area   PROGBITS        a0042568 01c568 000010 00   A  0   0  4
  [18] llext_const_symbol_area PROGBITS        a0042578 01c578 000540 00   A  0   0  4
  [19] symbol_to_keep    PROGBITS        a0042ab8 01cab8 000004 00   A  0   0  4
  [20] .noinit           NOBITS          40042ac0 000328 010398 00  WA  0   0  8
  [21] .data             PROGBITS        40052e80 000e80 009844 00  WA  0   0 128
  [22] sw_isr_table      PROGBITS        4005c6c4 00a6c4 000130 00  WA  0   0  4
  [23] device_states     PROGBITS        4005c7f4 00a7f4 000022 00  WA  0   0  1
  [24] k_heap_area       PROGBITS        4005c818 00a818 000020 00  WA  0   0  4
  [25] k_stack_area      PROGBITS        4005c838 00a838 000024 00  WA  0   0  4
  [26] k_sem_area        PROGBITS        4005c85c 00a85c 000010 00  WA  0   0  4
  [27] sys_mem_blocks_ptr_area PROGBITS        4005c86c 00a86c 000004 00  WA  0   0  4
  [28] .cached           PROGBITS        a005c880 01cac0 005690 00  WA  0   0 64
  [29] .bss              NOBITS          40062000 00a880 000f20 00  WA  0   0 64
  [30] .unused_ram_start_marker NOBITS          a0062f40 022150 0000c4 00  WA  0   0  4
  [31] .module.boot      PROGBITS        00020000 000234 000078 00   A  0   0  4
  [32] .module.main      PROGBITS        00020078 0002ac 000078 00   A  0   0  4
  [33] .fw_metadata      PROGBITS        000200f0 022680 000000 00   W  0   0 16
  [34] .intList          PROGBITS        e0000000 022634 000048 00  WA  0   0  4
  [35] .comment          PROGBITS        00000000 022680 000020 01  MS  0   0  1
  [36] .debug_aranges    PROGBITS        00000000 0226a0 001ac8 00      0   0  8
  [37] .debug_info       PROGBITS        00000000 024168 0a0dcf 00      0   0  1
  [38] .debug_abbrev     PROGBITS        00000000 0c4f37 012369 00      0   0  1
  [39] .debug_line       PROGBITS        00000000 0d72a0 052ee4 00      0   0  1
  [40] .debug_frame      PROGBITS        00000000 12a184 003c00 00      0   0  4
  [41] .debug_str        PROGBITS        00000000 12dd84 00c464 01  MS  0   0  1
  [42] .debug_loc        PROGBITS        00000000 13a1e8 028786 00      0   0  1
  [43] .debug_ranges     PROGBITS        00000000 162970 005fa8 00      0   0  8
  [44] .xtensa.info      NOTE            00000000 168918 000038 00      0   0  1
  [45] .xt.prop          PROGBITS        00000000 168950 00bb80 00      0   0  1
  [46] .xt.lit           PROGBITS        00000000 1744d0 000560 00      0   0  1
  [47] .symtab           SYMTAB          00000000 174a30 0074f0 10     48 790  4
  [48] .strtab           STRTAB          00000000 17bf20 00981b 00      0   0  1
  [49] .shstrtab         STRTAB          00000000 18573b 0002b0 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),
  D (mbind), p (processor specific)