谁能解释一下 libc 函数 _ldtoa_r 和 _Balloc 的用法?
Can anyone explain the use of libc functions _ldtoa_r and _Balloc?
我正在使用 Kendryte K210 进行一个项目,它是一台 64 位双核 RISC-V 机器。我正在使用 Kendryte GNU toolchain and the starting point was the Kendryte standalone SDK.
我遇到了一些令人沮丧的核心故障。在 _ldtoa_r 中的 _Balloc balr
之后发生错误,即未对齐的加载,其中 _Balloc 中的 ld
指令试图从函数之一指向的无效地址加载参数寄存器(在本例中为 a0)。
我一直想弄清楚 when/where/how _Balloc 和 _ldtoa_r 被使用了,但它们是 libc 的一部分。我的地图文件显示 _ldtoa_r 在某种程度上与 lib_a-ldtoa.o 和 lib_a-svfprintf.o 相关,而 _Balloc 在某种程度上与 lib_a-strtod.o 相关和 lib_a-mprec.o。我不确定,因为我是解释地图文件的新手。
如果有人能帮助我了解 _ldtoa_r 和 _Balloc 是什么、它们的使用方式、它们与这些目标文件的关系,以及可能如何正确解释映射文件中的相关行,那么我会不胜感激
谢谢。
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a(lib_a-strtod.o) (_Balloc)
...
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a(lib_a-ldtoa.o)
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a(lib_a-svfprintf.o) (_ldtoa_r)
...
.text._ldtoa_r
0x0000000080027456 0xa74
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a(lib_a-ldtoa.o)
0x0000000080027456 _ldtoa_r
...
.text._Balloc
0x000000008002814c 0x6c
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a(lib_a-mprec.o)
0x000000008002814c _Balloc
...
.rodata._ldtoa_r.str1.8
0x000000008003cfb8 0x34
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a(lib_a-ldtoa.o)
Cannyone explain the use of libc functions _ldtoa_r
用于将 long double
值转换为字符串,具有许多自定义选项,并且在 Newlib 意义上是可重入的,采用 _REENT 状态。
它用于打印 double
值的示例。
and _Balloc?
Balloc
分配一个 _Bigint
值。 _Bigint
将浮点值表示为“大整数”。
它用在很多地方,主要用于打印和读取 long double
值 from/to 字符串。
their relationship to these object files
编译后的代码存储在“这些目标文件”中。
how to properly interpret relevant lines in the map file
.text._ldtoa_r
#^^^^^^^^^^^^^^ - section name
0x0000000080027456 0xa74
# ^^^^^ - length of the section
# ^^^^^^^^^^^^^^^ - location of the section in output file
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - filename
# .. (lib_a-ldtoa.o)
# ^^^^^^^^^^^^^ - object filename (used when compiling libc)
0x0000000080027456 _ldtoa_r
# ^^^^^^^^ - symbol name
# ^^^^^^^^^^^^^^^^ - location in output file
我正在使用 Kendryte K210 进行一个项目,它是一台 64 位双核 RISC-V 机器。我正在使用 Kendryte GNU toolchain and the starting point was the Kendryte standalone SDK.
我遇到了一些令人沮丧的核心故障。在 _ldtoa_r 中的 _Balloc balr
之后发生错误,即未对齐的加载,其中 _Balloc 中的 ld
指令试图从函数之一指向的无效地址加载参数寄存器(在本例中为 a0)。
我一直想弄清楚 when/where/how _Balloc 和 _ldtoa_r 被使用了,但它们是 libc 的一部分。我的地图文件显示 _ldtoa_r 在某种程度上与 lib_a-ldtoa.o 和 lib_a-svfprintf.o 相关,而 _Balloc 在某种程度上与 lib_a-strtod.o 相关和 lib_a-mprec.o。我不确定,因为我是解释地图文件的新手。
如果有人能帮助我了解 _ldtoa_r 和 _Balloc 是什么、它们的使用方式、它们与这些目标文件的关系,以及可能如何正确解释映射文件中的相关行,那么我会不胜感激
谢谢。
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a(lib_a-strtod.o) (_Balloc)
...
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a(lib_a-ldtoa.o)
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a(lib_a-svfprintf.o) (_ldtoa_r)
...
.text._ldtoa_r
0x0000000080027456 0xa74
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a(lib_a-ldtoa.o)
0x0000000080027456 _ldtoa_r
...
.text._Balloc
0x000000008002814c 0x6c
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a(lib_a-mprec.o)
0x000000008002814c _Balloc
...
.rodata._ldtoa_r.str1.8
0x000000008003cfb8 0x34
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a(lib_a-ldtoa.o)
Cannyone explain the use of libc functions _ldtoa_r
用于将 long double
值转换为字符串,具有许多自定义选项,并且在 Newlib 意义上是可重入的,采用 _REENT 状态。
它用于打印 double
值的示例。
and _Balloc?
Balloc
分配一个 _Bigint
值。 _Bigint
将浮点值表示为“大整数”。
它用在很多地方,主要用于打印和读取 long double
值 from/to 字符串。
their relationship to these object files
编译后的代码存储在“这些目标文件”中。
how to properly interpret relevant lines in the map file
.text._ldtoa_r
#^^^^^^^^^^^^^^ - section name
0x0000000080027456 0xa74
# ^^^^^ - length of the section
# ^^^^^^^^^^^^^^^ - location of the section in output file
c:/sysgcc/kendryte/bin/../lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib\libc.a
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - filename
# .. (lib_a-ldtoa.o)
# ^^^^^^^^^^^^^ - object filename (used when compiling libc)
0x0000000080027456 _ldtoa_r
# ^^^^^^^^ - symbol name
# ^^^^^^^^^^^^^^^^ - location in output file