kern: When dumping dmesg, detect the byte order dynamically.

The dmesg dumper has access to the system object and so has access to
the getGuestByteOrder accessor. Use that instead of TheISA to determine
the byte order.

Change-Id: I4df7b1bcd807aaced1d7dc8d2030123e2d4d1d2b
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/22365
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Gabe Black
2019-10-29 15:52:09 -07:00
parent 75d496c6b2
commit 4444e88e5b

View File

@@ -56,7 +56,8 @@ struct DmesgEntry {
} M5_ATTR_PACKED;
static int
dumpDmesgEntry(const uint8_t *base, const uint8_t *end, std::ostream &os)
dumpDmesgEntry(const uint8_t *base, const uint8_t *end, const ByteOrder bo,
std::ostream &os)
{
const size_t max_length = end - base;
DmesgEntry de;
@@ -67,9 +68,9 @@ dumpDmesgEntry(const uint8_t *base, const uint8_t *end, std::ostream &os)
}
memcpy(&de, base, sizeof(de));
de.ts_nsec = TheISA::gtoh(de.ts_nsec);
de.len = TheISA::gtoh(de.len);
de.text_len = TheISA::gtoh(de.text_len);
de.ts_nsec = gtoh(de.ts_nsec, bo);
de.len = gtoh(de.len, bo);
de.text_len = gtoh(de.text_len, bo);
if (de.len < sizeof(de) ||
max_length < de.len ||
@@ -93,6 +94,7 @@ void
Linux::dumpDmesg(ThreadContext *tc, std::ostream &os)
{
System *system = tc->getSystemPtr();
const ByteOrder bo = system->getGuestByteOrder();
const SymbolTable *symtab = system->kernelSymtab;
PortProxy &proxy = tc->getVirtProxy();
@@ -144,7 +146,7 @@ Linux::dumpDmesg(ThreadContext *tc, std::ostream &os)
// Print dmesg buffer content
const uint8_t *cur = log_buf.data(), *end = log_buf.data() + length;
while (cur < end) {
int ret = dumpDmesgEntry(cur, end, os);
int ret = dumpDmesgEntry(cur, end, bo, os);
if (ret < 0)
return;
cur += ret;