mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-20 14:13:09 +00:00
6a57683e52
The new monitor component at os/src/monitor is the designated successor of the gdb_monitor. This initial version, however, implements only the subset needed to inspect the memory of the monitored component(s). In contrast to the gdb_monitor, the new component supports the monitoring of multiple components, leveraging the sandbox API. It can therefore be used as a drop-in replacement for the init component. Like the gdb_monitor, the new monitor speaks the GDB protocol over Genode's terminal session. But the protocol implementation does not re-use any gdbserver code, sidestepping the complexities of POSIX. There exist two run scripts illustrating the new component. The os/run/monitor.run script exercises memory inspection via the 'm' command by letting a test program monitor itself. The os/run/monitor_gdb.run script allows for the interactive use of GDB to interact with monitored components. Issue #4917
62 lines
1.1 KiB
C++
62 lines
1.1 KiB
C++
/*
|
|
* \brief Output utilities
|
|
* \author Norman Feske
|
|
* \date 2023-06-06
|
|
*/
|
|
|
|
/*
|
|
* Copyright (C) 2023 Genode Labs GmbH
|
|
*
|
|
* This file is part of the Genode OS framework, which is distributed
|
|
* under the terms of the GNU Affero General Public License version 3.
|
|
*/
|
|
|
|
#ifndef _MONITOR__OUTPUT_H_
|
|
#define _MONITOR__OUTPUT_H_
|
|
|
|
#include <base/output.h>
|
|
|
|
namespace Genode {
|
|
|
|
struct Gdb_hex;
|
|
struct Gdb_checksummed_output;
|
|
}
|
|
|
|
|
|
struct Genode::Gdb_hex : Hex
|
|
{
|
|
template <typename T>
|
|
explicit Gdb_hex(T value) : Hex(value, OMIT_PREFIX, PAD) { }
|
|
};
|
|
|
|
|
|
struct Genode::Gdb_checksummed_output : Output
|
|
{
|
|
Output &_output;
|
|
uint8_t _accumulated = 0;
|
|
|
|
Gdb_checksummed_output(Output &output) : _output(output)
|
|
{
|
|
print(_output, "$");
|
|
}
|
|
|
|
~Gdb_checksummed_output()
|
|
{
|
|
print(_output, "#", Gdb_hex(_accumulated));
|
|
}
|
|
|
|
void out_char(char c) override { out_string(&c, 1); }
|
|
|
|
void out_string(char const *str, size_t n) override
|
|
{
|
|
n = (n == ~0UL) ? strlen(str) : n;
|
|
|
|
for (unsigned i = 0; i < n; i++)
|
|
_accumulated = uint8_t(_accumulated + str[i]);
|
|
|
|
_output.out_string(str, n);
|
|
}
|
|
};
|
|
|
|
#endif /* _MONITOR__OUTPUT_H_ */
|