diff --git a/util/cbmem/cbmem.c b/util/cbmem/cbmem.c index bc6bd6b9c8..f3f5add2a7 100644 --- a/util/cbmem/cbmem.c +++ b/util/cbmem/cbmem.c @@ -314,6 +314,7 @@ static void dump_console(void) void *console_p; char *console_c; uint32_t size; + uint32_t cursor; if (console.tag != LB_TAG_CBMEM_CONSOLE) { fprintf(stderr, "No console found in coreboot table.\n"); @@ -328,6 +329,12 @@ static void dump_console(void) * Hence we have to add 8 to get to the actual console string. */ size = *(uint32_t *)console_p; + cursor = *(uint32_t *) (console_p + 4); + /* Cursor continues to go on even after no more data fits in + * the buffer but the data is dropped in this case. + */ + if (size > cursor) + size = cursor; console_c = malloc(size + 1); if (!console_c) { fprintf(stderr, "Not enough memory for console.\n"); @@ -337,7 +344,10 @@ static void dump_console(void) memcpy(console_c, console_p + 8, size); console_c[size] = 0; - printf("%s", console_c); + printf("%s\n", console_c); + if (size < cursor) + printf("%d %s lost\n", cursor - size, + (cursor - size) == 1 ? "byte":"bytes"); free(console_c);