coredump: refine coredump info analyse

Signed-off-by: wanggang26 <wanggang26@xiaomi.com>
This commit is contained in:
wanggang26 2024-08-09 14:23:52 +08:00 committed by Xiang Xiao
parent f7adb52c8b
commit c58bd521a3

View File

@ -110,6 +110,7 @@ static void coredump_dump_blkdev(pid_t pid)
{ {
FAR void *stream = &g_blockstream; FAR void *stream = &g_blockstream;
FAR struct coredump_info_s *info; FAR struct coredump_info_s *info;
blkcnt_t nsectors;
int ret; int ret;
if (g_blockstream.inode == NULL) if (g_blockstream.inode == NULL)
@ -118,8 +119,12 @@ static void coredump_dump_blkdev(pid_t pid)
return; return;
} }
nsectors = (sizeof(struct coredump_info_s) +
g_blockstream.geo.geo_sectorsize - 1) /
g_blockstream.geo.geo_sectorsize;
ret = g_blockstream.inode->u.i_bops->read(g_blockstream.inode, ret = g_blockstream.inode->u.i_bops->read(g_blockstream.inode,
g_blockinfo, g_blockstream.geo.geo_nsectors - 1, 1); g_blockinfo, g_blockstream.geo.geo_nsectors - nsectors, nsectors);
if (ret < 0) if (ret < 0)
{ {
_alert("Coredump information read fail\n"); _alert("Coredump information read fail\n");
@ -149,10 +154,10 @@ static void coredump_dump_blkdev(pid_t pid)
info->magic = COREDUMP_MAGIC; info->magic = COREDUMP_MAGIC;
info->size = g_blockstream.common.nput; info->size = g_blockstream.common.nput;
info->time = time(NULL); info->time = time(NULL);
uname(&info->name); uname(&info->name);
ret = g_blockstream.inode->u.i_bops->write(g_blockstream.inode, ret = g_blockstream.inode->u.i_bops->write(g_blockstream.inode,
(FAR void *)info, g_blockstream.geo.geo_nsectors - 1, 1); (FAR void *)info, g_blockstream.geo.geo_nsectors - nsectors, nsectors);
if (ret < 0) if (ret < 0)
{ {
_alert("Coredump information write fail\n"); _alert("Coredump information write fail\n");
@ -191,6 +196,7 @@ int coredump_set_memory_region(FAR struct memory_region_s *region)
int coredump_initialize(void) int coredump_initialize(void)
{ {
blkcnt_t nsectors;
int ret = 0; int ret = 0;
if (CONFIG_BOARD_MEMORY_RANGE[0] != '\0') if (CONFIG_BOARD_MEMORY_RANGE[0] != '\0')
@ -216,7 +222,11 @@ int coredump_initialize(void)
return ret; return ret;
} }
g_blockinfo = kmm_malloc(g_blockstream.geo.geo_sectorsize); nsectors = (sizeof(struct coredump_info_s) +
g_blockstream.geo.geo_sectorsize - 1) /
g_blockstream.geo.geo_sectorsize;
g_blockinfo = kmm_malloc(g_blockstream.geo.geo_sectorsize * nsectors);
if (g_blockinfo == NULL) if (g_blockinfo == NULL)
{ {
_alert("Coredump device memory alloc fail\n"); _alert("Coredump device memory alloc fail\n");
@ -227,6 +237,7 @@ int coredump_initialize(void)
} }
#endif #endif
UNUSED(nsectors);
return ret; return ret;
} }