This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

arm-none-eabi-nm: some symbols are not related to any source file

In my embedded project I compile `amazon-freertos/lib/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.c` in this way:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/opt/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-gcc \
-std=gnu11 \
-mcpu=cortex-m7 \
-mthumb \
-mapcs \
-mfloat-abi=hard \
-mfpu=fpv5-d16 \
-fno-common \
-fno-math-errno \
-fsingle-precision-constant \
-fno-trapping-math \
-fno-signaling-nans \
-fno-builtin \
-fstrict-aliasing \
-fstack-usage \
-Wstack-usage=300 \
-DCPU_MIMXRT1051DVL6B \
-D__FREERTOS__=1 \
-DFSL_RTOS_FREE_RTOS \
-DFSL_FEATURE_PHYKSZ8081_USE_RMII50M_MODE \
-D__MCUXPRESSO \
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

I have `ipconfigUSE_TCP` set to 1 in `amazon-freertos/lib/FreeRTOS-Plus-TCP/include/FreeRTOSIPConfig.h`

`FreeRTOS_Sockets.c` declares `xBoundUDPSocketsList` and `xBoundTCPSocketsList`

Fullscreen
1
2
3
4
5
6
7
/* The list that contains mappings between sockets and port numbers. Accesses
to this list must be protected by critical sections of one kind or another. */
List_t xBoundUDPSocketsList;
#if ipconfigUSE_TCP == 1
List_t xBoundTCPSocketsList;
#endif /* ipconfigUSE_TCP == 1 */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Once I have my elf executable linked, run this command:

Fullscreen
1
2
3
$ /opt/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-nm -a -l -n -t x --print-size image/DSP.elf | grep -E '^[[:xdigit:]]{8} [[:xdigit:]]{8} B' | grep SocketsList
2001ac7c 00000014 B xBoundTCPSocketsList
2001ac90 00000014 B xBoundUDPSocketsList /home/max/Lavori/4202/src/repos/toremove/FW/amazon-freertos/lib/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.c:162
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Both symbols exist in the executable, but one (`xBoundTCPSocketsList`) does not seem to belong to any .c source.
Both appear in the map file:

Fullscreen
1
2
3
4
5
6
7
$ grep -n -A 1 -E 'xBoundTCPSocketsList|xBoundUDPSocketsList' image/DSP.map
61974: .bss.xBoundTCPSocketsList
61975- 0x000000002001ac7c 0x14 ./build/DSP/amazon-freertos/lib/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.o
61976: 0x000000002001ac7c xBoundTCPSocketsList
61977: .bss.xBoundUDPSocketsList
61978- 0x000000002001ac90 0x14 ./build/DSP/amazon-freertos/lib/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.o
61979: 0x000000002001ac90 xBoundUDPSocketsList
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Even addr2line fails:

Fullscreen
1
2
3
4
5
$ arm-none-eabi-addr2line -a -e image/DSP.elf 2001ac7c 2001ac90
0x2001ac7c
??:0
0x2001ac90
/home/max/Lavori/4202/src/repos/toremove/FW/amazon-freertos/lib/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.c:162
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

even the `FreeRTOS_Sockets.lst` doesn't tell me anything more:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
7337 .global xBoundTCPSocketsList
7338 .global xBoundUDPSocketsList
7339 .section .bss.xBoundTCPSocketsList,"aw",%nobits
7340 .align 2
7341 .set .LANCHOR2,. + 0
7344 xBoundTCPSocketsList:
7345 0000 00000000 .space 20
7345 00000000
7345 00000000
7345 00000000
7345 00000000
7346 .section .bss.xBoundUDPSocketsList,"aw",%nobits
7347 .align 2
7348 .set .LANCHOR1,. + 0
7351 xBoundUDPSocketsList:
7352 0000 00000000 .space 20
7352 00000000
7352 00000000
7352 00000000
7352 00000000
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

There are many other symbols present in the executable but which do not seem to be associated with any .c source file.

Why this behavior? What changes between the two symbols `xBoundTCPSocketsList` and `xBoundUDPSocketsList`? Am I getting it wrong or omitting some debugging parameters when compiling? How do I get either nm or some other way to get the .c source where a symbol is declared?

best regards

Max

0