Merge branch 'master' into ealan to sync with upstream.

This commit is contained in:
Michael Mueller
2022-10-14 16:56:15 +02:00
1560 changed files with 27336 additions and 15652 deletions

View File

@@ -0,0 +1,13 @@
<devices>
<device name="ps2">
<irq number="1"/>
<irq number="12"/>
<io_port_range address="0x60" size="1"/>
<io_port_range address="0x64" size="1"/>
</device>
<device name="pit">
<irq number="0"/>
<io_port_range address="0x40" size="4"/>
</device>
</devices>

View File

@@ -1,9 +1,8 @@
-m 2048
-M virt,virtualization=true -cpu cortex-a15 -smp 2
-global virtio-mmio.force-legacy=false
-device virtio-net-device,bus=virtio-mmio-bus.0,netdev=net0
-device virtio-mouse-device
-device virtio-keyboard-device
-device virtio-gpu-device
-netdev user,id=net0
arm_v8a: -M virt,virtualization=true,gic-version=3 -cpu cortex-a53 -smp 4
arm_v7a: -M virt,virtualization=true -cpu cortex-a15 -smp 2

View File

@@ -0,0 +1,8 @@
-m 2048
-M virt,virtualization=true,gic-version=3 -cpu cortex-a53 -smp 4
-global virtio-mmio.force-legacy=false
-device virtio-net-device,bus=virtio-mmio-bus.0,netdev=net0
-device virtio-mouse-device
-device virtio-keyboard-device
-device virtio-gpu-device
-netdev user,id=net0

View File

@@ -189,10 +189,10 @@ class Genode::Affinity
Affinity::Space space { };
Affinity::Location location { };
node.with_sub_node("affinity", [&] (Xml_node const &node) {
node.with_sub_node("space", [&] (Xml_node const &node) {
node.with_optional_sub_node("affinity", [&] (Xml_node const &node) {
node.with_optional_sub_node("space", [&] (Xml_node const &node) {
space = Space::from_xml(node); });
node.with_sub_node("location", [&] (Xml_node const &node) {
node.with_optional_sub_node("location", [&] (Xml_node const &node) {
location = Location::from_xml(space, node); });
});

View File

@@ -481,6 +481,17 @@ class Genode::Rpc_entrypoint : Thread, public Object_pool<Rpc_object_base>
* This method is solely needed on Linux.
*/
bool is_myself() const;
/**
* Check whether given stack info matches stack of the entrypoint.
*
* \noapi
*
*/
bool myself(addr_t const ptr) const
{
return addr_t(stack_base()) <= ptr && ptr <= addr_t(stack_top());
}
};

View File

@@ -257,6 +257,9 @@ class Genode::Trace::Simple_buffer
size_t length() const { return _entry->len; }
char const *data() const { return _entry->data; }
template <typename T>
T const &object() const { return *reinterpret_cast<const T*>(data()); }
/* return whether entry is valid, i.e. length field is present */
bool last() const { return _entry == 0; }

View File

@@ -25,6 +25,8 @@ namespace Genode { namespace Trace {
struct Rpc_reply;
struct Signal_submit;
struct Signal_received;
struct Checkpoint;
struct Ethernet_packet;
} }
@@ -121,4 +123,62 @@ struct Genode::Trace::Signal_received
};
struct Genode::Trace::Checkpoint
{
enum Type : unsigned char {
UNDEF = 0x0,
START = 0x1,
END = 0x2,
OBJ_NEW = 0x10,
OBJ_DEL = 0x11,
OBJ_STATE = 0x12,
EXCEPTION = 0xfe,
FAILURE = 0xff
};
char const *name;
unsigned long const data;
Type const type;
void *addr;
Checkpoint(char const *name, unsigned long data, void *addr, Type type=Type::UNDEF)
: name(name), data(data), type(type), addr(addr)
{
Thread::trace(this);
}
size_t generate(Policy_module &policy, char *dst) const {
return policy.checkpoint(dst, name, data, addr, type); }
};
struct Genode::Trace::Ethernet_packet
{
enum Direction : char {
RECV = 0x0,
SENT = 0x1
};
char const *name;
Direction direction;
char *data;
size_t length;
Ethernet_packet(char const *name, Direction direction, char *data, size_t len)
: name(name), direction(direction), data(data), length(len)
{
Thread::trace(this);
}
Ethernet_packet(char const *name, Direction direction, void *data, size_t len)
: name(name), direction(direction), data((char*)data), length(len)
{
Thread::trace(this);
}
size_t generate(Policy_module &policy, char *dst) const {
return policy.trace_eth_packet(dst, name, direction == Direction::SENT, data, length); }
};
#endif /* _INCLUDE__BASE__TRACE__EVENTS_H_ */

View File

@@ -31,14 +31,16 @@ namespace Genode {
*/
struct Genode::Trace::Policy_module
{
size_t (*max_event_size) ();
size_t (*log_output) (char *, char const *, size_t);
size_t (*rpc_call) (char *, char const *, Msgbuf_base const &);
size_t (*rpc_returned) (char *, char const *, Msgbuf_base const &);
size_t (*rpc_dispatch) (char *, char const *);
size_t (*rpc_reply) (char *, char const *);
size_t (*signal_submit) (char *, unsigned const);
size_t (*signal_received) (char *, Signal_context const &, unsigned const);
size_t (*max_event_size) ();
size_t (*trace_eth_packet) (char *, char const *, bool, char *, size_t);
size_t (*checkpoint) (char *, char const *, unsigned long, void *, unsigned char);
size_t (*log_output) (char *, char const *, size_t);
size_t (*rpc_call) (char *, char const *, Msgbuf_base const &);
size_t (*rpc_returned) (char *, char const *, Msgbuf_base const &);
size_t (*rpc_dispatch) (char *, char const *);
size_t (*rpc_reply) (char *, char const *);
size_t (*signal_submit) (char *, unsigned const);
size_t (*signal_received) (char *, Signal_context const &, unsigned const);
};
#endif /* _INCLUDE__BASE__TRACE__POLICY_H_ */

View File

@@ -42,6 +42,26 @@ struct Genode::Irq_connection : Connection<Irq_session>, Irq_session_client
irq, trigger, polarity, device_config_phys)),
Irq_session_client(cap())
{ }
/**
* Constructor for label-based configuration (used by pin driver)
*
* \param label session label
*/
Irq_connection(Env &env,
char const *label)
:
Connection<Irq_session>(env, session(env.parent(),
"ram_quota=%u, cap_quota=%u, "
"irq_number=%u, irq_trigger=%u, "
"irq_polarity=%u, device_config_phys=0x%lx, "
"label=\"%s\"",
RAM_QUOTA, CAP_QUOTA, 0,
Irq_session::TRIGGER_UNCHANGED,
Irq_session::POLARITY_UNCHANGED,
0, label)),
Irq_session_client(cap())
{ }
};
#endif /* _INCLUDE__IRQ_SESSION__CONNECTION_H_ */

View File

@@ -123,6 +123,8 @@ class Genode::Timeout : private Noncopyable,
void discard();
bool scheduled();
Microseconds deadline() const { return _deadline; }
};

View File

@@ -117,6 +117,8 @@ class Timer::One_shot_timeout : private Genode::Noncopyable,
void discard() { _timeout.discard(); }
bool scheduled() { return _timeout.scheduled(); }
Microseconds deadline() const { return _timeout.deadline(); }
};

View File

@@ -0,0 +1,85 @@
/*
* \brief Trace probes
* \author Johannes Schlatow
* \date 2021-12-01
*
* Convenience macros for creating user-defined trace checkpoints.
*/
/*
* Copyright (C) 2021 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 _INCLUDE__TRACE__PROBE_H_
#define _INCLUDE__TRACE__PROBE_H_
#include <base/trace/events.h>
namespace Genode { namespace Trace {
class Duration
{
private:
char const *_name;
unsigned long const _data;
Duration(Duration const &) = delete;
Duration & operator = (Duration const &) = delete;
public:
Duration(char const * name, unsigned long data)
: _name(name), _data(data)
{ Checkpoint(_name, _data, nullptr, Checkpoint::Type::START); }
~Duration()
{ Checkpoint(_name, _data, nullptr, Checkpoint::Type::END); }
};
} }
/**
* Trace a single checkpoint named after the current function.
*
* The argument 'data' specifies the payload as an unsigned value.
*/
#define GENODE_TRACE_CHECKPOINT(data) \
Genode::Trace::Checkpoint(__PRETTY_FUNCTION__, (unsigned long)data, nullptr);
/**
* Variant of 'GENODE_TRACE_CHECKPOINT' that accepts the name of the checkpoint as argument.
*
* The argument 'data' specifies the payload as an unsigned value.
* The argument 'name' specifies the name of the checkpoint.
*/
#define GENODE_TRACE_CHECKPOINT_NAMED(data, name) \
Genode::Trace::Checkpoint(name, (unsigned long)data, nullptr);
/**
* Trace a pair of checkpoints when entering and leaving the current scope.
*
* The argument 'data' specifies the payload as an unsigned value.
*/
#define GENODE_TRACE_DURATION(data) \
Genode::Trace::Duration duration(__PRETTY_FUNCTION__, (unsigned long)data);
/**
* Variant of 'GENODE_TRACE_DURATION' that accepts the name of the checkpoints as argument.
*
* The argument 'data' specifies the payload as an unsigned value.
* The argument 'name' specifies the names of the checkpoints
*/
#define GENODE_TRACE_DURATION_NAMED(data, name) \
Genode::Trace::Duration duration(name, (unsigned long)data);
#endif /* _INCLUDE__TRACE__PROBE_H_ */

View File

@@ -116,10 +116,6 @@ struct Genode::Trace::Session_client : Genode::Rpc_client<Genode::Trace::Session
void trace(Subject_id s, Policy_id p, size_t buffer_size) override {
call<Rpc_trace>(s, p, buffer_size); }
void rule(Session_label const &label, Thread_name const &thread,
Policy_id policy, size_t buffer_size) override {
call<Rpc_rule>(label, thread, policy, buffer_size); }
void pause(Subject_id subject) override {
call<Rpc_pause>(subject); }

View File

@@ -64,12 +64,6 @@ struct Genode::Trace::Session : Genode::Session
*/
virtual void trace(Subject_id, Policy_id, size_t buffer_size) = 0;
/**
* Install a matching rule for automatically tracing new threads
*/
virtual void rule(Session_label const &, Thread_name const &,
Policy_id, size_t buffer_size) = 0;
/**
* Pause generation of tracing data
*
@@ -124,10 +118,6 @@ struct Genode::Trace::Session : Genode::Session
Nonexistent_policy,
Traced_by_other_session),
Subject_id, Policy_id, size_t);
GENODE_RPC_THROW(Rpc_rule, void, rule,
GENODE_TYPE_LIST(Out_of_ram, Out_of_caps),
Session_label const &, Thread_name const &,
Policy_id, size_t);
GENODE_RPC_THROW(Rpc_pause, void, pause,
GENODE_TYPE_LIST(Nonexistent_subject), Subject_id);
GENODE_RPC_THROW(Rpc_resume, void, resume,
@@ -144,7 +134,7 @@ struct Genode::Trace::Session : Genode::Session
GENODE_TYPE_LIST(Nonexistent_subject), Subject_id);
GENODE_RPC_INTERFACE(Rpc_dataspace, Rpc_alloc_policy, Rpc_policy,
Rpc_unload_policy, Rpc_trace, Rpc_rule, Rpc_pause,
Rpc_unload_policy, Rpc_trace, Rpc_pause,
Rpc_resume, Rpc_subjects, Rpc_buffer,
Rpc_free, Rpc_subject_infos);
};

View File

@@ -0,0 +1,148 @@
/*
* \brief Utility for accessing objects by name
* \author Norman Feske
* \date 2022-09-14
*/
/*
* Copyright (C) 2022 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 _INCLUDE__UTIL__DICTIONARY_H_
#define _INCLUDE__UTIL__DICTIONARY_H_
#include <util/meta.h>
#include <util/string.h>
#include <util/avl_tree.h>
#include <util/noncopyable.h>
#include <base/log.h>
namespace Genode { template <typename, typename> class Dictionary; }
template <typename T, typename NAME>
class Genode::Dictionary : Noncopyable
{
private:
Avl_tree<T> _tree { };
public:
class Element : private Avl_node<T>
{
public:
NAME const name;
private:
using This = Dictionary<T, NAME>::Element;
Dictionary<T, NAME> &_dictionary;
bool higher(T const *other) const { return name > other->This::name; }
friend class Avl_tree<T>;
friend class Avl_node<T>;
friend class Dictionary<T, NAME>;
static T *_matching_sub_tree(T &curr, NAME const &name)
{
typename Avl_node<T>::Side side = (curr.This::name > name);
return curr.Avl_node<T>::child(side);
}
public:
Element(Dictionary &dictionary, NAME const &name)
:
name(name), _dictionary(dictionary)
{
if (_dictionary.exists(name))
warning("dictionary entry '", name, "' is not unique");
_dictionary._tree.insert(this);
}
~Element()
{
_dictionary._tree.remove(this);
}
};
/**
* Call 'match_fn' with named constant dictionary element
*
* The 'match_fn' functor is called with a const reference to the
* matching dictionary element. If no maching element exists,
* 'no_match_fn' is called without argument.
*/
template <typename FN1, typename FN2>
auto with_element(NAME const &name, FN1 const &match_fn, FN2 const &no_match_fn)
-> typename Trait::Functor<decltype(&FN1::operator())>::Return_type
{
T *curr_ptr = _tree.first();
for (;;) {
if (!curr_ptr)
break;
if (curr_ptr->Element::name == name) {
return match_fn(*curr_ptr);
}
curr_ptr = Element::_matching_sub_tree(*curr_ptr, name);
}
return no_match_fn();
}
/**
* Call 'match_fn' with named mutable dictionary element
*
* The 'match_fn' functor is called with a non-const reference to the
* matching dictionary element. If no maching element exists,
* 'no_match_fn' is called without argument.
*/
template <typename FN1, typename FN2>
auto with_element(NAME const &name, FN1 const &match_fn, FN2 const &no_match_fn) const
-> typename Trait::Functor<decltype(&FN1::operator())>::Return_type
{
auto const_match_fn = [&] (T const &e) { return match_fn(e); };
auto non_const_this = const_cast<Dictionary *>(this);
return non_const_this->with_element(name, const_match_fn, no_match_fn);
}
/**
* Call 'fn' with a non-const reference to any dictionary element
*
* \return true if 'fn' was called, or
* false if the dictionary is empty
*
* This method is intended for the orderly destruction of a dictionary.
* It allows for the consecutive destruction of all elements.
*/
template <typename FUNC>
bool with_any_element(FUNC const &fn)
{
T *curr_ptr = _tree.first();
if (!curr_ptr)
return false;
fn(*curr_ptr);
return true;
}
template <typename FN>
void for_each(FN const &fn) const { _tree.for_each(fn); }
bool exists(NAME const &name) const
{
return with_element(name, [] (T const &) { return true; },
[] { return false; });
}
};
#endif /* _INCLUDE__UTIL__DICTIONARY_H_ */

View File

@@ -459,20 +459,21 @@ namespace Genode {
/**
* Read signed long value from string
* Read signed value from string
*
* \return number of consumed characters
*/
inline size_t ascii_to(const char *s, long &result)
template <typename T>
inline size_t ascii_to_signed(const char *s, T &result)
{
int i = 0;
size_t i = 0;
/* read sign */
int sign = (*s == '-') ? -1 : 1;
if (*s == '-' || *s == '+') { s++; i++; }
unsigned long value = 0;
T value = 0;
size_t const j = ascii_to_unsigned(s, value, 0);
@@ -484,6 +485,28 @@ namespace Genode {
}
/**
* Read signed long value from string
*
* \return number of consumed characters
*/
inline size_t ascii_to(const char *s, long &result)
{
return ascii_to_signed<long>(s, result);
}
/**
* Read signed integer value from string
*
* \return number of consumed characters
*/
inline size_t ascii_to(const char *s, int &result)
{
return ascii_to_signed<int>(s, result);
}
/**
* Read 'Number_of_bytes' value from string and handle the size suffixes
*
@@ -785,6 +808,12 @@ class Genode::String
return strcmp(string(), other.string()) != 0;
}
template <size_t N>
bool operator > (String<N> const &other) const
{
return strcmp(string(), other.string()) > 0;
}
void print(Output &out) const { Genode::print(out, string()); }
};

View File

@@ -110,7 +110,7 @@ class Genode::Token
/**
* Access single characters of token
*/
char operator [] (int idx)
char operator [] (int idx) const
{
return ((idx >= 0) && ((unsigned)idx < _len)) ? _start[idx] : 0;
}

View File

@@ -55,17 +55,16 @@ class Genode::Xml_attribute
struct Tokens
{
Token name;
Token value;
Token equals { name .next().eat_whitespace() };
Token value { equals.next().eat_whitespace() };
Tokens(Token t)
: name(t.eat_whitespace()), value(name.next().next()) { };
Tokens(Token t) : name(t.eat_whitespace()) { };
bool valid() const
{
bool const tag_present = (name.type() == Token::IDENT);
bool const value_present = (name.next()[0] == '=' &&
value.type() == Token::STRING);
return tag_present && value_present;
return (name.type() == Token::IDENT)
&& (equals[0] == '=')
&& (value.type() == Token::STRING);
}
} _tokens;
@@ -103,7 +102,7 @@ class Genode::Xml_attribute
/**
* Return token following the attribute declaration
*/
Token _next_token() const { return _tokens.name.next().next().next(); }
Token _next_token() const { return _tokens.value.next(); }
public:
@@ -355,7 +354,7 @@ class Genode::Xml_node
}
/**
* Return true if tag as at least one attribute
* Return true if tag has at least one attribute
*/
bool has_attribute() const { return Xml_attribute::_valid(_name.next()); }
@@ -846,12 +845,27 @@ class Genode::Xml_node
* If no matching sub node exists, the functor is not called.
*/
template <typename FN>
void with_sub_node(char const *type, FN const &fn) const
void with_optional_sub_node(char const *type, FN const &fn) const
{
if (has_sub_node(type))
fn(sub_node(type));
}
/**
* Apply functor 'fn' to first sub node of specified type
*
* The functor is called with the sub node as argument.
* If no matching sub node exists, the functor 'fn_nexists' is called.
*/
template <typename FN, typename FN_NEXISTS>
void with_sub_node(char const *type, FN const &fn, FN_NEXISTS const &fn_nexists) const
{
if (has_sub_node(type))
fn(sub_node(type));
else
fn_nexists();
}
/**
* Execute functor 'fn' for each sub node of specified type
*/

View File

@@ -15,3 +15,6 @@ SHARED_LIB := yes
LD_OPT += -T$(BASE_DIR)/src/lib/ldso/linker.ld
LIBS += $(addprefix ld-,$(KERNEL))
# as the stub libarary is not used at runtime, disregard it as build artifact
BUILD_ARTIFACTS :=

View File

@@ -3,6 +3,6 @@ SRC_CC += timer_connection.cc
SRC_CC += arm/timer_connection_time.cc
SRC_CC += duration.cc
INC_DIR += $(BASE_DIR)/src/include
REP_INC_DIR += src/include
vpath % $(BASE_DIR)/src/lib/timeout
vpath % $(call select_from_repositories,src/lib/timeout)

View File

@@ -4,6 +4,6 @@ SRC_CC += timer_connection_time.cc
SRC_CC += timer_connection_timestamp.cc
SRC_CC += duration.cc
INC_DIR += $(BASE_DIR)/src/include
REP_INC_DIR += src/include
vpath % $(call select_from_repositories,src/lib/timeout)

View File

@@ -82,14 +82,19 @@ include $(BASE_DIR)/mk/base-libs.mk
include $(LIB_MK)
ifdef SHARED_LIB
LIBS += ldso_so_support
BUILD_ARTIFACTS ?= $(LIB).lib.so
endif
# record creation of shared library build artifact
append_artifact_to_progress_log:
@echo -e "\n# Build artifact $(LIB).lib.so\n" >> $(LIB_PROGRESS_LOG)
@( $(foreach A,$(BUILD_ARTIFACTS),\
echo -e "\n# Build artifact $A\n";) true \
) >> $(LIB_PROGRESS_LOG)
append_lib_to_progress_log: append_artifact_to_progress_log
endif
ifdef SHARED_LIB
LIBS += ldso_so_support
endif
#
# Hide archive dependencies of shared libraries from users of the shared
@@ -119,8 +124,9 @@ warn_unsatisfied_requirements: generate_lib_rule_for_defect_library
@$(ECHO) "Skip library $(LIB) because it requires $(DARK_COL)$(UNSATISFIED_REQUIREMENTS)$(DEFAULT_COL)"
generate_lib_rule_for_defect_library:
@echo "INVALID_DEPS += $(LIB)" >> $(LIB_DEP_FILE)
@echo "" >> $(LIB_DEP_FILE)
@(echo "INVALID_DEPS += $(LIB)"; \
echo "$(LIB).lib:"; \
echo "") >> $(LIB_DEP_FILE)
LIBS_TO_VISIT = $(filter-out $(LIBS_READY),$(LIBS))

View File

@@ -183,7 +183,7 @@ $(LINK_ITEMS) $(TARGET): $(HOST_TOOLS)
#
# Trigger build of additional program specific targets
#
$(TARGET): $(CUSTOM_TARGET_DEPS)
all: $(CUSTOM_TARGET_DEPS)
LD_CMD += -Wl,--whole-archive -Wl,--start-group
LD_CMD += $(LINK_ITEMS_BRIEF)

View File

@@ -1 +1 @@
856f9946a1482cbebc519818e3e4736bcd11e5e4
f15e84afbb47b892ed26a5ae56f5bb038777a3c0

View File

@@ -3,7 +3,7 @@ VERSION := git
DOWNLOADS := g2fg.git
URL(g2fg) := https://github.com/alex-ab/g2fg.git
REV(g2fg) := a0c3164b6b23afb25119f2be8c3b7490c1dcb9e2
REV(g2fg) := 7da0601946bd2bb75f4e9c3b56cb18e44b2997a1
DIR(g2fg) := boot
default: $(DOWNLOADS)

View File

@@ -1 +1 @@
2022-05-24 d4b5b53bc270cebd87bf01a93c6da241077aad42
2022-10-11 1574044ae0ee33a9ad3bdadb3c487c47d4f45bff

View File

@@ -1 +1 @@
2021-04-19 8628f8283cc104fdfd196d88fb029becaa39b258
2022-08-16 1f83bc046ed3bb0c4fe6915e608d566dd5483e61

View File

@@ -1 +1 @@
2022-05-24 5e486a0f27fdda0a70b9275d62257d98e26589c8
2022-10-11 b08e70f6de91f200618103ec75f53898c6ef60e8

View File

@@ -1 +1 @@
2022-05-24 e35abe047c7ec7fe02c0939de16bfc80ed421d38
2022-10-11 ad5b85ab1377744e2f747ca2eb5010a3aee87f70

View File

@@ -1 +1 @@
2022-05-24 79d43c7e33381048618dbd7ba6ca34a3eda23f6c
2022-10-11 3e1b9be9b239017a54b6b595cdec5891623ba59f

View File

@@ -1 +1 @@
2022-05-24 4b2af7d33e8264d080be962d0a4d9a6404ec4bc0
2022-10-11 ee3cb10ce306e2afab97018d2bda4e33ce3f863c

View File

@@ -1 +1 @@
2022-05-24 ed1f37d2213211897d5360c9a8f32404d670722a
2022-10-11 dac71b5071da69f218826b2bdc5462b7cf0c28a3

View File

@@ -1 +1 @@
2022-05-24 f09098d18ca36bc8829a673be78dd80460c3d65e
2022-10-11 5f899fc663f34b1c1aeeba243e54edc092aa40fa

View File

@@ -1 +1 @@
2022-05-24 3f91b26dbd239c52bb9af22e8f7713743ee851f4
2022-10-11 50b25d7a4bbde78fc1722a4e822370eb49cb6b95

View File

@@ -1 +1 @@
2022-05-24 edbf57617935a054a681e097a611006496ed4c88
2022-10-11 8882e9bea4fdc16ff4910913a79223d62aeb0cdc

View File

@@ -1 +1 @@
2022-05-24 ce2c9008ed6ea0db13999e9c6ab77a098d4f94a0
2022-10-11 a2514b901565ebf0aa88a955c4431fe733964758

View File

@@ -1 +1 @@
2022-05-24 afd4f2249a2d56bb6b29b6c0d24923ef2ec215c9
2022-10-11 3a4ebd01ee612ba2e12ae8df14d6299fb4431375

View File

@@ -1 +1 @@
2022-05-24 436a166f1c4371619d7a64bf879dd0ce2dc75429
2022-10-11 5ac901826381a7d6de528cd3d3520b0767385f6c

View File

@@ -1 +1 @@
2022-05-24 3877f6f98ff7c3921bdb7b2b83f40a161e9cd5bb
2022-10-11 36717c21923ac35c938ad73930f1d1576ecaf385

View File

@@ -1 +1 @@
2022-05-24 00a8e3979871b2a0ab67088c3d2b57454ed653f9
2022-10-11 b8e011ab9a1ae92c4293ab07f9a6b7df71c6aabc

View File

@@ -1 +1 @@
2022-05-24 ab7b5f631d4abf8b01ed6b08c4da83b4164564a8
2022-10-11 0a151f72dc20e2e6b8cca80b761128dee92bb7c5

View File

@@ -1 +1 @@
2022-05-24 91ed52185381c38cf7e425fb0c351b46c4548b4f
2022-10-11 8070010a6f4553f3be84c5fbe0729f50e5d3fde0

View File

@@ -1 +1 @@
2022-05-24 7ff4d04d0b470eb6974b633bb0dca1212158f625
2022-10-11 5068ceee7e2285a398ac7b6936f6d16c8daa29ea

View File

@@ -1 +1 @@
2022-05-24 b96b88fee3e0946fea12a44cea94963b2b16d173
2022-10-11 c4e1fb742ffc41fdb81aeb2ca2638ca81459578d

View File

@@ -1 +1 @@
2022-05-24 c2d9a2849fe51277372d301c9a46d034c4674ab9
2022-10-11 f44af3d8cc1af7801408f855c1c8c168c8d84aa7

View File

@@ -1 +1 @@
2022-05-24 88eb29b90a1e663e1f58de04a6a178f3a035f3f5
2022-10-11 682420bf32f10e223946d7713bf70255ede1d451

View File

@@ -99,6 +99,9 @@
[init -> test-xml_node] -- Test backslash as attribute value --
[init -> test-xml_node] attribute value: '\'
[init -> test-xml_node]
[init -> test-xml_node] -- Test whitespace around assignment character --
[init -> test-xml_node] attribute value: '123'
[init -> test-xml_node]
[init -> test-xml_node] -- Test exporting decoded content from XML node --
[init -> test-xml_node] step 1
[init -> test-xml_node] step 2

View File

@@ -1 +1 @@
2022-05-24 715bfaa6ea0bff54c0e2477c1bbccf56c0bfc935
2022-10-11 359a8ba82f0a85f6f83c2e140120e0ec2fc2ff4b

View File

@@ -1 +1 @@
2022-05-24 05d5db1ec0b7fff36e8526fe701873731fd08660
2022-10-11 5a9a370fb5f6483aa652fd13e805f8970580d8d7

View File

@@ -1 +1 @@
2022-05-24 7d26fbbb584ab24b8156eda78a8eca5bc9e1122f
2022-10-11 095026fa1d5dc144f0d2bd21f3b0aad4c1ddacbd

View File

@@ -1 +1 @@
2022-05-24 6542fc1df645f45c9fc71b5c18b458a9e630470d
2022-10-11 2fc5a59b9a18db38188c8f0b5cd140f8af25debf

View File

@@ -1 +1 @@
2022-05-24 67caefb3bbf5926dbd2ca46bbe933882de542db3
2022-10-11 4b8f0df83f00b36d32640a767a861327034e51ed

View File

@@ -1 +1 @@
2022-05-24 915f8bebfcdbfe4ef499ea94985303bacebeb8e8
2022-10-11 03229606efad94460265721c6f828fdf4f1c1e36

View File

@@ -1 +1 @@
2022-05-24 e1e3559b2f3010d96d19e81cbaa6abbeb07c6251
2022-10-11 3a9a202788b631072f5bc4a6220083ea3f0804ee

View File

@@ -1 +1 @@
2022-05-24 93812b90ee88b44d4fc3b26af77ad0344359e51a
2022-10-11 31d8bd8cf827651dc7996e6d3ca7b005ddc0bdcd

View File

@@ -1 +1 @@
2022-05-24 465cc6225756312ca657c39d5a398fd276088118
2022-10-11 c81db79ecd943606a3113aad3e804c715fc33a1c

View File

@@ -1 +1 @@
2022-05-24 dd009dd4ea58101e1c15e5bd38cad4241f726fa4
2022-10-11 ef88b5f407d0b49926354c8144d2322b778dfcad

View File

@@ -1 +1 @@
2022-05-24 34b25aabaef3112a38eb0a24a13cf6e42da6ba65
2022-10-11 27a1948a58c15301b3e1978f409ce9b076d704bc

View File

@@ -1 +1 @@
2022-05-24 632e59190a6bcfe40a5a88ecff9f05e2924a43b1
2022-10-11 29971db890cb657bb8d41bf07636ba21752ca8b3

View File

@@ -1 +1 @@
2022-05-24 4e254230305117e2ce5dd2c13caa650ea65251e7
2022-10-11 483ee9045181e9912f60834b45436d0226763bb8

View File

@@ -1 +1 @@
2022-05-24 f9126bd0df2b402150c7ef76138d5ecb8cee05d4
2022-10-11 bdabeb64387faee3c5307377d72bcb99f4086f00

View File

@@ -1 +1 @@
2022-05-24 402acbf040b8f905dcc0979700f6077d36dc707d
2022-10-11 18675e4c9e59c67edede9b4c0eb0eb8bd8ff56d2

View File

@@ -1 +1 @@
2022-05-24 4ddec10779302c6d0c47ccbeba806fe1278e182b
2022-10-11 e0674b3ea25b560f92bfe65b9ccbed95c3119665

View File

@@ -1 +1 @@
2022-05-24 f04c4162857259fd48d864e9076ae401c9093dbb
2022-10-11 6b24a7f9187ca2e87c5acffd6cd61c63bca52477

View File

@@ -1 +1 @@
2022-05-24 e91f2b05a682df2206b8f487b7cb01cc8150350e
2022-10-11 be8b5157c899db1007904028d0f77dc50acc1a7f

View File

@@ -1 +1 @@
2022-05-24 39a7ce53177b2bad4928846f40b8ef542d8f6840
2022-10-11 53ba6ffafbcb4b78411e4117bbc3e7e3d721f20e

View File

@@ -188,6 +188,7 @@ proc platform_drv_config {} {
<service name="Report" />
</provides>
<config>
<policy label="intel_fb_drv -> intel_opregion" report="acpi_drv -> intel_opregion"/>
<policy label="smbios_decoder -> smbios_table" report="acpi_drv -> smbios_table"/>
<policy label="platform_drv -> acpi" report="acpi_drv -> acpi"/>}

View File

@@ -78,7 +78,6 @@ class Genode::Trace::Session_component
Dataspace_capability policy(Policy_id) override;
void unload_policy(Policy_id) override;
void trace(Subject_id, Policy_id, size_t) override;
void rule(Session_label const &, Thread_name const &, Policy_id, size_t) override;
void pause(Subject_id) override;
void resume(Subject_id) override;
Dataspace_capability buffer(Subject_id) override;

View File

@@ -127,13 +127,6 @@ void Session_component::trace(Subject_id subject_id, Policy_id policy_id,
}
void Session_component::rule(Session_label const &, Thread_name const &,
Policy_id, size_t)
{
/* not implemented yet */
}
void Session_component::pause(Subject_id subject_id)
{
_subjects.lookup_by_id(subject_id).pause();

View File

@@ -29,7 +29,7 @@ void Genode::Mutex::release()
{
Lock::Applicant myself(Thread::myself());
if (!_lock.lock_owner(myself)) {
Genode::error("denied non mutex owner the release, mutex=",
Genode::error("release denied, caller not owner, mutex=",
this, ", return ip=", __builtin_return_address(0));
return;
}

View File

@@ -68,7 +68,7 @@ class Linker::Config : Noncopyable
template <typename FN>
void for_each_library(FN const &fn) const
{
_config.with_sub_node("ld", [&] (Xml_node ld) {
_config.with_optional_sub_node("ld", [&] (Xml_node ld) {
ld.for_each_sub_node("library", [&] (Xml_node lib) {

View File

@@ -1,33 +0,0 @@
#
# This is a dummy target description file with the sole purpose of building
# all libraries.
#
TARGET = libs
#
# Determine all 'lib/mk' sub directories residing within the repositories.
# Use 'wildcard' to handle the case when a repository does not host any
# 'lib/mk' sub directory.
#
LIB_MK_DIRS := $(wildcard $(addsuffix /lib/mk,$(REPOSITORIES)))
#
# Scan the 'lib/mk' directories of all repositories for library description
# files.
#
ALL_LIB_MK_FILES := $(notdir $(foreach DIR,$(LIB_MK_DIRS),$(shell find $(DIR) -name "*.mk")))
#
# Make the pseudo target depend on all libraries, for which an lib.mk file
# exists. Discard the '.mk' suffix and remove duplicates (via 'sort').
#
LIBS = $(sort $(ALL_LIB_MK_FILES:.mk=))
#
# Among all libraries found above, there may be several libraries with
# unsatisfied build requirements. Normally, the build system won't attempt to
# build the target (and its library dependencies) if one or more libraries
# cannot be built. By enabling 'FORCE_BUILD_LIBS', we let the build system
# visit all non-invalid libraries even in the presence of invalid libraries.
#
FORCE_BUILD_LIBS = yes

View File

@@ -152,6 +152,10 @@ static const char *xml_test_comments =
static const char *xml_test_backslash =
"<config attr=\"\\\"/>";
/* withspace around attribute assignment character */
static const char *xml_test_whitespace_assign =
"<config attr = \"123\"/>";
/******************
** Test program **
@@ -415,6 +419,12 @@ void Component::construct(Genode::Env &env)
log("attribute value: '", node.attribute_value("attr", String<10>()), "'\n");
}
log("-- Test whitespace around assignment character --");
{
Xml_node const node(xml_test_whitespace_assign);
log("attribute value: '", node.attribute_value("attr", String<10>()), "'\n");
}
log("-- Test exporting decoded content from XML node --");
test_decoded_content<~0UL>(env, 1, xml_test_comments, 8, 119);
test_decoded_content<119 >(env, 2, xml_test_comments, 8, 119);