添加 printf 时的编译器段错误(来自 arm 的 gcc 10.2 aarch64_none-elf-)
compiler segfault when printf is added (gcc 10.2 aarch64_none-elf- from arm)
我知道这不足以解决堆栈溢出问题,但是..
这是u-boot v2021.10.scripts/dtc/libfdt/fdt_ro.c中的一个函数。
const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,
const char *name, int namelen, int *lenp)
{
int poffset;
const struct fdt_property *prop;
printf("uuu0 nodeoffset = 0x%x, name = %s, namelen = %d\n", nodeoffset, name, namelen);
prop = fdt_get_property_namelen_(fdt, nodeoffset, name, namelen, lenp,
&poffset);
//printf("uuu1 prop = 0x%lx, *lenp = 0x%x, poffset = 0x%x\n", prop, *lenp, poffset);
if (!prop)
return NULL;
/* Handle realignment */
if (fdt_chk_version() && fdt_version(fdt) < 0x10 &&
(poffset + sizeof(*prop)) % 8 && fdt32_to_cpu(prop->len) >= 8)
return prop->data + 4;
return prop->data;
}
当我构建程序时,如果我取消注释第二个 printf,编译器会出现段错误。
我不知道。这纯粹是编译器问题(我认为它至少应该永远不会死)?还是可以将其与我在其他代码中某处的错误联系起来?有什么方法可以知道段错误的原因吗? (可能不是。)。
printf("uuu1 prop = 0x%lx, *lenp = 0x%x, poffset = 0x%x\n", prop, *lenp, poffset);
prop
是一个指针,所以我会使用 %p
而不是 %lx
lenp
是一个指针,所以我要确保它指向有效内存
如果 运行 编译器本身出现分段错误,则说明编译器存在错误。您的代码中存在一些错误,但这些错误应该会导致编译时诊断(警告或错误消息),绝不会导致编译时崩溃。
您问题中的代码不完整(缺少 fdt_get_property_namelen_
、printf
、NULL
等的声明)。使用完整的独立源文件重现问题并提交错误报告:https://gcc.gnu.org/bugzilla/
我知道这不足以解决堆栈溢出问题,但是..
这是u-boot v2021.10.scripts/dtc/libfdt/fdt_ro.c中的一个函数。
const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,
const char *name, int namelen, int *lenp)
{
int poffset;
const struct fdt_property *prop;
printf("uuu0 nodeoffset = 0x%x, name = %s, namelen = %d\n", nodeoffset, name, namelen);
prop = fdt_get_property_namelen_(fdt, nodeoffset, name, namelen, lenp,
&poffset);
//printf("uuu1 prop = 0x%lx, *lenp = 0x%x, poffset = 0x%x\n", prop, *lenp, poffset);
if (!prop)
return NULL;
/* Handle realignment */
if (fdt_chk_version() && fdt_version(fdt) < 0x10 &&
(poffset + sizeof(*prop)) % 8 && fdt32_to_cpu(prop->len) >= 8)
return prop->data + 4;
return prop->data;
}
当我构建程序时,如果我取消注释第二个 printf,编译器会出现段错误。
我不知道。这纯粹是编译器问题(我认为它至少应该永远不会死)?还是可以将其与我在其他代码中某处的错误联系起来?有什么方法可以知道段错误的原因吗? (可能不是。)。
printf("uuu1 prop = 0x%lx, *lenp = 0x%x, poffset = 0x%x\n", prop, *lenp, poffset);
prop
是一个指针,所以我会使用%p
而不是%lx
lenp
是一个指针,所以我要确保它指向有效内存
如果 运行 编译器本身出现分段错误,则说明编译器存在错误。您的代码中存在一些错误,但这些错误应该会导致编译时诊断(警告或错误消息),绝不会导致编译时崩溃。
您问题中的代码不完整(缺少 fdt_get_property_namelen_
、printf
、NULL
等的声明)。使用完整的独立源文件重现问题并提交错误报告:https://gcc.gnu.org/bugzilla/