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