mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 08:24:32 -08:00
[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() {
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
entry *header = reinterpret_cast<entry*>(buf);
|
||||||
|
while (size > sizeof(entry)) {
|
||||||
output(header);
|
output(header);
|
||||||
seen = header->id;
|
seen = header->id;
|
||||||
|
size -= header->bytes;
|
||||||
|
header = util::offset_pointer(header, header->bytes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user