[kernel] Deal with getting multiple log entries in debugcon

Getting entries from the logger object can return multiple in the same
buffer - debugcon was not accounting for the subsequent entries.
This commit is contained in:
Justin C. Miller
2023-03-16 19:45:40 -07:00
parent 2a4c286f2b
commit 936b12a977

View File

@@ -21,8 +21,8 @@ namespace {
} }
inline void debug_endline() { inline void debug_endline() {
static const char *newline = "\e[38;5;0m\r\n"; static const char *newline = "\e[0m\r\n";
asm ( "rep outsb;" :: "c"(11), "d"(port), "S"(newline) ); asm ( "rep outsb;" :: "c"(6), "d"(port), "S"(newline) );
} }
} // anon namespace } // anon namespace
@@ -64,7 +64,6 @@ logger_task()
uint64_t seen = 0; uint64_t seen = 0;
size_t buf_size = 128; size_t buf_size = 128;
uint8_t *buf = new uint8_t [buf_size]; uint8_t *buf = new uint8_t [buf_size];
entry *header = reinterpret_cast<entry*>(buf);
while (true) { while (true) {
size_t size = g_logger.get_entry(seen, buf, buf_size); size_t size = g_logger.get_entry(seen, buf, buf_size);
@@ -72,12 +71,16 @@ logger_task()
delete [] buf; delete [] buf;
buf_size *= 2; buf_size *= 2;
buf = new uint8_t [buf_size]; buf = new uint8_t [buf_size];
header = reinterpret_cast<entry*>(buf);
continue; continue;
} }
output(header); entry *header = reinterpret_cast<entry*>(buf);
seen = header->id; while (size > sizeof(entry)) {
output(header);
seen = header->id;
size -= header->bytes;
header = util::offset_pointer(header, header->bytes);
}
} }
} }