Compare commits

..

6271 Commits

Author SHA1 Message Date
Christian Helmuth
bf36d9eb48 depot: update recipe hashes 2020-03-09 16:02:56 +01:00
Norman Feske
9d24e906a8 text_area: fix interplay of shift with selection
Without this patch, the text area would mistakenly delete the characters
types after placing the cursor with the mouse as soon as shift is used
as modifier.
2020-03-09 15:41:29 +01:00
Norman Feske
44e4d1bd6c Update Sculpt documentation for version 20.02 2020-03-09 15:41:29 +01:00
Norman Feske
ab5770c492 sculpt: improve USB hotplug handling
- Don't reset sculpt partition on USB changes whenever ram fs is
  selected for use.

- Reconfigure runtime immediately when plugging USB devices.
  This prevents the usb-block driver and part_block from
  dangling in the graph. They disappear immediately now.
2020-03-09 15:36:21 +01:00
Norman Feske
a90eab8b9a menu_view: reduce frame transparency
This makes the dialog content better readable.
2020-03-09 15:36:21 +01:00
Norman Feske
e54e4dd532 sculpt: anchor popup position at '+' button
This patch restores the anchoring of the popup menu to the original
behavior, placing the popup to the right of the '+' button. The
anchoring got lost due to the recent structural changes of the GUI,
which affect the hover XML structure.
2020-03-09 15:36:21 +01:00
Sebastian Sumpf
c856ba2a49 ahci: report ports correctly
Only use one report for devices report, not one per device

fixes #3671
2020-03-09 15:36:21 +01:00
Christian Prochaska
1087e3f59e doc: minor tweaks of release notes 20.02
Thanks to Jeroen van Gelderen for the feedback.
2020-03-09 15:36:04 +01:00
Christian Helmuth
cfb49c7316 version: 20.02 2020-02-28 12:19:49 +01:00
Norman Feske
a3fad2e171 News item for version 20.02 2020-02-28 12:19:49 +01:00
Norman Feske
dd5db8484a Release notes for version 20.02 2020-02-28 12:19:49 +01:00
Christian Helmuth
5affd51250 depot: update recipe hashes 2020-02-28 08:59:43 +01:00
Alexander Boettcher
ce27b5ebce tool: support hyphen in depot-user name (depot.inc)
Fixes #3668
2020-02-28 08:58:28 +01:00
Norman Feske
fce9cd8c22 sculpt manager: use runtime state report max of 1M
With complex scenarios, supplementing the <report> node with the
attribute 'requested' or 'provides' can easily result in a report of
more than 64K.
2020-02-27 14:47:00 +01:00
Christian Prochaska
8faa916d93 gdb_monitor.run: increase RAM quota
Fixes #3667
2020-02-27 14:47:00 +01:00
Christian Helmuth
e52802162c libc: reimplement synchronization primitives
The new implementation relieves the main entrypoint from monitor jobs
for contended lock primitives and is based on custom applicant data
structures, per-lock resp. per-semaphore applicant lists, and a
libc-internal blockade with timeouts based on libc kernel primitives.
2020-02-27 14:47:00 +01:00
Josef Söntgen
f3ec246b67 base: remove diagnostic message in destructor
The LOG message in the Signal_handler_thread's destructor is just an
diagnostic leftover.

Fixes #3666.
2020-02-27 14:46:59 +01:00
Christian Prochaska
434c9ceb5d vbox5-nova: document possible 'Blocking_canceled' exception
Fixes #3664
2020-02-27 14:46:59 +01:00
Norman Feske
c3fb81d1a1 window_layouter: improve rules formatting
This is a follow-up patch for "window_layouter: add dynamic screen
handling".

Issue #3646
2020-02-27 14:46:59 +01:00
Norman Feske
c340f57207 Xml_node: skip leading whitespace in with_raw_node
This patch makes the 'with_raw_node' method more useful in situations
where content of an Xml_node is fed into an Xml_generator, i.e., the
rules report/rom mechanism of the window layouter.
2020-02-27 14:46:59 +01:00
Norman Feske
bbe1bf9c3a fs_query.run: increase timeout
This is apparently needed for base-foc on Qemu/x86.
2020-02-27 14:46:59 +01:00
Alexander Boettcher
accda1211b mutex: reinit Applicant state in Mutex::acquire()
The applicant_to_wake_up() member must be initialized to 0 to keep the
same semantic as before the change by

"base: add mutex as derivate of lock"

Issue #3662
2020-02-27 14:46:59 +01:00
Norman Feske
daee1f4cb8 timer/nova: prevent potential division by zero
This case triggered with the leitzentrale.run script on Qemu.
The frequency value must never initialized with zero.

Fixes #3663
2020-02-27 14:46:59 +01:00
Stefan Kalkowski
87cb10c558 sculpt_manager: accept uplink from "local" network
Be less rigid when checking for available network to support
setups where the uplink or depot repositories are provided by
another source than "wired" or "wifi" NIC services,
e.g., a virtual machine with pass-through network device.
2020-02-27 14:46:59 +01:00
Norman Feske
904651ada9 sculpt: version 20.02 2020-02-27 14:46:59 +01:00
Norman Feske
1d3ce93107 sculpt: leitzentrale user-interface redesign
Issue #3650
2020-02-27 14:46:59 +01:00
Sebastian Sumpf
103dcdeea8 vmm: ARMv8 virtio improvements
net:
* increase queue size to 1024 (more stable on Linux)
* use mac address from Nic session instead of random one
* handle data that is larger than rx descriptor correctly (copy less)
* clear descriptor header (12 bytes) on rx

generic:
* always use 'avail_idx' (tx and rx)
* added barriers when reading/writing queues (TMP)

Ref #3620
2020-02-27 14:46:59 +01:00
Sebastian Sumpf
f77531138a vmm: ARMv8 virtio for network and console
Simple console and network implementation of the Virtio protocol.

Fix #3620
2020-02-27 14:46:59 +01:00
Sebastian Sumpf
c8b3b060aa vmm: ARMv8 add 'local_address' to Ram_allocator
Ref #3620
2020-02-27 14:46:59 +01:00
Stefan Kalkowski
7780ee6a34 vmm: do not lock inside VMM
We do not use the VMM with several CPUs until now.
On the other hand there is a dead-lock due to the
generic timer calling the cpu handler function explicitly,
which already holds the lock. For the time-being remove the lock.

Ref #3620
2020-02-27 14:46:59 +01:00
Stefan Kalkowski
2e2625e952 vmm: check ring-buffer capacity in pl011 model
Ref #3620
2020-02-27 14:46:58 +01:00
Stefan Kalkowski
55c3eb7c14 vmm: fix GIC interrupt register bit shifts
Ref #3620
2020-02-27 14:46:58 +01:00
Stefan Thöni
a7a9855493 base: lay groundwork for base-linux caps change
Include the necessary hooks to introduce file descriptor
based capabilities in base linux.

Issue #3581
2020-02-27 14:46:58 +01:00
Norman Feske
5eaaee0dbe text_area: a simple text viewer / editor
The new text_area component is able to view and edit files.
Internally, it employs a menu_view for the graphics output.

Only basic notepad-like text-editing functions are supported.

At the current time, it is solely meant as a companion of the Sculpt
manager.

Issue #3650
2020-02-27 14:46:58 +01:00
Norman Feske
b2bc718c1f fs_query: report 'writeable' attribute for files 2020-02-27 14:46:58 +01:00
Norman Feske
7118ad494c os/vfs.h: add Directory::Entry::rwx accessor 2020-02-27 14:46:58 +01:00
Norman Feske
582e0e718c menu_view: make texture handling more robust
This patch improves the robustness of menu_view when encounting missing
textures, which can happen during development when using styled buttons
and frames. With the patch, menu_view outputs diagnostic messages,
pinpointing the problem.

The patch also updates the texture handling to use the 'File_content'
utility and the VFS for obtaining PNG images.

Issue #3629
2020-02-27 14:46:58 +01:00
Norman Feske
1713583a19 menu_view: basic support for styling labels
This patch allows for the customization of the text color and alpha
value of the label widget by the means of a style-definition file.
The mechanism is exemplified with the new "invisible" label style
that sets the alpha value to zero.

Issue #3629
2020-02-27 14:46:57 +01:00
Norman Feske
38aef49428 menu_view: invisible button style 2020-02-27 14:46:57 +01:00
Alexander Boettcher
a9caf3fbe4 base: avoid wrong warning by Mutex::acquire
A _owner is only valid if lock is actually locked.

Issue #3612
2020-02-27 14:46:57 +01:00
Josef Söntgen
80ff844dc2 depot: update public key for cnuke 2020-02-27 14:46:57 +01:00
Josef Söntgen
c53be5a3fb os: omit size check on payloadless Block packets
The check is already performed in 'packet_valid' where the conditions
for payloadless packets are already considered.

Fixes #3660.
2020-02-27 14:46:57 +01:00
Josef Söntgen
6addd6cf1e os: fix Node_rwx::rwx
Fixes #3658.
2020-02-27 14:46:57 +01:00
Sebastian Sumpf
3995d2f4a2 part_block: switch to Request_stream and Job APIs
- use Job API as block connection back end
- use Request_stream API as front end
- use Mmio framework for gpt and mbr parsing
- implement sync correctly

fixes #3652
2020-02-27 14:46:57 +01:00
Sebastian Sumpf
b95dc611d6 gmp: use architecture specific 'config.h'
Generated a separate 'config.h' for arm, arm_64, x86_32, x86_64 for the
current version (6.1.2) of GMP. This became necessary because
configurations differ for each architecture.

'config.h' generaton on x86_64 host in'gmp-6.1.2' directory:

for x86_64 (native):
! configure

for x86_32:
! configure --host=x86-pc-linux-gnu --build=x86_64-pc-linux-gnu

for arm:
! configure --host=arm-linux-gnu --build=x86_64-pc-linux-gnu \
!  CC=/usr/local/gcc-linaro-arm/bin/arm-linux-gnueabi-gcc ABI=32

for arm_v8:
! configure --host=aarch64-linux-gnu --build=x86_64-pc-linux-gnu \
!  CC=/usr/local/gcc-linaro/bin/aarch64-linux-gnu-gcc ABI=64

issue #3598
2020-02-27 14:46:57 +01:00
Christian Helmuth
4cccf74664 depot: update recipe hashes 2020-02-20 12:11:23 +01:00
Stefan Kalkowski
8cc48d5688 hw: be more accurate in synchronizing ASID/Pages
Fix #3651
2020-02-20 12:11:23 +01:00
Stefan Kalkowski
b76bd57ed1 window_layouter: add dynamic screen handling
This commit adds dynamic switching in between different defined
screens via keyboard shortcuts, or by editing the rules file.
In the window_layouter package it defines per default ten screens,
reachable by pressing the screen key along with numbers 0-9.

Fix #3646
2020-02-20 12:11:23 +01:00
Alexander Boettcher
2afc218767 test/registry: measure time used for iteration
Issue #3612
2020-02-20 12:11:22 +01:00
Alexander Boettcher
5bbaa30655 base: use mutex in registry
Issue #3612
2020-02-20 12:11:22 +01:00
Alexander Boettcher
5440cd4b50 base: use blockade in thread
Issue #3612
2020-02-20 12:11:22 +01:00
Alexander Boettcher
e686ff78e9 base: add blockade as derivate of lock
Issue #3612
2020-02-20 12:11:22 +01:00
Alexander Boettcher
2bd77722c7 base: use mutex in heap
Issue #3612
2020-02-20 12:11:22 +01:00
Alexander Boettcher
00f69bc70d base: add mutex as derivate of lock
The mutex class is more restrictive in usage compared to
Genode::Lock.

- At initialiation time it is ever unlocked.
- No thread is permitted to lock twice. Warn about it
  in case it happens.
- Only the lock onwer is permitted to unlock the mutex.
  Warn about it and don't unlock the mutex in case it happens.

Issue #3612
2020-02-20 12:11:22 +01:00
Stefan Kalkowski
d1609e771a pdf_view: fix typo in pkg runtime requires
Fix #3648
2020-02-20 12:11:22 +01:00
Norman Feske
89f813f113 os: add sandbox lib to api/os 2020-02-20 12:11:22 +01:00
Norman Feske
9b0fbf000e sandbox: support for local state-report handling
Fixes #3647
2020-02-20 12:11:22 +01:00
Stefan Kalkowski
725d16e18e hw: optimize ipc capability allocation
In preparation of ipc receive, by now a bunch of capabilities got
allocated to be ready iin case of capability receiption. After that
unuse slots were freed again. This overhead of senseless (de-)allocations
is replaced in this commit by just restock capability slots that got
used by the last receive.

Fix #3640
2020-02-20 12:11:22 +01:00
Martin Stein
e42a205a51 base-hw: Ada-compliant scheduler method signatures
Ref #3308
2020-02-20 12:11:22 +01:00
Martin Stein
0d5f185267 base-hw: no pointers in scheduler interface
Ref #3308
2020-02-20 12:11:22 +01:00
Martin Stein
c146a215fb base-hw: cpu scheduler without inheritance
Ref #3308
2020-02-20 12:11:21 +01:00
Martin Stein
eef7b5e168 base-hw: double list without inheritance
Ref #3308
2020-02-20 12:11:21 +01:00
Martin Stein
a753b6ce46 base-hw: fix run scripts
Ref #3308
2020-02-20 12:11:21 +01:00
Martin Stein
793e12f8f3 base-hw: no error return codes in signaling
Error return codes are used with non-const functions in the signaling modules.
This would have been impractical for the in-place translation of the module to
Ada in the context of the Spunky project. Besides, it is easy to get rid of
them and it makes the execution flow more clear.

Ref #3308
2020-02-20 12:11:21 +01:00
Martin Stein
751e6430fa base-hw: obsolete Kernel::Thread::_signal_receiver
Ref #3308
2020-02-20 12:11:21 +01:00
Martin Stein
9eb20c2be7 base-hw: no pointer arguments in signaling
Besides reducing the use of pointers in base-hw, this prepares for the in-place
translation of the signaling module to Ada in the context of the Spunky
project.

Ref #3308
2020-02-20 12:11:21 +01:00
Martin Stein
5e460394d2 base-hw: do not inherit Kernel::Object
This prevents the use of Kernel::Object as base class for the specific kernel
objects and instead makes it a member of the kernel objects. Besides
simplifying inheritance hierarchies in base-hw, this prepares for the in-place
translation of the signaling module (and others) to Ada in the context of the
Spunky project.

Ref #3308
2020-02-20 12:11:21 +01:00
Martin Stein
88043e144a base-hw: no virtual functions in signaling
Besides simplifying the execution flow in the signaling module, this prepares
for the in-place translation of the signaling module to Ada in the context of
the Spunky project.

Ref #3308
2020-02-20 12:11:21 +01:00
Martin Stein
3cc7774fe4 base-hw: Ada/SPARK-friendly Ipc_node interface
This prevents the use of C++ features in the public method interface of the
synchronous-IPC module that would be impractical for the in-place
translation of the module into Ada in the context of the Spunky project.

* Get rid of thread accessor.
* Get rid of non-const functions with return values.
* Get rid of pointer return-values.

Ref #3308
2020-02-20 12:11:21 +01:00
Martin Stein
a04243aaf4 base-hw: remove unused Ipc_node accessor methods
Ref #3308
2020-02-20 12:11:21 +01:00
Martin Stein
5a95183c3e base-hw: avoid that Ipc_node inherits
Besides simplifying inheritance hierarchies in base-hw, this prepares for the
in-place translation of the synchronous-IPC module to Ada in the context of the
Spunky project.

Ref #3308
2020-02-20 12:11:21 +01:00
Martin Stein
6a5aa18a7b base-hw: no PD code / virt methods in Ipc_node
This is a simplication of the asyncronous-IPC module of the base-hw kernel.
Besides structuring the code in a cleaner way, it prepares for the in-place
translation of the module into Ada in the context of the Spunky project.

* Get rid of virtual methods in Ipc_node.
* Move all stuff related to protection domains, capabilities, and UTCBs to
  the Thread class. this code might later be moved to a dedicated module, but
  for now it's just fine to have it done by the thread module.

Ref #3308
2020-02-20 12:11:21 +01:00
Christian Prochaska
4b3c40f35b test-tcp_bulk: increase resources
Fixes #3645
2020-02-20 12:11:21 +01:00
Stefan Kalkowski
79fba6c2ac core: add kernel-specific UTCB quota bookkeeping
Fix #859
2020-02-20 12:11:21 +01:00
Tomasz Gajewski
4f217b19a9 hw: add CPU wake up code for rpi3
Moved code waking up processors for Cortex A53 before changing privilege
level because sending events to higher privilege levels is not allowed.

Fixed enable_mmu for Cortex A53 to properly return cpu id.

Fixed starting code for secondary cores to properly initialize stacks.

Added code to wake up secondary cores on rpi3.

Ref #3573
2020-02-20 12:08:17 +01:00
Stefan Kalkowski
202333c881 hw: cortex a9 diagnostic register initialization
We cannot count on the correct initialization of the diagnostic register
of the secondary cores. But the boot core gets initialized by the bootchain,
so we can copy over those values.

Fix #3639
2020-02-20 12:08:17 +01:00
Christian Prochaska
2ce0395fd8 arora.run: fix 'focus' route
Fixes #3637
2020-02-20 12:08:17 +01:00
Emery Hemingway
bbdf181828 core: add support for unlabeled LOG sessions
If the root child requests a LOG service with the label "unlabeled" then
return a LOG session that logs unprefixed messages. This allows a external
test controller to recognize log messages produced by a blessed component.
2020-02-20 12:08:17 +01:00
Norman Feske
0181c6025a menu_view: add <label min_ex=".."> attribute
This new attribute can be used to enforce a minimum width in the unit of
the size of the character 'x'. Furthermore, the patch sets the minimum
height of a label to 0 if no 'text' attribute is present. By combining
both features, the label becomes usable as a horizontal spacer.

Issue #3629
2020-02-20 12:08:17 +01:00
Norman Feske
6eff83c1eb menu_view: invisible frame
Issue #3629
2020-02-20 12:08:17 +01:00
Norman Feske
5aae0f2379 menu_view: support multiple floats within a frame
This patch refines the hover handling such that a float widget never
responds to hovering unless a child is hovered. This way, it becomes
possible to stack multiple float widgets within one frame and still
reach all child widgets.

Issue #3629
2020-02-20 12:08:17 +01:00
Norman Feske
49ae4a834f menu_view: support for displaying text selections
Similarly to the way of how a <cursor> can be defined for a <label>
widget, a selection can be expressed as follows:

  <label ...>
    <selection at="2" length="12"/>
  </label>

Issue #3607
Issue #3629
2020-02-20 12:08:17 +01:00
Norman Feske
5b650434b0 menu_view: unquote label text attribute value
This patch enables the menu view to display '"' characters supplied via
the 'text' attribute of the <label> widget.

Issue #3607
Issue #3629
2020-02-20 12:08:16 +01:00
Norman Feske
e612f7cd7d menu_view: add character position to hover report
When setting the <dialog> attribute 'hover_details' to "yes", the hover
report features the character position of a hovered label.

Issue #3607
Issue #3629
2020-02-20 12:08:16 +01:00
Norman Feske
7cc4aa2a28 menu_view: text cursor support
This patch equips the label widget with the ability to display a text
cursor, as illustrated by the following example:

  <label text="...">
    <cursor at="10"/>
  </label>

Issue #3607
Issue #3629
2020-02-20 12:08:16 +01:00
Norman Feske
60f5d0e34a gems/animated_geometry.h: increase value range
The value range supported by the 'Animated_rect' utility is constrained
to 2^11 by the used 32-bit integer type. The interpolation is performed
on fixpoint numbers with a fractional precision of 10 bits. The
non-linear interpolation as performed by the 'Lazy_value' utility
involves squaring the values. Hence, the interpolated integral values
must not exceed 2^11 (2*11 bits for the square plus 10 bit for the
fractional part require 32 bits). This range is too small for
high-resolution displays. Hence this patch replaces the 32-bit integer
type by a 64-bit integer type.

Fixes #3627
2020-02-20 12:08:16 +01:00
Norman Feske
46c5a90ba1 nitpicker_gfx: Text_painter::Font::index_at_xpos
This method is useful for finding the character under a mouse position.
2020-02-20 12:08:16 +01:00
Stefan Kalkowski
1273c573b6 wm: destroy view before newly creating it 2020-02-20 12:08:16 +01:00
Norman Feske
3a2895af19 wm: reset pointer position on leave event
The wm used to remember the last pointer position when observing a leave
event. With such a stale pointer position, the wm would eventually
wrongly create an artifical motion event when a supposedly hovered
window changes its position (during an animated move). This can lead to
the propagation of the stale pointer position to the wm client, which,
in turn, may interpret the outdated position (e.g., the menu view would
report a wrong hover state).

This patch removes the stale state by resetting the '_pointer_pos' when
observing a leave event.

Fixes #3632
2020-02-20 12:08:16 +01:00
Norman Feske
0bffac6c98 nit_fader: make fading steps configurable
Fixes #3633
2020-02-20 12:08:16 +01:00
Norman Feske
c25de5dba3 backdrop: make width and height customizable 2020-02-20 12:08:16 +01:00
Norman Feske
60edfa4d77 fs_query: add directory entries to listing report
Fixes #3631
2020-02-20 12:08:16 +01:00
Norman Feske
52e582132f os/vfs.h: handle corner case in join function
When specifying "/" or "" as rel_path to the 'Directory' constructor,
the constructed directory should refer to the same directory. The
implementation of the join utility did not consider this corner case. It
occurred during the attempt to use fs_query with "/" given as path.

This patch also adds a Directory::Entry::dir accessor that returns true
if the entry is a directory.

Fixes #3630
2020-02-20 12:08:16 +01:00
Norman Feske
a888041ba4 cached_fs_rom: fix file-handle leak
Fixes #3634
2020-02-20 12:08:16 +01:00
Norman Feske
844af06782 base/buffered_output.h: flush at destruction time
By writing out all dangling characters at destruction time, the
'Buffered_output' utility can be used as a local variable rather
than a long-living object.
2020-02-20 12:08:16 +01:00
Norman Feske
7da3404bd0 pkg/noux-system: increase nit_fb quota
With this change, the window can be maximized on a full-HD screen.
2020-02-20 12:08:16 +01:00
Sid Hussmann
7676f47540 depot_deploy: support heartbeat in deploy config
Issue #3575
2020-02-20 12:08:16 +01:00
Josef Söntgen
9d7a58f6a7 dde_bsd: update audio driver to OpenBSD 6.6
Besides updating to a newer version the update adds the AC97 ICH driver
and addresses shortcomings with the OpenBSD emulation environment:

* Fix 'delay(9)' implementation - it now properly uses 'us' as unit,
  which results on faster initialization of the drivers.

* Fix LOG output that got lost during commit f23579532 and bring over
  the printf implementation from dde_linux for more structured
  printing.

* As said the driver now recognizes the AUICH devices. So far it was
  only tested with the device model in VirtualBox where it produces
  stuttering audio, investigating the cause is still ongoing.

Fixes #3641.
2020-02-20 12:08:16 +01:00
Christian Prochaska
9bd3d2aa5c qt5: use main entrypoint in QPA plugin
Fixes #3644
2020-02-20 12:08:16 +01:00
Christian Prochaska
28e782dda5 qt5: use pthread backend for QThreads
Fixes #3643
2020-02-20 12:08:16 +01:00
Christian Prochaska
597098845c libc: support pthread cleanup handlers
Fixes #3642
2020-02-20 12:08:16 +01:00
Sebastian Sumpf
8a7deae238 ahci: switch to request stream API + structural changes
- Remove dated 'Block::Driver' front end and implement
  'Block::Request_stream' front end
- Remove all dynamic memory allocations but DMA memory allocations
- Remove 'Platform_hba' and implement platform specific functions in
  'spec/<platform>/*'
- Ata and Atapi don't inherit from 'Port' any more, but are a member of
  'Port' as a protocol implementation
- Use platform driver for MMIO mappings (x86)
- Exchange stateful initialization of Ata/Atapi with a sequential
  initialization using 'wait_for_any' and 'retry' patterns
- Fix Atapi initialization by setting the byte count limit
- Set FIS receive base only when Cmd::FRE is disabled and Cmd::FR is 0
- Put everything in namespaces ('Ahci', 'Ata', or 'Atapi')
- Ata decides during read/write operations to use native-command queuing
  or normal DMA requests
- Remove port claiming logic (is now done via 'Constructibles')

fixes #3636
2020-02-20 12:08:16 +01:00
Sebastian Sumpf
73f2c7043c ahci: remove Exynos5 support
Exynos5 support has ceased on Genode

issue #3636
2020-02-10 16:00:41 +01:00
Sebastian Sumpf
de24035066 base: add 'wait_for_any' to 'Register_set'
This is the same as 'wait_for' with the difference that 'wait_for_any'
succeeds when *one* condition is met.

issue #3636
2020-02-10 16:00:40 +01:00
Norman Feske
57ea1dbdd3 depot: update recipe hashes 2020-02-10 14:29:06 +01:00
Christian Prochaska
9f73f09cec tcp bulk test: add VFS server tests
Fixes #3611
2020-02-10 14:21:48 +01:00
Martin Stein
d56b21d329 nic_router: do not change ethernet header as hub
When forwarding domain-local traffic like a hub, the NIC router shouldn't
modify packets at all.

Fixes #3625
2020-02-10 14:21:47 +01:00
Christian Helmuth
8d60bc11b5 vbox: periodic timer based on absolute timestamps
Before timestamps where calculated as durations since current wakeup
which introduces a systematical drift.
2020-02-10 14:21:47 +01:00
Christian Helmuth
604f4c666b Remove Timed_semaphore from libc incl test package
Issue #3550
2020-02-10 14:21:47 +01:00
Christian Helmuth
ff5175ec76 libc: synchronization primitives based on monitor
The libc monitor facility enables the execution of monitor jobs by the
main thread when the monitor pool was charged. In comparison to the
current suspend/resume_all mechanism the main thread iterates over all
job functions in contrast to waking up all threads to check their
conditions by themselves. Threads are only woken up if the completion
condition was met.

This commit is the result of a collaboration with Christian Prochaska.
Many thanks for your support, Christian.

Fixes #3550
2020-02-10 14:21:47 +01:00
Christian Helmuth
6aebd5dd95 libc: append serial number to pthread name
... in pthread_create()

Issue #3550
2020-02-10 14:21:47 +01:00
Christian Helmuth
3d4bed3374 libc: unify semantic of sleep functions
sleep(), usleep(), and nanosleep() now return immediately on
zero-timeout. Also, non-zero timeouts sleep at least 1 ms (the current
minimal timeout in libc), which compensates rounding errors.

Issue #3550
2020-02-10 14:21:47 +01:00
Alexander Boettcher
ee7a77643e depot_deploy: support affinity configuration
Fixes #3597
2020-02-10 14:21:47 +01:00
Alexander Boettcher
646d6c368c core: fixup cpu weight on failed thread creation
Fixes #3613
2020-02-07 14:14:20 +01:00
Alexander Boettcher
d96e14fe16 sandbox: adjust location size scaling
by incorporating session location

Issue #1412
2020-02-07 14:14:20 +01:00
Alexander Boettcher
3a9d450106 trace: avoid page fault on client calling subjects
Fixes #3608
2020-02-07 14:14:20 +01:00
Martin Stein
a73ef9fc06 app/ping: fix destination MAC on ARP replies
The ARP destination MAC was set to the Ethernet source MAC which is not
necessarily the MAC of the other ARP peer. Instead use the ARP source MAC of
the ARP request.
2020-02-04 16:12:04 +01:00
Stefan Kalkowski
3016b64fac mesa: enable ARM-64 port
Fix #3622
2020-02-04 16:10:28 +01:00
Stefan Kalkowski
22498e0b09 os: add backtrace utility for arm_64
Fix #3621
2020-02-04 16:10:22 +01:00
Stefan Kalkowski
79dff674fd gems: add connect facility to tcp_terminal
Instead of listening for new TCP/IP connections only,
the TCP terminal connects to a server when an IP address is
configured in the policy for a terminal client.

Fix #3619
2020-02-04 16:10:09 +01:00
Stefan Kalkowski
56ef7ca9e7 hw: enable ARMv8 performance counter
Fix #3618
2020-02-04 16:05:01 +01:00
Stefan Kalkowski
9db50753f1 libports: add ARMv8 support for libpng
Fix #3617
2020-02-04 16:04:54 +01:00
Stefan Kalkowski
e84e1bbf36 dde_linux: optimize refresh routine in imx8_fb_drv
Fix #3616
2020-02-04 16:03:08 +01:00
Stefan Kalkowski
fda337a1c0 os: increase throughput of blit for ARM 64-bit
Fix #3615
2020-02-04 16:01:35 +01:00
Stefan Kalkowski
f49f91da08 os: increase RAM quota for drivers in fb_bench.run
Enables fb_bench.run script for new imx8 framebuffer driver.

Ref #3615
2020-02-04 15:59:33 +01:00
Christian Helmuth
90535a1401 depot: update recipe hashes 2020-02-04 15:51:10 +01:00
Christian Helmuth
43719b5fd1 libc: fix returned timeout-left value
If the suspend method for the main thread detects that the suspend
condition is false it must return the passed timeout value (not always
0). Otherwise, the caller may incorrectly assume the timeout expired.
2020-02-04 15:51:10 +01:00
Stefan Kalkowski
2a94f8cdb4 depot: update public key for skalk 2020-02-04 15:51:10 +01:00
Christian Helmuth
1e578f1a50 Log key count in input test 2020-02-04 15:51:10 +01:00
Alexander Boettcher
a036d2373a x86/ps2: disable devices during commands
Especially the initial reset ended up with an unusable keyboard in rare
cases before. This commit disables keyboard and mouse handling of i8042
during command sequences according to a note from

  https://www.win.tue.nl/~aeb/linux/kbd/scancodes-12.html
2020-02-04 15:51:10 +01:00
Norman Feske
a2b303e95a Road map for 2020 2020-02-04 15:51:10 +01:00
Alexander Boettcher
7b964fa700 base: add affinity space info to platform info
Issue #3599
2020-02-04 15:51:10 +01:00
Alexander Boettcher
72f5f9d133 sculpt_manager: apply affinity-space to runtime
Issue #3599
2020-02-04 15:51:10 +01:00
Christian Prochaska
186a6bc080 test-tcp_bulk_lxip: increase timeout value
Fixes #3609
2020-02-04 15:51:10 +01:00
Norman Feske
567d9f7910 Xml_node::Unquoted utility for attribute values
The new utility can be used to revert quoted XML attribute values.
Such quoting is needed whenever an attribute value can contain '"'
characters. E.g., in the menu_view's <label text="..."> widget.

Issue #1757
2020-02-04 15:51:10 +01:00
Norman Feske
d70cf314d8 Never throw in 'Attached_rom_dataspace::size'
If the ROM service returned in invalid dataspace, reflect this condition
via a size of zero instead of triggering an exception of type
'Reconstructible<Attached_dataspace>::Deref_unconstructed_object'.

Issue #3606
2020-02-04 15:51:10 +01:00
Norman Feske
c6445da654 vfs: watch support for <rom> file system
Fixes #3606
2020-02-04 15:51:10 +01:00
Norman Feske
96cde52838 vfs: make <rom> fs robust against invalid ROMs
An invalid ROM dataspace can occur, for example, when requesting a ROM
from the report_rom service before the first report was posted. Such a
<rom> node can still be useful if it's dynamic. E.g., it can be watched.
Hence, the corner case of an invalid ROM dataspace should be gracefully
handled instead of causing an abort.

Issue #3606
2020-02-04 15:51:09 +01:00
Norman Feske
c67a0d3dd8 os/dynamic_rom_session.h: support Xml_generator
This patch adds a special variant of a 'Content_producer' called
'Xml_producer', which allows the direct use of an 'Xml_generator'
for generating the ROM-module content.
2020-02-04 15:51:09 +01:00
Norman Feske
78c0e5f6b6 New sandbox library extracted from init component
This patch extracts the child-management functionality from the init
component into a new library called "sandbox". The library API is
located at 'os/include/os/sandbox.h'.

The sandbox API allows for the interaction of the component with the
sandboxed children by providing locally implemented services. This
mechanism is illustrated by the new test at os/src/test/sandbox.

Issue #3601
2020-02-04 15:51:09 +01:00
Norman Feske
f82e7df0ba os/buffered_xml.h: support for generating XML
This patch extends the 'Buffered_xml' utility with a new constructor
that fills the buffer with the output of an 'Xml_generator'. It thereby
presents an easy way to generate XML to be consumed locally.

The patch also add a deprecation mark to the original 'xml' accessor
because copying 'Xml_node' objects (here as return value) is dangerous.
The new 'with_xml_node' method should instead be used to access the XML
content stored in the buffer.

Fixes #3602
2020-02-04 15:51:09 +01:00
Norman Feske
640a001ab6 util/xml_node.h: avoid internal use of exceptions
The XML parser used to rely in C++ exceptions while parsing, which is an
artifact from the initial implementation. This patch reworks the code such
that exceptions are avoided in the common cases.

Fixes #3605
2020-02-04 15:51:09 +01:00
Alexander Boettcher
c5c5f8754c test-init: add test to check for affinity warning
Issue #1412
2020-02-04 15:51:09 +01:00
Alexander Boettcher
5be3bf4f26 init: warn about missing affinity-space
if affinity is set by children

Issue #1412
2020-02-04 15:51:09 +01:00
Alexander Boettcher
d132fc0a73 init: scale affinity location
Issue #1412
2020-02-04 15:51:09 +01:00
Christian Helmuth
285a33c97d dde_linux: add missing white space in log message 2020-02-04 15:51:09 +01:00
Alexander Boettcher
f09ac23144 base: Timestamp type on arm_64 is 64bit 2020-02-04 15:51:09 +01:00
Alexander Boettcher
734752d6b5 base-nova: show size of framebuffer correctly 2020-02-04 15:51:09 +01:00
Christian Prochaska
4fc6c4ff5c test-tcp_bulk_lwip: increase timeout value
Fixes #3604
2020-02-04 15:51:09 +01:00
Christian Prochaska
746d373362 vfs_lxip: classify 'data' file as continuous
Fixes #3603
2020-02-04 15:51:09 +01:00
Alexander Boettcher
2256f5fb4b dde_linux: add dma_wmb/rmb barriers for arm_v6 2020-02-04 15:51:09 +01:00
Christian Prochaska
d8e2c95597 vfs server: ensure retry for stalled session
Fixes #3600
2020-02-04 15:51:09 +01:00
Alexander Boettcher
6506240642 dde_linux: add dma_wmb/rmb barriers for arm_v7
and remove re-defined dma_wmb in fec driver
2020-02-04 15:51:09 +01:00
Sebastian Sumpf
bd284347da libports: fix undefined reference for gmp on arm_v8
* enable native 'invert_limb' implemenation
* disable native 'udiv_qrnnd' implemenation

fixes #3598
2020-02-04 15:51:08 +01:00
Sebastian Sumpf
3813f9772a libports: add '__gmpn_invert_limb' for arm_v7
Implementation was missing.

issue #3598
2020-02-04 15:51:08 +01:00
Sebastian Sumpf
1902d1a06b hw: do not map boot modules in bootstrap
This commit safes virtual address space.
2020-02-04 15:51:08 +01:00
Josef Söntgen
7ecabb25eb ssh_terminal: address ambigouity of return values
Replace return values with appropiate bool and document two-staged
publickey authentication. This fixes a bug where wrong authentication
attempts are not properly denied.

Issue #3590.
2020-02-04 15:51:08 +01:00
Alexander Boettcher
5b633a83df core: dissolve thread object on failed creation
Fixes #3596
2020-02-04 15:51:08 +01:00
Norman Feske
beb8bf498c base-hw: add explicit array-bounds check
This patch rules out out-of-bounds array accesses without inspecting the
caller. It is not a bug fix but adds clarity.
2020-02-04 15:51:08 +01:00
Norman Feske
de764d8490 base-hw/muen: add explicit array-bounds check 2020-02-04 15:51:08 +01:00
Norman Feske
5635c1318c base-hw: explicit bounds check in store_apic_id
Avoid relying on the caller regarding the CPU index argument to ease the
reasoning about the code.
2020-02-04 15:51:08 +01:00
Norman Feske
01713c74f9 base-foc: explicit array-index bounds check
Adding an explicit check clarifies at the first glance that the array
bounds are respected without needing knowledge about MAX_CAPS_PER_MSG
and L4_UTCB_GENERIC_DATA_SIZE (used for dimensioning 'mr').
2020-02-04 15:51:08 +01:00
Norman Feske
9ec66f0594 allocator_avl: simplify structure
This patch changes the code of '_alloc_two_blocks_metadata' to not
leak the result of a partial allocation in the out parameters of
the method. This eases the reasoning about the absence of a
use-atfer-free problem (there was none).
2020-02-04 15:51:08 +01:00
Norman Feske
6947bddd3f base: avoid use of memcpy 2020-02-04 15:51:08 +01:00
Norman Feske
37ec636018 test/smp: add missing destruct call 2020-02-04 15:51:08 +01:00
Norman Feske
9bba6613e7 base/affinity.h: simplify member initialization
This is just a minor style improvement.
2020-02-04 15:51:08 +01:00
Christian Prochaska
d4f246517c depot: recipe for drivers_interactive-imx8q_evk
Fixes #3595
2020-02-04 15:51:08 +01:00
Stefan Kalkowski
5bfebe7a3f depot: recipe for usb_hid_drv
Fixes #3594
2020-02-04 15:47:27 +01:00
Stefan Kalkowski
3df67362b4 depot: recipe for usb_host_drv
Fixes #3593
2020-02-04 15:47:27 +01:00
Christian Prochaska
f1042e7fb1 depot: recipe for imx8_fb_drv
Fixes #3592
2020-02-04 15:47:27 +01:00
Christian Prochaska
b29112efdf dde_linux: framebuffer driver for i.MX8 EVK
Fixes #3591
2020-02-04 15:47:27 +01:00
Stefan Kalkowski
fe899eecc7 base-linux: fix configurable host toolchain
With the '-x' argument of the 'g++' tool the language gets specified,
therefore it has to be 'c++' furthermore, not CUSTOM_HOST_CXX. Moreover,
when import-lx_hybrid.mk gets evaluated first, global.mk is not included
yet, therefore we cannot eagerly evaluate the CXX_LINK_OPT_NO_PIE variable.

Issue #3466
2020-02-04 15:47:27 +01:00
Norman Feske
c2a2ec121f libc-net/resolv: silence warning in 3rd-party code 2020-02-04 15:47:27 +01:00
Norman Feske
e1e1fa23b7 zlib: fix compile warning
This patch includes 'unistd.h' to avoid warnings about the implicit
declaration of the functions ‘read’, 'close', and 'write.
2020-02-04 15:47:27 +01:00
Norman Feske
aee8d35dc4 libcrypto: suppress warning about unused value 2020-02-04 15:47:27 +01:00
Christian Helmuth
4bbbf5d2e3 dde_linux: reduce compiler warnings 2020-02-04 15:47:27 +01:00
Norman Feske
ba7e832c5d ssh_terminal: fix compile warning
server.h:51:12: warning: ‘int write_avail_cb(socket_t, int, void*)’
                declared ‘static’ but never defined [-Wunused-function]

This patch fixes the warning by moving the user of 'write_avail_cb' to
the compliation unit that defines it.
2020-01-03 14:44:31 +01:00
Norman Feske
bbfc092a31 core: avoid use of C array as buffer in Log_root 2020-01-03 14:44:15 +01:00
Norman Feske
de52cf1cdd core: check return value of map.metadata
Even though the call of map.metadata is known to always return a valid
pointer (because the meta data is assigned in the code just above),
better add an explicit nullptr check.
2020-01-03 14:44:15 +01:00
Norman Feske
783c05fd6c uart/exynos: be explicit about unused return value 2020-01-03 14:44:15 +01:00
Norman Feske
6ae98e2e6d base: mark Parent::Close_result with [[nodiscard]] 2020-01-03 14:44:15 +01:00
Norman Feske
ffc099eb54 cxx: add nullptr check in calloc
Even though malloc via the cxx_heap never fails, the implementation of
calloc should better not rely on this assumption.
2020-01-03 14:44:15 +01:00
Christian Helmuth
9321067b68 Remove unused/redundant longlong.h
This was used by an ancient libgmp port - longlong.h is now part of the
GMP sources.
2020-01-03 14:21:41 +01:00
Christian Prochaska
0eaa1f7a08 lx_kit: support enable/disable IRQ and pass IRQ number to handler
Fixes #3589
2020-01-02 15:53:46 +01:00
Christian Helmuth
18f90ca1e3 nova: request stack pointer on page fault
The SP value is part of the Page_fault_info object but was not requested
from the kernel on portal creation.
2020-01-02 15:30:28 +01:00
Christian Helmuth
9a35743df6 Mark packet-stream descriptor head/tail as volatile
`volatile` effectively prevents instruction reordering by the compiler
and fixes an issue with -O3 compiled components.

Note, this commit does not address further arguments regarding memory
barriers and volatile voiced in issue #693.

Issue #693
2019-12-20 14:34:22 +01:00
Christian Helmuth
8d63a3c1f3 Increase timeout of RTC test
It takes its time on sel4 and Qemu.
2019-12-20 14:28:18 +01:00
Alexander Boettcher
1ac33caa90 nova: handle rpc_entrypoint destruction better
Fixes #1921
2019-12-20 11:31:39 +01:00
Alexander Boettcher
1c361bf545 base: add test to destruct entrypoint
Issue #1921
2019-12-20 11:31:27 +01:00
Alexander Boettcher
a41dd48986 nova: avoid invalid capability counting overhead
- handle it the same way as done for other kernels

Fixes #3579
2019-12-20 11:29:21 +01:00
Christian Helmuth
b931b67cba depot: update recipe hashes 2019-12-19 17:01:43 +01:00
Christian Helmuth
24435e9ca1 Run TCP bulk tests on all Qemu platforms
This explicitly includes ARM32/64.
2019-12-19 17:01:43 +01:00
Alexander Boettcher
e54ff599ca base-hw: trace execution time of core threads
Fixes #3572
2019-12-19 17:01:43 +01:00
Sebastian Sumpf
04969b6be0 base-hw: add trace execution time support
This enables the 'top' program on base-hw for debugging issue #3247 on
rpi.

Fixes #3572
2019-12-19 17:01:42 +01:00
Christian Helmuth
1ddf1dbc25 Use ram-block in libc vfs tests on Rpi3 2019-12-19 17:01:42 +01:00
Christian Helmuth
8699f5592f wifi: run wpa_main in pthread 2019-12-19 17:01:42 +01:00
Norman Feske
73d089da36 Quota tweaks for base-sel4 2019-12-19 17:01:42 +01:00
Christian Prochaska
c8cd09e72c qt5: don't build qt5_jscore and qt5_webcore for arm_v8a
Fixes #3585
2019-12-19 17:01:42 +01:00
Christian Prochaska
be1ef01f10 stdcxx: add symbols needed by dosbox
Fixes #3588
2019-12-19 17:01:42 +01:00
Alexander Boettcher
0a1bc1f4b7 nova: add requesting time of killed SCs
Fixes #3587
2019-12-19 17:01:42 +01:00
Alexander Boettcher
bcb7f45201 core: avoid dangling ptr in cpu thread component
if exception is triggered during construction of a thread
2019-12-19 17:01:42 +01:00
Alexander Boettcher
33db0e0d4d base: add uboot for imx8 as port
that contains scripts to download and build uboot

Fixes #3584
2019-12-19 17:01:42 +01:00
Christian Helmuth
504539ad1e vfs/lwip: notify I/O progress on sent packets
Incoming ACK packets for sent data packets may be the only unblocker for
suspended write/send loops. This patch informs VFS users about I/O of
VFS handle on successfully sent packets.
2019-12-19 17:01:42 +01:00
Christian Prochaska
a62fce8dc5 sd_card_drv: i.MX8 support
Fixes #3580
2019-12-19 17:01:42 +01:00
Christian Prochaska
81a78cf1d0 usb_host_drv: fix 'matches->compatible' string access
Fixes #3582
2019-12-19 17:01:42 +01:00
Christian Helmuth
283135c9cd test-libc_getenv: allow unrelated content in log pattern 2019-12-19 17:01:42 +01:00
Sebastian Sumpf
22d4d5c1c1 ldso: update link map during respawn
move binary to front of link map after respawn. This is required by GDB
in order to load symbol files correctly.

issue #3481
2019-12-19 17:01:42 +01:00
Sebastian Sumpf
9c372c36c1 libc: thread local errno support
Store errno in pthread objects, return member upon call to '__error()'.
This became necessary in order to make errno thread-safe.

Note, any call to libc code from a non-pthread (beside the first
entrypoint) is not supported.

issue #3568
2019-12-19 17:01:42 +01:00
Sebastian Sumpf
9767c4db0e vfs_lwip/lwip: Lwip::lock for concurrent access
This is required in case the send and receive of IP packets is
performed by multiple thread because lwip is not thread safe.

issue #3568
2019-12-19 17:01:42 +01:00
Alexander Boettcher
9812799b24 seoul: reduce CPU load in graphic mode
- Stop refreshing if all CPUs go to sleep, also in text mode.
- Any input resets update rate to 100Hz in graphic mode, which gets
  decreased step by step down to 25Hz if no input is available (looking video
  without input by user).

Fixes #3576
2019-12-19 17:01:42 +01:00
Alexander Boettcher
d385749ead seoul: make vmm memory configurable
- document Genode specific configuration option
2019-12-19 17:01:42 +01:00
Christian Helmuth
23ed5d3936 base-linux: configurable host toolchain
This commit uses CUSTOM_HOST_CC/CUSTOM_HOST_CXX instead of hardcoded
commands and introduces HOST_DEV_PREFIX.

Original patch by Roman Iten and Pirmin Duss.

Issue #3466
2019-12-19 17:01:42 +01:00
Christian Helmuth
cebc963396 Cleanup linux_rtc_drv and lx_fs target.mk
Original patch by Roman Iten and Pirmin Duss.

Issue #3466
2019-12-19 17:01:42 +01:00
Norman Feske
0c8ec41c21 vfs/pipe: let num_dirent return 0
This prevents the original value ~0UL from messing up the output
of 'ls -l /dev'.

Issue #3578
2019-12-19 17:01:42 +01:00
Norman Feske
9f7b8c1a17 vfs/log: allow output redirection via '> /dev/log'
Issue #3578
2019-12-19 17:01:42 +01:00
Norman Feske
cd92b32622 libc: close all open FDs on exit
This is important to issue sync requests for written-to files.

As the closing must be performed by an atexit handler, it happens at a
time _after_ libc plugins are destructed. Consequently an FD allocated
by such a plugin results in a close error, which in turn, does not
destruct the FD. We ultimatedly end up in an infinte loop of
re-attempting the close. For this reason, the patch changes 'close' to
be robust against this special case.

This is generally not a problem because libc plugins are phased out.
However, at present, the libc_noux plugin is still important. With the
changed 'close' in place, there occurred an error message "Error: close:
close not implemented" at the exit of each noux program. This patch
removes the error printing from the libc plugin mechansim to avoid this
noise. The error messages are not important anyway because the
deprecation of the libc plugin interface.

Issue #3578
2019-12-19 17:00:48 +01:00
Norman Feske
5853a68904 libc: silence calls of getpeername w/o socket fs
The getpeername function is provided only by the socket fs.
In the case where the socket fs is not configured, return an appropriate
errno instead probing for a libc plugin (there is none).

Issue #3578
2019-12-19 17:00:48 +01:00
Norman Feske
ae64830bd5 libc: silence get(e)gid, get(e)uid, getppid
These dummies spam the log when running bash + make, like in the
genodians.org scenario.

Issue #3578
2019-12-19 17:00:48 +01:00
Norman Feske
e8878eee8a ldso: increase initial heap block
This is needed to enable the fork of 'make' in the genodians.org
scenario on NOVA.

Issue #3578
2019-12-19 17:00:48 +01:00
Norman Feske
3897ddea03 cxx: don't rely on global ctors
This patch removes the global variable 'blocker', which was expected to
be constructed via the global ctors. This mechanism, however, is not
used for the base library, which resulted in the use of an unconstructed
object. Specifically, the spinlock of the 'Lock' of the 'Registry'
defaulted to the LOCKED state (value 0), which eventually would lead to
a deadlock in the contention case of the cxa guard.

I could observe this deadlock once on during the component startup on
base-linux during the construction of the 'startup_lock'.

This patch fixes the problem by explicitly initializing the registry
of blockers via an init function.

Issue #2299
Issue #3578
2019-12-19 17:00:48 +01:00
Norman Feske
6858270517 base: disarm atexit handling for signal thread
The signal thread is not supposed to be destructed in any scenario other
than the noux fork mechanism (where no signals occur).

Issue #3578
2019-12-19 17:00:48 +01:00
Norman Feske
4e57b6eceb core: fix destruction of dependent CPU sessions
Issue #3578
2019-12-19 17:00:48 +01:00
Norman Feske
298f317f44 core: remove quota-related diagnostic messages
Issue #3578
2019-12-19 17:00:48 +01:00
Norman Feske
5820ad8309 fiasco: silence ipc_send error messages
These diagnostic messages spam the log but can occur during the regular
component-destruction procedure.

Issue #3578
2019-12-19 17:00:48 +01:00
Norman Feske
b7fbe65ff2 libc: fork/execve improvements
- Close FDs marked with the close-on-execve flag
  (needed for 'make', which sets the flag for the pipe-in
  FD of forked children)
- Update binary name on execve to use as ROM for subsequent fork
- Enable vfork as an alias for fork (needed by make)
- Purge line buffers for output streams during execve because they
  may be allocated at the allocation heap, which does not survive
  the execve call.
- Consider short-lived processes that may exit while the parent still
  blocks in the fork call.

With these changes, the website generator of genodians.org works without
the need for the Noux runtime.

Issue #3578
2019-12-19 17:00:47 +01:00
Norman Feske
d1cf216384 libc: propagate pipe config to child processes
Issue #3578
2019-12-19 17:00:47 +01:00
Alexander Boettcher
3011dc5876 sculpt: add vbox5 generic package as option
Fixes #3574
2019-12-19 17:00:47 +01:00
Alexander Boettcher
6e99f00f5c usb_hid_raw: enable imx8q_evk for nightly testing
Issue #3571
2019-12-19 17:00:47 +01:00
Alexander Boettcher
beb1e084a6 base: add imx8 evk usb driver to platform config
Issue #3571
2019-12-19 17:00:47 +01:00
Alexander Boettcher
e34b443c29 usb: add imx8q_evk support to usb_host
Issue #3571
2019-12-19 17:00:47 +01:00
Alexander Boettcher
6b17bb647e dde_linux: add barriers to readl/writel
Issue #3571
2019-12-19 17:00:47 +01:00
Christian Helmuth
4299b85cdb base-linux: support invalid dataspace for RM client
This restores behavior introduced in

  commit cb232891bf
  Author: Norman Feske <norman.feske@genode-labs.com>
  Date:   Tue May 10 11:55:25 2016 +0200

    Fix noux.run on base-linux

but removed by issue #2829.

Related to issue #1938
2019-12-19 17:00:47 +01:00
Sebastian Sumpf
6dae147785 libc: limit fd id allocations to FD_SETSIZE
fd > FD_SETSIZE cannot use 'select' or 'poll' within our libc.
Therefore, we added a bit allocator in order to allocate fd < FD_SETSIZE
(1024).

fixes #3568
2019-12-19 17:00:47 +01:00
Sebastian Sumpf
e4255e4c8b vfs/lxip: wait for i/o progress on connect
Since connect is asynchronous, add a waiter during connect

issue #3568
2019-12-19 17:00:47 +01:00
Christian Helmuth
161274f785 pistachio: check for 'ed' tool on port prepare
Some debian systems seems to come without 'ed' in the base installation.
The tool is needed when building the pistachio kernel.
2019-12-19 17:00:47 +01:00
Roman Iten
6145cdcf37 run: close connection to spawned processes on kill
From the man page of expect:

> Both expect and interact will detect when the current process exits
> and implicitly do a close.  But if you kill the process by, say, "exec
> kill  $pid",  you  will need to explicitly call close.

Fixes #3569
2019-12-19 17:00:47 +01:00
Tomasz Gajewski
b57a4c98cf tool/run: run external command plugin for power_on subsystem
Fixes #3385
2019-12-19 16:59:03 +01:00
Emery Hemingway
a3e43aca87 Clang: undeclared identifier __UINT64_C
Issue #3564
2019-12-19 16:59:03 +01:00
Norman Feske
6b6915e304 ttf_font: fix artifacts with large font sizes
This patch is a follow-up fix for "ttf_font: prevent out-of-bounds
access", which produced sporadic single-pixel artifacts with large font
sizes, e.g., with the monospaced font set to 24px in Sculpt.

The artifacts occurred only for some horizontal sub-pixel positions, in
combination with the font cache, and after the rendering of '>'
characters. They were ultimately caused by the missed clearning of the
first pixel of a glyph where x0 is 1 (e.g., the character 'd'). In this
case, a pixel from the previously evicted cache entry (the '>') shined
through. The patch fixes the problem by clearing the glyph starting from
the first, not the x0's, pixel.

Fixes #3567
2019-12-19 16:59:03 +01:00
Alexander Boettcher
3f83ac5580 tool: add imx8_evk board variable hint 2019-12-19 16:59:03 +01:00
Emery Hemingway
7f57de1b74 VFS/terminal: fix clang warning
Variable-sized object may not be initialized.

Issue #3564
2019-12-19 16:59:03 +01:00
Emery Hemingway
648382db74 Align after template expansion
Clang Cannot align template structs. Also, cannot cast void* to addr_t
in constexpr function.

Issue #3564
2019-12-19 16:59:03 +01:00
Emery Hemingway
2c510bb7f9 Remove unused lamba capture to fix clang warning
Issue #3564
2019-12-19 16:59:03 +01:00
Emery Hemingway
23710dff5e Remove dead code
Issue #3564
2019-12-19 16:59:03 +01:00
Emery Hemingway
ff0436357b nic_stress: keep signal-context cap by value
Fixes clang warning about binding reference to stack allocated
parameter.

Issue #3564
2019-12-19 16:59:03 +01:00
Emery Hemingway
091e5157aa vfs server: fix File_system namespace warnings
Issue #3564
2019-12-19 16:59:03 +01:00
Alexander Boettcher
c1e181a407 vbox: handle invalid dataspace exception
Fixes #3566
2019-12-19 16:59:03 +01:00
Stefan Kalkowski
8f71c90ca8 dde_rump: backport aarch64 (Fix #3565) 2019-12-19 16:59:03 +01:00
Norman Feske
f85ec313de os/vfs.h: handle zero-sized files
The 'File_content' class failed to consider zero-sized files.

Fixes #3557
2019-12-19 16:59:03 +01:00
Norman Feske
2aa6471608 test/depot_query: add test for zero-sized archives
This test covers the situation where depot_query evaluates depot content
that is incompletely extracted. In particular, if the 'archives' file
already exists but has a size of zero, depot_query would produce a
page fault. This situation can be manually provoked by deliberately
creating a zero-sized archives file for any otherwise correct pkg.

This patch also fixes the success indicator of the test. It wrongly
matched an early line of the log output.

Issue #3557
2019-12-19 16:59:02 +01:00
Stefan Kalkowski
9814fc5447 libports: enable arm_64 libssl, libcrypto variant
Fix #3563
2019-12-19 16:59:02 +01:00
Martin Stein
3655ea77a3 depot_autopilot: rework log matching
* The log history of a test is stored as a whole for the lifetime of the test.
* Matching of the log history against log patterns is done correctly now
  (previously, a pattern like "AAB" on an input like "AAAB" wouldn't have
  triggered).
* Use memcmp, memcpy, memmove instead of the former character-wise operations.
* Sanitizing of log input and log patterns now works more generic through the
  new Filter class for all replacements/removals.
* Sanitizing is done as soon as a string is available and remains for the
  lifetime of the test.
* Sanitizing doesn't interfer with the matching algorithm.
* Decomposing into small clearly named functions.

Ref #3555
2019-12-19 16:59:02 +01:00
Johannes Kliemann
89d35bc41e tool: boot Genode on bare metal Linux
Fixes #2829
2019-12-19 16:59:02 +01:00
Johannes Kliemann
93639532f0 base-linux: core session support (IO_PORT, IO_MEM, IRQ) 2019-12-19 16:59:02 +01:00
Christian Helmuth
8cf7aaad65 version: 19.11 2019-11-28 11:49:10 +01:00
Norman Feske
25a8ef3b7c News item for version 19.11 2019-11-28 11:44:29 +01:00
Norman Feske
b18a56c2c4 Release notes for version 19.11 2019-11-28 11:44:29 +01:00
Christian Helmuth
9d42e3f69b release notes: fix example in 19.08 input section 2019-11-28 11:44:29 +01:00
Christian Helmuth
11ef8e1ff2 depot: update recipe hashes 2019-11-28 09:06:39 +01:00
Christian Helmuth
1deab4a67f Disable noux_tool_chain_auto on foc/imx7d_sabre
The bootstrapper always fails with

  fatal: could not find free RAM region for modules

in this scenario.
2019-11-28 09:06:27 +01:00
Christian Helmuth
f23c70e068 sculpt_manager: use Codepoint::valid() 2019-11-28 09:06:26 +01:00
Alexander Boettcher
f7c818d303 vbox5: add recipe of kernel independent version 2019-11-25 16:02:40 +01:00
Stefan Kalkowski
7996cf06ab os: remove jitterentropy from fs_packet test
Fixes #3562
2019-11-25 15:44:57 +01:00
Stefan Kalkowski
4800bcf5a0 hw: correct the i.MX6 Sabrelite timer settings
Fix #3561
2019-11-25 15:43:59 +01:00
Christian Prochaska
4c74f4792c ahci_drv: set 'Cmd::St' to 1 before writing 'Sact' register
Issue #3058
2019-11-25 14:15:57 +01:00
Christian Prochaska
57d080d4f8 hw: use correct type on IRQ kernel object destruction
Fixes #3560
2019-11-25 14:15:39 +01:00
Alexander Boettcher
2778debc29 ram_fs: close open nodes on session close
Fixes #3559
2019-11-22 15:59:13 +01:00
Martin Stein
7182c10c90 test/nic_stress: test bad session args
Fixes #3525
2019-11-22 14:16:24 +01:00
Christian Prochaska
7309bcf4b5 gdb_monitor: add platform checks in run scripts
Fixes #3558
2019-11-22 14:12:06 +01:00
Sebastian Sumpf
309bc2083e vbox5: raise rrtimer priority
Make sure timers run at the same priority as component threads, otherwise
no timer progress can be made. See 'rtTimeNanoTSInternalRef' (timesupref.h)
and 'rtTimerLRThread' (timerlr-generic.cpp).
2019-11-22 13:33:15 +01:00
Norman Feske
6e098a9d17 ram_fs: apply session policy to write / mtime ops
This patch extends the distinction between read-only and writeable
sessions to packet-stream operations for WRITE and WRITE_TIMESTAMP.
2019-11-21 16:21:19 +01:00
Norman Feske
573b6d3345 noux: fix condition for mtime update
This is a follow-up patch for "noux: don't update mtimes for read-only
files". It eliminates warning messages during Sculpt's prepare step when
'cp' tries to update the mtimes of the source files.
2019-11-21 16:21:19 +01:00
Norman Feske
077fa355ce pkg/wm: increase RAM quota
This patch avoids a warning during the wm startup in Sculpt.
2019-11-21 15:13:20 +01:00
Norman Feske
e76ce05844 sculpt manager: ignore empty deploy configs
When copying config/managed/deploy to config/deploy, the latter may
temporarily result in an empty configuration. Such an intermediate
state should be ignored to keep the currently running scenario in tact
instead of restarting it.
2019-11-21 15:07:51 +01:00
Norman Feske
4622ddb46f nitpicker: add version attribute in clicked report
This patch addresses a corner case where the nitpicker focus is not
solely defined by mouse clicks or (exclusively) by a window manager, but
by a policy component that takes mouse clicks and other policy (e.g.,
a lock screen) into account. It ensures that each click that follows a
focus change (however initiated) results in a new "clicked" report even
when the report looks the same. To allow the policy component to
uniquely distiguish subsequent reports, the report features a new
'version' attribute.

Fixes #3493
2019-11-21 14:31:52 +01:00
Stefan Kalkowski
972e1893c9 os: introduce vmm component for ARMv8
Fix #3553
2019-11-21 14:29:36 +01:00
Stefan Kalkowski
af29dcf557 hw: introduce virtualization support for ARMv8
Ref #3553
2019-11-21 14:29:36 +01:00
Stefan Kalkowski
f82714f341 vm_session: return vcpu id when creating vcpu
Ref #3553
2019-11-21 14:29:36 +01:00
Stefan Kalkowski
02d68fdb97 hw: move arm virtualization to generic place
Ref #3553
2019-11-21 14:29:36 +01:00
Stefan Kalkowski
065b9fdb46 base-hw: extend syscalls to five arguments
Ref #3553
2019-11-21 14:29:36 +01:00
Stefan Kalkowski
18dbd75860 base: explictly target entrypoint in timer session
Fix #3548
2019-11-21 14:29:36 +01:00
Norman Feske
3ac970ac1d Streamline Timestamp::INVALID values
This is a follow-up patch for issue #1784 that solves two
inconsistencies.

- The Vfs::Timestamp::INVALID matches File_system::Timestamp::INVALID
- The Noux libc plugin tests for Timestamp::INVALID instead of a
  positive value.

The patch fixes the mtime info as shown in directory listings in
Sculpt's inspect window.
2019-11-21 14:26:27 +01:00
Norman Feske
3aaed7188f ram_fs: tie writeable bit to session policy
Related to issue #3507
2019-11-21 14:26:01 +01:00
Norman Feske
ee64e29e77 vfs server: tie writeable bit to session policy
This patch let the VFS server reflect the session policy via the
writeable bit in directory entries instead of merely forwarding the bit
from the respective VFS plugin. This way, all files originating from a
read-only file-system session automatically appear in directory listings
as read-only files.

Related to issue #3507
2019-11-21 14:25:43 +01:00
Norman Feske
cfba429c15 vfs/rump: offer all files as read-writeable
The distinction between read-only and read-writeable is the
responsibility of the front end, i.e., the vfs server.
2019-11-21 14:25:05 +01:00
Josef Söntgen
25aa25c6a0 wifi_drv: enable loading of 9000 series FW
Tested with a 'Intel(R) Wireless-AC 9462' device.

Fixes #3556.
2019-11-20 12:56:10 +01:00
Josef Söntgen
2afc02051c sculpt_manager: increase Rom_name size
The current value of 32 is too short for accessing the
iwlwifi 9000 ucode ROM.

Issue #3556.
2019-11-20 12:56:03 +01:00
Christian Helmuth
ce1b813105 depot: update recipe hashes (vbox, sculpt) 2019-11-19 16:08:19 +01:00
Christian Helmuth
7ed1d7f11d depot: update recipe hashes 2019-11-19 14:54:14 +01:00
Norman Feske
6ccd65bd8e sculpt_manager: invoke mkfs.ext2 with -F
The block-vfs plugin is no longer a special file. So we have to
explicitly discharge the sanity check of the mkfs tool.

Issue #3507
2019-11-19 14:54:14 +01:00
Norman Feske
18b621c2fe sculpt: version 19.11 2019-11-19 14:54:14 +01:00
Alexander Boettcher
cb61a28362 vbox5: use with_libc when call-in into vbox code
required due to pthreads becoming/are an integral part of the libc now.
Commit avoids libc error:

Error: libc suspend() called from non-user context (0xaf5c784) - aborting

Issue #3550
2019-11-19 14:54:14 +01:00
Norman Feske
4d7d208940 test-libc_vfs_fs_chained: fix XML validity error
This problem was spotted by the test.run script.
2019-11-19 14:54:14 +01:00
Sebastian Sumpf
f7509a5b78 libports: libc: extract file name from path in dlopen
'dlopen' causes the ldso to open ROM connections, right now we only
support single file names for these ROM not paths. Therefore, we extract
the file name from path within libc's 'dlopen'

fixes #3551
2019-11-19 14:54:14 +01:00
Christian Helmuth
a54c04d247 libc: return EPIPE on send to shut down sockets
This intermediate fix still lacks the generation of SIGPIPE and return
of EINTR if the MSG_NOSIGNAL flag is not set in the call to send().
2019-11-19 14:54:14 +01:00
Christian Helmuth
e70c04ef86 lwip: shut down TCP sockets return WRITE_ERR_IO on write 2019-11-19 14:54:13 +01:00
Christian Helmuth
6410e88698 netperf: handle EPIPE / silence warnings
This is an intermediate fix to handle sends to sockets shut down by the
peer already. A final fix in the libc would add support for the
MSG_NOSIGNAL send flag, generate SIGPIPE, and return the expected EINTR.
Then this patch is no longer required.

This commit also drops the obsolete patch for missing
sysconf(_SC_NPROCESSORS_ONLN), which is now part of libc.
2019-11-19 14:54:13 +01:00
Christian Helmuth
a3cb9d9897 lwip: prevent pointer-compare compilation warnings 2019-11-19 14:54:13 +01:00
Alexander Boettcher
b2a7ac2996 depot_deploy: support cpu quota configuration
the same as the ram and cap quota
2019-11-19 14:54:13 +01:00
Norman Feske
5f350adb57 vfs/lxip: don't misinterpret EINPROGRESS as error 2019-11-19 14:54:13 +01:00
Norman Feske
1485cd9d24 noux: don't update mtimes for read-only files
The VFS server as reworked in issue #3547 responds to such an attempt
with a failure as acknowledgement, triggering the client-side error
"Error: packet operation=2 failed" at noux.
2019-11-19 14:54:13 +01:00
Norman Feske
65d72fb07a drivers/gpu/intel: upgrade platform session on demand 2019-11-19 14:54:13 +01:00
Norman Feske
4871c7bba0 drivers/gpu/intel: reflect insuff. quota to client
This patch prevents the driver from translating Insufficient_ram_quota
and Insufficient_cap_quota exceptions to Service_denied exceptions at
session-creation time. This enables the client to respond to such a
condition by retrying the session creation with increased session quota.
2019-11-19 14:54:13 +01:00
Norman Feske
97e2968986 pkg/test-tcp_bulk_lwip: remove lwip.lib.so
The lwip library is not shared object.

This change is needed to execute the test with the test.run script.
2019-11-19 14:54:13 +01:00
Norman Feske
eb9a9bf23d bash.run: support using pipes 2019-11-19 14:54:13 +01:00
Emery Hemingway
c51b4b5742 New VFS plugin for emulating POSIX pipes
Add a new plugin for creating pipes between pairs of VFS handles. It is
intended to replace the libc_pipe plugin, one of the last remaining libc
plugins.

In contrast to the libc_pipe plugin, this plugin defers cross-handle
notification until I/O signal handling rather than block and unblock
readers using a semaphore. This is a performance regression in the case
of multiple threads blocking on a pipe, but shall be an intermediate
mechanism pending renovations within the libc VFS and threading layers.
As a side effect, threads blocked on a pipe might not be resumed until
the main thread suspends and dispatches I/O signals.

The "test-libc_pipe" test has been adjusted to use the VFS pipe plugin
and tests both local pipes and pipes hosted remotely in the VFS server.

Merge adaptations (such as EOF handling, adjustment to VFS/libc
interface changes) by Norman Feske.

Fix #2303
2019-11-19 14:54:13 +01:00
Norman Feske
9b7915facb vfs server: redesigned internal control flow
This patch reworks the VFS server to become easier to understand.

- The packet-stream handling is hidden from the node types.

- Introduced the notion of a "job" as an abstraction from the raw packet
  stream.

- The processing of requests is split into three phases:
  (1) accepting new jobs,
  (2) the execution of jobs, and
  (3) the delivery of acknowledgements.

- There is no longer a global fifo of pending nodes. Instead, each
  session has a fifo of "active" nodes, which are nodes that wait
  for the completion of jobs.

- The Io_node type no longer uses virtual functions as hooks for
  the derrived classes. Instead, it provides a number of utility
  functions.

- The control flow of the 'Io_progress_handler' is now the same as
  for the session-local packet-stream handler.

- Removed dependency from 'file_system/node.h', which is a relic
  from the ram_fs.

While reworking the code, the following semantic changes were made
additionally.

- The handling of SEEK_TAIL no longer overwrites the file content at the
  end of the file.

- Removed diagnostic message at session-creation time.

- Write loop for continuous files

Issue #3547
Issue #2303
2019-11-19 14:54:13 +01:00
Norman Feske
f0de187bbb libc: increase default quota of forked processes
This patch reduces the debug noise for the prominent case of executing
bash with coreutils. Without it, the forked process will always ask for
more RAM immediately when starting up.
2019-11-19 14:54:13 +01:00
Norman Feske
539110c0b1 base: make 'Fifo::Element::enqueued' const
Issue #3547
2019-11-19 14:54:13 +01:00
Norman Feske
d7b1a89087 file-system session: use same dirent size as VFS
This change allows for the conversion of directory entries in place
(i.e., in the VFS server) and anticipates the potential future merge of
both types into one.

Issue #3547
2019-11-19 14:54:13 +01:00
Christian Helmuth
c50252fb35 libc: suspend/resume in pthread mutex lock/unlock
Issue #3550
2019-11-19 14:54:13 +01:00
Christian Helmuth
54002e6e6b test-pthread: refactor and cleanup test cases
Issue #3550
2019-11-19 14:54:13 +01:00
Sebastian Sumpf
16994d637b libports: update gcov port
removes bogus include from generated file libgcc_tm.h

issue #3537
2019-11-19 14:54:12 +01:00
Martin Stein
b541a0d448 smbios.h: move to os/include/smbios
Fixes #3489
2019-11-19 14:54:12 +01:00
Norman Feske
d4e0d2f578 libc: defer clone ack after FD initialization
Issue #3478
Issue #2303
2019-11-19 14:54:12 +01:00
Norman Feske
fab2fc874f libc: write loop for continuous files
This patch improves the libc's write operation to iterate on partial
writes to continuous files until the original write count is reached.
The split of large write operations into small partial writes as
dictated by the VFS infrastructure (e.g., constained by I/O buffer
sizes) becomes invisible to the libc-using application.

Issue #3507
Issue #2303
2019-11-19 14:54:04 +01:00
Sebastian Sumpf
54643d6878 base: add entry to .dynanmic section in genode_dyn.ld
Make sure that at least entry is present in the .dynamic section, so the
PT_DYNAMIC segment points to something valid in case there are no
dynamic symbols.

issue #3537
2019-11-19 14:45:40 +01:00
Sebastian Sumpf
2653fad0c4 ports: noux_tool_chain_auto for ARMv8
issue #3537
2019-11-19 14:45:40 +01:00
Sebastian Sumpf
b752d22a77 libports: checkout ARMv8 version of gcov
issue #3537
2019-11-19 14:45:39 +01:00
Sebastian Sumpf
ad12b42d1c gems: depot autopilot enable gcov for ARMv8
issue #3537
2019-11-19 14:45:39 +01:00
Sebastian Sumpf
c845a2d943 libprots: libgcov ARMv8 support
issue #3537
2019-11-19 14:45:39 +01:00
Sebastian Sumpf
b7e06a0b5b recipe: gmp for ARMv8
issue #3537
2019-11-19 14:45:39 +01:00
Sebastian Sumpf
417dd59b22 libports: gcov for ARMv8
issue #3537
2019-11-19 14:45:39 +01:00
Sebastian Sumpf
3024720656 ports: update make to version 4.2.1
Required for ARMv8 support

issue #3537
2019-11-19 14:45:39 +01:00
Sebastian Sumpf
f23eab735b ports: binutils target for ARMv8
issue #3537
2019-11-19 14:45:39 +01:00
Sebastian Sumpf
112c32eb54 ports: noux-pkg/gcc_arm_64
Added ARMv8 as a native gcc target. This requires a rebuild of the tool
chain.

issue #3537
2019-11-19 14:45:39 +01:00
Sebastian Sumpf
3103ce1fa8 libports: update mpc to 1.1.0
issue #3537
2019-11-19 14:45:39 +01:00
Sebastian Sumpf
db18fc42fe libports: update mpfr to 4.0.2
issue #3537
2019-11-19 14:45:39 +01:00
Sebastian Sumpf
d28fe9e938 libports: enable gmp 6.1.2 for ARMv8
issue #3537
2019-11-19 14:45:39 +01:00
Sebastian Sumpf
31a035a907 libports: update gmp from 4.3.2 to 6.1.2
issue #3537
2019-11-19 14:45:39 +01:00
Norman Feske
91412c6c52 libc: trigger SIGCHLD for when forked child exits 2019-11-19 14:45:39 +01:00
Norman Feske
068324536c libc: eliminate atexit handler for 'Rtc'
We never want to destruct the 'Rtc' because other atexit handlers may
depend on it (e.g., for updating modification times when closing files).
2019-11-19 14:45:38 +01:00
Norman Feske
bb6eb0f6ea libc: local signal delivery via 'kill'
This patch adds the ability to call 'kill' with the own PID to trigger
the execution of the handler of the specified POSIX signal. This is used
by 'bash', e.g., when cancelling the input of a command via control-c.

Related to issue #3546
2019-11-19 14:45:38 +01:00
Norman Feske
c1012e6a45 libc: translate terminal user interrupts to SIGINT
Issue #3546
2019-11-19 14:45:38 +01:00
Norman Feske
23d21d77e9 vfs/terminal: detect user interrupts (control-c)
This patch equips the VFS terminal file system with the ability to
detect user interrupts in the incoming data stream, and propagate this
information via the new pseudo file '.terminal/interrupts'. Each time,
the user presses control-c in the terminal, the value stored in this
pseudo file is increased. Thereby, a VFS client can watch this file to
get notified about the occurrences of user interrupts.

Fixes #3546
2019-11-19 14:45:38 +01:00
Norman Feske
8c44b17e86 libc: shebang handling for execve
Fixes #3545
2019-11-19 14:45:38 +01:00
Norman Feske
636e0f6444 libc: cancel select when POSIX signal occurs
With this patch, Vim running via the 'bash.run' script becomes able to
adopt itself to changed window dimensions.

Issue #3544
2019-11-19 14:45:36 +01:00
Josef Söntgen
fafa409cf9 block_tester: use dynamic shared scratch buffer
The scratch buffer is now allocated from the heap and is shared
between the test as they are executed in a serial fashion. This
change saves memory as the test are constructed at start-up.

Fixes #3539.
2019-11-19 14:44:02 +01:00
Josef Söntgen
dbecceec09 expanding_reporter: configure initial buffer size
Fixes #3543.
2019-11-19 14:44:02 +01:00
Josef Söntgen
60f390ddf8 noux: prevent accessing invalid leaf path in open
Fixes #3542.
2019-11-19 14:44:02 +01:00
Josef Söntgen
c79ebc93a2 libc_noux: try read again on EAGAIN/EINTR
Issue #3541.
2019-11-19 14:44:02 +01:00
Josef Söntgen
55ab694d79 libc_noux: leave write loop on error
Fixes #3541.
2019-11-19 14:44:02 +01:00
Josef Söntgen
f5c5479faa ram_block: use Number_of_bytes to parse block size
Using this helper rather than parsing as size_t directly allows use to
use size suffixes, e.g. K, M, G.

Fixes #3540.
2019-11-19 14:44:02 +01:00
Josef Söntgen
ba9b612c4f libc_noux: close fd on failed O_TRUNC attempt
Fixes #3524.
2019-11-19 14:44:02 +01:00
Norman Feske
7b0771659e libc: trigger SIGWINCH by watching .terminal/info
Issue #3544
2019-11-19 14:43:43 +01:00
Norman Feske
e9762ee25f vfs: 'Rtc_file_system::close' for watch handle
The default implementation of this method throws an exception.
2019-11-19 14:42:23 +01:00
Norman Feske
7549189f88 vfs: watch support for Readonly_value_file_system
This patch adds support for watch notifications for the
'Readonly_value_file_system', which is often used by VFS plugins to
implement pseudo files. It thereby enables VFS clients to respond to
VFS-plugin events (think of terminal resize) dynamically.

Fixes #3523
2019-11-19 14:42:23 +01:00
Oleg Girko
a5bc031cca genode_org: Fix download URL.
As genode.org site is now protected by TLS and unencrypted site
is redirected to enctypted one, download URL should be modified
to reflect this change.

Without this change, wget downloads just index.html file.

Signed-off-by: Oleg Girko <ol@infoserver.lv>

Fixes #3538
2019-11-19 14:42:23 +01:00
Oleg Girko
5cd684997a sntp_client: No need to always limit this scenario to x86.
It runs pretty well on Raspberry Pi, for example.

Leaving this scenario limited to x86 for autopilot runs only.

Signed-off-by: Oleg Girko <ol@infoserver.lv>

Fixes #3536
2019-11-19 14:42:23 +01:00
Christian Helmuth
93d3a0848a Remove unused libm/posix.lib.so from lwip_lx.run
Prevents integration failures like follows if the libraries were not
built already in the build directory.

  Missing boot modules: libm.lib.so posix.lib.so
  Makefile:323: recipe for target 'run/lwip_lx' failed
2019-11-19 14:42:23 +01:00
Christian Helmuth
f1b1dd26cf run: tweak CRLF translation in log scripts
Ideally, I'd like to disable expects's translation here, which does not
work. The current setting is the result of testing all combinations.
2019-11-19 14:42:23 +01:00
Christian Helmuth
cd5e906bd0 imx: do not convert LF to CRLF in UART driver
This is done on higher level already.
2019-11-19 14:42:23 +01:00
Oleg Girko
c589660182 Replace ENV make variable with MKENV.
ENV variable conflicts with Environment Modules.

Signed-off-by: Oleg Girko <ol@infoserver.lv>

Fixes #3535
2019-11-19 14:42:23 +01:00
Stefan Kalkowski
8a8aa85726 hw: initialize iomux, ccm and gpc for i.MX8 EVK
Fix #3534
2019-11-19 14:42:23 +01:00
Stefan Kalkowski
105b2c9b7a hw: fix gicv3 implementation of clear/set regs
In addition use uniformly enums for interupt count in register declarations.

Fix #3532
2019-11-19 14:42:23 +01:00
Stefan Kalkowski
f6435d91fc hw: turn Kernel_object into Genode::Constructible
Fix #3531
2019-11-19 14:42:23 +01:00
Stefan Kalkowski
3e3fb63863 hw: enable Genode::raw for bootstrap
Ref #3531
2019-11-19 14:42:23 +01:00
Oleg Girko
4007cee852 Fix MAC address printing in dde_linux USB net drivers.
Passing array of unsigned chars to Genode::log() function
makes it converted to void pointer, resulting in printing its address.

Wrapping this array into Genode::Cstring solves this problem
and makes it being printed properly as zero-terminaled string.

Signed-off-by: Oleg Girko <ol@infoserver.lv>

Fixes #3530
2019-11-19 14:42:23 +01:00
Christian Helmuth
b622a5a788 vbox: use RTThreadCreate for periodic_gip thread
This prevents the following error message.

  [init -> vbox1] Error: pthread_self() called from alien thread named 'periodic_gip'
2019-11-19 14:42:23 +01:00
Christian Helmuth
ec9e40695d vbox: use PIIX3 instead of ICH9 in VM config
Prevents #3533
2019-11-19 14:42:23 +01:00
Martin Stein
0ad0153626 nic_router: fix broken uplink label on re-config
Uplink labels were stored in the uplink objects as reference. As uplink objects
may be re-used on re-configuration to avoid unnecessary closing and re-opening
of NIC sessions, the label reference could get invalid as the object that
stored the label content didn't get re-used. Thus, the label is now copied to
the uplink object.

Fixes #3529
2019-11-19 14:42:23 +01:00
Martin Stein
cd37bff514 nic_router: do not report while re-configuring
Fixes #3528
2019-11-19 14:42:23 +01:00
Martin Stein
27c2a66bbd nic_router: report link state
This adds two new boolean attributes to the <report> tag of the NIC router
configuration 'link_state' and 'link_state_triggers'. The former decides
whether to report the link state of each NIC interface (downlink, uplinks) at
the NIC router. The other decides whether to trigger reporting each time the
link state of an interface changes.

Fixes #3527
2019-11-19 14:42:23 +01:00
Martin Stein
58247737fd nic_router: free MAC on session-creation exception
If a MAC address was once allocated for a downlink and during the further
creation of the downlink an exception caused the creation to be aborted, the
NIC router didn't free the MAC address again.

Ref #3525
2019-11-19 14:42:23 +01:00
Martin Stein
ebcca179ed nic_router: fix 'catch' paths in session creation
The handling of exceptions during session creation implies freeing and
detaching the RAM DS behind the session env and session component. But this
was done using the session env located in the same RAM DS, which must
lead to problems. Now, the session env from the RAM DS is copied to the stack
and the operations are done on this temporary instance instead.

Ref #3525
2019-11-19 14:42:22 +01:00
Martin Stein
60d37f690c packet_stream_*: fix missing dissolve on exception
When the construction of a member of Packet_stream_*::Rpc_object after
the _cap member threw an exception, the object was not dissolved from
the entrypoint although the Rpc_object vanished at this point. This was
because the call to 'manage()' happened in the initializer list (for the
_cap member instantiation). The destruction of the _cap member then did
not dissolve the object.

This first fix moves the call to 'manage()' into the constructor body
after the instantiation of all other members. A more sophisticated fix
would use some kind of 'Managed_object' life-time guard that manages an
object on construction and dissolves on destruction.

Ref #3525
2019-11-19 14:42:22 +01:00
Martin Stein
0ed5655086 nic_router: do DHCP when re-config to dynamic IP
When re-configuring a domain from using a static IP config to using a dynamic
IP config, attached interfaces didn't react with doing DHCP discover. This bug
is fixed now and the nic_router_flood test was adapted in a way that it tests
the described behavior.

Fix #3518
2019-11-19 14:42:22 +01:00
Stefan Kalkowski
87a6368ba1 hw: implement multi-processor support for rpi3
Fix #3522
2019-11-19 14:42:22 +01:00
Stefan Kalkowski
1cbd77c806 hw: implement multi-processor support for i.MX8
Fix #3520
2019-11-19 14:42:22 +01:00
Stefan Kalkowski
e3f82b09d7 hw: instantiate pic object per cpu
Ref #3520
2019-11-19 14:42:22 +01:00
Christian Helmuth
d4a3db22bd solo5: migrate snapshot archive to genode.org 2019-11-19 14:42:22 +01:00
Christian Helmuth
43f28e0451 stdcxx: add more missing symbols to ABI
Fixes #3506
2019-11-19 14:42:22 +01:00
Norman Feske
d516515c7a vfs/terminal: provide meta info as pseudo files
Issue #3519
Fixes #3521
2019-11-19 14:39:09 +01:00
Norman Feske
7ac32ea60c libc: support for ioctls via ioctl directory
This patch introduces a new scheme of handling ioctl operations that
maps ioctls to pseudo-file accesses, similar to how the libc maps socket
calls to socket-fs operations.

A device file can be accompanied with a (hidden) directory that is named
after the device file and hosts pseudo files for triggering the various
device operations. For example, for accessing a terminal, the directory
structure looks like this:

  /dev/terminal
  /dev/.terminal/info

The 'info' file contains device information in XML format. The type of
the XML node corresponds to the device type. E.g., If the libc receives
a 'TIOCGWINSZ' ioctl for /dev/terminal, it reads the content of
/dev/.terminal/info to obtain the terminal-size information. In this
case, the 'info' file looks as follows:

  <terminal rows="25" columns="80/>

Following this scheme, VFS plugins can support ioctl operations by
providing an ioctl directory in addition to the actual device file.

Internally, the mechanism uses the 'os/vfs.h' API to access pseudo
files. Hence, we need to propagate the Vfs::Env to 'vfs_plugin.cc' to
create an instance of a 'Directory' for the root for the VFS.

Issue #3519
2019-11-19 14:39:09 +01:00
Christian Prochaska
07a40d028a libc: fix and cleanup pthread mutexes
Issue #3503
Fixes #3504
2019-11-19 14:23:57 +01:00
Christian Prochaska
a47adecdcd test-pthread: add mutex tests
Add tests for recursive and errorcheck type mutexes.

Fixes #3503
2019-11-19 14:23:57 +01:00
Christian Helmuth
355d94f5df Use NTP server from pool.ntp.org in sntp_client test 2019-11-19 14:23:57 +01:00
Pirmin Duss
c0789a6c0e depot_deploy: status report
The idea is, that other components may know, when a valid
init.config is available.

Issue #3482
2019-11-19 14:23:57 +01:00
Norman Feske
530144b040 doc/challenges.txt: add Puppet topic 2019-11-19 14:23:56 +01:00
Norman Feske
c85bc38802 Move include/gems/vfs.h to include/os/vfs.h
Fixes #3515
2019-11-19 14:23:56 +01:00
Norman Feske
a8dd7dd2fa Remove rump_fs server component
This patch replaces the use of the rump_fs server by the VFS server with
the Rump VFS plugin.

Issue #3512
2019-11-19 14:23:56 +01:00
Norman Feske
6e86d6d699 Remove server/fatfs_fs and libc_fatfs plugin
Issue #3512
2019-11-19 14:23:56 +01:00
Norman Feske
2954abb58a Simplify qt5_textedit.run
The run script used to be the only user of the fatfs_fs server, which
we're going to remove. This patch removes the components for accessing a
real storage device and file system from the run script. The new version
just uses ram_fs.

Issue #3512
2019-11-19 14:23:56 +01:00
Norman Feske
5bb366513b Remove os/src/app/cli_monitor
Nowadays, we use standard command-line tools like vim to edit init
configurations dynamically, which alleviates the need for a custom CLI.
The CLI-monitor component was too limited for use cases like Sculpt
anyway.

The patch also removes the ancient (and untested for long time)
terminal_mux.run script, which used to be the only remaining user of the
CLI monitor.

Issue #3512
2019-11-19 14:23:56 +01:00
Norman Feske
4bcc75365c Remove gems/src/app/launcher
The graphical launcher remained unused for a few years now. It is not
suitable for systems as flexible as Sculpt OS.

Issue #3512
2019-11-19 14:23:56 +01:00
Emery Hemingway
288f79270d test/vfs_stress: annotate switch label fall-throughs
This test was written for speed, not correctness.

Fixes #3516
2019-11-19 14:23:56 +01:00
Christian Prochaska
3c62a33a25 qt5: add NEON-related files and symbols to qt5_gui lib
Fixes #3517
2019-11-19 14:23:56 +01:00
Piotr Tworek
80a84bef26 Fix ram session quota accounting in lan9118
This driver manually checks if the RAM quota is big enough for the
Lan9118 nic session component. The problem is Root_component::_create
from which Root_component::_create_session gets called does already
check this. No need to account for it twice.

Fixes #3514
2019-11-19 14:23:56 +01:00
Johannes Kliemann
022fac0d37 dde_zircon: use fork by jklmnn
Fixes #3513
2019-11-19 14:23:56 +01:00
Norman Feske
5ab1505d43 file system: enhanced file status info
This patch extends the 'File_system::Status',
'File_system::Directory_entry', and the related 'Vfs' types with
the following additional information:

- Distinction between continuous and transactional files (Node_type)
  (issue #3507)
- Readable, writeable, and executable attributes (Node_rwx),
  replacing the former 'mode' bits
  (issue #3030)

The types 'Node_rwx', 'Node_type' are defined twice,
once for the VFS (vfs/types.h) and once for the 'File_system'
session (file_system_session/file_system_session.h).
Similarly, there is a direct correspondance between
'Vfs::Directory_service::Dirent' and 'File_system::Directory_entry'.

This duplication of types follows the existing pattern of keeping the
VFS and file-system session independent from each other.
2019-11-19 14:23:56 +01:00
Alexander Boettcher
1297a8fb57 trace: skip subject_id 0 in subject id allocator
Issue #3510
2019-11-19 14:23:55 +01:00
Christian Helmuth
732215a83f libc: limit fcntl(F_SETFL) to file-status flags
This fixes unintended (and unpermitted) changes of O_ACCMODE bits.
2019-11-19 14:23:55 +01:00
Christian Helmuth
e11addec7d Cleanup vfs dev directory in vbox5_genode_usb_hid 2019-11-19 14:23:55 +01:00
Christian Helmuth
2166a4b17f dde_linux: prevent warning about 'register' keyword 2019-11-19 14:23:55 +01:00
Christian Helmuth
291587f545 libc: honor poll() event flags POLLRDNORM etc.
Fixes empty read file-descriptor sets in fetchurl_lwip/lxip.

Issue #3499
2019-11-19 14:23:55 +01:00
Christian Helmuth
97df705e53 dde_rump: eliminate global ctors 2019-11-19 14:23:55 +01:00
Josef Söntgen
e281174dae libc: bring back old 'poll()' emulation
Issue #3499
2019-11-19 14:23:55 +01:00
Alexander Boettcher
ed73feddc5 vbox5: react on host size changes immediately
The guest may take some time to adjust nevertheless.

Fixes #3498
2019-11-19 14:23:55 +01:00
Josef Söntgen
c5706e8f4a wifi_drv: enable loading of 5000 series FW
Fixes #3502.
2019-11-19 14:23:55 +01:00
Christian Helmuth
1782c6be79 qt5: rework keyboard handling
Fixes #3483
2019-11-19 14:23:54 +01:00
Christian Helmuth
cccfd0719d qt5: prevent deprecated warnings
Issue #3483
2019-11-19 14:23:54 +01:00
Christian Helmuth
edc9545229 input: move control-modifier handling into clients
Moving the handling into the input-session clients enables more
sophisticated implementations (like Qt5) to apply key-symbol based
handling of those modifiers like correct CTRL-A with QWERTY and AZERTY
layouts and distinction of CTRL-J and Return.

Issue #3483
2019-11-19 14:23:54 +01:00
Christian Helmuth
cc611834c9 input: repeat events require valid codepoints
Issue #3483
2019-11-19 14:23:54 +01:00
Christian Helmuth
bbd27a54d3 input_filter: fix de_de/fr_fr character generators
Issue #3483
2019-11-19 14:23:54 +01:00
Christian Helmuth
5a06751242 Increase input_filter RAM quotas to 1280K
Issue #3483
2019-11-19 14:23:54 +01:00
Christian Helmuth
6df8b44616 platform/x86: support 64-bit base address registers
The API still exports 32-bit address and size values only, which works
as the actual MMIO resources are allocated in platform_drv internally.

Fixes #3494
2019-11-19 14:23:54 +01:00
Christian Helmuth
e0af9c2d8b platform_drv.inc: reduce acpi_drv caps to 350
This value equals the configuration in drivers_managed-pc, i.e., Sculpt.
2019-11-19 14:23:54 +01:00
Christian Helmuth
11a7ac0536 acpi_drv: reduce capability quota requirements
Map ACPI tables entirely as one dataspaces (not page-by-page). Note, the
current approach does only merge overlapping but not consecutive I/O
memory regions, which would reduce the amount of capabilities required
even further.

Fixes #3495
2019-11-19 14:23:54 +01:00
Christian Prochaska
5c25e0bdb0 heap: fix typo in alloc(0) diagnostic message
Fixes #3501
2019-11-19 14:19:34 +01:00
Norman Feske
222f214341 extract.run: suppress rtc warnings 2019-11-19 14:19:34 +01:00
Norman Feske
eefe91ee41 depot_download_manager: no mtime update in extract
With the added modification-time support in the libc, the extract tool
requires a timer session, which is not plausible for the purpose of the
program.

This behavior stems from the fact that the libc implicitly writes the
mtime when closing a written file. For this update, it implicitly calls
'clock_gettime', which in turn initializes the timer subsystem within
the libc (creating a timer session).

For the extract tool, the implicitly updated mtime is useless because
the extract tool overwrites this modification time with the mtime stored
in the archive anyway. However, the dependency from a timer service
remains.

This patch explicitly disables the libc's implicit updating of the
file-modification when closing a written file.

Issue #1784
2019-11-19 14:19:34 +01:00
Norman Feske
979d823d85 libc: make mtime update configurable
By specifying <libc update_mtime="no"...>, the modification-time update
on VFS-sync operations (as issued whenever a written file is closed)
can explicitly be disabled.

Issue #1784
2019-11-19 14:19:34 +01:00
Christian Helmuth
76438a3f85 dde_linux: refactor usb arch-dependent includes
Also added arm_64/arm_v8, which fixes building board-independent usb_hid
etc.
2019-11-19 14:19:34 +01:00
Christian Helmuth
b0271ae5e1 Fix hard-disk image creation in vfs server tests
The hard-disk image must be created before boot-image creation as it is
used as boot module by variants of the test (use_ram_block=true).
2019-11-19 14:17:30 +01:00
Norman Feske
6a063364da fs_rom: adaptation to added file-modification time
Issue #1784
2019-11-19 14:17:30 +01:00
Josef Söntgen
99b632f86c server/vfs: add modification time
Issue #1784.
2019-11-19 14:17:30 +01:00
Josef Söntgen
180f9e6384 libc: handle modified files
Issue #1784.
2019-11-19 14:17:30 +01:00
Josef Söntgen
94b63924ed noux: add time modification
... and set initial time by using RTC session.

Up to now Noux used a monotic clock whose initial start value always
was '0' (which correlates to the start of the UNIX epoch) to provide
a notion of time. In addition it is now possible to use the RTC
session to set the initial value for use cases where having a proper
real-world time matters.

To use the RTC session the 'rtc' attribute of the '<config>' node
must be set to 'yes'. Thereby the session becomes a mandatory
dependency as Noux will not start without it.

Issue #1784
2019-11-19 14:17:30 +01:00
Josef Söntgen
d0bf6d2b52 libc: add modification time
Issue #1784.
2019-11-19 14:17:30 +01:00
Josef Söntgen
9a82bbb54d vfs: add modification time member to directory_service
Issue #1784.
2019-11-19 14:17:30 +01:00
Josef Söntgen
400039e1b6 rump_fs: add modification time
Issue #1784.
2019-11-19 14:17:30 +01:00
Josef Söntgen
2e5166efd7 lx_fs: add modification time
Issue #1784.
2019-11-19 14:17:30 +01:00
Josef Söntgen
2ec3aaf639 file_system_session: add modification time
* add modification_time member
* add WRITE_TIMESTAMP packet
2019-11-19 14:17:30 +01:00
Norman Feske
ab5187d673 libc: resolve symlinks in execve
This patch complements the commit "libc: execve" with the ability to
execute files stored at arbitrary sub directories of the file system.

Issue #3481
Issue #3500
2019-11-19 14:17:29 +01:00
Norman Feske
697d496093 ldso: don't strip leading path from ROM name
This patch removes ldso's builtin policy of removing any path elements
prepending the ROM module name. Instead, the ROM name is used as is.
This clears the way to access different ROM modules that share the same
name but are stored at different directories behind an fs_rom (e.g.,
/bin/bash vs. /usr/local/bin/bash).

Issue #3500
2019-11-19 14:17:29 +01:00
Norman Feske
a17c5e30b7 mk/gnu_build.mk: avoid absolute lib paths
This patch changes the way how libraries are specified at the linker
command line from /abs/path/to/library.lib.so

Issue #3500
2019-11-19 14:17:29 +01:00
Christian Helmuth
8d6285927b tools.conf: fix check for arm_64
Before arm matched first resulting in the wrong tool-chain binaries
being used.
2019-11-19 14:17:29 +01:00
Norman Feske
90a91f3536 dde_linux: eliminate global ctors in lx_kit
As the lx_kit library is used by the vfs_lxip plugin, it must not
contain any static global constructor.

Related to issue #3487
2019-11-19 14:17:29 +01:00
Norman Feske
c8b7710e5d libc: improve dup/dup2 in vfs_plugin
This patch replaces the naive dup2 implementation (that merely
duplicated the context pointer) by the replication of the original
FD state by re-opening the same file with the same flags and seek
position. This prevents a potential double release of the VFS handle
(the FD context). It also implements 'dup'.

Fixes #3505
Fixes #3477
2019-11-19 14:10:55 +01:00
Norman Feske
59c60b8031 test-libc: test double dup2, dup
Issue #3477
Issue #3505
2019-11-19 14:10:55 +01:00
Norman Feske
9500e8b6e1 lwip: remove use of global constructor
Related to issue #3487
2019-11-19 14:10:55 +01:00
Norman Feske
e0ee56275e vfs_lwip: fix switch fall-through
Pointed out by a compiler warning.
2019-11-19 14:10:55 +01:00
Norman Feske
418ac4c560 libc: remove global watch() function
This patch replaces the function with a 'Watch' interface to be
explicitly passed to the caller (currently only time.cc).

Issue #3497
2019-11-19 14:10:55 +01:00
Norman Feske
5f5d709c07 libc: remove global libc_config()
Issue #3497
2019-11-19 14:10:55 +01:00
Norman Feske
89a38723bd libc: reimplement passwd handling
- Eliminate call of global libc_config()
- Remove dynamic memory allocation, const cast
- Prepare for moving the state from compilation unit to header
- Fix run/libc_getpwent.run

Issue #3497
2019-11-19 14:10:55 +01:00
Norman Feske
648bcd1505 libc: unify use of namespaces
This patch unifies the patterns of using the 'Genode' and 'Libc'
namespaces.

Types defined in the 'internal/' headers reside in the 'Libc'
namespace. The code in the headers does not need to use the
'Libc::' prefix.

Compilation units import the 'Libc' namespace after the definition of
local types. Local types reside in the 'Libc' namespace (and should
eventually move to an 'internal/' header).

Since the 'Libc' namespace imports the 'Genode' namespace, there is
no need to use the 'Genode::' prefix. Consequently, code in the
compilation units rarely need to qualify the 'Genode' or 'Libc'
namespaces.

There are a few cases where the 'Libc', the 'Genode', and the global
(libc) namespaces are ambigious. In these cases, an explicit
clarification is needed:

- 'Genode::Allocator' differs from 'Libc::Allocator'.
- 'Genode::Env' differs from 'Libc::Env'.
- Genode's string functions (strcmp, memcpy, strcpy) conflict
  with the names of the (global) libc functions.
- There exist both 'Genode::uint64_t' and the libc'c 'uint64_t'.

Issue #3497
2019-11-19 14:10:55 +01:00
Norman Feske
bf92232698 libc: split task.cc into multiple files
This patch is the first step of re-organizing the internal structure of
the libc. The original version involved many direct calls of global
functions (often with side effects) across compilation units, which
made the control flow (e.g., the initialization sequence) hard to
follow.

The new version replaces those ad-hoc interactions with dedicated
interfaces (like suspend.h, resume.h, select.h, current_time.h). The
underlying facilities are provided by the central Libc::Kernel and
selectively propagated to the various compilation units. The latter is
done by a sequence of 'init_*' calls, which eventually will be replaced
by constructor calls.

The addition of new headers increases the chance for name clashes with
existing (public) headers. To disambiguate libc-internal header files
from public headers, this patch moves the former into a new 'internal/'
subdirectory. This makes the include directives easier to follow and the
libc's source-tree structure more tidy.

There are still a few legacies left, which cannot easily be removed
right now (e.g., because noux relies on them). However, the patch moves
those bad apples to legacy.h and legacy.cc, which highlights the
deprecation of those functions.

Issue #3497
2019-11-19 14:10:55 +01:00
Norman Feske
aec1178ab1 libc: simplify initialization sequence
This patch reverts the interim patch "libc: init malloc_heap before
VFS", which is no longer needed with the solved issue #3496 and
issue #3487.
2019-09-20 14:16:07 +02:00
Norman Feske
efe7f5172d ldso: prevent premature execution of ctors
Fixes #3487
2019-09-20 14:16:05 +02:00
Norman Feske
0aedabd245 libc: remove global constructors
- readv_writev: move 'rw_lock' instance into a function scope,
  constructing the instance on the first access.
- select: move 'select_cb_list' instance into function scope.
- thread: move 'key_list_lock' and 'keys' into function scope.
- rwlock, semaphore, socket_fs_plugin, thread, thread_create:
  instantiate 'Libc::Allocator' per use, alleviating the need for a
  global instance.

Issue #3496
2019-09-20 14:16:01 +02:00
Christian Helmuth
4a7b0e99a6 depot: update recipe hashes 2019-09-20 14:14:16 +02:00
Norman Feske
614f7fa56a mesa.run: omit depot content from boot modules 2019-09-17 14:38:07 +02:00
Norman Feske
6d230134cb doc: update challenges 2019-09-13 12:14:19 +02:00
Pirmin Duss
d953030c0e lx_fs: respect writeable session argument
Fixes #3492
2019-09-12 12:28:41 +02:00
Alexander Boettcher
6fe80c3cc7 sculpt: add lock screen/GUI support
Fixes #3491
2019-09-09 15:25:45 +02:00
Christian Prochaska
afa0e26a6a qt5: update virtual keyboard example to Qt 5.13
Fixes #3490
2019-09-09 15:08:13 +02:00
Christian Prochaska
1d3bbde70a qt5: add 'lupdate' and 'lrelease' to host tools
Fixes #1736
2019-09-09 15:05:50 +02:00
Alexander Boettcher
6f0c6501f2 acpica: catch Io_mem exceptions
Issue #2998
2019-09-09 15:04:53 +02:00
Christian Helmuth
e448022f23 Fix hard-disk image creation in libc_fatfs
The hard-disk image must be created before boot-image creation as it is
used as boot module by variants of the test (use_ram_block=true).
2019-09-09 14:58:25 +02:00
Christian Helmuth
664d858e63 Fix sntp_client test for hw/muen 2019-09-09 12:15:07 +02:00
Christian Helmuth
ede009edf9 Fix expected output in USB HID tests
Invalid characters in press events are no longer 0 but 0xfffe since

  a97b8043b5 utf8: non-character U+fffe as invalid codepoint

Issue #3483
2019-09-09 11:35:42 +02:00
Christian Helmuth
08aa7d310a Increase stack size in thread test for arm_v8a
It seems throwing an exception on arm_v8a needs a significant amount of
stack space (> 2048 bytes).
2019-09-03 12:12:46 +02:00
Christian Helmuth
19bf0fdeb8 xkb2ifcfg: detect and log initialization errors 2019-09-03 09:00:31 +02:00
Emery Hemingway
36111a2edf Libc: implement getifaddrs
Implement getifaddrs and freeifaddrs within the libc using socket
control files at the VFS. Add an "address" and "netmask" file to the
lwIP plugin.

Only a single IPv4 address is initially supported, and the broadcast
address returned will never be valid.

Fixes #3439
2019-09-02 16:36:07 +02:00
Christian Prochaska
ab017607a2 tool chain: TLS support
Fixes #3418
2019-09-02 16:29:33 +02:00
Christian Helmuth
2c47cd5c94 version: 19.08 2019-08-28 14:36:57 +02:00
Norman Feske
44ce1b37c1 News item for version 19.08 2019-08-28 14:36:57 +02:00
Norman Feske
9a52a93c24 Release notes for version 19.08 2019-08-28 14:36:57 +02:00
Christian Helmuth
b2c59576ae depot: update recipe hashes 2019-08-28 14:36:56 +02:00
Norman Feske
7f8fe00cdc drivers_managed-pc: route for smbios_table report 2019-08-28 14:22:33 +02:00
Norman Feske
c0e8336e98 acpi_drv: report SMBIOS after ACPI info
This order of execution reduces the boot time of Sculpt.
2019-08-28 14:22:33 +02:00
Norman Feske
155e214a69 libc: init malloc_heap before VFS
This is an interim fix for issue #3487.
2019-08-28 14:22:33 +02:00
Christian Helmuth
4911acedf5 sculpt: version 19.08 2019-08-28 14:22:33 +02:00
Christian Helmuth
01bd87e90b tool/port: re-enable check_tool in install.mk
The check was accidentally in

  66d44289e1 tool/ports: streamline hash tool usage

because $(call VAR, ...) just expands to nothing without errors if VAR
is undefined.
2019-08-28 14:22:33 +02:00
Christian Prochaska
65f402807f qt5: update to version 5.13.0
Fixes #3485
2019-08-28 14:22:33 +02:00
Christian Prochaska
d00cfd7cff stdcxx: add missing symbol for qt5 update
Fixes #3486
2019-08-28 14:22:33 +02:00
Christian Helmuth
701b1d41e8 input_filter: update character generators
This adds complete character-generator configurations for English (US),
German (Germany and Switzerland), and French (France and Switzerland).
The configs are manually amended and stripped-down versions of
xkb2ifcfg generated configs.

Issue #3483
2019-08-28 14:22:33 +02:00
Sebastian Sumpf
8ae5c906d0 noux_tool_chain_auto: use absolute paths for command
issue #3481
2019-08-28 14:22:32 +02:00
Christian Helmuth
43a8118d2e tool: generate input_filter config from XKB
Issue #3483
2019-08-28 14:22:32 +02:00
Christian Helmuth
ca850c787f input_filter: dead-key sequence support
Issue #3483
2019-08-28 14:22:32 +02:00
Christian Helmuth
4491c070be input: fix Codepoint::INVALID in Press event
The Press event is actually a Press_char event with a default codepoint.
The default codepoint is now

  Codepoint { Codepoint::INVALID } /* value 0xfffe */

in contrast to

  Codepoint { Input::Event::INVALID } /* value 0 */

Issue #3483
2019-08-28 14:22:32 +02:00
Christian Helmuth
a97b8043b5 utf8: non-character U+fffe as invalid codepoint
Unicode non-characters [1] are guaranteed to never be used for a
character. The formerly used U+fffd however is a valid character - the
replacement character [2] correctly displayed by Qt5 as <?>.

[1] https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Non-characters
[2] https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character

Issue #3483
2019-08-28 14:22:32 +02:00
Christian Helmuth
4967166811 run: exit if boot modules are missing on linux 2019-08-28 14:22:32 +02:00
Martin Stein
cc2828cf3a sntp_client: improve README, clean source code
Fixes #3448
2019-08-28 14:21:36 +02:00
Norman Feske
1dd68ce04b Adjust quotas for seL4 2019-08-28 14:19:45 +02:00
Norman Feske
23f3112e3e ports: bash.run script using the libc fork/execve
Issue #3481
2019-08-28 14:19:45 +02:00
Norman Feske
6894ced63b libc: execve
This patch implements 'execve' in Genode's libc.

The mechanism relies on the dynamic linker's ability to replace the
loaded binary while keeping crucial libraries - in particular the libc -
intact. The state outside the libc is wiped. For this reason, all libc
internal state needed beyond the 'execve' call must be allocated on a
heap separate from the application-owned malloc heap. E.g.,
libc-internal file-descriptor objects must not be allocated or refer to
any memory object allocated from the malloc heap.

Issue #3481
2019-08-28 14:19:45 +02:00
Alexander Senier
2a3cebdd6e libc: Allow private writable mappings
Fixes #3480
2019-08-28 14:18:45 +02:00
Norman Feske
66d5359d75 ldso: heuristics for libs needed during execve
The allocation of regions within the linker area is normally left to the
best-fit 'Allocator_avl', which happens to populate the linker area
starting with the binary followed by all loaded libraried with no gaps
in between.

When replacing the binary during execve, however, we need to ensure that
the new binary does not conflict with any library that stays resident
during execve. This patch tweaks the linker's region allocation scheme
such that these libraries are placed at the end of the linker area.

Issue #3481
2019-08-28 14:18:45 +02:00
Norman Feske
fa48054959 ldso: Dynamic_linker::respawn mechanism
This patch extends the interface of the dynamic linker with the ability
to replace the running binary executable by another one. It is
designated for the implementation of execve. The interface consists of
two new functions.

'Dynamic_linker::keep' marks the specified shared object as unloadable.
This can be used to pin a set of libraries (i.e., the libc) within the
local address space while replacing the binary and other higher-level
libraries.

'Dynamic_linker::respawn' unloads the current binary, loads the one
specifed as first argument, and looks up the entry point symbol of the
new binary, which would be "main" for POSIX programs.

In addition to implementing the new interface, the patch adjusts the
linker at various places that previously assumed the binary to be
constant over runtime.

Issue #3481
2019-08-28 14:18:45 +02:00
Norman Feske
808ff3714e rust: don't export cxx syms from libunwind-rust 2019-08-28 14:18:45 +02:00
Norman Feske
a98f78afd9 ldso: avoid 'dd' output in build log
This patch is a follow-up commit for "ld: load dynamic linker at static
address on Linux". It suppresses the stderr output of 'dd' when marking
the ELF binary as executable.

Issue #3479
2019-08-28 14:18:45 +02:00
Sebastian Sumpf
4c14af4d8a noux-pkg: enable noux packages for ARMv8
* add -fPIC
* disable 'stdbuf' for coreutils
* works for bash as well
2019-08-28 14:18:45 +02:00
Norman Feske
817ff6ca68 posix: improve config error diagnostics 2019-08-28 14:18:45 +02:00
Norman Feske
3c6fe6e741 ldso: statically allocate initial heap block
This patch enables the fork.run script to run on base-linux. It should
be regarded as an interim solution, however, because the randomization
performed by the Linux kernel may still - by chance - produce a
situation where one of the libc's malloc heap regions intersects with
another dataspace dynamically attached to the child.

The better solution would be to make the 'Region_map_mmap'
implementation not depend on the kernel's allocation policy by using a
locally implemented allocator.

Issue #3478
2019-08-28 14:18:45 +02:00
Norman Feske
bb5827b4e3 libc: fork, getpid, and wait4
This patch complements the C runtime with support for fork, getpid, and
wait4 (and its cousin 'waitpid').

Fixes #3478
2019-08-28 14:18:45 +02:00
Norman Feske
581785a48f Extend fork test
This patch extends the fork test with explicit checks for the cloned
content of the heap and RW segment as well as the seek position of an
open file descriptor. It adds the new libports/run/fork.run script
that exercises the fork mechanism implemented by the libc. It is based
on noux_fork.run, which tests the mechansim provided by noux. The
test program has been moved from ports to libports.

Issue #3478
2019-08-28 14:18:44 +02:00
Norman Feske
65f75589e9 libc: configurable initial FDs
The libc already supports the configuration of 'stdin', 'stdout', and
'stderr' using '<libc>' config attributes. This patch equips the libc
with the additional ability to pre-initialize any other file descriptor.
A file descriptor is configured as follows:

<config>
  ...
  <libc ...>
    <fd id="3" path="/dev/log" writeable="yes" readable="no" seek="10"/>
    ...
  </libc>
</config>

Furthermore, this patch moves the FD initialization code from the VFS
plugin to the libc kernel initialization because opening the FDs
depends on 'malloc' ('strdup'), which should not be used at early
'Libc::Kernel' initialization time.

Issue #3478
2019-08-28 14:18:44 +02:00
Norman Feske
6e38b53001 libc: use Id_space for FD allocator
This patch replaces the former use of an Allocator_avl with the Id_space
utility, which is safer to use and allows for the iteration of all
elements. The iteration over open file descriptors is needed for
implementing 'fork'.

Issue #3478
2019-08-28 14:18:44 +02:00
Norman Feske
354e310c87 heap: interface for obtaining backing-store info
The new 'Heap::for_each_region' method provides information about the
heap's used virtual-memory regions. This method allows for the
mirroring of the heap state as needed by 'fork'.

Issue #3478
2019-08-28 14:18:44 +02:00
Norman Feske
2cff12e1fb base: remove debug message 2019-08-28 14:18:44 +02:00
Norman Feske
55e99e16ef base: add missing include in base/id_space.h 2019-08-28 14:18:44 +02:00
Norman Feske
e499a04de7 ldso: config option to disarm ctors check
By specifying the config attribute 'check_ctors="no"', the dynamic
linker won't abort the program on a missing call of
'Env::exec_static_constructors'. This is the case for forked programs
where the ctors were already executed by the forking program prior the
fork operation.

Issue #3478
2019-08-28 14:18:44 +02:00
Norman Feske
abdf422681 ldso: interface to get infos about loaded objects
This patch enhances the 'base/shared_object.h' interface of the dynamic
linker with the function 'for_each_loaded_object', which allows the
caller to obtain information about the currently loaded binary and
shared libraries.

The new interface is a base mechanism needed for implementing 'fork' in
the libc.

Issue #3478
2019-08-21 14:08:18 +02:00
Norman Feske
fd8a209da2 libc: fix warning in socket_fs_plugin.cc
By using Genode::strncpy instead of the libc's strncpy, we cannot end up
in the situation where the result lacks the zero termination (where the
number of charactors equals the destination buffer size).
2019-08-21 14:01:54 +02:00
Sebastian Sumpf
15b27a1e9d drivers_nic-imx7d_sabre: increase caps for sel4 2019-08-21 14:00:47 +02:00
Norman Feske
b113f869bb Use I/O signals for resource-request responses 2019-08-21 13:39:44 +02:00
Norman Feske
6fb7022508 Cap-resource request on Pd_session::transfer_quota
This patch handles the case where a PD's cap quota becomes exhausted
on the attempt to transfer caps via 'Env::pd().transfer_quota'. The
solution mirrors the existing code for RAM quota.

Prior this patch, the 'transfer_quota' operation would trigger an
'Out_of_caps' exception.
2019-08-21 13:38:24 +02:00
Norman Feske
cc437a5eca Spelling fix in os/single_session_service.h 2019-08-21 13:35:52 +02:00
Christian Helmuth
312f801f8a depot: update recipe hashes 2019-08-21 13:25:26 +02:00
Sebastian Sumpf
8509687c8d system_rtc.run: use packages
issue #3450
2019-08-21 13:25:25 +02:00
Martin Stein
ce633c0bba gems: recipes/pkg/drivers_rtc-pc
Ref #3450
2019-08-21 13:25:25 +02:00
Sebastian Sumpf
2fc6cedcc0 ld: load dynamic linker at static address on Linux
* move stack area to static address at beginning of binary
* set ELF type of linker from shared to executable

fixes #3479
2019-08-21 13:25:25 +02:00
Christian Helmuth
468270f6e9 Enable libusb-internal error login smartcard test 2019-08-21 13:25:25 +02:00
Alexander Boettcher
32323abe8e vfs: handle unsupported watch exception 2019-08-21 13:25:25 +02:00
Martin Stein
1113c4f6a2 depot: mstein download and pubkey 2019-08-21 13:25:25 +02:00
Sebastian Sumpf
e855638266 hw: add system call for irq mode setting
Core is not allowd to access the kernel's Pic implementation directly.

fixes #3474
2019-08-21 13:25:25 +02:00
Sebastian Sumpf
f3a7d3750f base: Add Linux and GOT relative startup code on ARM
* Linux specific startup code for base-linux ARM
* load symbols global offset table relative in order to avoid text
  relocations

issue #3466
2019-08-21 13:25:25 +02:00
Johannes Kliemann
1bdd18a196 ada-runtime: update to 1.1 2019-08-21 13:25:25 +02:00
Christian Helmuth
0c20bb6ab9 doc: mention BOARD in getting_started.txt 2019-08-21 13:25:25 +02:00
Christian Helmuth
d01cc3bf41 Configurable set_rtc values in RTC test
Fixes #3450
2019-08-21 13:25:25 +02:00
Josef Söntgen
9cf5da85ef libc: change time back end to re-read RTC
Issue #3450
2019-08-21 13:25:25 +02:00
Josef Söntgen
316f9e4df3 libc: add VFS watch handle accessor
Issue #3450
2019-08-21 12:37:03 +02:00
Josef Söntgen
18e586daed libc: merge RTC and time backends
Issue #3450
2019-08-21 12:37:03 +02:00
Christian Helmuth
1fdd5b636b vfs: watch set-rtc signal in RTC file system
Issue #3450
2019-08-21 12:37:02 +02:00
Christian Helmuth
b8ed80b7dd Simple libc-based RTC test
Issue #3450
2019-08-21 12:37:02 +02:00
Martin Stein
cb6377355e sntp_client: report received transmit timestamp
For now in libports because it relies on contrib sources from musl doing
the time data conversion.

Ref #3448
Ref #3450
2019-08-21 12:37:02 +02:00
Martin Stein
322bacd380 timeout_types.xsd: Minutes type
Ref #3448
Ref #3450
2019-08-21 12:37:02 +02:00
Josef Söntgen
99cb585b6e libports: system RTC server and test
For now in libports because it relies on contrib sources from musl
doing the time data conversion.

Issue #3450
2019-08-21 12:37:02 +02:00
Christian Helmuth
0037edfeee libports: minimal time-type conversion from musl
These are time-type conversion functions (including leap years and
seconds) taken from musl-libc git rev
c82d3bada30cb27e14abda7859da5d2e784830ff with some adaptions. Musl is
licensed under permissive MIT license.

Issue #3450
2019-08-21 12:37:02 +02:00
Josef Söntgen
a7fe4a502d rtc_drv: implement set signal handling
Issue #3450
2019-08-21 12:37:01 +02:00
Josef Söntgen
ea2b330158 rtc: extended session with set-signal
A client may register a signal handler to be notified whenever the
RTC value was changed, i.e., a mis-configured clock was synchronized,
by calling 'set_sigh()'.

Issue #3450
2019-08-21 12:37:01 +02:00
Josef Söntgen
86cacd23bb rtc: add documentation comments
Issue #3450
2019-08-21 12:37:01 +02:00
Christian Prochaska
85b1563e57 mk: generate .data symbols with distinct values/addresses
Prevent the static linker from assuming weak object symbols to be alias
symbols for unrelated non-weak symbols with the same value/address.

Fixes #3458
2019-08-21 12:37:01 +02:00
Christian Prochaska
35c724512d stdcxx: revert '_ZTISt16invalid_argument' symbol type to 'V'
Issue #3458
2019-08-21 12:37:01 +02:00
Norman Feske
ff07654560 noux: rm explicit dependency from libc_noux.lib.so
Issue #3472
2019-08-21 12:37:01 +02:00
Norman Feske
695a212877 noux: preload libc_noux.lib.so for noux processes
Issue #3472
2019-08-21 12:37:01 +02:00
Norman Feske
686dd8affd ldso: ability to preload shared objects
Fixes #3472
2019-08-21 12:37:00 +02:00
Christian Prochaska
3acb509b9e vbox: add 'RTMemDupExTag()' implementation
Fixes #3473
2019-08-21 12:37:00 +02:00
Norman Feske
874172ca76 sculpt manager: support GEMDOS file systems
Pass the distinction between GEMDOS and MSDOS file systems from
part-block reports to the vfs_rump plugin.

Fixes #3471
2019-08-21 12:37:00 +02:00
Norman Feske
114de7721f rump_fs: support the access of GEMDOS file systems
The GEMDOS variant is supported by NetBSD's msdos file-system driver.
However, it must explicitly be enabled by a mount flag. This patch
adds the principle ability for passing mount flags to file system
drivers and enables the MSDOSFSMNT_GEMDOSFS flag based on the
config attribute 'gemdos="yes"'.

Issue #3471
2019-08-21 12:37:00 +02:00
Norman Feske
ceae637416 part_block: support for AHDI partition scheme
This patch enhances part_block with support for parsing the AHDI
partition scheme, and the detection of the GEMDOS variant of FAT as used
by Atari TOS. As a side effect of the implementation, the patch improves
the MBR parsing code by avoiding pointers and using const qualifiers.

Fixes #3470
2019-08-21 12:37:00 +02:00
Norman Feske
23c2606ce0 usb_block: support iomega zip drives
This patch enhances the initialization sequence by issueing a START_STOP
SCSI command when needed.

Fixes #3469
2019-08-21 12:36:59 +02:00
Norman Feske
67a3c2ea4b sculpt: handle failures of usb_block_drv
This patch handles the situation where the usb_block_drv exits for any
reason, in particular when the driver fails to initialize the device. In
such cases, the usb_block_drv used to stay stale in the system,
effectively preventing the device from being passed to a VM. With the
patch, the USB storage device gets flagged as failed, the usb_block_drv
is removed from the runtime, and the condition is reflected at the user
interface.

This situation occurred on the attempt to access an iomega zip drive
with a version of the usb_block_drv without support for the START-STOP
command, but it may potentially also occur in other circumstances.

Fixes #3468
2019-08-21 12:36:59 +02:00
Norman Feske
2d03e622f1 usb_block: exit on initialization failure
Issue #3468
2019-08-21 12:36:59 +02:00
Christian Prochaska
b9f0318ab8 mk: print symbol assembler file lines only once
Fixes #3461
2019-08-21 12:36:59 +02:00
Christian Helmuth
08ac64bba9 libports: download bzip2 port from sourceware.org
fossies.org removed the archive and Linux From Scratch uses
sourceware.org.

http://www.linuxfromscratch.org/lfs/view/development/chapter03/packages.html
2019-08-21 12:36:59 +02:00
Stefan Thöni
f018dac506 util/fifo: Change empty() method of fifo to const.
Fixes #3464
2019-08-13 12:02:27 +02:00
Christian Helmuth
607fe83c63 autopilot: align output for wide run-script names 2019-08-13 12:02:27 +02:00
Christian Prochaska
f73c63900f abi_symbols: drop weak local symbols
Fixes #3457
2019-08-13 12:02:27 +02:00
Christian Prochaska
2fad5eff95 abi_symbols: handle symbols without value
Fixes #3456
2019-08-13 12:02:27 +02:00
Christian Prochaska
1f56ffa51a abi_symbols: better error message on failed regexp match
Fixes #3455
2019-08-13 12:02:27 +02:00
Christian Helmuth
ce149397ec acpica: retrieve static battery info only once
On Fujitsu S936, evaluating the _BIF method on each battery-info update
successively increased the RAM usage, while  _BST (dynamic battery
status) and _STA (generic status) did not show this behavior. Therefore
this commit retrieves only dynamic information periodically (resp. on
SCI IRQ). Now, acpica hast static RAM usage in idle state for 24+ hours.

The root cause for the increased RAM usage is still shady. While it
could just be normal that it grows until a certain yet unknown limit,
there may also be memory leak in contrib code or some strange AML on the
designated notebook.

Issue #3454
2019-08-13 12:02:27 +02:00
Christian Helmuth
a7835650e8 acpica: prevent contrib code warnings 2019-08-13 12:02:27 +02:00
Christian Helmuth
83ead086a1 acpica: enable interpreter-slack mode
This mode is used on Linux (if acpi=strict is not set on boot cmdline)
and Windows. The mode ignores certain errors and/or bad AML constructs.

  1) Allow "implicit return" of last value in a control method
  2) Allow access beyond the end of an operation region
  3) Allow access to uninitialized locals/args (auto-init to integer 0)
  4) Allow ANY object type to be a source operand for the Store() operator
  5) Allow unresolved references (invalid target name) in package objects
  6) Enable warning messages for behavior that is not ACPI spec compliant
2019-08-13 12:02:27 +02:00
Christian Prochaska
91c8e70bef depot: add recipe for drivers_nic-imx8q_evk
Fixes #3452
2019-08-13 12:02:27 +02:00
Christian Prochaska
38dcdeeb04 fec_nic_drv: arm_64 support
Fixes #3446
2019-08-13 12:02:27 +02:00
Christian Helmuth
1c77ea2b03 base-hw: remove other board libs from recipes 2019-08-13 12:02:27 +02:00
Christian Helmuth
82d50912f6 foc: exclude .git directories from src archives 2019-08-13 12:02:27 +02:00
Christian Prochaska
4c113182b0 depot: add recipe for base-hw-imx8q_evk
Issue #3426
2019-08-13 12:02:27 +02:00
Stefan Kalkowski
7ced122ddc hw: support for i.MX8M Quad EVK
Fix #3426
2019-08-13 12:02:27 +02:00
Stefan Kalkowski
6b09ac59f0 hw: enable performance counter for ARMv8
Ref #3426
2019-08-13 12:02:27 +02:00
Stefan Kalkowski
ee38504d81 hw: implement update_data_region for ARMv8
Ref #3426
2019-08-13 12:02:26 +02:00
Sebastian Sumpf
dd505edd19 hw: GICv3 implementation
* modern GICv3 implementation
* distributor
* redistributor
* MMIO cpu interface

Ref #3426
2019-08-13 12:02:26 +02:00
Stefan Kalkowski
fa1aa33f83 hw: sanitize arm trustzone/virtualization services
Those services are not SoC specific and have to reside at a generic place.

Fix #3445
2019-08-13 12:02:26 +02:00
Stefan Kalkowski
907de9d37f hw: move timer into board.h
Unify the generic timer implementation for ARMv7 and ARMv8.

Ref #3445
2019-08-13 12:02:26 +02:00
Stefan Kalkowski
5c7436bf10 hw: remove SMP variable from board.h
Whether an SoC has the multiprocessing extensions can be read out
from the identification registers, and does not need to be specified
in each board header.

Ref #3445
2019-08-13 12:02:26 +02:00
Stefan Kalkowski
0b77e8ea62 hw: consistently move cpu into board namespace
Ref #3445
2019-08-13 12:02:26 +02:00
Stefan Kalkowski
875858b2cc hw: integrate interrupt controllers into board.h
Additionally, unify more implementation details in between different
usage patterns of ARM's generic interrupt controller (v2)

Ref #3445
2019-08-13 12:02:26 +02:00
Martin Stein
fe426e6f8f smbios_decoder: XML report from SMBIOS table ROM
Fixes #3430
2019-08-13 12:02:26 +02:00
Martin Stein
1e379cb3a9 drivers/acpi: provide plain SMBIOS table as report
Ref #3430
2019-08-13 12:02:03 +02:00
Martin Stein
ead385dd17 base-nova: EFI sys-table pointer in platform info
Ref #3430
2019-08-13 12:02:03 +02:00
Martin Stein
b87e21a392 base-hw: EFI sys-table pointer in platform info
Ref #3430
2019-08-13 12:02:03 +02:00
Christian Prochaska
04e8ba716c ps2_drv: wait longer for ACK after RESET command
On some machines, more time passes until the acknowledgement arrives.

Fixes #3442
2019-08-13 12:02:03 +02:00
Christian Prochaska
193a401097 Increase RAM quota of ACPI driver to 4M
On some machines, more than 3 MiB are needed. This finally equalizes all
occurences of RAM quotas with drivers_managed.

Fixes #3443
2019-08-13 12:02:03 +02:00
Alexander Boettcher
53a83fb76e nova: update kernel branch
- Avoid DoS against kernel, reported by Julian Stecklina
- Provide EFI systab pointer through HIP
- Fix PCID bug

Fixes #3440
2019-08-13 12:02:03 +02:00
Josef Söntgen
47e6d72bf2 rtc_drv: add support for setting RTC
The rtc_drv on x86 can now by used to also set the RTC. If the config
attribute 'allow_setting_rtc' is set to 'yes' the driver will update
the RTC from the content of the 'set-rtc' ROM module. A valid ROM must
contain a top node with the following attributes: 'year', 'month',
'day', 'hour', 'minute' and 'second'.

* Only rudimentary checking of the provided values is done.
* '12H' mode is not supported.

Fixes #3438.
2019-08-13 12:02:03 +02:00
Josef Söntgen
91ce57848c rtc_session: make timestamp printable
Issue #3438.
2019-08-13 12:02:03 +02:00
Martin Stein
22d7871e1d test/init: raise log performance
Fixes #3429
2019-08-13 12:02:03 +02:00
Tomasz Gajewski
4189157d10 cpu_bench: fixes to make it work reliably
Added missing build dependency.

Eliminated race condition when processing test output.

Fixes #3412
2019-08-13 12:02:03 +02:00
Sid Hussmann
eaefcc2c6f ssh: add exec channel and exit on interactive
This commit implements the ssh exec channel request. It also handles
some shortcommings on the interactive channel like exit and concurrent
session establishments.

Pipes into the channel do not work yet. E.g.:
echo foobar | ssh noux@localhost -p 5555 "cat > /rw/test.txt"

The issue described with FIXME in Ssh::Server::incoming_connection()
could not be reproduced and might have been fixed with the improved
file descriptor handling.

Fixes #3401
2019-08-13 12:02:03 +02:00
Christian Helmuth
92bdcbf1fe ps2: initially set all keyboard LEDs off
This ensures a safe initial state and also informs the BIOS (resp.
notebook keyboards with dual-use keys for numpad) about our
assumptions.
2019-07-09 15:57:32 +02:00
Norman Feske
c011d54158 sculpt/README: refer to cnuke's updated article 2019-07-09 14:18:31 +02:00
Norman Feske
d782499541 sculpt/README: specify BOARD for building 2019-07-09 13:59:59 +02:00
Norman Feske
59f9af23b9 News item for Sculpt 19.07 2019-07-09 12:20:06 +02:00
Norman Feske
70a236cccd sculpt/README: adjust git tag to version 19.07 2019-07-09 11:59:44 +02:00
Norman Feske
d33bef2e49 Update documentation for Sculpt 19.07 2019-07-09 11:46:20 +02:00
Christian Helmuth
fbae7767b4 sculpt: version 19.07 2019-07-09 09:06:54 +02:00
Christian Helmuth
17d32b3e15 depot: update recipe hashes 2019-07-09 09:06:54 +02:00
Norman Feske
6380ad1c80 pkg/vbox5-nova-sculpt: clipboard support
To enable the clipboard for a VM, add the following node to the
<Hardware> sub node of your machine.vbox configuration:

  <Clipboard mode="Bidirectional"/>

Issue #3437
2019-07-09 08:58:39 +02:00
Norman Feske
0c3d3e7c8f pkg/qt5_textedit: clipboard support
Issue #3437
2019-07-09 08:58:39 +02:00
Norman Feske
3b0d694f42 pkg/noux-system: clipboard support
Issue #3437
2019-07-09 08:58:39 +02:00
Norman Feske
c7e79030dd sculpt: limit rate of depot queries
The triggering of a new depot query can happen more than once per
activation of the sculpt manager if multiple conditions call for updated
information about the depot. When this happens, the depot-query
component produces intermediate results, which are not consumed by the
sculpt manager. By deferring depot queries for a few milliseconds, we
avoid such intermediate queries, relieving the workload of the
depot-query component at system boot time.

Issue #3436
2019-07-09 08:58:39 +02:00
Norman Feske
58a0f5c30b sculpt: break possible depot-query feedback loop
Fixes #3436
2019-07-09 08:58:39 +02:00
Norman Feske
c92a9ce591 sculpt: show names of unsatisfied launchers
The diagnostic messages presented in the runtime dialog lacked the name
if the subsystem was created from a launcher, e.g., the 'vm'. Instead of
determining the subsystem name from the start-XML-node (a launcher has
no 'name' attribute but the name corresponds to the launcher's file
name), the name is now passed as a dedicated argument.
2019-07-09 08:58:39 +02:00
Norman Feske
605f9abf96 sculpt: integrate global clipboard
Issue #3437
2019-07-09 08:58:39 +02:00
Norman Feske
e4412a3e56 noux_vim.run: clipboard integration with wm
This patch enhances the noux_vim.run scenario to make it usable as a
testing ground of the terminal's and window manager's resize and
clipboard handling.

Issue #2079
2019-07-09 08:58:39 +02:00
Norman Feske
1fe9b07c99 wm: forwarding of clipboard ROM/Report sessions
The labels of clipboard ROM and clipboard report sessions of WM clients
must be consistent with the client's nitpicker label. Hence, we must
route those sessions through the window manager, analogously to the
approach taken for shape reports in #3165.

Issue #3437
2019-07-09 08:58:38 +02:00
Norman Feske
2da604a6e2 terminal: make color 4 less green, less saturated
Issue #3406
2019-07-09 08:58:38 +02:00
Norman Feske
fc7b983a40 terminal: clipboard support
Fixes #2079
2019-07-09 08:58:38 +02:00
Norman Feske
6399fc12ac clipboard: allow for dynamic reconfiguration 2019-07-09 08:58:38 +02:00
Norman Feske
db6e013577 clipboard: match client labels against focus
When setting the config attribute 'match_labels="yes"', the clipboard
performs plausibility checks for copy and paste operations against the
nitpicker focus.

Issue #3437
2019-07-09 08:58:38 +02:00
Christian Prochaska
71ce1442c8 run: enable 'imx7d_sabre' in network tests
Fixes #3434
2019-07-09 08:58:38 +02:00
Christian Prochaska
5dd1abcc2d depot: add recipe for drivers_nic-imx7d_sabre
Fixes #3433
2019-07-09 08:58:38 +02:00
Christian Prochaska
4dafdbd5b7 dde_linux: update 'fec' driver to version 4.16.3
Fixes #3432
2019-07-09 08:58:38 +02:00
Christian Helmuth
949130d80e Remove warning exec_static_constructors() warning
The warning falsely detected cases where shared objects where loaded before
exec_static_constructors() was called as unneeded even in cases were the
binary itself contained static globals.

The commit also removes one redundant call to exec_static_constructors()
from the block tester.
2019-07-09 08:58:38 +02:00
Josef Söntgen
4c8369ab1b tool/depot/publish: support multiple threads in xz
Introduce 'XZ_THREADS' to override the default number of threads used
for compression, which is still set to '1'. As using multiple threads
will increase the amount of memory needed during the compression and
potentially influences the size of the created archive, setting the
variable limits the impact.

Fixes #3431.
2019-07-09 08:58:38 +02:00
Christian Helmuth
fcdad00044 test.run: build vfs plugins of in rom list 2019-07-09 08:58:38 +02:00
Norman Feske
417191bdbd wm.run: build window_layouter
This change makes the wm.run more convenient as testbed for developing
the window layouter.
2019-07-09 08:58:38 +02:00
Norman Feske
c00666b7e8 depot_deploy.run: integrate recall_fs
This is needed to deploy the current version of the window_layouter pkg.
2019-07-09 08:58:38 +02:00
Norman Feske
854a154fb4 depot_query: cache file-system accesses
This patch introduces two caches to the depot-query tool.

- A stat cache remembers the results of 'Directory::file_exists'
  calls.

- The 'Cached_rom_query' caches the result of scanning the depot
  for a given ROM module and pkg path. To elminates the need to
  parse 'archive' files of pkgs referenced from other pkgs or
  for the repeated instantation of the same pkg.

Both caches are bypassed whenever referring to the 'local' depot user.

Fixes #3427
2019-07-09 08:58:38 +02:00
Norman Feske
7e7eff0eb7 window layouter: reduce snap-back artifact
When resizing windows of clients that respond very slowly to resize
requests, the window's size sometimes snapped back to its original size
immediately after finishing the drag operation.

The problem was caused by the interplay of the layout rules (obtained
via the 'rules' ROM, generated by the 'rules' report) and the
temporary interactive state that occurs during drag operations.
The rules are updated only at the time of releasing the button to keep
the overhead while dragging the window low. However, when releasing the
mouse, the (now outdated) rules kicked back into effect, triggering
resize requests for the window to its old size.

The patch solves this problem by decoupling the dragged state of a
window from the physical release of the button. The button release
triggers a transition from a DRAGGING to a SETTLING state and programs
a timer. In the SETTLING state, the windows behave as in DRAGGING state,
giving the interactive geometry precedence over the rules-dictated
geometry. During this state, further responses of window-resize requests
may come in and are handled like dragging was still in progress. After a
timeout, however, the current window layout is conserved as a new rules
report and the state goes back to IDLE.

For clients that takes a very long time (in particular, VirtualBox when
resizing the desktop, which takes sometimes multiple seconds), the
snap-back artifact can still occur, but the effect is reduced.
2019-07-09 08:58:38 +02:00
Norman Feske
48a361107f gpt_write: fix false-positive fallthrough warning 2019-07-09 08:58:38 +02:00
Norman Feske
716453aaa1 gpt_write: fix pointer to local variable
This problem surfaced with the new tool chain that changes the stack
layout. A pointer to the the config XML data was kept in the main object
but pointed to a stack variable. This patch fixes it by removing the
pointer.

Fixes #3416
2019-07-09 08:58:38 +02:00
Christian Helmuth
63e69d35e0 Disable unsupported autopilot tests on rpi3 2019-07-09 08:58:38 +02:00
Christian Helmuth
a0c71cffd4 Solo5 tests require x86_64 2019-07-09 08:58:38 +02:00
Norman Feske
d1da5b9e16 libc_noux: override __libc_sigaction
This is a follow-up commit to the libc update. The FreeBSD
implementation of sigset or sigaction calls the __libc_sigaction now.

The patch fixes the SIGWINCH handling for Vim when interactively
resizing the terminal window.

Fixes #3424
2019-07-09 08:58:38 +02:00
Norman Feske
52ec4526e1 libc: discharge use of hidden symbols
Issue #3424
2019-07-09 08:58:38 +02:00
Martin Stein
e199acca05 util/print_lines: don't skip end of long lines
Print the end of oversized lines (> 200 chars) to new lines instead of
skipping it

Fixes #3422
2019-07-09 08:55:24 +02:00
Christian Helmuth
cea842b256 autopilot: append RUN_OPT also with --keep
In case RUN_OPT_AUTOPILOT is changed on consecutive calls of "autopilot
--keep", the changes are now effectively propagated to the run tool.

I also documented the RUN_OPT_AUTOPILOT environment variable.
2019-07-09 08:55:24 +02:00
Josef Söntgen
984bddcedd libc: cleanup port preparation
- make port able to be prepared repeatedly
  Rpcgen refuses to overwrite an already existing header, so try to
  always remove it beforehand
- get rid of 'cp' warning 'cp: warning: source file
  'src/lib/libc/sys/sys/time.h' specified more than once'
- silence patch message 'patch unexpectedly ends in middle of line'

Fixes #3420.
2019-07-09 08:55:24 +02:00
Josef Söntgen
d32e8390c2 os: remove trace_fs
This component is superseded by the 'vfs_trace' plugin.

Issue #3294.
2019-07-09 08:55:24 +02:00
Sebastian Sumpf
57e650ef2c gems: recipes for vfs_trace pluging
* source recipe for vfs_trace
* pkg for 'trace_fs' with runtime

issue #3294
2019-07-09 08:55:24 +02:00
Sebastian Sumpf
c34176580c os: recipe for 'trace_policy'
* source packet for all trace policies

issue #3294
2019-07-09 08:55:24 +02:00
Emery Hemingway
807f5d9af1 Use pthread_join in test/libc_pipe
Ref #2303
2019-07-09 08:55:24 +02:00
Norman Feske
d18f8eea2b window layouter: control maximize by editing rules
This patch adds the missing propagation of the maximized state from the
layout rules to the internal representation of a window. Without this
patch this state could be toggled by clicking on the maximizer button
only.
2019-07-09 08:55:24 +02:00
Christian Helmuth
8d62f21b40 autopilot: support arch-specific build directories
Replace the notion of board-specific platforms by clear definition
architecture and board.

Also added new command line switch for "targets"

  -t <target>         test target as triple of architecture-board-kernel,
                      e.g., arm_v7a-pbxa9-hw

Related to #3316
Fixes #3417
2019-07-09 08:55:24 +02:00
Norman Feske
7b1e3a9d63 window layouter: resize resizeable windows only
Initiate the drag operation of a resize handle only if the client is
known to be resizable.

Issue #3303
2019-07-09 08:55:24 +02:00
Norman Feske
070a24956d themed_decorator: use Attached_rom_dataspace::xml
This simplifies the code a bit.
2019-07-09 08:55:24 +02:00
Norman Feske
dec2d897c3 themed_decorator: fix jumping windows
The decorator's detection of the hovered window element was inaccurate,
which resulted in "jumping" windows in some situations, ultimately
caused by a combination of three different mechanisms.

First, when moving the pointer into the area of a window, the decorator
would detect the hovering of the left border whenever the distance of
the pointer from the border was less than the half of the theme texture
(e.g., 64x64 pixels for the default theme). However, if the left border
margin is set to a small value (e.g., 1), there is an overlap of the
sensitive resize border area and the content. Hence, chances were quite
high that - when moving the pointer from the left into the window - the
hover report would contain the hovering of the left border.

Second, the window manager tries to hide pointer movements from the
decorator if possible. It informs the decorator of the pointer position
if any decoration is hovered or if a new window is hovered. But it does
not expose pointer movements within a window to the decorator. For this
reason, the decorator would not update the hover report as long as the
pointer stays within a once hovered window. In the situation described
above, the hover report would still contain the stale information about
the hovering of the left resize border.

Third, when the user clicks on the window, the decorator examines the
most recent hover report and - in the situation described above - finds
the left border hovered. Consequently, it initiates a window-drag
operation. While resizing the window with the left border, the window
layouter pins the right border of the window to its current position.
All window-size changes of the client will be applied towards the left
(dragged) border. In the case of the top view, which continuously
resizes the window by itself, the window would "jump". In reality, it
actually tries to respond an interactive resize operation. The window
layouter cannot guess that the client is not responding to window
layouter's resize request but is acting independently.

This patch fixes the jumping window problem for the case where the
pointer hovers the overlapping area of the resize border and the
content. However, when trying the to interactively resize the top window
via the bottom-left corner, the "jumping" can still be observed.

Fixes #3303
2019-07-09 08:55:24 +02:00
Norman Feske
8625146011 sculpt: use secondary CPU for leitzentrale
By decoupling the leitzentrale from the (contended) boot CPU, the fading
on F12 interferes much less with animations like nano3d deployed in the
runtime.

Fixes #3268
2019-07-09 08:55:24 +02:00
Sebastian Sumpf
24eea0b653 base: add 'trace' function to base/log.h
The 'Genode::trace' convenience function prints messages to Genode's
trace buffer (if tracing is enabled).

issue #3294
2019-07-09 08:55:23 +02:00
Sebastian Sumpf
18b3253cac vfs_trace: VFS plugin that offers trace buffer access
The plugin creates a file-system hierarchy that enabled the access of
trace buffers for each component and its threads.

issue #3294
2019-07-09 08:55:23 +02:00
Sebastian Sumpf
25484f870e trace: make trace buffer resizeable
Trace buffers a re-allocated during subsequent calls to 'trace'.

issue #3294
2019-07-09 08:55:23 +02:00
Sebastian Sumpf
ac0ecdf855 base: make trace resumable
revert relocations so a paused subject can resume without changing its
policy.

issue #3294
2019-07-09 08:55:23 +02:00
Sebastian Sumpf
399487c85d gems: add direct fs constructor to Watch_handler
issue #3294
2019-07-09 08:55:23 +02:00
Alexander Boettcher
bc14a32998 bomb: handle failing child creation
Issue #3107
2019-07-09 08:55:23 +02:00
Christian Helmuth
cf2c9f8d88 run: abort with error if BOARD was not set 2019-07-09 08:55:23 +02:00
Stefan Kalkowski
186c35bb09 depot: recipe for base-hw-rpi3
Ref #3407
2019-07-09 08:55:23 +02:00
Sebastian Sumpf
3a2de0d9a3 depot_autopilot: limit dynamic to 286 MB
* also set test-libc to 256 MB (seems to be enough)
* fixes memory issues on platforms with 512 MB RAM

issue #3407
2019-07-09 08:55:23 +02:00
Sebastian Sumpf
1b489820a9 base: timestamp support for ARM 64-Bit
issue #3407
2019-07-09 08:55:23 +02:00
Sebastian Sumpf
ef8140cce5 lxip: ARM 64-Bit support
issue #3407
2019-07-09 08:55:23 +02:00
Sebastian Sumpf
790a57041c base: add ARM 64-Bit to base API
issue #3407
2019-07-09 08:55:23 +02:00
Sebastian Sumpf
e43b848ac8 jitterentropy: ARM 64-Bit version
issue #3407
2019-07-09 08:55:23 +02:00
Sebastian Sumpf
59347d2560 stdcxx: make linkable for ARM 64-Bit
'typeinfo for std::invalid_argument' was not found when using 'V' (weak
object)

issue #3407
2019-07-09 08:55:23 +02:00
Sebastian Sumpf
2b14284e2b libc: add ARM-64 bit to recipe
issue #3407
2019-07-09 08:55:23 +02:00
Sebastian Sumpf
c107aba913 depot_autopilot: add ARM 64-bit support
issue #3407
2019-07-09 08:55:22 +02:00
Sebastian Sumpf
e337b844e5 depot: support for ARM 64-bit for base-foc on rpi3
issue #3407
2019-07-09 08:55:22 +02:00
Stefan Kalkowski
90d07741aa hw: support for ARM64 Raspberry Pi 3
Restriction: enables only cpu core 0 and the timer interrupt by now.

Fix #3405
2019-07-09 08:55:22 +02:00
Stefan Kalkowski
87015df66c hw: change update_pd to invalidate_tlb
In the past, the core-only privileged syscall `update_pd` was used only
to invalidate the TLB after removal of page-table entries.
By now, the whole TLB at least for one protection domain got invalidated,
but in preparation for optimization and upcomingARM v8 support,
it is necessary to deliver the virtual memory region that needs to get
invalidated. Moreover, the name of the call shall represent explicitely
that it is used to invalidate the TLB.

Ref #3405
2019-07-09 08:55:22 +02:00
Stefan Kalkowski
d9a0f76e7a hw: extend long-descriptor page table format
Ref #3405
2019-07-09 08:55:22 +02:00
Tomasz Gajewski
0ecc48e6de Mini UART driver for Rpi3
Ref #3405
2019-07-09 08:55:22 +02:00
Christian Helmuth
efe0887247 tool: fix BOARD_RUN_OPT for arm_v8 2019-07-09 08:41:53 +02:00
Christian Helmuth
3c4c460f82 depot: update recipe hashes 2019-06-13 13:40:37 +02:00
Christian Helmuth
ab3efc0a33 depot_autopilot: skip test-fs_packet on rpi 2019-06-13 12:22:50 +02:00
Christian Helmuth
e1e67d8330 Increase timeouts in test-libc* pkgs
These tests often fail with Qemu on aged hosts because of the tight
timeouts.
2019-06-13 12:22:50 +02:00
Christian Helmuth
de4c31e557 Additional boot time (10 s) in test.run 2019-06-13 12:22:50 +02:00
Martin Stein
5a59d295a4 depot_autopilot.run: relax test timeout
There are still nightly tests like test-tcp_bulk_lxip on sel4 x86_64 qemu
that manage to hit the test timeout of the run script although the test was
successful. So, raise the extra time added by the run script to 30 seconds.

Ref #3411
2019-06-13 12:22:49 +02:00
Martin Stein
fe5ada85cb depot_autopilot.run: max nr of tests per boot
Some platforms (sel4 imx6/imx7) cannot manage to execute all tests in a single
boot. Thus, we re-boot them periodically after a given maximum number of tests
to avoid that arbitrary tests always fail due to the long uptime and not due to
the tests themselves.

If the maximum number of tests is set to 0, no limit is applied.

Fixes #3411
2019-06-13 12:22:49 +02:00
Johannes Kliemann
b55358c535 ada-runtime: fix exception handling on ARM
ref #3395
2019-06-13 12:22:49 +02:00
Christian Helmuth
1b059649ff depot_autopilot: skip test-spark_exception on ARM
Issue #3395
2019-06-13 12:22:49 +02:00
Christian Helmuth
45f3ccc42a vfs: fix empty-node handling in inline fs
Now <inline></inline> as well as <inline/> are supported.
2019-06-13 12:22:49 +02:00
Christian Helmuth
4d34f9f9f4 Reduce third-party kernel build warnings 2019-06-13 12:22:49 +02:00
Christian Prochaska
62232f9a35 fs_rom: retry watching a path element after watching its parent dir
If a path element cannot be watched because it does not exist yet, the next
available parent directory is watched to detect the creation of the missing
path element. If a missing path element got created just between the failed
watch request for the element and the successful watch request for its parent
directory, the creation of the path element could remain unnoticed.

With this commit, 'fs_rom' tries to watch a path element again if the watch
request for its parent directory was successful.

Fixes #3398
2019-06-13 12:22:49 +02:00
Alexander Boettcher
a25c656b1a image/disk: increase estimated disk size
Fixes #3410
2019-06-13 12:22:49 +02:00
Christian Helmuth
ed0d76552b Relax timing requirements in lazy timer test
The lazy-timer test depends on the faster-timer handler to be executed
before the fast timeout occurs, which was pretty hard to achieve on Qemu
and a busy host machine. Therefore, I increased the fast-to-faster
timeout ratio from 50/25 ms to 200/25 ms and set the test runtime to
4000 ms.
2019-06-13 12:22:49 +02:00
Emery Hemingway
43315444a8 Libc: wrap VFS sync's in VFS_THREAD_SAFE
Move the _vfs_sync implementation from vfs_plugin.h to vfs_plugin.cc and
wrap all VFS access in the VFS_THREAD_SAFE macro.

Syncing must be made thread safe because it often happens when closing
files and may require suspending the current thread for I/O signal
dispatching.

Ref #3409
2019-06-13 12:22:49 +02:00
Alexander Boettcher
c055986e38 vbox5*.run: enable VM tests for Fiasco.OC
Issue #3111
2019-06-13 12:22:49 +02:00
Alexander Boettcher
7ec37b2d8d vbox5: adjust to run with Fiasco.OC
- use priorities solely with nova
- handle exceptions during vCPU creation
- avoid assertion in vga_vbda
- silence compiler warnings about outdated register keyword

Issue #3111
2019-06-13 12:22:49 +02:00
Alexander Boettcher
64fac6cee7 foc: extend vm_session impl. for vbox5
- transfer more guest registers
- print warning once for unsupported guest registers
- improve synchronization of vm state transfer

Issue #3111
2019-06-13 12:22:49 +02:00
Emery Hemingway
12127a7bd2 Construct Terminal_session within with_libc
The "pipe" procedure can only be safely called within with_libc.

Fix #3408
2019-06-13 12:22:49 +02:00
Josef Söntgen
eaed28f68d sculpt: document version string constraint
Issue #3403.
2019-06-13 12:22:49 +02:00
Tomasz Gajewski
4a102fb58c sculpt doc: be more precise about the use of GPT
Information about GPT being required for permanent sculpt
customizations

Fixes #3381
2019-06-13 12:22:48 +02:00
Christian Helmuth
ae7fbd6b1a terminal: modernize color palette
The terminal now got a configurable palette for 16 colors (8 normal, 8
bright/bold).

  <config>
    <palette>
      <color index="0" value="#000000"/> <!-- black is real black -->
      <color index="8" value="#101010"/> <!-- bright black stands out a bit -->
    </palette>
  </config>

Note, the old (undocumented) <color index="..." bg="..."> configuration
scheme is no longer supported.

Also, this commit adds a pleasing default palette that ensures
readability of ViM's standard hightlighting.

Fixes #3406
2019-06-13 12:22:48 +02:00
Christian Helmuth
72478a9e31 nova: provide missing Rpc_entrypoint::is_myself()
The symbol is implemented by the common implementation but was missing
from the nova-specific fork of rpc_entrypoint.cc.
2019-06-13 12:22:48 +02:00
Stefan Kalkowski
811410fdbb foc: update to current github version (fix #3402)
Instead of hosting our outdated own fork, this commit now uses kernkonzept's
nowadays available github source repositories. This hopefully simplifies
updates, or cherry-picking single fixes.
2019-06-13 12:22:48 +02:00
Christian Helmuth
5738e53be2 Warn about questionable call of wait_and_dispatch_one_io_signal
Issue #2399
2019-06-13 12:17:32 +02:00
Christian Helmuth
be4d8b24e2 run: improve error message on missing recipe 2019-06-13 12:17:32 +02:00
Christian Helmuth
1f77f37310 qt5: handle keypad-enter key 2019-06-13 12:17:32 +02:00
Norman Feske
7e174e73be ttf_font: prevent out-of-bounds access
Thanks Alexander Böttcher for investigating.

Fixes #3393
2019-06-13 12:17:31 +02:00
Emery Hemingway
ff23d665c6 depot: move ehmry depot URL
Fix #3400
2019-06-13 12:17:31 +02:00
Christian Helmuth
00daecf838 qt5: enable capslock/numlock in test run scripts 2019-06-13 12:17:31 +02:00
Christian Helmuth
f8f9f710e5 vbox5: rewrite (truncate) nitpicker session label
The shape-report label matching depends on the truncated label, i.e.,
Nitpicker label "wm -> vm" matches, while "wm -> vm -> vbox" does not.
2019-06-13 12:17:31 +02:00
Alexander Boettcher
e77362e7b9 driver_manager: fix vesa_fb_drv binary usage
Fixes #3394
2019-06-13 12:17:31 +02:00
Alexander Boettcher
c58acbd444 sculpt: add VM service
Fixes #3396
2019-06-13 12:17:31 +02:00
Alexander Boettcher
e2c1ce2add foc: add core threads as trace source
Fixes #3390
2019-06-13 12:17:31 +02:00
Alexander Boettcher
fc1b7a626c foc: add idle times as trace source
Issue #3390
2019-06-13 12:17:31 +02:00
Christian Prochaska
a7825ef292 gdb_monitor: disable pagination earlier
Fixes #3397
2019-06-13 12:17:31 +02:00
Christian Prochaska
8dd391371c libusb: show "device is plugged" message only when plugged
Fixes #3399
2019-06-13 12:17:31 +02:00
Josef Söntgen
737e9580b8 nvme_drv: only set the first INTMS bit on reset
Since we only set the first INTMC bit a check in QEMU will fail
and we don't get interrupts.

Fixes #3369.
2019-06-13 12:17:31 +02:00
Josef Söntgen
a2abc13425 nvme_drv: only wait for first admin cmd
Leave the loop if we processed the cmd we were looking for. That
should fix the delay users notice in Sculpt when NVMe is used.

Issue #3369.
2019-06-13 12:17:31 +02:00
Josef Söntgen
1daf179db9 nvme_drv: adapt run script to block_tester config
Issue #3369.
2019-06-13 12:17:31 +02:00
Josef Söntgen
6b48a08697 libc: silence noncritical dummy implementations
* isatty

  For the moment it is not possible to determine if the fd belongs to a
  tty. For whatever reasons, the check is done multiple times, e.g.
  'tclsh', which will spam the LOG.

* sysctl(HW_FLOATINGPT)

  FPU is enabled on all our platforms, so return true.

Fixes #3389.
2019-06-13 12:17:31 +02:00
Emery Hemingway
dc8a2ec523 Remove libc_terminal
Fix #3378
2019-06-13 12:13:40 +02:00
Christian Prochaska
46f89d143b libports: ncurses: disable relative cursor movement
Fixes #3380
2019-06-13 12:13:40 +02:00
Emery Hemingway
8a4adceaf0 Add note on PCAP dump to run/fetchurl.inc
Ref #3388
2019-06-13 12:13:40 +02:00
Emery Hemingway
bbf7a6230e VFS lwIP: restart DHCP with link-state changes
Start and stop the DHCP state machine as the Nic link-state changes.
Invoke the link state handler during configuration rather than assume
that in the case of a downed link lwIP will defer DHCP until the link
comes up.

Additionally, support static DNS configuration via the "nameserver"
configuration attribute.

Fix #3388
2019-06-13 12:13:39 +02:00
Christian Helmuth
24a3eea89e version: 19.05 2019-05-29 11:03:29 +02:00
Norman Feske
65b9a46d6c News item for version 19.05 2019-05-29 11:02:24 +02:00
Norman Feske
4dbb18bf5e Release notes for version 19.05 2019-05-29 11:02:24 +02:00
Norman Feske
44181fedf7 doc: update tool_chain.txt
This commit updates the tool-chain information, pointing at the
versioned install path now.

It also removes historic information that is no longer of interest.
2019-05-29 11:02:24 +02:00
Christian Helmuth
2b183f9497 depot: update recipe hashes 2019-05-29 10:20:52 +02:00
Martin Stein
a09150e6b4 depot_autopilot.run: relax reboot timeout
It might happen, in CPU intensive tests (like TCP bulk lxip), or when
printing debugging output after a failed test (as done currently on
staging), that the run script on the host gives up and reboots the
platform too early. Thus, we raise the buffer time. A reboot should
be necessary only in rare cases anyway.

Fixes #3387
2019-05-29 10:20:52 +02:00
Martin Stein
da3c52668d depot_autopilot.run: fix insufficient Qemu RAM
Fixes an error output in init at the beginning of the test and insufficient
transfer of RAM to the runtime of RAM-intensive test packages.

Ref #3387
2019-05-29 10:20:52 +02:00
Martin Stein
5ba19dd49b test-nic_loopback: fix RAM resource request
Ref #3387
2019-05-29 10:20:52 +02:00
Sebastian Sumpf
4b72bbaa57 libc: mktime signed overflow
issue #3289
2019-05-29 10:20:52 +02:00
Alexander Boettcher
9f02151d0b seoul-auto: disable autopilot test on qemu x86_32
Issue #3373
2019-05-29 10:20:52 +02:00
Sebastian Sumpf
f75f477c2b nic_router: [[fallthrough]] annotation
issue #3377
2019-05-29 10:20:52 +02:00
Sebastian Sumpf
cec050983a hw: [[fallthrough]] annotations for ARM/RISC-V
* double checked

issue #3377
2019-05-29 10:20:52 +02:00
Christian Prochaska
ca39a9ea61 tool_chain: versioned install location
Issue #3307
2019-05-29 10:20:52 +02:00
Martin Stein
ca95621db5 run/nic_router_uplinks: do not run on muen
On muen, we don't have configured access to wifi so far. Thus, the wifi
driver doesn't come up and we should skip tests using this driver for
the platform.

Fix #3384
2019-05-29 10:20:52 +02:00
Tomasz Gajewski
27e9d1fcf0 tool/run/README: Fixed tftp related argument names in example
Fixes #3382
2019-05-29 10:20:52 +02:00
Christian Prochaska
f99a1d78bb os: fix 'CUU' terminal command
Decrement the y position to move the cursor up.

Fixes #3379
2019-05-29 10:20:52 +02:00
Sebastian Sumpf
d417d26ce8 hw: fix calculation of CPU count on x86_64
On x86 the CPU count is determined through ACPI's MADT by counting the
local APICs reported there. Some platforms report more APICs
than there are actual CPUs. These might be physically disabled CPUs.
Therefore, a check if the LAPIC is actually physically enabled in
hardware fixes this issue.

Thanks to Alex Boettcher

fixes #3376
2019-05-29 10:20:52 +02:00
Sebastian Sumpf
5611020f33 hw: fix stack alignment in bootstrap for x86_64
Fix initial stack pointer alignment for x86_64 in crt0.s startup code of
bootstrap. SysV ABI states that upon function entry (rsp + 8) % 16 = 0.
There, we have to align the stack to 16 bytes before all 'call'
instruction not 8. Otherwise FPU (GP) exception might be raised later on
because of unaligned FPU accesses.

issue #3365
2019-05-29 10:20:52 +02:00
Emery Hemingway
fc68e97e4a Sculpt: redirect "nic_drv" binary to "ipxe_nic_drv"
Ref #2190
Fix #3374
2019-05-29 10:20:52 +02:00
Alexander Boettcher
b3a9ad2215 vbox5: fpu support via new vm_session
Issue #3111
2019-05-29 10:20:52 +02:00
Alexander Boettcher
ab6315d6b4 vm_session: add fpu state for x86
Issue #3111
2019-05-29 10:20:52 +02:00
Alexander Boettcher
5673c163fb vbox5: use vm_session interface
Issue #3111
2019-05-29 10:20:52 +02:00
Alexander Boettcher
07ee9654e4 vm_session: consume spurious wakeups on nova
Issue #3111
2019-05-27 14:53:32 +02:00
Alexander Boettcher
9f70084524 base: add vm session API recipe
Issue #3111
2019-05-27 14:53:32 +02:00
Sebastian Sumpf
da17f2cbd3 hw: eager FPU switching for x86_64
Since gcc 8.3.0 generates SSE instructions into kernel code, the
kernel itself may raise FPU exceptions and/or corrupt user level FPU
contexts thereby. Both things are not feasible, and therefore, lazy FPU
switching becomes a no go for base-hw because we cannot avoid FPU
instructions because of the entanglement of base-hw, base, and the tool
chain (libgcc_eh.a).

issue #3365
2019-05-27 14:53:32 +02:00
Norman Feske
34a711b439 tool/parse_cxx: const var decl, initializers
This patch handles a few corner cases that appear in the headers of
Genode 19.05, in particular the new client-side block API in
'block_session/connection.h'.
2019-05-27 14:53:32 +02:00
Christian Helmuth
b359ec14a8 autopilot: align output for wide board names 2019-05-27 14:53:32 +02:00
Alexander Boettcher
68d5293f01 platform_drv: adjust to g++ 8.3.0
Issue #3307
2019-05-27 14:53:31 +02:00
Alexander Boettcher
91146a3a70 acpi_drv: adjust to g++ 8.3.0
Issue #3307
2019-05-27 14:53:31 +02:00
Norman Feske
405a9d2144 Refinements for updated "Genode Foundations" book
- Improve API descriptions
- Remove obsolete Xml_node::value method (fixes #3323)
- Follow coding style 'const char' -> 'char const'
- Avoid '>>' when nesting templates (limitation of parse_cxx)
2019-05-27 14:52:53 +02:00
Christian Helmuth
6c42bd4dd3 libc: use non-anonymous 'operator new' and destroy()
This removes implementations of and also references to anonymous new and
delete operators from the libc implementation. As allocators for
new/delete Libc::Allocator instances are used, which (paradoxically) map
to libc malloc/free.
2019-05-27 14:52:53 +02:00
Christian Helmuth
9288fe63ad arg_string: return default value on parsing error 2019-05-27 14:52:53 +02:00
Pirmin Duss
bd045c65a2 util/string.h: suppress case fallthrough warnings 2019-05-27 14:52:53 +02:00
Johannes Kliemann
35b1440c97 ada-runtime: update to GCC 8.3.0
ref #3362
fixes #3371
2019-05-27 14:52:53 +02:00
Martin Stein
ba9ffc6243 nic_dump: do not depend on libports repo
Fixes #3372
2019-05-27 14:52:52 +02:00
Martin Stein
95ece89cf8 tool/depot: improve handling of missing ports
* The extract tool determines and reports all missing ports at once.
* The extract tool automatically prepares all missing ports if PREPARE_PORTS=1.
* The missing_ports tool prints a list of missing ports for given archives.

Fixes #3353
2019-05-27 14:52:52 +02:00
Stefan Kalkowski
6d8d6b5552 hw: disable alignment checking at earliest
Fix #3370
2019-05-27 14:52:52 +02:00
Sebastian Sumpf
f18285205c hw: enable FPU during CPU startup on x86
Also disable TS (task switch) flag in cr0 during kernel initialization,
so FPU faults are not raised. This became necessary since GCC lately
aggressively generates FPU instructions at arbitrary places and also at
early kernel-bootstrapping stages.

fixes #3365
2019-05-27 14:52:52 +02:00
Christian Helmuth
e60b597af5 linux: 32-bit compatibility with GCC versions before 7
GCC version 7 and above generate calls to __divmoddi for 64bit integer
division on 32-bit. Unfortunately, libgcc liberaries of older compilers
lack this symbol and are still in use by Debian/Ubuntu LTS at least.
2019-05-27 14:52:52 +02:00
Christian Helmuth
96b29c6f8a Update lwip_lx test (vfs plugin, ld="no") 2019-05-27 14:52:52 +02:00
Christian Prochaska
a5d6cbf44d tool_chain: strip gdb
Issue #3307
2019-05-27 14:52:52 +02:00
Martin Stein
79d1c4f83a nic_router_flood: adapt test timeout
Fixes #3368
2019-05-27 14:52:52 +02:00
Christian Prochaska
4dd9d5eb6c dde_zircon: fix compile error with GCC 8.3.0
Fixes #3366
2019-05-27 14:52:52 +02:00
Alexander Boettcher
753e78d122 seoul: adjust to g++ 8.3.0
Issue #3307
2019-05-27 14:52:52 +02:00
Alexander Boettcher
b50e54b0a8 nova: adjust to g++ 8.3.0
Issue #3307
2019-05-27 14:52:52 +02:00
Christian Prochaska
7fadfbbd9f Treat 'implicit fallthrough' errors as warnings
After fixing the warnings, the compiler option should be removed.

Issue #3307
2019-05-27 14:52:52 +02:00
Christian Prochaska
b4649d84ee ada-runtime: adjustments for Genode tool chain 19.05
Issue #3307
2019-05-27 14:52:52 +02:00
Christian Prochaska
eb4d431e76 stdcxx: update to version 8.3.0
Issue #3307
2019-05-27 14:52:52 +02:00
Christian Prochaska
8e2e4374f5 sanitizer: update to version 8.3.0
Issue #3307
2019-05-27 14:52:52 +02:00
Christian Prochaska
720919bc14 gcov: update to version 8.3.0
Issue #3307
2019-05-27 14:52:52 +02:00
Christian Prochaska
61140380ee base: update 'ld' symbols for tool chain 19.05
Issue #3307
2019-05-27 14:52:52 +02:00
Sebastian Sumpf
a8d856fb65 ldso: dynamic linking support for ARM 64-bit
* added relocation support
* added assembler invocation path for jump slot relocations

fixes issue #3260
2019-05-27 14:52:52 +02:00
Sebastian Sumpf
7dc875e8c7 base: dynamic linking support of crt0.s on ARM 64-bit
* added global offset table relative loading for global symbols
* removed 'initial_sp' and 'initial_x0' because they are currently not
  used on this platform. If required they are easy to resurrect.

issue #3260
2019-05-27 14:52:51 +02:00
Stefan Kalkowski
f0d28eeca7 foc: add support for Raspberry Pi 3
Ref #3260
2019-05-27 14:52:51 +02:00
Stefan Kalkowski
71a48c0a26 base: add initial support for ARM 64-bit
Ref #3260
2019-05-27 14:52:51 +02:00
Stefan Kalkowski
c98597a2c0 base: increase initial stack
Ref #3260
2019-05-27 14:52:51 +02:00
Christian Prochaska
6af3899bcb Enable C++17 by default
Issue #3307
2019-05-27 14:52:51 +02:00
Christian Prochaska
74260c96bf tool_chain: integrate 'ali2dep' tool
Fixes #3361
2019-05-27 14:52:51 +02:00
Stefan Kalkowski
fc922d263c tool_chain: add aarch64 compiler target
Ref #3260
2019-05-27 14:52:51 +02:00
Sebastian Sumpf
36f90e57f3 riscv: tool chain 19.05
issue #3273
2019-05-27 14:52:51 +02:00
Christian Prochaska
f369da741d tool_chain: update GDB to version 8.2.1
Issue #3307
2019-05-27 14:52:51 +02:00
Christian Prochaska
1720d2d86d tool_chain: update GCC to version 8.3.0
Issue #3307
2019-05-27 14:46:54 +02:00
Christian Prochaska
96ed3c8db0 tool_chain: update binutils to version 2.32
Issue #3307
2019-05-27 14:46:54 +02:00
Christian Prochaska
fe878e65de base: add copy constructor to 'Genode::Session_label'
Fixes #3333
2019-05-27 14:46:54 +02:00
Josef Söntgen
d223539165 wifi_drv: ignore socket flags on socket creation
The libc features support for SOCK_CLOEXEC now which gets set via
the type argument in 'libnl'. Since we are only interested in the
actual type, i.e. if it is SOCK_RAW, just ignore the flags.

Issue #3289.
2019-05-27 14:46:54 +02:00
Sebastian Sumpf
a71253fa58 ieee754: adjust to libc/libm update
* Adjust expected pow(-1/1, inf/-inf/nan) output to current libm
  behavior (as in FreeBSD, glibc, and OpenLibm) and return 1 on
  x86_64/x86_32/arm

* Add 'double float' outputs for ARM which are defined to float

issue #3289
2019-05-27 14:46:54 +02:00
Christian Helmuth
6db43d2c19 libc_noux target depends on POSIX runtime
This prevents

  error copying "bin/libm.lib.so": no such file or directory
  error copying "bin/posix.lib.so": no such file or directory

when running "make run/noux" from an empty build directory.
2019-05-27 14:46:54 +02:00
Christian Prochaska
4fc3eca4aa base-hw: fix compile errors with GCC 8.3.0
Fixes #3326
2019-05-27 14:46:54 +02:00
Stefan Kalkowski
5c77ebb1fb hw: factor out x86 specific bootinfo
Ref #3326
2019-05-27 14:46:54 +02:00
Stefan Kalkowski
054df95ea4 hw: unify board definitions of bootstrap/core
Ref #3326
2019-05-27 14:46:54 +02:00
Martin Stein
8eecb39792 test/timeout: configurable fast-polling buffers
On some platforms (foc+pbxa9, hw+imx53_qsb_tz, hw+rpi) the default buffer size
is to much for the RAM available on the board. Thus, decrease the buffer size
and therefore the number of polls for these platforms only.

Fixes #3354
2019-05-27 14:46:54 +02:00
Christian Prochaska
8af81668ea rump_fs: fix run time errors when built with GCC 8.3.0
Fixes #3360
2019-05-27 14:46:54 +02:00
Christian Prochaska
c9b5dcafbd vbox: save FPU state in 'EPT violation' exit handler
Fixes #3359
2019-05-27 14:46:54 +02:00
Christian Prochaska
f596595c98 vbox: use 'Abi::stack_align()' for exit handler stack
This ensures proper stack alignment for FPU instructions on x86_64.

Fixes #3358
2019-05-27 14:46:53 +02:00
Christian Prochaska
3fa994a7a4 dde_bsd: update 'platform_execute()' functions based on libc
This ensures proper stack alignment for FPU instructions on x86_64.

Fixes #3357
2019-05-27 14:46:53 +02:00
Christian Prochaska
c7d9df6350 lx_kit: update 'arch_execute()' functions based on libc
This ensures proper stack alignment for FPU instructions on x86_64.

Fixes #3356
2019-05-27 14:46:53 +02:00
Christian Prochaska
c2c33d6808 base: save FPU registers in '_jmp_slot' function (x86_64)
Issue #3355
2019-05-27 14:46:53 +02:00
Christian Prochaska
9923a1bf50 ports: fix 'seoul' compile errors with GCC 8.3.0
Fixes #3352
2019-05-27 14:46:53 +02:00
Emery Hemingway
863654d188 Libc: update port to Freebsd 12
Fix #3289
2019-05-27 14:46:53 +02:00
Emery Hemingway
777d92f6de Port of OpenLibm
Replace the FreeBSD libm with OpenLibm, which is easier to port.
OpenLibm is used by Mirage's freestanding Ocaml runtime (sin POSIX).

https://openlibm.org/

Ref #3289
2019-05-27 14:46:53 +02:00
Christian Prochaska
382371d9e4 nova: remove '-Wabi' compiler option
Fixes #3351
2019-05-27 14:46:53 +02:00
Christian Prochaska
3556a40f81 seoul: adjustments to compile with GCC 8.3.0
Issue #3352
2019-05-27 14:46:53 +02:00
Emery Hemingway
4caffd79db Ethernet multicast support at nic_bridge
Fix #3282
2019-05-27 14:46:53 +02:00
Stefan Kalkowski
3460444d84 os: name tz_vmm unambigously (ref #2190)
Moreover, express current requirement to hw API, which was missing until now.

Originally, in the board-specific build directory of imx53_qsb the
"KERNEL" variable was preset with "hw". Therefore, it was not perceived
that this dependency is required.

Ref #3316
2019-05-27 14:46:53 +02:00
Alexander Boettcher
faee97dd1e sel4: let seoul-kernelbuild.run succeed
Issue #3111
2019-05-27 14:46:53 +02:00
Alexander Boettcher
c6ec2c1dd7 libc_terminal plugin: increase stack
Issue #3111
2019-05-27 14:46:53 +02:00
Christian Prochaska
92c314d3c8 intel_gpu_drv: fix compile error with GCC 8.3.0
Fixes #3332
2019-05-27 14:46:53 +02:00
Christian Prochaska
934ada72fa nova: remove deprecated 'register' keyword
Fixes #3350
2019-05-27 14:46:53 +02:00
Christian Prochaska
05a382b1a8 ports: fix 'noux' compile error with GCC 8.3.0
Fixes #3348
2019-05-27 14:46:53 +02:00
Christian Helmuth
0777d16e78 Revert "ieee754: disable test for muen (fix #3305)"
This reverts commit 918b9a9fa4.

The Muen debug console buffer was increased by the recent update, which
alleviates the issue with many log messages as in the ieee754 test.
2019-05-27 14:46:53 +02:00
Adrian-Ken Rueegsegger
d131e537e9 Update Muen port
- Drop unnecessary patch
- Improved build speed/parallelization
- Increased log channel size
- Fix path in base-hw/Muen documentation
2019-05-27 14:46:53 +02:00
Christian Prochaska
37ff9e1e23 gems: fix 'sculpt_manager' compile errors with GCC 8.3.0
Fixes #3347
2019-05-27 14:46:52 +02:00
Josef Söntgen
c8c354d1e6 fetchurl: add progress timeout handling
The component will now abort an ongoing download attempt if it stalls
for given amount of time, the default is 10 seconds.

Fixes #3346.
2019-05-27 14:46:52 +02:00
Christian Prochaska
4e6216bced libports: fix 'qt5_webcore' compile error with GCC 8.3.0
Fixes #3345
2019-05-27 14:46:52 +02:00
Christian Prochaska
5b232df503 libports: fix 'solo5' compile error with GCC 8.3.0
Fixes #3344
2019-05-27 14:46:52 +02:00
Stefan Kalkowski
a1e70b9ba4 kernel: differentiate board-specific components
Components like kernel, core, and bootstrap that are built for a
specific board need to reside inside the same architectural dependent
build directory. For instance there are sel4, foc, and hw kernel builds
for imx6q_sabrelite and imx7d_sabre, which have to reside inside the same
arm_v7 build directory.
This commit names those components explicitely, and adapts the run-tool to it.

Fix #3316
2019-05-27 14:46:52 +02:00
Stefan Kalkowski
c43267dbaa tool: deprecate board-specific build directories
* Introduces BOARD variable to determine actual board
* Removes formerly deprecated kernel-specific build directories

The following boards are available:

arm_v6: rpi
arm_v7a: arndale, imx53_qsb, imx53_qsb_tz, imx6q_sabrelite, imx7d_sabre,
         nit6_solox, odroid_x2, odroid_xu, panda, pbxa9, usb_armory,
         wand_quad, zynq_qemu
x86_64: pc, linux, muen
x86_32: pc, linux
riscv:  spike

Ref #3316
2019-05-27 14:46:29 +02:00
Christian Prochaska
02afb04b7d base: fix 'test-sanitizer' compile error with GCC 8.3.0
Fixes #3343
2019-05-16 13:11:03 +02:00
Christian Prochaska
e9fcbace61 libports: fix 'extract' compile errors with GCC 8.3.0
Fixes #3342
2019-05-16 13:11:03 +02:00
Christian Prochaska
2b21f41495 demo: fix 'mini_c' compile errors with GCC 8.3.0
Fixes #3341
2019-05-16 13:11:03 +02:00
Josef Söntgen
dd6bd0f880 sequence: add keep-going feature
When enabling the 'keep_going' config attribute, the component will
carry on in case a child exited with an error. In addition, if the
'restart' attribute is set it will start executing the children from
the beginning.
2019-05-16 13:11:03 +02:00
Martin Stein
1583782446 Revert "nic_router_flood: reworked to stress/analyze more"
This reverts commit ae55954919.
2019-05-16 13:11:03 +02:00
Christian Helmuth
22af4436f7 nova: log sp/bp on unresolvable exception 2019-05-16 13:11:03 +02:00
Martin Stein
8fb0d668e0 heap: fix exception handling in _allocate_dataspace
Previously, only Invalid_dataspace, Region_conflict, and Out_of_ram were
handled for both allocate and attach with the same handlers. However,
both operations can also throw Out_of_caps and for all exceptions during
attach, the dataspace must be freed again whereas this is not the case
when the exception occured during allocate.

Issue #2953
2019-05-16 13:11:02 +02:00
Sebastian Sumpf
467b96abf4 ldso: lazy binding support for RISC-V
* added assembler invocation path for jump slot relocations
* fix GOT initialization (jmp_slot pointer goes to GOT[0] not GOT[2] on
  RISC-V)

Fixes #3339
2019-05-16 13:11:02 +02:00
Christian Helmuth
4f0b17a4dc dde_ipxe: update Intel NIC driver to latest upstream
This patch is motivated by sporadic hangs during link down/up on i219
NICs handling and the fix implemented upstream in

  https://git.ipxe.org/ipxe.git/commit/546dd51de8459d4d09958891f426fa2c73ff090d

Issue #1220
2019-05-16 13:11:02 +02:00
Christian Helmuth
a633b5e36e drivers_interactive-pc: quotas (ps2_drv, input_filter) 2019-05-16 13:11:02 +02:00
Christian Helmuth
ea954e7e15 demo: support more platforms in test / drivers RAM 2019-05-16 13:11:02 +02:00
Christian Helmuth
3033496fa4 run: honor DEPOT_DIR for --depot-auto-update
Issue #3270
2019-05-16 13:11:02 +02:00
Stefan Kalkowski
13fb51eecf hw: remove implicit SoC-specific include path
Fix #3336
2019-05-16 13:11:02 +02:00
Christian Prochaska
9c17c83bf1 os: fix 'test-cpu' compile error with GCC 8.3.0
Fixes #3335
2019-05-16 13:11:02 +02:00
Christian Prochaska
2191ff656e os: fix 'test-block_request_stream' compile error with GCC 8.3.0
Fixes #3334
2019-05-16 13:11:02 +02:00
Christian Prochaska
2aeb1a70ea os: remove 'register' keyword from 'pixel_rgba.h'
Fixes #3331
2019-05-16 13:11:02 +02:00
Christian Prochaska
aa63628536 pistachio: fix compile error with GCC 8.3.0
Fixes #3330
2019-05-16 13:11:02 +02:00
Christian Prochaska
5a2e7a8d66 base-sel4: fix compile errors with GCC 8.3.0
Fixes #3328
2019-05-16 13:11:02 +02:00
Christian Prochaska
a41d46e193 base-pistachio: fix compile error with GCC 8.3.0
Fixes #3327
2019-05-16 13:11:02 +02:00
Christian Prochaska
940ba9ba95 base-nova: fix compile errors with GCC 8.3.0
Fixes #3325
2019-05-16 13:11:02 +02:00
Christian Prochaska
96627df4d4 base: fix cxx library compile errors with GCC 8.3.0
Fixes #3322
2019-05-16 13:11:02 +02:00
Christian Prochaska
47a2ad604c base: fix xml_node test compile error with GCC 8.3.0
Fixes #3324
2019-05-16 13:11:02 +02:00
Alexander Boettcher
70e0514a02 seoul: handle late timeouts
either
- due to poor signal performance of base platform
- due to being to less prioritized
- due to schedule overload
- due to using time sources of different physical CPUs

Issue #3111
2019-05-16 13:11:02 +02:00
Stefan Kalkowski
9135be8d5f fb_bench: disable automated test for imx7d_sabre
This platform hasn't a fb_drv yet.
2019-05-16 13:11:01 +02:00
Stefan Kalkowski
c5fee20286 sel4: build elfloader on demand (fix #3329) 2019-05-16 13:11:01 +02:00
Stefan Kalkowski
817eb4f23c okl4: create elfweaver tools on demand (ref #3329) 2019-05-16 13:11:01 +02:00
Stefan Kalkowski
4fa34190de platform_drv: check acpi ability by platform_info
Instead of retieving the information about the underlying platform from
the configuration, check the running kernel from the platform_info. This
commit removes the undocumented "acpi" config attribute.
2019-05-16 13:11:01 +02:00
Stefan Kalkowski
be053ed257 depot: add recipe for drivers_interactive-muen 2019-05-16 13:11:01 +02:00
Stefan Kalkowski
ae3a6fe270 depot: add recipe for drivers_nic-muen pkg 2019-05-16 13:11:01 +02:00
Stefan Kalkowski
da498af74e imx7d_sabre: disable automated network test
Until there is no network driver present for this board it is needless to
let the tests fail each night.
2019-05-16 13:11:01 +02:00
Stefan Kalkowski
1e986fade8 os: name pbxa9 ps2_drv explicitely (ref #2190) 2019-05-16 13:11:01 +02:00
Stefan Kalkowski
d9143f805e os: name rtc_drv unambigously (ref #2190) 2019-05-16 13:11:01 +02:00
Stefan Kalkowski
2e68fae2ec os: name ahci_drv unambigously (ref #2190) 2019-05-16 13:11:01 +02:00
Stefan Kalkowski
d18d2d0d9b os: name sd_card_drv unambigously (ref #2190) 2019-05-16 13:11:01 +02:00
Stefan Kalkowski
4e6b571a36 os: rename uart_drv unambigously (ref #2190) 2019-05-16 13:11:01 +02:00
Stefan Kalkowski
e6f83d4df2 depot: add recipe for drivers_interactive-rpi
Ref #2190
2019-05-16 13:11:01 +02:00
Stefan Kalkowski
a623a66019 depot: add recipe for drivers_interactive-imx53_qsb
Ref #2190
2019-05-16 13:11:01 +02:00
Stefan Kalkowski
35e73b1a2d os: name imx53 input_drv unambigously (ref #2190) 2019-05-16 13:11:01 +02:00
Stefan Kalkowski
8d1cfce15e os: name fb_drv unambigously (ref #2190) 2019-05-16 13:11:01 +02:00
Stefan Kalkowski
4550056de7 run: use drivers_interactive-* pkg where possible
Ref #2190
2019-05-16 13:11:01 +02:00
Johannes Schlatow
0451d3bbed Simple cache performance test
ref #3321
2019-05-16 13:11:00 +02:00
Johannes Schlatow
9097c80269 zynq: improve nic driver error handling
also be more verbose about detected errors

fixes #3320
2019-05-16 13:11:00 +02:00
Christian Prochaska
739317a83f noux: support non-blocking pipes
Needed for 'noux_gdb.run' with newer gdb versions.

Fixes #3319
2019-05-16 13:11:00 +02:00
Alexander Boettcher
92510af9d4 foc: working VM session support for AMD
- kernel: propagate cr0 to VMM on exit in nested paging case
- kernel: disable forceful VM exit on task switch
- vm_session: adjust to kernel changes

Issue #3111
2019-05-16 13:11:00 +02:00
Alexander Boettcher
b3f288c035 seoul: avoid corrupted cr0 and GP on debug wrmsr
- fix bug in instruction emulator on clts - mark cr0 as changed
- don't cause GP on debug control wrmsr

Issue #3111
2019-05-16 13:11:00 +02:00
Emery Hemingway
761e312219 Vbox: compile VMM/VMMR3/VMReq permissive
Ref #3289
2019-05-16 13:11:00 +02:00
Christian Prochaska
c0f03a28e9 gdb_monitor: use terminal VFS plugin
... instead of the deprecated libc terminal plugin.

Fixes #3318
2019-05-16 13:11:00 +02:00
Emery Hemingway
d2ab699cd5 Remove Post_signal_hook from Entrypoint
The Post_signal_hook mechanism has been completely replaced by
Io_progress_handler and can be removed.

Ref #3132
Fix #3302
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
5d4064fed4 depot: add recipe for drivers_nic-pbxa9
Ref #3180
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
5182224c2b depot: add recipe for drivers_nic-zynq
Ref #3180
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
8dd618d67f depot: add recipe for drivers_nic-imx6q_sabrelite
Ref #3180
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
82693ba5b5 depot: add recipe for drivers_nic-imx53_qsb
Ref #3180
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
ff031d792c depot: add recipe for driver_nic-rpi
Ref #3180
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
5b5e8a9bd4 depot: add recipe for drivers_nic-linux
Ref #3180
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
4fdbb1b1ad depot: add recipe for linux_nic_drv
Ref #3180
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
bf5a631a14 dde_linux: name usb_drv unambigously
* Make package buildable for ARM too
* Move usb library to src targets for explicitly named targets
* adapt remaining run-scripts to use the correctly named usb drivers

Ref #2190
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
d5104aca05 dde_linux: make rpi usb drivers kernel independent
Ref #3180
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
d00bcac941 dde_linux: exclude non-base API from fec_nic_drv
Ref #3180
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
5bc498c812 dde_linux: name FEC nic_drv unambigously
Ref #2190
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
312499a1ef os: name lan9118 nic driver explicitly
* it is not dependent on pbxa9 anymore, but configureable
* rename it to lan9118_nic_drv

Ref #2190
2019-05-16 13:11:00 +02:00
Stefan Kalkowski
dcc28b65cb run: use driver_nic-* pkg where possible (fix #3180) 2019-05-16 13:10:06 +02:00
Stefan Kalkowski
b6d14d9960 dde_ipxe: name ipxe nic_drv unambigously
Ref #2190
2019-05-16 12:52:59 +02:00
Stefan Kalkowski
7c1e3c84ba os: name gpio_drv unambigously (ref #2190) 2019-05-16 12:52:59 +02:00
Stefan Kalkowski
911f4ada0a os: make platform_drv package ready for ARM
* Make target binaries independent of board SPECS
* Name binaries of one architecture unambigously
* Extend include path to match board specifics
* Adapt run-scripts to use the right binary

Ref #2190
Ref #3180
2019-05-16 12:52:59 +02:00
Stefan Kalkowski
c55663b923 os: extend regulator session api package
Ref #2190
Ref #3180
2019-05-16 12:52:59 +02:00
Stefan Kalkowski
cac0f44194 os: extend platform_session api package
Ref #2190
Ref #3180
2019-05-16 12:52:59 +02:00
Christian Prochaska
5bc9082fb7 noux_terminal_fs.run: increase noux capability quota
Fixes #3309
2019-05-16 12:52:59 +02:00
Emery Hemingway
62a4d1de0e Remove Nim tests
Nim is now built independently of the Genode repository using an SDK and
Nimble.

Fix #3300
2019-05-16 12:52:59 +02:00
Ben Larson
5f0aa16184 platform_drv/x86: fix report for many PCI devices
When there are too many PCI devices, the Expanding_reporter regenerates
the report. However, this doesn't reset the BDF counter used to iterate
over the devices. This results in starting the new report after the PCI
device that triggered the report buffer overflow. This commit fixes the
issue by putting the BDF counter initialization inside the lambda
function used to generate the report.

Fixes #3317
2019-05-16 12:52:59 +02:00
Christian Helmuth
ba51800b31 depot: update recipe hashes 2019-05-06 16:15:27 +02:00
Stefan Kalkowski
b495799d31 sel4: change ELF loader link address on imx7d
Fix #3311
2019-05-06 16:15:27 +02:00
Alexander Boettcher
c0a00019c0 foc/sel4: place vcpu thread on same cpu as ep
Issue #3111
2019-05-06 16:15:27 +02:00
Alexander Boettcher
85d98195d5 top: show priority and quota
Issue #3192
2019-05-06 16:15:27 +02:00
Emery Hemingway
3e848dff10 solo5: update bindings
Update the Solo5 upstream to accomadate changes to the Block session and
stack protection support in the base library.

Ref #3275
Ref #3283
2019-05-06 16:15:27 +02:00
Stefan Kalkowski
b85071174a base: wait a bit at the end of the smp test
Fix #3306
2019-05-06 16:15:27 +02:00
Stefan Kalkowski
918b9a9fa4 ieee754: disable test for muen (fix #3305) 2019-05-06 16:15:26 +02:00
Stefan Kalkowski
089cb0f536 foc: change core link address for imx7d_sabre
Fix #3298
2019-05-06 16:15:26 +02:00
Stefan Kalkowski
f42c21f16b platform_info: add kernel information (fix #3295) 2019-05-06 16:15:26 +02:00
Norman Feske
c38c80fd43 menu_view: midway re-targeting of geometry motion
This patch fixes the corner case where an animated geometry changes its
destination mid-way while an animation is already in progress. The
'_trigger_animated_geometry' method used to back out early in this case,
which was intended as an optimization.

Fixes #3296
2019-05-06 16:15:26 +02:00
Norman Feske
3f8dfa346c sculpt_manager: remove double name attributes
The 'name' attribute was generated by both the call of 'gen_named_node'
and 'Hoverable_item::gen_button_attr'. Use only the former.
2019-05-06 16:15:26 +02:00
Alexander Boettcher
05fa063068 vm_session: support to trace vCPU
Issue #3111
2019-05-06 16:15:26 +02:00
Christian Prochaska
dca144f2ee noux: fix noux_gdb run script
Fixes #3287
2019-05-06 16:15:26 +02:00
Christian Prochaska
4672fdb9f0 gdb_monitor.run: remove broken stderr redirection
Fixes #3290
2019-05-06 16:15:26 +02:00
Stefan Kalkowski
d6332f1767 zynq: make nic driver independent of hw kernel
Use uncached ram dataspace for RX and TX communication buffers
instead of cache maintainance functions that are not part of the
Genode API.

Fix #3291
2019-05-06 16:15:26 +02:00
Stefan Kalkowski
c767f6ccf1 os: explicit cache policy in Nic::Session_component
To enable the use of uncached DMA buffers as RX and TX communication
buffers in between driver (service) and client, introduce a cache
attribute in the constructor of Nic::Session_component

Ref #3291
2019-05-06 16:15:26 +02:00
Martin Stein
0b9916cae2 Timer::Connection: simplify curr_time
With the new fact that plain time values are always 64 bit unsigned, the
timestamp type is never bigger than the plain time type. Therefore, a code path
in the curr_time interpolation that treated this condition is not neccessary
anymore.

Ref #3208
2019-05-06 16:15:26 +02:00
Martin Stein
181c78d482 timeout: use uint64_t for all plain time values
This enforces the use of unsigned 64-bit values for time in the duration type,
the timeout framework, the timer session, the userland timer-drivers, and the
alarm framework on all platforms. The commit also adapts the code that uses
these tools accross all basic repositories (base, base-*, os. gems, libports,
ports, dde_*) to use unsigned 64-bit values for time as well as far as this
does not imply profound modifications.

Fixes #3208
2019-05-06 16:15:26 +02:00
Stefan Kalkowski
e072ee480b depot: add recipe for base-hw-imx7d_sabre
Fix #3293
2019-05-06 16:15:26 +02:00
Stefan Kalkowski
eb933af40a depot: add recipe for base-foc-imx7d_sabre
Fix #3293
2019-05-06 16:15:26 +02:00
Stefan Kalkowski
6d0a271308 depot: add recipe for base-sel4-imx7d_sabre
Fix #3293
2019-05-06 16:15:26 +02:00
Stefan Kalkowski
4bcd9169c0 sel4: add timer for imx7d_sabre
Fix #3292
2019-05-06 16:15:26 +02:00
Stefan Kalkowski
95b9e0a0e2 sel4: fix configuration for imx7d sabre
Ref #3292
2019-05-06 16:15:26 +02:00
Alexander Boettcher
cc64c43758 vm_session: adjustments to work with seoul vmm
for foc, nova, sel4

Issue #3111
2019-05-06 16:15:26 +02:00
Alexander Boettcher
8950de5a89 base: support whole addressable range in allocator
Issue #3111
2019-05-06 16:15:26 +02:00
Alexander Boettcher
8840ca96a9 seoul: use vm_session interface
and remove any dependency on the NOVA kernel interface

Issue #3111
2019-05-06 16:15:26 +02:00
Alexander Boettcher
35d46dca72 lib/launchpad: add VM session forwarding support
Issue #3111
2019-05-06 16:15:25 +02:00
Alexander Boettcher
393643515c base: extend attach of vm_session
by offset, size, writeable and executable parameter

Issue #3111
2019-05-06 16:15:25 +02:00
Norman Feske
17fda73ca1 block_tester: update to new block-client API
- Added 'io_buffer' attribute, default is 4M
- Added 'batch' attribute, specifying the number of jobs used
  in parallel, default is 1 (sequential)
- Removed 'synchronous' attribute (use batch of 1 instead)
- Added 'copy' attribute (default "yes")
- Print number of signals ("triggered")

Issue #3283
2019-05-06 16:15:25 +02:00
Norman Feske
784206c85c block_session: new client-side API
This patch equips the 'Block::Connection' with a framework API for the
implementation of robust block-session clients that perform block I/O in
an asynchronous fashion.

An application-defined 'JOB' type, inherited from 'Connection::Job',
encapsulates the application's context information associated with a
block operation.

The lifecycle of the jobs is implemented by the 'Connection' and driven
by the application's invokation of 'Connection::update_jobs'. The
'update_jobs' mechanism takes three hook functions as arguments, which
implement the applications-defined policy for producing and consuming
data, and for the completion of jobs.

Issue #3283
2019-05-06 16:15:25 +02:00
Norman Feske
976f67eee6 os: make 'Block::Operation' printable
Issue #3283
2019-05-06 16:15:25 +02:00
Norman Feske
e5f27b44b5 block_session: turn 'Connection' into template
As a preparatory step for introducing the new block-client API, we have
to turn the 'Block::Connection' into a class template. The template
argument will be used to tie an application-defined job type to the
block connection.

Issue #3283
2019-05-06 16:15:25 +02:00
Norman Feske
6c0dd9fe3b block_session: use types from block/request.h
Issue #3283
2019-05-06 16:15:25 +02:00
Stefan Kalkowski
7a45867841 vmm_arm: support for i.MX7 Dual SABRE board
Fix #3285
2019-05-06 16:15:25 +02:00
Stefan Kalkowski
0e94d7410d noux_tool_chain_auto: enable imx6 and imx7 boards
Fix #3288
2019-05-06 16:15:25 +02:00
Stefan Kalkowski
f074954d3d hw: use eret in hyp mode to switch mode
Instead of using `cps` instruction, use an exception return
instruction to switch from `hyp` mode to `svc` mode.
Otherwise it causes unpredicted behaviour on ARM.

Fix #3284
2019-05-06 16:15:25 +02:00
Norman Feske
c433f87000 os: batching of packet-stream source operations
This patch adds support for manually triggering the wakeup of the packet
sink by the source. This way, a packet source becomes able to marshal
batches of submissions or unmarshal batches of acknowledgements before
yielding the control over to the sink.

Issue #3283
2019-05-06 16:15:25 +02:00
Norman Feske
ea6b1c255e base: add const version of 'Fifo::Element::object' 2019-05-06 16:15:25 +02:00
Alexander Boettcher
35cf804471 base: free up all blocks on avl destruction
Issue #3111

remove_range may deny to the job on memory pressure or insane ranges,
which ends up in an endless loop when the Avl allocator is in destruction.

Since the Avl gets destructed, solely the memory free up is of importance,
not the correct range adjustments during remove_range.
2019-05-06 16:15:25 +02:00
Alexander Boettcher
526554741f vm_session: evaluate priority (nova)
Issue #3111
2019-05-06 16:15:25 +02:00
Alexander Boettcher
d2229ab381 vm_session: evaluate priority
Issue #3111
2019-05-06 16:15:25 +02:00
Alexander Boettcher
d459432c45 init: scale priority of vm_session
Issue #3111
2019-05-06 16:15:25 +02:00
Alexander Boettcher
450c8dc149 vm_session: track dataspaces used by attach
Track the dataspaces used by attach and add handling of flushing VM space
when dataspace gets destroyed (not triggered via the vm_session interface).

Issue #3111
2019-05-06 16:15:25 +02:00
Alexander Boettcher
169c51d50d base: remove error message in slab block
Issue #3111
2019-05-06 16:15:25 +02:00
Alexander Boettcher
d1f37e66eb base: fix _sum_in_range in avl structure
Handles corner case when addr + size becomes exactly 0. Before the commit
the function returned that sum is not part of the range, which is wrong.

Issue #3111
2019-05-06 16:15:24 +02:00
Alexander Boettcher
812149ed29 core: add Region_map_detach interface
Issue #3111
2019-05-06 16:15:24 +02:00
Norman Feske
593e971121 block_session: SYNC and TRIM as async operations
This patch removes the blocking Block::Session::sync RPC function and
adds the asynchronous operations SYNC and TRIM to the block session's
packet-stream interface.

Even though the patch adjusts all block components to the interface
change, the components keep the former blocking handling of sync
internally for now because of the design of the 'Block::Driver'
interface. This old interface is not worth changing. We should instead
migrate the block servers step by step to the new
'Block::Request_stream' API.

Fixes #3274
2019-05-06 16:15:24 +02:00
Norman Feske
e058adc4fe block_session: add client-defined request tag
The new request tag allows a block-session client to uniquely correlate
acknowledgements with outstanding requests. Until now, this was possible
for read and write operations by taking the value of the request's
packet-stream offset. However, SYNC and TRIM requests do not carry any
packet-stream payload and thereby lack meaningful offset values. By
introducing the notion of a 'tag', we can support multiple outstanding
requests of any type and don't need to overload the meaning of the
'offset' value.

Issue #3274
2019-05-06 16:15:24 +02:00
Norman Feske
a39474a245 block-request stream: split Operation from Request
This patch splits the 'Request' definition into smaller types that are
suitable for the client-side API too.

The new 'Operation' type comprises the block operation's type (opcode)
and the operation's arguments (block number, block count).
The former 'Request::operation_defined' is now 'Operation::valid'.
The 'Request' aggregates an 'Operation', which changes its object
layout.

Note that this commit relaxes the bit-precise definition of 'Request' to
facilitate the use of 'unsigned long' where appropriate, in particular
for the request tag (which should correspond to an 'Id_space::Id'). The
originally bit-precise definition was pursued to allow the sharing of
the 'Request' type between SPARK and C++ code. However, it turns out
that defining a native type in each language and a (set of) converting
constructors is a more natural approach.

Issue #3283
2019-05-06 16:15:24 +02:00
Christian Prochaska
ed246d152b tool_chain: build in <genode-dir>/build/tool_chain-<version>
Fixes #2608
2019-05-06 16:15:24 +02:00
Stefan Kalkowski
7f965dad29 vmm_arm: do not use uart driver in automated test
Fix #3278
2019-05-06 16:15:24 +02:00
Stefan Kalkowski
0a470e66f2 vmm_arm: uart device model needs to take all chars
When receiving a terminal signal, the uart device model has to
take all characters out of the stream. Otherwise, characters
might never arrive at the VM. This was not recognized before,
because it was used with a quite slow UART only, which obviously
never achieved to send more characters at once.

Ref #3278
2019-05-06 16:15:24 +02:00
Stefan Kalkowski
94881e757a test-terminal_expect_send: expect-like helper tool
A small terminal-client tool, which expects a specific line(-start),
and then sends a specified line to the other side. Optionally,
it prints all received lines to its LOG service.

Ref #3278
2019-05-06 16:15:24 +02:00
Alexander Boettcher
26796c8f7a nova: update kernel branch
- sorting of initializer by Christian Prochaska - issue #3253
- leak of FPU register state reported by Julian Stecklina - thanks !
- fix page table synchronization bug - by Julian Stecklina
- add a second dynamic buddy if the memory requirements could not be fulfilled
  by the first dynamic buddy
- disable vtlb peek if EPT/NPT is enabled
2019-05-06 16:15:16 +02:00
Norman Feske
51f51c18af block/request_stream: rename wakeup_client
This patch renames 'wakeup_client' to 'wakeup_client_if_needed' to
clarify that the method triggers signals only when needed, not on every
call.

The name 'wakeup_client' is prone to misguide users to call the function
conditionally as an optimization, thereby complicating the code, but to
no effect.

Fixes #3279
2019-05-03 13:53:12 +02:00
Norman Feske
34fd5f626a test/block_request_stream: private Request_stream
Avoid public inheritance to make the code simpler to understand.

Issue #3279
2019-05-03 13:53:12 +02:00
Norman Feske
bbe3ee8dc5 block_session: server-defined payload alignment
This patch replaces the formerly fixed 2 KiB data alignment within the
packet-stream buffer by a server-defined alignment. This has two
benefits.

First, when using block servers that provide small block sizes like 512
bytes, we avoid fragmenting the packet-stream buffer, which occurs when
aligning 512-byte requests at 2 KiB boundaries. This reduces meta data
costs for the packet-stream allocator and also allows fitting more
requests into the buffer.

Second, block drivers with alignment constraints dictated by the
hardware can now pass those constraints to the client, thereby easing
the use of zero-copy DMA directly into the packet stream.

The alignment is determined by the Block::Session_client at construction
time and applied by the Block::Session_client::alloc_packet method.
Block-session clients should always use this method, not the 'alloc_packet'
method of the packet stream (tx source) directly. The latter merely
applies a default alignment of 2 KiB.

At the server side, the alignment is automatically checked by
block/component.h (old API) and block/request_stream.h (new API).

Issue #3274
2019-05-03 13:53:12 +02:00
Norman Feske
2208220c12 block session: remove Block::Session::Operations
This patch modernizes the 'Block::Session::info' interface. Instead of
using out parameters, the 'init' RPC function returns a compound 'Info'
object now. The rather complicated 'Operations' struct is replaced by
a 'writeable' attribute in the 'Info' object.

Fixes #3275
2019-05-03 13:53:12 +02:00
Norman Feske
10c567daee base: add 'aligned' function to util/misc_math.h
This function simplifies the sanity checking of values that are expected
to be aligned, e.g., data offsets within packet streams.
2019-05-03 13:31:39 +02:00
Christian Helmuth
6ea1179145 depot: update recipe hashes 2019-04-09 12:30:35 +02:00
Christian Helmuth
71a8dcca08 tool/depot: use nullglob on stale archive removal
nullglob is needed to get an empty shell glob in case no matching binary
archive (path) exists. Otherwise, the original glob string including the
* is returned and used in the for loop.
2019-04-09 12:30:35 +02:00
Stefan Kalkowski
a147bdf406 hw: silent warning about unknown signal context
Triggering of an invalidated signal seems to be no real exception,
but something that occurs regularily. Therefore, the kernel warning
is of no use to developers anymore.

Ref #3277
2019-04-09 12:30:35 +02:00
Stefan Kalkowski
0ca199f89a hw: replace lock-safe log variants in kernel
As far as possible remove usage of warning/error/log in the kernel,
otherwise the kernel context might try to take a lock hold by a core
thread, which results in a syscall to block.

Fix #3277
2019-04-09 12:30:35 +02:00
Norman Feske
9e238d624e extract: discharge dependency from timer session
This patch removes the reliance of the extract tool from the libc's
behavior regarding the access of time and timing.

The extract tool is not expected to need time. However, unfortunately,
libarchive calls the 'time' function unconditionally. By adding a
dummy for 'time', we avoid bothering the libc, which would otherwise
need to obtain a time source.

Issue #3204
2019-04-09 12:30:35 +02:00
Norman Feske
6d11591d83 test-spark: rename number_of_bits -> object_size
In the original version, I used 'number_of_bits' because Ada's 'Size
returns the size in bits, not bytes. But the values (for objects) are
always a multiple of 8. On the C++ side, performing size checks at the
granularity of bits is just awkward. The term 'object size' is more
natural.
2019-04-09 12:30:35 +02:00
Sebastian Sumpf
5937492e93 base-foc: map debug cap through the correct index
* necessary for enabling the kernel debugging facilities on base-foc
  (outstring, fiasco_tbuf_log_3val and friends)
* disabled by default

related to issue #3260
2019-04-09 12:30:35 +02:00
Norman Feske
ec70081258 test-ldso: refine log pattern
By adding a wildcard at the beginning of (expected) error messages, the
test.run tool becomes able to match the lines (ignoring the characters
of the color escape sequence).
2019-04-09 12:30:35 +02:00
Christian Helmuth
9948a77558 spark: provide rcheck symbols in ABI 2019-04-09 12:30:35 +02:00
Norman Feske
724761565d libsparkcrypto: don't override CUSTOM_ADA_OPT
CUSTOM_ADA_OPT must not be defined outside <build-dir>/etc/tools.conf
2019-04-09 12:30:35 +02:00
Martin Stein
9d236e8e03 block/request: fixed enum values 2019-04-09 12:30:35 +02:00
Martin Stein
a9851aca55 block/request: add member 'tag'
Issue #3274
2019-04-09 12:30:35 +02:00
Norman Feske
a2743dcaeb Library for the AES-CBC en/decryption of 4K blocks
The 'aes_cbc_4k' library is simple wrapper around libsparkcrypto to
serve as a backend for storage encryption. It operates on data chunks of
4 KiB and uses AES-CBC while incorporating the block number and the
private key as salt values.
2019-04-09 12:30:35 +02:00
Pirmin Duss
8b4e2a21e4 e2fsprogs: disarm the mount-point check
Discovered while creating an ext2 file system on an sd_card (no
partitions, imx6), which failed with an error message that stated the
device is in use. Genode's libc/posix layer has no notion of mount
points.

Fixes #3271
2019-04-09 12:30:35 +02:00
Pirmin Duss
642c2ab4bc sd_card_drv: increase multiblock transfer timeout
Disconnecting a client and connecting an other to the sd_card_drv
on imx6 results in a "Completion host signal timed out" error in
the newly connected client.

Fixes #3272
2019-04-09 12:30:35 +02:00
Alexander Boettcher
93ba870b2d top: show execution times per SC and per EC
Issue #3192
2019-04-09 12:30:35 +02:00
Alexander Boettcher
36fac8e22b run/test: support TRACE service
Issue #3192
2019-04-09 12:30:35 +02:00
Alexander Boettcher
ae16edf1d6 trace: support more facets of execution time
- execution time per thread context
- execution time per scheduling context
- quantum and priority

Issue #3192
2019-04-09 12:30:34 +02:00
Emery Hemingway
66f49e6c42 VFS lwIP: support opening a handle on the root directory
The "nameserver" file cannot be opened through a VFS File_system client
if the plugin does not support opening the parent directory of
"/nameserver", which would be "/".

Ref #3269
2019-04-09 12:30:34 +02:00
Emery Hemingway
a635873568 VFS: Replace global response handlers with local handlers
Replace the I/O response handler that is passed to the VFS at
construction with an object that is dynamically attached to handles.
This object shall also accept read-ready notifications, and plugins are
encouraged to keep handles awaiting ready-ready notifications separate
from handles that await I/O progress.

Replace the use of handle lists in plugins with handle queues, this
makes the code easier to understand and the ordering of notifications to
the application more explicit.

These changes replace the use of the Post_signal_hook from all VFS
plugins, applications must assume that read-ready and I/O notifications
occur during I/O signal dispatch and use an Io_progress_handler at its
entrypoints to defer response until after signal dispatching.

Fix #3257
2019-04-09 12:30:34 +02:00
Emery Hemingway
e2ff776b35 Print error locations in test-libc_connect
Ref #3257
2019-04-09 12:30:34 +02:00
Alexander Boettcher
356526d610 foc: increase USER_BASE_CAP
due to THREAD_AREA_SLOT increase by

foc/x86: implement vm_session interface

Add additional static assertion check to detect misconfiguration earlier.
2019-04-09 12:30:34 +02:00
Josef Söntgen
38a10c92d3 pthread: initialize static rwlocks/conds
Make sure that the rwlock is allocated before a lock operation is
performed. This case occurs if a static rwlock was create by using
PTHREAD_RWLOCK_INITIALIZER. Same goes for PTHREAD_CONDS_INITIALIZER.

Fixes #3262.
2019-04-09 12:30:34 +02:00
Josef Söntgen
3c8714ed5a dde_bsd: make HDMI/DP HDA check stricter
Since QEMU might put the audio device at 00:03.0, also check if the
vendor is Intel. Hopefully we do not render HDA on real machines
useless with this changes (so far I have not encountered one).

Fixes #3263.
2019-04-09 12:30:34 +02:00
Josef Söntgen
3362216b66 os: clear remaining samples in Audio packet
... instead of potentially producing out-of-bounds write in the source
buffer.

Fixes #3264.
2019-04-09 12:30:34 +02:00
Josef Söntgen
5ceba11982 os: make Audio_out content filler data arg const
Issue #3264.
2019-04-09 12:30:34 +02:00
Josef Söntgen
b9e12d7c23 libc: always set O_RDWR in fcntl on a socket
For better or worse we have no proper way of handling this right now
but contrib libraries, e.g. glib, use it to determine if they can use
the underlying fd.

Fxies #3265.
2019-04-09 12:30:34 +02:00
Josef Söntgen
5af0162b3f libc: fix storing TIOCGWINSZ result
Fixes #3266.
2019-04-09 12:30:34 +02:00
Norman Feske
a3411c8e96 run: add --depot-auto-update feature
If enabled, this option triggers the automated management of depot
content according to the needs of a run script.

Fixes #3270
2019-04-09 12:30:34 +02:00
Norman Feske
d027f12764 depot: update recipe hashes 2019-04-02 09:36:39 +02:00
Norman Feske
4b0b4928f5 tool/depot: rm binary archives if versions collide
This patch handles version collisions of binary archives. If a binary
archive for an (automatically) updated src-archive version already
exists in the depot, the extract tool removes the binary archive because
its existing content may stem from another src content (a version from a
different topic branch). This ensures that the new version is always
built, not skipped, when 'UPDATE_VERSIONS=1 REBUILD=' is specified.

Fixes #3267
2019-04-01 19:33:52 +02:00
Alexander Boettcher
ca32c11f4f nitpicker: send mode change on domain update
Fixes #3259
2019-04-01 19:33:52 +02:00
Christian Prochaska
38de57be76 tool_chain: make sudo command configurable
Fixes #3255
2019-04-01 19:33:52 +02:00
Norman Feske
2b8ea7845f smartcard.run: increase caps for usb_drv
This is needed for running the test on seL4.
2019-04-01 19:33:52 +02:00
Alexander Boettcher
483de40c96 base: remove message in sliced_heap.alloc()
Issue #3111
2019-04-01 19:33:52 +02:00
Norman Feske
a224d828f6 test.run: integrate content from raw archives
This patch enables the test.run tool to execute the test-init package.

Issue #3256
2019-04-01 19:33:52 +02:00
Alexander Boettcher
ef130a3bf9 sel4/x86: implement vm_session interface
Issue #3111

- enable vt-x in kernel configuration

Kernel patches:

- add unrestricted guest support
- avoid kernel boot failure when vt-x is not available
- avoid nullpointer in kernel when vcpu is not fully setup
- avoid vcpu scheduling bug which causes starvation on same/below prio level
- save efer register correctly from guest
2019-04-01 19:33:52 +02:00
Alexander Boettcher
b75307b070 foc/x86: implement vm_session interface
Issue #3111
2019-04-01 19:33:51 +02:00
Alexander Boettcher
3a1bbfad28 nova: implement vm_session interface
Issue #3111
2019-04-01 19:33:51 +02:00
Alexander Boettcher
ae31b761f4 hw: move vmm.run to vmm_arm.run
Issue #3111
2019-04-01 19:33:51 +02:00
Alexander Boettcher
f927684eb8 os: add vmm_x86 interface test
Issue #3111
2019-04-01 19:33:51 +02:00
Alexander Boettcher
5fa91a1bcc base: add x86 vm_state
Issue #3111
2019-04-01 19:33:51 +02:00
Norman Feske
aeb7e7cd7c sculpt manager: prevent double destruction
The '_currently_constructed' pointer caches the information about which
'Launched_child' is currently configured in the menu. When discarding
the runtime (e.g., when un-using a file system) at this point, this
cached pointer was not invalidated while all 'Launched_child' objects
would be freed (including the currently constructed one). On the next
attempt to construct a new child, the sculpt manager attempted to
destruct the 'Launched_child' referred by the (now outdated)
'_currently_constructed' again.

Fixes #3240
2019-04-01 19:33:51 +02:00
Stefan Kalkowski
935abb55b7 hw: move src/lib/hw header to src/include/hw
* Remove bad style of using `src/lib` as include path

Fix #3244
2019-04-01 19:33:51 +02:00
Alexander Boettcher
00953e39f4 vbox: allocate REM memory dense
Fixes #2116
2019-04-01 19:33:50 +02:00
Alexander Boettcher
3b36673e03 seoul: use nitpicker session
Issue #3196
2019-04-01 19:33:50 +02:00
Alexander Boettcher
3b36542212 vbox5: use nitpicker session
Issue #3196
2019-04-01 19:33:50 +02:00
Josef Söntgen
af97a581e3 bsd_audio_drv: fix runtime for Sculpt CE
Fixes #3250.
2019-04-01 19:33:49 +02:00
Stefan Kalkowski
baf815d099 hw: add support for i.MX7 Dual SABRE board
Fix #3251
2019-04-01 19:33:49 +02:00
Stefan Kalkowski
8f28f884ee hw: name vm_state header explicitely
Ref #3251
2019-04-01 19:33:49 +02:00
Stefan Kalkowski
4c492a3be7 imx7d_sabre: add board for sel4 and foc
Ref #3251
2019-04-01 19:33:49 +02:00
Stefan Kalkowski
3d727a403f sel4: update tools to currently used version 9.0.x
Until now, Genode referenced a fork of the outdated elfloader-tool
to enable bootstrapping of sel4 on ARM platforms. Because the
elfloader is inherently dependent on the used platforms newer
ARM versions supported by the kernel could not be loaded by the
outdated elfloader. This commit uses a fresh fork of the nowadays
used sel4_tools repository.

Ref #3251
2019-04-01 19:33:49 +02:00
Alexander Boettcher
c19c5ed0a4 wm: fix destroy with invalid handle
Issue #3232
2019-04-01 19:33:49 +02:00
Roman Iten
1caa2ff3cb prepare_port: fix race condition in safety rule
The safe guard Git repository in $(CONTRIB_DIR) may only be initialized
once, regardless of the number of ports to be prepared.

Issue #3235
2019-04-01 19:33:49 +02:00
Norman Feske
ed33cf08c7 test-fs_tool: make output deterministic
Issue #3238
2019-04-01 19:33:48 +02:00
Norman Feske
a67b23eb2d test.run: handle '*' wildcards 2019-04-01 19:33:48 +02:00
Norman Feske
01cff3ce84 sculpt: inform user about incomplete pkg install
This commit handles the corner case where a package could be installed
successfully but the package's runtime definition is inconsistent with
the content delivered by the package's dependencies, i.e., the <content>
of the runtime file lists ROM modules that do not exist.

With this patch, the '+' menu shows the message "installed but
incomplete" whenever a package is in such a state.

Issue #3241
2019-04-01 19:33:48 +02:00
Stefan Kalkowski
d6376f8188 rustc: select ARM target correctly (fix #3087) 2019-04-01 19:33:48 +02:00
Christian Helmuth
f0a3377247 Remove obsolete symbols from symbols/ld ABI 2019-04-01 19:33:48 +02:00
Christian Helmuth
9debc0fa4b Mention sel4 kernel as option for imx6q_sabrelite 2019-04-01 19:33:48 +02:00
Christian Helmuth
37a93f53c4 Provide Genode::cache_coherent() consistently
It got lost on base-foc and also was not put into Genode namespace in
the default implementation.
2019-04-01 19:33:48 +02:00
Alexander Boettcher
c3fd572a52 init: add report/buffer attribute to xsd
Issue #3216
2019-04-01 19:33:48 +02:00
Martin Stein
bcc049ceeb nic_router: manipulate port-forwarding port
The new configuration attributes <tcp-forward to_port="123" /> and
<udp-forward to_port="123" /> enable manipulating the destination port of
port-forwarded packets.

Fixes #3237
2019-04-01 19:33:48 +02:00
Martin Stein
3a59f11708 nic_router/nic_bridge: free MAC addresses
Free a MAC address of a session as soon as the session gets destructed.
Adds also according tests to the autopilot list.

Fixes #2470
2019-04-01 19:33:48 +02:00
Alexander Boettcher
bafe3c3fc3 vbox5: check memory configuration stricter
The required memory of the VMM depends on the VM memory configuration (vbox)
and the available screen resolution. Check for insane configurations in the
beginning to avoid late surprises.

Issue #3216
2019-04-01 19:33:47 +02:00
Alexander Boettcher
ce1f245952 vbox5: free bitmap source during resize
Fixes #3216
2019-04-01 19:33:47 +02:00
Emery Hemingway
800b4e44b1 Reduce Vfs::Vfs_handle::Context to empty struct type
The "Vfs::Vfs_handle" type should not contain any public members that
can be initialized by the VFS internally and by the application, so
remove inheritance from the "Genode::list::Element" class. The VFS
plugins must instead use lists of "Vfs::Vfs_handle" sub-classes, the
lifetime of which are always managed by the plugin.

Ref #3036
2019-04-01 19:33:47 +02:00
Emery Hemingway
260fc30be3 lxip: consolidate lx timers and timeouts
Use a single timeout scheduler passed during lxip instantiation for
both timers and 'schedule_timeout' facilites rather than instantiate
two timer sessions and signal handlers. This reduces the library's
capability cost and initialization time.

Fix #2961
2019-04-01 19:33:47 +02:00
Stefan Kalkowski
3725e91603 hw: implement power-saving kernel lock for ARM smp
Thanks to former work of Martin Stein this commit finally incorporates a
non-spinning kernel lock on multi-core ARM platforms.

Fix #1313
2019-04-01 19:33:47 +02:00
Martin Stein
b04a70177b base & arm: simplify and optimize cmpxchg
The old inline assembly provided two output operands that were afterwards
combined for a return value. However, the second output operand isn't
necessary when using the "Acquiring a Lock" example-code of the ARM manual
"Barrier Litmus Tests and Cookbook". This saves two logical operations
per acquisition try. Additionally better documentation is now provided.

Fixes #1292
2019-04-01 19:33:47 +02:00
Stefan Kalkowski
e9b3569f44 hw: remove overall cache maintainance from core
This functionality is only needed in bootstrap now that kernel and
userland share the same address-space.

Fix #2699
2019-04-01 19:33:46 +02:00
Christian Helmuth
9bbc91bb52 Add missing newline to pipe test
Original patch by Ben Larson <hungryninja101@gmail.com>.

Fixes #3055
2019-04-01 19:33:46 +02:00
Emery Hemingway
5efa6d5273 Stack smashing test
A test to check if -fstack-protector can be enabled and is effective.

Ref #3066
2019-04-01 19:33:46 +02:00
Emery Hemingway
6819c43a05 Add stack protector storage to base library
This patch adds the items necessary for building Genode components with
stack protection enabled, but it is not initialized at runtime. They are
provided at the moment as a convenience and do not implement a security
feature.

Fix #3066
2019-04-01 19:33:46 +02:00
Tomasz Gajewski
35c17ced72 Trivial doc fix for Register_set_plain_access::read
Fix #3229
2019-04-01 19:33:46 +02:00
Sebastian Sumpf
1705aab290 seoul: PS2 mouse wheel support
fixes #3234
2019-04-01 19:33:46 +02:00
Christian Prochaska
9f50b8897a Update Arora default bookmarks
Fixes #3198
2019-04-01 19:33:46 +02:00
Pirmin Duss
1c746df82c fetchurl: update README
Fix the configuration example in the README.

Fix #3213
2019-04-01 19:33:46 +02:00
Pirmin Duss
8456ffa231 bomb: prevent Timer-session creation errors
Fix #3212
2019-04-01 19:33:46 +02:00
Christian Helmuth
ebe71a12ed depot: update recipe hashes 2019-03-19 11:12:36 +01:00
Norman Feske
0872406e3c News item for Sculpt CE 2019-03-19 11:00:01 +01:00
Norman Feske
cffe847778 Update documentation for Sculpt CE 2019-03-19 11:00:01 +01:00
Norman Feske
4353c9e0f1 os: make Block::Request_stream::Ack noncopyable
This is a safeguard against accidentally taking the 'Ack' interface as a
value instead of a reference.

The 'Payload' interface should also not be copied (and potentially
stored) because it contains a pointer.
2019-03-19 11:00:01 +01:00
Norman Feske
6763ac29d9 depot_download_manager: fetchurl watchdog
If fetchurl the amount of bytes downloaded by fetchurl does not change
for 5 seconds, respawn it.
2019-03-19 11:00:01 +01:00
Norman Feske
4f99224255 ram_fs: increase max file size on 64 bit to 8 GiB
Fixes #2315
2019-03-18 15:57:00 +01:00
Norman Feske
c76f7c0c2a sculpt: allow graph to overlap the log 2019-03-18 15:56:59 +01:00
Norman Feske
806dc5de36 window layouter: improved maximize handling
It turns out that the commit "window layouter: allow floating apps to
resize" interplays badly with the interactive toggling of the maximize
state of windows. In contrast to the window geometry and stacking, which
is always updated through the rules-feedback mechanism, interactive
changes of the maximize state omitted this loop and instead took a local
shortcut. Because of this shortcut, the maximized geometry eventually
ended up as window size in the window's assign rule. So unmaximizing the
window failed to revert the geometry to its original state.

This patch removes this inconsistency. The maximize state adheres to the
official chain of commands through the rules mechanism now. The state is
now maintained internally without affecting the window's geometry and is
evaluated while generating the window layout only.

As a minor loosely related improvement, this patch prevents the
highlighting of resize handles for non-resizable windows.

Issue #3200
2019-03-18 15:56:59 +01:00
Alexander Boettcher
104def8e51 acpica: update to sculpt ce 2019-03-18 15:56:59 +01:00
Alexander Boettcher
dc4513f965 sculpt_manager: support system state ROM 2019-03-18 15:56:59 +01:00
Stefan Kalkowski
822a6e7c5f hw_riscv: strictly separate machine and syscall ids
Fix #3230
2019-03-18 15:56:59 +01:00
Norman Feske
91197804ac nitpicker: fix destroy with invalid handle
This patch reworks the 'Session_component::destroy' to cope become
robust against a client-provided invalid view handle. The code did not
consider that 'Handle_registry::has_handle' may throw.

Thanks to Alexander Boettcher for reporting and the initial fix.

Fixes #3232
2019-03-18 15:56:59 +01:00
Martin Stein
ff2516deb2 hw: fix documentation of Kernel::update_pd
Add note that the calling thread must not be destroyed while in the syscall.

Fixes #1253
2019-03-18 15:56:59 +01:00
Martin Stein
a74ae75680 run/nic_router foc x86_64: raise test timeout
Fixes #2908
2019-03-18 15:56:59 +01:00
Norman Feske
9438caa6a3 base: never throw in Xml_node::for_each_sub_node
Fixes #3231
2019-03-18 15:56:59 +01:00
Norman Feske
d75c5f6722 window layouter: fix glitch after window resize
This patch improves the transition from an interactive window geometry
change (dragging a window element) to the point where the resulting
new layout rules come into effect. During this short time, no resize
request must be issued because such a resize request would be based on
stale rules.

Fixes #3227
2019-03-18 15:56:59 +01:00
Norman Feske
baf46db287 Adjust wm -> focus label
This is a follow-up commit to "Update <provides> info in pkg runtimes",
which adapts the users of the wm pkg to the changed label of the "focus"
nitpicker session.
2019-03-18 15:56:59 +01:00
Christian Prochaska
67fd77d10a base: catch 'Ipc_error' in 'Expanding_parent_client::exit()'
If a component is being destroyed just before it calls `exit()` at its
parent, the `exit()` call causes an `Ipc_error` exception, which leads to
an `abort()` loop with repeated error messages, because `abort()` calls
`exit()` too. Catching the exception in `Expanding_parent_client::exit()`
avoids this problem.

Fixes #3228
2019-03-18 15:56:59 +01:00
Sebastian Sumpf
98e2f91036 qemu-usb: fix multiple device support
bus or device should be different (not both) when comparing a device to
already present devices. Because of this the second USB device was
marked as existent when the bus matched or the bus did not but the
device number.
2019-03-18 15:56:59 +01:00
Sebastian Sumpf
326deb14fe sculpt: add global KEY_SCREEN for themed_wm
fixes switching windows by global key
2019-03-18 15:56:59 +01:00
Norman Feske
591e9457e6 window layouter: allow floating apps to resize
This patch gives applications the ability to control the size of their
window whenever the window is floating, not tiled or maximized. See the
comment in the code for the rationale.

Fixes #3200
2019-03-18 15:56:59 +01:00
Norman Feske
1f3f7282f3 depot_download: limit rate of update-state reports
The default rate of 100 ms keeps Sculpt too busy because the menu that
displays the percentage values is drawn completely on each update.
Limiting the rate to 1/4 seconds relieves the effect.
2019-03-18 15:56:59 +01:00
Norman Feske
1ead0ea3a7 sculpt: allow for removal of index files
By clicking on a yellow checkbox in the depot selection dialog, the
corresponding index files are removed. This way, index files can
be update by removing and downloading them again.

This patch also filters out sculpt-managed components from the graph to
avoid erratic graph-position changes while the '+' menu is open.

Fixes #3193
2019-03-18 15:56:59 +01:00
Norman Feske
f3d4ee4d4c init: always abandon child on version change
Without this patch, a version change of an already exited child would not
trigger the restart of the child because the version is evaluated as
late as the child configuration, but only if the child has not exited
yet.

This patch evaluates the version at the earlier stage where the identity
of the child (its name) is checked against the new configuration.

Fixes #3226
2019-03-18 15:56:58 +01:00
Josef Söntgen
8ccfe4361c part_block: properly indent code
Issue #3223.
2019-03-18 15:56:58 +01:00
Josef Söntgen
cb2ebd0bf7 part_block: fix handling of chained EBR's
Fixes #3223.
2019-03-18 15:56:58 +01:00
Josef Söntgen
1c2dabc6d7 test-part_block_mbr: update disk image
The disk image contains an extended partition table now that would
have been parsed incorrectly in the past. While there remove the unused
gpt BLOB (test-part_block_gpt has its own raw archive).

Issue #3223.
2019-03-18 15:56:58 +01:00
Norman Feske
cac3f3b24e gems: initial version of fs_tool
The fs_tool component performs file operations according to its
configuration. This initial version implements only the operation
<remove-file> as needed for Sculpt CE.

Issue #3222
Issue #3193
2019-03-18 15:56:58 +01:00
Norman Feske
73f79ed5b1 gems/vfs.h: add Directory::unlink
This is needed to accommodate the fs_tool component.

Issue #3222
2019-03-18 15:56:25 +01:00
Norman Feske
4264de05f9 sculpt: avoid duplicated diagnostic messages
Related to #3190
2019-03-18 15:56:25 +01:00
Norman Feske
6528f50bfc sculpt: NIC ready only with IP other than 0.0.0.0
This patch refines the criterion of when the networking is considered as
ready to use. Until now, any IP reported by the NIC router was taken as
an indicator for connectivity. But as the NIC router reports an IP
0.0.0.0/32 when no network cable is plugged at the uplink, the condition
was too loose.
2019-03-18 15:56:25 +01:00
Norman Feske
94e2a64f60 Sculpt: defer config dialog until pkg is complete
Fixes #3189
2019-03-18 15:56:25 +01:00
Stefan Kalkowski
330692350e hw: introduce non-blocking signal checking
* Introduces pending_signal syscall to check for new signals for the
  calling thread without blocking
* Implements pending_signal in the base-library specific for hw to use the
  new syscall

Fix #3217
2019-03-18 15:56:24 +01:00
Stefan Kalkowski
3e70b53165 vfs_lxip: fix return code in blocking accept case
Ref #3217
2019-03-18 15:56:24 +01:00
Norman Feske
00eb100114 sculpt: gracefully handle missing depot-user info
This patch improves the error handling of depot-download manager for the
case where a download is requested but the corresponding software
provider information is absent from the depot. Without this patch, the
update mechanism would get stuck in the failed depot-query step and
won't attempt to perform subsequent download jobs.

Fixes #3224
2019-03-18 15:56:24 +01:00
Norman Feske
41575ad60d sculpt: update menu when folding condition changed
The storage dialog is folded when activating the runtime view (e.g., by
clicking on the Genode Logo). This should happen immediately as response
of the mouse click.
2019-03-18 15:56:24 +01:00
Norman Feske
122c404883 menu view: cleanly separate update, layout phases
This patch improves the separation of the update and layout phases to
avoid superfluous geometry animations of its child widgets. Prior this
patch, 'Widget::geometry' was called in both phases, potentially
triggering geometry animations with intermediate values at the update
phase.

Related to issue #3221
2019-03-18 15:56:24 +01:00
Norman Feske
ba5de21db4 menu view: fade dependency changes
This patch applies fading when the visibility of dependencies changes.

Issue #3221
2019-03-18 15:56:24 +01:00
Norman Feske
b3219fc3a4 sculpt: fine-tune motion of graph positioning
By using 30 motion steps, the positioning of the graph window fits
better with the geometry animations of the graph nodes inside the
window.
2019-03-18 15:56:24 +01:00
Norman Feske
905da4b0cc menu_view: fade between button styles
The button widget already supported an animated transition between
hovered and unhovered states. This patch generalizes the mechanism to
allow animated transitions between arbitrary button states, including
style changes.

This way, the fade-out of non-TCB components in Sculpt CE happens not
abruptly but smooth.

Fixes #3221
2019-03-18 15:56:24 +01:00
Norman Feske
116bfab449 icon_painter.h: customizable pixel transfer
This patch makes the application of color/alpha from the icon's texture
to the target surface customizable by replacing the formerly built-in
'_transfer_pixel' function by calls to the new 'Pixel_rgba::transfer'
interface.

Issue #3221
2019-03-18 15:56:24 +01:00
Norman Feske
ebd9f36b0d os: Pixel_rgba::transfer interface
The new 'transfer' function interface defines how pixel/alpha values
sampled from texture are applied to a destination pixel, similar to the
role of a fragment shader in GPU-based rendering. The transfer function
can be customized by defining custom pixel types, which may be (but
don't need to be) derived from 'Pixel_rgba'.

Issue #3221
2019-03-18 15:56:24 +01:00
Norman Feske
b00e1f4e4b menu view: position widgets initially at (0, 0)
The default 'Rect' constructor constructs an invalid rectangle where the
p1 coordinates are lower than the p2 coordinates. In particular, p1 is
set to (1, 1). The 'Widget' implementation uses the points individually
as input into the 'Animated_rect' mechanism. This way, widgets end up
being positioned at (1, 1) initially and are moved to (0, 0) once the
first layout update is applied. By explicitly initializing the
'_geometry' to (0x0+0+0), we avoid this initial artifact.
2019-03-18 15:56:24 +01:00
Christian Prochaska
f4542b378c arora: update Nitpicker and shape report routes
Fixes #3219
2019-03-18 15:56:24 +01:00
Alexander Boettcher
0c6548fda0 sculpt: increase leitzentrale memory
to avoid hanging popup and warning:

[leitzentrale -> gui] Warning: popup assigned RAM (12M) exceeds available RAM (6596441)

Issue #3218
2019-03-18 15:56:24 +01:00
Norman Feske
669aed0ac0 sculpt: don't reset hover on click on '+' menu
When entering/leaving sub menus of Sculpt's '+' menu, some parts of the
menu sometimes remain unchanged, in particular the back button.
Originally, a click would reset the hovering on clicks in the
expectation that any click would eventually result in a completely new
situation where the old hovering information does not make sense and
would only (potentially) confuse the menu. But this was apparently
overzealous. With the patch a once hovered back button stays hovered
even when actitivated and the back button of the upper-level menu
happens to stay under the current pointer position.

Issue #3209
2019-03-18 15:56:23 +01:00
Norman Feske
014e800e8a menu view: immediate hover update on dialog change
This patch improves the hover handling in situations where the dialog
changes under the pointer. Previously, hover changes were reported
as response to user input only, which failed to cover this case. This
became a problem with Sculpt CE's '+' menu, which changes on the fly
when entering/leaving sub menus.

The patch also cleanly separates the hover handling from the focus
handling. Originally, the hovering was reset when the menu view got
unfocused. In situations like Sculpt's '+' menu where the menu view
receives a transient focus only while clicked and gets unfocused on the
button-release event (aka clack), each clack would invalidate the hover
information until a new input event comes in.

Finally, the patch introduces the clear distinction between situations
where the entire dialog is hovered or not. Previously, this state was
somehow implicitly kept by issuing an invalid hover report whenever a
leave event was observed.

Issue #3209
2019-03-18 15:56:23 +01:00
Norman Feske
a61c5b6be3 wm: move virtual pointer pos on window movement
When a window is moved, the virtual pointer position must be updated,
taking the changed input coordinate into account. This patch propagates
such changes via absolute motion events to the client.

Without this patch, Sculpt CE's '+' menu wouldn't update the hovered
item correctly when entering/leaving sub menus (which happen to trigger
the repositioning of the menu on screen).

Issue #3209
2019-03-18 15:56:23 +01:00
Norman Feske
ac3509d308 News item about Genodians.org 2019-03-18 15:56:23 +01:00
Norman Feske
30505c7977 test-spark: add object-size assertions 2019-03-18 15:56:23 +01:00
Christian Prochaska
2a71c8fa82 pcsc-lite: read vendor id and product id from USB device
Fixes #3211
2019-03-18 15:56:23 +01:00
Stefan Kalkowski
4796f761b8 base: initialize Cpu_state consistently (Fix #1452) 2019-03-18 15:56:23 +01:00
Christian Helmuth
18546ea16d Use https URLs for qt5 downloads
The site download.qt.io seems to apply some mirror-via-HTTP-redirect
scheme which, unfortunately, seems broken (and therefore annoyingly
slow) for non-SSL-secured URLs.
2019-03-18 15:56:23 +01:00
Josef Söntgen
0ef784b8fd mixer: only provide Audio_out in pkg
The mixer only supports Audio_out.

Fixes #3210.
2019-03-18 15:56:23 +01:00
Stefan Kalkowski
80fa23da5e hw: increase timing accuracy of kernel (fix #3081)
* Introduce 64-bit tick counter
* Let the timer always count when possible, also if it already fired
* Simplify the kernel syscall API to have one current time call,
  which returns the elapsed microseconds since boot
2019-03-18 15:56:23 +01:00
Stefan Kalkowski
2ecf1d887b hw: schedule on demand (Fix #3157) 2019-03-18 15:56:23 +01:00
Alexander Senier
a58fcc3b1e Update runtime ALIs 2019-03-18 15:56:23 +01:00
Alexander Senier
4c8d787918 Port libsparkcrypto 2019-03-18 15:56:23 +01:00
Emery Hemingway
127e5a2726 Add more features and symbols to libcrypto
Fix #3203
2019-03-18 15:56:23 +01:00
Johannes Schlatow
7bd506b913 virtualbox: fix compiler error with newer iasl versions
I also added another sed command to suppress warnings that appear
because the include-guards contain dashes.

fixes #3147
2019-03-18 15:56:23 +01:00
Norman Feske
bd09783438 sculpt: dim non-TCB when selecting a component 2019-03-18 15:56:22 +01:00
Norman Feske
ef0a3f5be1 menu_view: hidden dependencies in <depgraph>
When specifying the attribute 'dep_visible="false"' for a primary
dependency or the attribute 'visible="false"' for a secondary
dependency, the dependency is used for the layout calculation but not
displayed in the graph.
2019-03-18 15:56:22 +01:00
Norman Feske
653f653c67 menu_view: style for unimportant frame and button 2019-03-18 15:56:22 +01:00
Norman Feske
ac37991b34 sculpt: minor graph improvements
- Omit showing routes to uninteresting ROMs obtained from the parent,
  i.e., the binaries requested by the sculpt-managed subsystems.
- Change the routes for the inspect subsystem such that the inspect-noux
  instance is anchored at the config node (critical!) and the nit_fb
  instance anchored at the used GUI.
2019-03-18 15:56:22 +01:00
Norman Feske
6ee7049736 sculpt: add whitespace around parent resources 2019-03-18 15:56:22 +01:00
Emery Hemingway
57fd4e9148 Add Io_progress_handler to Entrypoint interface
The "schedule_post_signal_hook" method of the Genode::Entrypoint class
is problematic because the signal hook can be scheduled and replaced
multiple times during the signal dispatch cycle. Add an alternative to
this method with "register_io_progress_handler" and the "Post_signal_
hook" class with "Io_progress_handler". The difference being an
"Io_progress_handler" may be registered once during the lifetime of an
entrypoint to prevent arbitrary libraries from replacing a pending hook.

The "register_io_progress_handler" remains as a deprecated API, and is
now invoked for every I/O signal received and only for I/O signals
rather than for any signal.

Ref #3132
2019-03-18 15:56:22 +01:00
Emery Hemingway
93fb79f357 Check for existing directories at Vfs::Dir_file_system
Return OPENDIR_ERR_NODE_ALREADY_EXISTS for existing directories.
Remove deprecated 'is_directory' method.

Fix #3083
2019-03-04 10:57:04 +01:00
Norman Feske
c41fbe9ea5 sculpt: don't mark in-construction pkgs as present
This patch excludes the current "Construction" from the list of
"present" components in the runtime. Without the patch, a missing "wm"
would go unmissing once when the routing dialog of a new wm instance
appears. Now an already present window layouter that had a broken route
would prematurely re-appear in the config, which should not happen
because the new wm does not exist yet.
2019-03-04 10:53:37 +01:00
Alexander Boettcher
1cc3472e1d dde_ipxe: enable Intel i211 network card
Fixes #3201
2019-03-04 09:20:24 +01:00
Norman Feske
00ac29e53d Sculpt: avoid superfluous vertical space w/o info
When a <pkg> node of an index lacks an 'info' attribute, omit the
corresponding fields in the pkg dialog to avoid blank vertical space.
2019-03-01 19:27:40 +01:00
Norman Feske
434783da4d Sculpt: replace '_' by whitespace in GUI
Fixes #3190
2019-03-01 19:27:23 +01:00
Norman Feske
71019eccbd doc: minor tweaks of release notes 19.02 2019-03-01 16:45:24 +01:00
Norman Feske
06d68e87ba sculpt: list all depot users in selection menu
Fixes #3188
2019-03-01 16:45:24 +01:00
Christian Helmuth
8c2235c9a7 depot: delete signature file if signing failed
In cases where the signing failed (maybe the passphrase for the key was
not available at this time), there remained an empty .sig file, which is
newer than the to-be-signed file and, therefore, prevents subsequent
signing processes.
2019-03-01 15:43:50 +01:00
Norman Feske
cd244c2077 sculpt: don't install any index by default
When buiding the sculpt image, the sculpt.run script used to integrate
the current version of the index of the 'depot_user' into the boot
image. At runtime, when the Sculpt partition is selected for "use" this
index - along with the 'pubkey' and 'download' files of the known
depot users - is written to the Sculpt partition.

This has the undesirable effect that a later version of the index
(published some time after the sculpt image was created) would always be
overwritten by the outdated index shipped with the boot image.

The built-in default index was actually a stop-gap solution needed
during the development of Sculpt CE, introduced when the downloading of
index files was not yet supported. Now, with the working download
mechanism, it is no longer needed. Hence, this patch removes the default
index from the sculpt image.
2019-03-01 14:06:22 +01:00
Alexander Boettcher
30ddae0f91 nova: evaluate second kernel buddy earlier
Fixes #3195
2019-02-28 16:37:53 +01:00
Alexander Boettcher
38d3577c10 pkg: limit vbox5-nova-sculpt runtime to 4G
Fixes #3197
2019-02-28 16:36:12 +01:00
Emery Hemingway
bffcffe072 Skip Solo5 timer test for auto-QEMU
Fix #3191
2019-02-28 15:38:01 +01:00
Christian Helmuth
18ce901746 version: 19.02 2019-02-28 14:19:59 +01:00
Norman Feske
4afab58739 News item for version 19.02 2019-02-28 13:56:15 +01:00
Norman Feske
ca7bc5913f Release notes for version 19.02 2019-02-28 13:56:14 +01:00
Christian Helmuth
36adbef3f9 depot: update recipe hashes 2019-02-28 11:34:45 +01:00
Norman Feske
d6030a16b3 sculpt: tweaks for the component graph
- Hide depot_rom and dynamic_depot_rom
- Reset selection when removing the selected component
2019-02-28 11:34:08 +01:00
Norman Feske
3840ea9537 sculpt: anchor nic_drv, wifi_drv to hardware node 2019-02-28 11:34:08 +01:00
Christian Prochaska
2c253edda9 wm: forward 'buffer_size' argument of shape report session
Fixes #3186
2019-02-28 11:34:08 +01:00
Alexander Boettcher
47730f9a6e init: avoid upgrade of resources on exited child
Fixes #3184
2019-02-28 11:34:08 +01:00
Christian Helmuth
a5d0f6a2af ada: fix ada-runtime-alis for current changes
Note, this also adapts the spark depot recipe to preserve source-file
time stamps.
2019-02-28 11:34:07 +01:00
Christian Helmuth
fb155b95c7 Clarify documentation of Block::Session::info()
Also cleanup some proscribed abbrevations.

Fixes #3185
2019-02-28 11:34:07 +01:00
Christian Helmuth
28c25f120e run: save [run_dir].config also on hw and linux
This was missing as boot_dir/hw and boot_dir/linux do not use
`proc build_core_image`.
2019-02-28 11:34:07 +01:00
Christian Helmuth
b06ec370d1 Use platform-specific NIC driver in lwip test
Follow-up to "zynq: restructure nic_drv spec structure"

Issue #3179
2019-02-28 11:34:07 +01:00
Sebastian Sumpf
2f7fa3b905 depot: pubkey and download for ssumpf 2019-02-28 11:34:07 +01:00
Christian Prochaska
23220a98b9 qt5: don't use 'HEADERS' variable in library makefiles
The 'HEADERS' variable is currently only supported for applications with
qmake project files.

Fixes #3183
2019-02-28 11:34:07 +01:00
Norman Feske
e679d55f67 Update <provides> info in pkg runtimes
This information is now used by Sculpt's '+' menu for the interactive
routing.
2019-02-28 11:34:07 +01:00
Norman Feske
7921834b1d sculpt: update default launchers
This commit removes most of the default launchers, which are now
superseded by the interactive component addition feature of the '+'
menu.

We keep the chroot components because we cannot easily create chroot
instances interactively yet.

The usb_devices_rom is still needed because its configuration is meant
to be edited at runtime.

It also adds a 'themed_wm' launcher to make the initial sculpt
experience easier. For knowledgeable users, the index contains all
ingredients needed to build a multi-component window manager manually.
2019-02-28 11:34:07 +01:00
Norman Feske
c0b93190d0 sculpt: browse depot index files in '+' menu
This commit turns the '+' menu into a tool for the following tasks:

- Selecting and downloading of depot index files
- Browsing of the hierarchical depot index files
- Installation of packages found in the index files
- Interactive routing configuration of a selected package
- Deployment of configured component
2019-02-28 11:34:07 +01:00
Norman Feske
b7f5aae64a sculpt: don't constrain '+' menu to avail space
Sculpt used to restrict the size of leitzentrale windows to the screen
area that is not obstructed by the menu and log. This is useful for the
runtime view and the inspect window. However, the menu should be allowed
to use the entire screen because it overlays the other content.

Before this patch, the menu wouldn't be displayed completely on small
resolutions (e.g., 1024x768 when using the VESA driver) because the log
at the bottom of the screen imposed the size constraint on the menu.
With the patch, the menu is able to overlay the log window.
2019-02-28 11:34:07 +01:00
Norman Feske
2163ce25f6 sculpt: show TCB dependencies of selection
This patch enhances the runtime view such that not only immediate
dependencies but also all transitive dependencies of the selected
component are displayed. This way, the graph nicely reveals the
trusted computing base of the selection.
2019-02-28 11:34:07 +01:00
Norman Feske
21968d35bb sculpt: display parent roles in graph 2019-02-28 11:34:07 +01:00
Norman Feske
d0e1ddb8c2 sculpt: cache runtime-config info for GUI
Instead of parsing the runtime's configuration each time when generating
the graph dialog (e.g., when changing the hover state), extract the
relevant information only on configuration changes.
2019-02-28 11:34:06 +01:00
Norman Feske
010caa6236 sculpt: omit the sculpt helpers from the graph
The runtime view, launcher query, and depot query increase the
complexity of the graph without providing a tangible value to the user.
This patch omits those components from the runtime view to make the
graph less confusing.
2019-02-28 11:34:06 +01:00
Norman Feske
e9f40e9d68 sculpt: let depot/public_rw depend on update state
By running those components only when needed, the graph stays simpler in
the normal state.
2019-02-28 11:34:06 +01:00
Norman Feske
1afec11dfc sculpt: append "..." to non-immediate buttons
Append "..." to button labels whenever the button does not perform an
immediate action but merely toggles user-interface elements. This
tells the user that the button can be pressed without risk.
2019-02-28 11:34:06 +01:00
Norman Feske
852c319399 sculpt: use radio button for APs and launchers 2019-02-28 11:34:06 +01:00
Norman Feske
6110e6561c sculpt: show message when network is needed
Whenever Sculpt needs to download depot content but no network
connectivity is provided, a message is displayed in the "Diagnostics"
part of menu.
2019-02-28 11:34:06 +01:00
Norman Feske
ac68073ffc depot_download: support downloading index files
With this commit, the 'installation' input of the depot-download
subsystem accepts <index> nodes in addition to <archive> nodes. Each
index node refers to one index file specified via the 'path' attribute.

This commit also improves the tracking of failure states. Once an
installation job failed (due to a download of verification error),
it won't get re-scheduled. In the past, such failure states were not kept
across subsequent import iterations, which could result in infinite
re-attempts when an installation contained archives from multiple users.
The the progress of the download process is now reflected by the
"progress" attribute on the download manager's state report, which
allows the final report to contain the list of installed/failed archives
along with the overall progress/completed state. The detection of the
latter is important for the sculpt manager for reattempting the
deployment of the completed packages.

The patch enhances the depot_download.run script to stress the new
abilities. In particular, the scenario downloads a mix of index files
(one present, one missing) and archives, from two different depot users
(genodelabs and nfeske).

Issue #3172
2019-02-28 11:34:06 +01:00
Norman Feske
1b518965cc depot/sculpt: support for index files
The input for the pkg index is located at gems/run/sculpt/index.

The sculpt.run script uses this input for generating the depot index
file at depot/<user>/index/<version>.

The tool/depot/publish tool support arguments of the form
<user>/index/<version> where <version> corresponds to the Sculpt
version.

Issue #3172
2019-02-28 11:34:06 +01:00
Norman Feske
0d5b8cb0fe sculpt: version 19.02 2019-02-28 11:34:06 +01:00
Norman Feske
de26d3c099 sculpt: show '+' button only when partition 'used'
This prevents the situation where the user has booted the system, has
not yet selected a storage target to "use" for Sculpt, yet clicks on the
'+' menu. Such clicks show no immediate response because Sculpt cannot
know where to deploy the selected package. But since the user is not
guided towards resolving this prerequisite, it's better to not present
the menu in the first place. The '+' appears as soon as a storage target
is selected for "use".
2019-02-28 11:34:06 +01:00
Norman Feske
db8b054fa4 extract: support the extraction of raw xz files
Issue #3172
2019-02-28 11:34:06 +01:00
Norman Feske
edef2df21b depot_query: scan depot for users 2019-02-28 11:34:06 +01:00
Norman Feske
c25fbc010d depot_query: support for querying index files
Issue #3172
2019-02-28 11:34:06 +01:00
Norman Feske
90709fc4d3 menu_view: remove "failed to construct" message
This error message may occur during the startup of a multi-component
application when the very first dialog is generated just after the menu
view is ready. It is not an error.
2019-02-28 11:34:06 +01:00
Norman Feske
74c31c60c6 menu_view: improved buffer alloc and view update
This patch improves the consistency of the view size with the dialog
size for situations where the dialog shrinks.
2019-02-28 11:34:06 +01:00
Norman Feske
cb163bfbe1 menu_view: prevent superfluous relinking 2019-02-28 11:34:06 +01:00
Norman Feske
40b986bcc4 menu_view: button and frame styles for sculpt
This commit adds the following styles:

button/enter    - for entering a sub menu
button/back     - for returning from a sub menu
button/radio    - for picking one item of a list
button/checkbox - for making a selection
frame/transient - for temporary GUI elements
2019-02-28 11:34:06 +01:00
Norman Feske
ca51692164 wm: remove "no focus model available" warning
This message is diagnostic, but also occurs in legitimate situations
such as the wm in Sculpt's Leitzentrale where the focus is managed
completely outside the wm.
2019-02-28 11:34:06 +01:00
Norman Feske
c51508a47c lx_fs: return host inode value for dir entries
With this patch, bash running in noux becomes able to list the content
of directories (via 'echo *') hosted in lx_fs.
2019-02-28 11:34:06 +01:00
Johannes Kliemann
fa5de776a6 ada: add arit64 to runtime 2019-02-28 11:34:06 +01:00
Johannes Kliemann
fd6047f5d8 ada: add Interfaces.C
extensively in auto-generated bindings
2019-02-28 11:34:05 +01:00
Alexander Senier
f30a82d599 ada: provide runtime symbols for elaboration code 2019-02-28 11:32:53 +01:00
Christian Helmuth
46a29532a9 depot: update recipe hashes 2019-02-26 14:47:02 +01:00
Johannes Schlatow
11d8f97845 zynq: restructure nic_drv spec structure
The zynq nic_drv also depends on hw, we therefore adapted the folder
structure for clarity. Also renamed the binary to 'zynq_nic_drv' to
prevent conflicts and to allow removing the cadence_gem spec.

Issue #3179
2019-02-26 14:47:02 +01:00
Johannes Schlatow
c1caeb7e70 zynq: improve cache handling in nic_drv
Clean and invalidate caches in nic_drv before/after triggering DMA.

Issue #3179
2019-02-26 14:47:02 +01:00
Norman Feske
1d0a1e7937 depot/extract: feed file names into version hash
Fixes #3178
2019-02-26 14:47:02 +01:00
Johannes Schlatow
d9043057a2 lx_fs: implement move()
Fixes #3176
2019-02-26 14:47:02 +01:00
Johannes Schlatow
65a662f5b3 lx_fs: close file on destruction
Fixes #3177
2019-02-26 14:47:02 +01:00
Emery Hemingway
d273129d9d Disambiguate noux-system config 2019-02-26 14:45:31 +01:00
Christian Prochaska
a85c47134b qt5: remove 'tablet' QEMU argument from run scripts
Fixes #3175
2019-02-26 14:45:31 +01:00
Stefan Kalkowski
2cf4e5a6de hw: fix regression of smp kernel initialization
In commit "hw: improve cross-cpu synchronization" the implicit safe
initialization of the global kernel lock gets unsafe.
It is a static object, which is protected by the cxx library regarding
its initialization. But our cxx library uses a Genode::semaphore in
the contention case of object construction, which implicitly leads
to kernel syscalls for blocking the corresponding thread. This behaviour
is unacceptable for the kernel code.
Therefore, this fix guards the initialization of the kernel code with
a simple static boolean value explicitely.

Ref #3042
Ref #3043
2019-02-26 14:45:31 +01:00
Stefan Kalkowski
1ff36965f4 sd_card_drv: support for Nitrogen6 SoloX 2019-02-26 14:45:31 +01:00
Stefan Kalkowski
55b0dff795 hw: add board support for Nitrogen6 SoloX 2019-02-26 14:45:31 +01:00
Stefan Kalkowski
7ffc480db8 hw: avoid code duplication for imx6 initialization
This is preliminary work to move the Wandboard to and add the
Nitrogen6 SX board to the world repository.

Ref #3168
2019-02-26 14:45:31 +01:00
Emery Hemingway
20f7f5b64f VFS Rump: print file-system usage stats at mount time
Fix #3174
2019-02-26 14:45:20 +01:00
Emery Hemingway
6c7356072d Catch session exceptions during VFS File_system stat
Fix #3173
2019-02-26 14:45:13 +01:00
Norman Feske
3de673a8ca dde_linux/usb: remove deprecated APIs on ARM
Issue #1987
2019-02-26 14:45:07 +01:00
Christian Helmuth
bce4fa9531 sel4: user virtual-memory size of 8 GiB on 64-bit 2019-02-26 14:45:07 +01:00
Norman Feske
5335563a4b tiled_wm.run: message about fd limit on Linux
Taken from leitzentrale.run
2019-02-26 14:45:07 +01:00
Christian Prochaska
dcdd3bff94 qt5_drivers.inc: don't call 'append_platform_drv_config'
'append_platform_drv_config' appends to the global 'config' variable,
which seems to cause problems with the order of appending when the
'config' variable does not contain the '<config>' start node yet.
'[platform_drv_config]' can be used instead to append to a local variable.

Fixes #3171
2019-02-26 14:45:07 +01:00
Christian Helmuth
2211d20c1d Increase CAP quota in wifi tests (sel4) 2019-02-26 14:45:07 +01:00
Norman Feske
d3d6b643f1 wm: shape report interception mechanism
This patch simplifies the propagation of pointer shapes from
window-manager clients to the pointer. The "shape" report is routed to
the wm server, which, in turn, reports it to the pointer. This way, the
pointer can easily correlate the label of the application's "shape"
report with the label of the application's Nitpicker session. The
formerly used manual rewriting of the "shape" label is not needed
anymore.

Since the wm server provides a "Report" service now, its <provides>
declaration must cover "Report" in addition to "Nitpicker" to avoid
runtime error messages. Vice versa, the wm is now expected to request
"shape" reports, which should be routed to the pointer (using the
'label_last' routing attribute).

Fixes #3165
2019-02-26 14:45:07 +01:00
Christian Helmuth
5fa0de95f6 Disable ping_nic_router test on linux
The test depends on working DHCP for the uplink currently.
2019-02-26 14:45:07 +01:00
Christian Helmuth
30b47eab37 Fix IP address matching in vbox share tests 2019-02-26 14:45:07 +01:00
Emery Hemingway
bebbc87c3a Replace static "genodelabs" depot user with "[depot_user]" call
Use "depot_user" TCL procedure may be used in run scripts for tests not
related to downloading specific packages.

Fix #3170
2019-02-26 14:44:31 +01:00
Emery Hemingway
024630d6ad Add Unicode to terminal_crosslink test
Ref #3148
2019-02-26 14:44:31 +01:00
Emery Hemingway
2fa7964a39 VFS lwIP: fix TCP pbuf unchaining
The lwIP VFS plugin uses lwIP pbuf chains to queue recieved TCP data and
must rechain them when the application dequeues data. Remove an
"pbuf_realloc" call which is not needed for updating pbuf metadata when
dequeuing the head of the chain.

Fix #3169
2019-02-26 14:44:31 +01:00
Norman Feske
8ca887a25c decorator pkgs: add missing default policy
This prevents spamming the log with false-positive warning messages.
It is related to commit "os/session_policy: warn if no policy exists".
2019-02-26 14:44:31 +01:00
Christian Helmuth
2a41f50661 Remove obsolete usb_hid_panda test 2019-02-26 14:44:31 +01:00
Christian Helmuth
c749f577e6 Do not run usb_hid test on imx6q_sabrelite
We do not support the monolithic usb_drv on this platform.
2019-02-26 14:44:31 +01:00
Christian Helmuth
a9d58e47cb Adapt run scripts to nic_bridge default policy 2019-02-26 14:44:31 +01:00
Norman Feske
5ed5fddb7c base/os: remove deprecated APIs
This commit removes APIs that were previously marked as deprecated. This
change has the following implications:

- The use of the global 'env()' accessor is not possible anymore.
- Boolean accessor methods are no longer prefixed with 'is_'. E.g.,
  instead of 'is_valid()', use 'valid()'.
- The last traces of 'Ram_session' are gone now. The 'Env::ram()'
  accessor returns the 'Ram_allocator' interface, which is a subset of
  the 'Pd_session' interface.
- All connection constructors need the 'Env' as argument.
- The 'Reporter' constructor needs an 'Env' argument now because the
  reporter creates a report connection.
- The old overload 'Child_policy::resolve_session_request' that returned
  a 'Service' does not exist anymore.
- The base/printf.h header has been removed, use base/log.h instead.
- The old notion of 'Signal_dispatcher' is gone. Use 'Signal_handler'.
- Transitional headers like os/server.h, cap_session/,
  volatile_object.h, os/attached*_dataspace.h, signal_rpc_dispatcher.h
  have been removed.
- The distinction between 'Thread_state' and 'Thread_state_base' does
  not exist anymore.
- The header cpu_thread/capability.h along with the type definition of
  'Cpu_thread_capability' has been removed. Use the type
  'Thread_capability' define in cpu_session/cpu_session.h instead.
- Several XML utilities (i.e., at os/include/decorator) could be removed
  because their functionality is nowadays covered by util/xml_node.h.
- The 'os/ram_session_guard.h' has been removed.
  Use 'Constrained_ram_allocator' provided by base/ram_allocator.h instead.

Issue #1987
2019-02-26 14:44:15 +01:00
Emery Hemingway
ffeb8e2af0 Chargen description of French keyboard
Add an input_filter character description file for the French AZERTY
keyboard layout and include it with Sculpt.

Fix #3149
2019-02-26 14:42:55 +01:00
Christian Prochaska
ee423e5bf1 qt5: remove deprecated APIs
Issue #3162
2019-02-26 14:38:03 +01:00
Norman Feske
0e0b6bdde7 depot: update recipe hashes 2019-02-19 11:13:56 +01:00
Christian Helmuth
dabddd4c89 Remove outdated affinity test
Thanks Tomasz Gajewski for the hint.

Related to #3041
2019-02-19 11:13:45 +01:00
Josef Söntgen
5bab5f4cca libc: extent vbox specific pthread_create API
Make it possible to adopt normal Genode::Threads for use within in a
pthread environment.

Issue #3164.
2019-02-19 11:12:13 +01:00
Emery Hemingway
2f33d44713 VFS: Configure File_system client buffer at runtime
Make the size of the packet buffer at the VFS File_system client
configurable. This allows larger reads to be completed in a single
packet cycle.

Example: <vfs> <fs buffer_size="512K"/> </vfs>

Fix #3167
2019-02-19 11:12:12 +01:00
Christian Prochaska
4921388732 usb_hid.run: adapt for rpi and arndale
- add 'Regulator' route and adapt string unification rule for arndale
- add 'IRQ' route for rpi

Fixes #3166
2019-02-19 11:12:12 +01:00
Christian Prochaska
fb18e7e95d qt5: use 'qt_nanosleep()' for sleeping
Fixes #3162
2019-02-19 11:12:12 +01:00
Norman Feske
aa662f939a Remove OMAP4 gpio_drv test
This (interactive) test has not been used for a long time and remained
not updated to the current Genode API.
2019-02-19 11:12:12 +01:00
Emery Hemingway
b5bd6e0114 Write abritrary printable objects into Xml_generator
Fix #3161
2019-02-19 11:12:12 +01:00
Norman Feske
b24edc1633 Remove residual uses of deprecated APIs
Issue #1987, related also to issue #3163 and issue #3164.
2019-02-19 11:12:12 +01:00
Christian Helmuth
c4c19f885f base: synchronize signal-proxy thread destruction 2019-02-19 11:12:12 +01:00
Christian Helmuth
1c1cbb9b95 Synchronize thread destruction in signal test 2019-02-19 11:12:12 +01:00
Norman Feske
3d6f4979c3 tz_vmm: remove use of deprecated APIs
Issue #1987
2019-02-19 11:12:12 +01:00
Norman Feske
630cb96a54 omap4 fb_drv: remove use of deprecated API
Issue #1987
2019-02-19 11:12:12 +01:00
Norman Feske
cf70f65bec exynos5 fb_drv: remove use of deprecated API
Issue #1987
2019-02-19 11:12:12 +01:00
Norman Feske
8f2212ea1e nova: disable -Wsuggest-override for the kernel
Issue #3159
2019-02-19 11:12:12 +01:00
Norman Feske
d9feaa1875 Add -Wsuggest-override to default strict warnings
Issue #3159
2019-02-19 11:12:12 +01:00
Norman Feske
b3727a9b46 Add missing override annotations
Issue #3159
2019-02-19 11:12:11 +01:00
Christian Prochaska
1f47e2823a foc: always enable user mode access for performance monitors
QEMU implements the cycle count register read by
'Genode::Trace::timestamp()', but does not report a supported debug model
version for Cortex-A9.

Fixes #3154
2019-02-19 11:12:11 +01:00
Stefan Kalkowski
89f0717df6 base: timeout framework calibration exit condition
Fix #3156
2019-02-19 11:12:11 +01:00
Stefan Kalkowski
5136d9ddc7 base: fix timer_ticks_to_us casting error
Fix #3155
2019-02-19 11:12:11 +01:00
Martin Stein
10b6b88b01 nic_bridge: simplified session request handling
1) A session request gets denied if there is no matching session policy.
   (The <defaul-policy/> tag can be used for the former default behavior)
2) A session request gets denied if the MAC address is given through the
   matching policy but this address cannot be allocated.
3) A session request gets denied if the MAC address is not given through the
   matching policy and it is also not possible to allocate one.

Issue #3040
2019-02-19 11:12:11 +01:00
Norman Feske
801aa46c46 leitzentrale.run: tweak quota for log_noux 2019-02-19 11:12:11 +01:00
Norman Feske
c232d703ca sculpt: remove policy warnings
The warnings were introduced with commit "os/session_policy: warn if no
policy exists".
2019-02-19 11:12:11 +01:00
Norman Feske
924e5c54eb core: fix RM-session upgrade mechanism
This is a follow-up commit of "base/core: use references instead of
pointers". Because the 'Rm_root::_upgrade_session' implementation
lacked the 'override' keyword, my overzealous change of the pointer
argument went unnoticed.

This commit fixes the depot_rom (cached_fs_rom) failure in Sculpt.
When cached_fs_rom attempted to create a new managed dataspace while the
RM session quota was depleted, it tried to upgrade the session (via
Rm_connection::create). However, the upgraded resources never reached
the actual session because the default 'Root_component::_upgrade_session'
was called instead of 'Rm_root::_upgrade_session'.

Issue #3135
2019-02-19 11:12:11 +01:00
Norman Feske
5e9102f031 Run script to execute a single test w/o the depot 2019-02-19 11:12:11 +01:00
Christian Helmuth
3208c4f2cb Increase netperf test timeout 2019-02-19 11:12:11 +01:00
Christian Helmuth
abdd1d7715 Adapt network run scripts for recent Qemu (3.1)
-netdev and -device should work with Qemu versions >= 2.5 at least but
3.0 dropped support for legacy -net completely.
2019-02-19 11:12:10 +01:00
Norman Feske
00fa48a886 os: new Block::Request_stream API
Issue #3092
2019-02-19 11:12:10 +01:00
Josef Söntgen
f9523c32d5 os: accessor for addr and size of packet stream 2019-02-19 11:08:18 +01:00
Norman Feske
3858e1df51 os: support for deferred packet-stream signals
This patch enhances the packet-stream API with the principle ability to
side-step the built-in implicity data-flow signals and manage the
signals manually. This allows for a more efficient batching of packet
processing.

Issue #3092
2019-02-19 11:08:18 +01:00
Norman Feske
69d6145f5a os: don't hide tx_cap from block-session interface
The 'tx_cap' RPC function is only used at session-creation time. For
this reason, it was not listed in the "official" RPC interface in
'block_session.h'. However, this makes the interface more obscure than
it needs to be. So this patch promotes it to a regular RPC function.

Issue #3092
2019-02-19 11:08:18 +01:00
Norman Feske
aa66b5d62f base: remove dependency from deprecated APIs
This patch adjusts the implementation of the base library and core such
that the code no longer relies on deprecated APIs except for very few
cases, mainly to keep those deprecated APIs in tact for now.

The most prominent changes are:

- Removing the use of base/printf.h

- Removing of the log backend for printf. The 'Console' with the
  format-string parser is still there along with 'snprintf.h' because
  the latter is still used at a few places, most prominently the
  'Connection' classes.

- Removing the notion of a RAM session, which does not exist in
  Genode anymore. Still the types were preserved (by typedefs to
  PD session) to keep up compatibility. But this transition should
  come to an end now.

- Slight rennovation of core's tracing service, e.g., the use of an
  Attached_dataspace as the Argument_buffer.

- Reducing the reliance on global accessors like deprecated_env() or
  core_env(). Still there is a longish way to go to eliminate all such
  calls. A useful pattern (or at least a stop-gap solution) is to
  pass the 'Env' to the individual compilation units via init functions.

- Avoiding the use of the old 'Child_policy::resolve_session_request'
  interface that returned a 'Service' instead of a 'Route'.

Issue #1987
2019-02-19 11:08:17 +01:00
Norman Feske
c629a92aa2 base: init_env_ram_session -> init_env_pd_session
The notion of a RAM session does not exist anymore. Hence, we have to
adjust the name of 'init_env_ram_session'. Since this change modifies
the ABI, it comes as separate commit.

Issue #2407
2019-02-19 11:08:17 +01:00
Emery Hemingway
22327b43ae Refactor terminal for intrinsic Unicode support
Refactor the graphical terminal server to internally represent
characters as 16-bit codepoints and handle the duplex terminal stream as
UTF-8.

- Make the Codepoint class printable to the Output interface
- Decode data received at the Terminal session from UTF-8 to a 16-bit
  character
- Pass 16-bit characters through terminal decoder and char-cell arrays
- Send Unicode through terminal session in a burst of UTF-8 bytes

Fix #3148
2019-02-19 11:08:17 +01:00
Alexander Boettcher
0c24e1efdc vm_session: extensions
- support to create multiple vCPUs
- support to implement Vm_session methods client side within base library
- adjust muen specific virtualbox4 version to compile/link

Issue #3111
2019-02-19 11:08:17 +01:00
Emery Hemingway
c5786b212b Update Seoul contrib code for new Fifo accessors
Ref #3135
2019-02-19 11:08:17 +01:00
Emery Hemingway
38ab456c78 Remove pointers from Genode::Fifo interface
Replace methods of Genode::Fifo returning pointers with methods which
call lambdas with references.

Ref #3135
2019-02-19 11:08:17 +01:00
Stefan Kalkowski
328c1ad96e foc: prevent region overlap on i.MX6 Sabrelite 2019-02-19 11:08:17 +01:00
Stefan Kalkowski
161f39f7af imx6q_sabrelite: enable sd_card_drv 2019-02-19 11:08:17 +01:00
Stefan Kalkowski
da502dd036 muen: disable SMP test on Muen 2019-02-19 11:08:17 +01:00
Alexander Boettcher
6bb145bdd8 Remove virtualbox 4 vmm
Fixes #3141
2019-02-19 11:08:17 +01:00
Christian Prochaska
87d526968c usb_hid: test both USB host drivers
Fixes #3152
2019-02-19 11:08:17 +01:00
Alexander Senier
5ccae43552 Rename Ada runtime to SPARK runtime
The minimal-footprint Ada runtime for implementing library-like
functionality in SPARK is now called "spark" runtime.

The full Ada runtime for entire components written in Ada and using the
libc as glue to the underlying system will move to the world repository
as "ada" runtime.

Issue #3144
2019-02-19 11:08:17 +01:00
Alexander Senier
3b41e02ea5 Create make dependencies using ali2dep 2019-02-19 10:50:51 +01:00
Alexander Senier
80a607ee0c Abandon gnatmake and generate elaboration code 2019-02-19 10:50:51 +01:00
Emery Hemingway
253d6b0b92 Runtime package of clipboard service
Fix #3150
2019-02-19 10:50:51 +01:00
Christian Helmuth
271e2398f9 depot: update recipe hashes 2019-02-12 14:24:12 +01:00
Christian Prochaska
106cd86375 smartcard.run: increase cap quota of test component
Fixes #3151
2019-02-12 10:33:32 +01:00
Norman Feske
5d66bfbd19 netperf.run: increase caps of netserver_genode
This is needed for seL4/x86_64.
2019-02-12 10:33:32 +01:00
Christian Helmuth
193c1aa533 wifi: refactor config generation in run script
Now sophisticated test scripts can be easily generated like documented.
2019-02-12 10:33:32 +01:00
Christian Helmuth
2b1732bdec Adapt usb_drv RAM quota to 12M
All autopilot scripts use 12 or more MiB for the usb_drv and my personal
tests never succeeded with less on x86 test machines.
2019-02-12 10:33:32 +01:00
Christian Helmuth
dbac453a39 smartcard: declare vendor/product IDs at one place
Also added a report_rom for USB devices and let the driver report like
in a real scenario. Can also be used for debugging by setting
verbose="yes" in report_rom.
2019-02-12 10:33:31 +01:00
Josef Söntgen
3ada4f4733 noux: increase argv buffer to 16KiB
And most importantly: use the same size everywhere.

Note, this commit also configures the stack size of noux-process threads
to 64 KiB independently of the CPU architecture. The reason is the
increased stack usage because of the additional argument space in
Execve_child_env in syscall(SYSCALL_EXECVE), which crafts a child
environment on stack for the creation of the new child.

Fixes #3145.
2019-02-12 10:33:16 +01:00
Christian Helmuth
afc95e36e1 netperf: 'times_up' mechanism based on pthread 2019-02-12 10:33:16 +01:00
Norman Feske
9e9614af13 test-init: increase timeout
The original timeout is one second too short to let the test pass on
NOVA/32bit. This patch increases the timeout by 10 seconds.
2019-02-12 10:33:16 +01:00
Christian Prochaska
ddacb1400c Do not disable USB BIOS handoff in tests
Fixes #3140
2019-02-12 10:33:15 +01:00
Norman Feske
2e1e7b8270 recipes/src/base-hw-muen: add static ACPI ROM
As we don't execute the acpi_drv on Muen, we have to supply a static
'acpi' info as boot module. This is normally done by the
base/run/platform.inc include. However, when using base-hw-muen kernel
from a depot archive - as done by modern run scripts like
depot_download.run - the platform.inc magic is not applied.

This patch enhances the src archive of base-hw-muen with a mechanism
that creates a pre-defined acpi info at the bin directory via an
artificial src/acpi/target.mk file. This way, the static acpi ROM ends
up as boot module when importing the base-hw-muen archive into a
run script.
2019-02-12 10:33:15 +01:00
Christian Helmuth
03da438fa4 foc: fix parallel build of kernel libuart
This incorporates a patch from upstream.
2019-02-12 10:33:15 +01:00
Josef Söntgen
ac59b68257 wifi_drv: split front end notification
Issue #3139.
2019-02-12 10:33:15 +01:00
Josef Söntgen
8f47609024 wifi_drv: fix explicit SCAN request handling
* Increase the CMD length to accomodate the limit of the wpa_supplicant
* Fix case where multiple SSIDs with 32 bytes are used
* Use Expanding_reporter for accesspoints report

Fixes #3139.
2019-02-12 10:33:15 +01:00
Josef Söntgen
1c0541e7cb run: add power cycle procedure
The 'run_genode_until' procedure only called 'run_power_on' to reset
the target machine. That works will with the softreset module, which
is used by all x86-based test system but falls short regarding ARM
boards. The way those boards are connected requires turning the power
off and on for a complete cycle.
2019-02-12 10:33:15 +01:00
Christian Prochaska
369d60bc21 dde_linux: iterate over PCI devices in ascending BDF order
On a Lenovo ThinkCentre M57p, the system locks up when the UHCI controller
BIOS handoff (disabling bit 4 in the LEGSUP register) for the controller
with PCI BDF 00:1d:2 is attempted before the handoff for the controller
with BDF 00:1a:0.

Fixes #3138
2019-02-12 10:33:15 +01:00
Christian Prochaska
e9e048c4ea dde_linux: fix timer callback compatibility with older drivers
Fixes #3137
2019-02-12 10:33:15 +01:00
Christian Helmuth
845253af3a dde_linux: prevent truncation in update_jiffies()
Before, jiffies wrapped after 2**32 microseconds (71.5 minutes) to 0.
2019-02-12 10:33:15 +01:00
Christian Helmuth
bcef3aeb1e dde_linux: fix calculation of ktime from jiffies 2019-02-12 10:33:15 +01:00
Emery Hemingway
47c6377ac0 Remove libc_lxip
The libc_lxip library is superceded by vfs_lwip.

Fix #2960
Fix #2535
2019-02-12 10:33:14 +01:00
Christian Prochaska
db9ff821a2 libc: sync 'listen' socket fs control file
Fixes #3124
2019-02-12 10:33:14 +01:00
Emery Hemingway
968e220fd2 Update jbig2dec to version 0.15
Ref #3131
2019-02-12 10:33:14 +01:00
Emery Hemingway
13268ec401 Update libpng to version 1.6.36
Fix #3131
2019-02-12 10:33:14 +01:00
Alexander Boettcher
2c969f1167 nova: skip smp revoke test in Qemu 2019-02-12 10:33:14 +01:00
Norman Feske
bcb24e316c base: fix warnings reported by LLVM analyzer
The warnings were false positives though.
2019-02-12 10:33:14 +01:00
Norman Feske
6b289a1423 base/core: use references instead of pointers
This patch replaces the former prominent use of pointers by references
wherever feasible. This has the following benefits:

* The contract between caller and callee becomes more obvious. When
  passing a reference, the contract says that the argument cannot be
  a null pointer. The caller is responsible to ensure that. Therefore,
  the use of reference eliminates the need to add defensive null-pointer
  checks at the callee site, which sometimes merely exist to be on the
  safe side. The bottom line is that the code becomes easier to follow.

* Reference members must be initialized via an object initializer,
  which promotes a programming style that avoids intermediate object-
  construction states. Within core, there are still a few pointers
  as member variables left though. E.g., caused by the late association
  of 'Platform_thread' objects with their 'Platform_pd' objects.

* If no pointers are present as member variables, we don't need to
  manually provide declarations of a private copy constructor and
  an assignment operator to avoid -Weffc++ errors "class ... has
  pointer data members [-Werror=effc++]".

This patch also changes a few system bindings on NOVA and Fiasco.OC,
e.g., the return value of the global 'cap_map' accessor has become a
reference. Hence, the patch touches a few places outside of core.

Fixes #3135
2019-02-12 10:33:13 +01:00
Norman Feske
f9373b4430 base: new Allocator_avl::construct_metadata method
The new method allows for the construction of a meta-data object inside
the reserved space of the allocator's meta data. It thereby alleviates
the need to copy the meta data object (via the assignment operator) as
done by the traditional 'metadata' setter method. This, in turn, allows
one to use non-copyable objects (like objects with constant member
variables) as meta data.
2019-02-12 10:33:12 +01:00
Norman Feske
437e6c5653 core: make ASSERT_NEVER_CALLED a single statement
This way, the macro can be used as a body of an if statement with no
curly braces.
2019-02-12 10:33:12 +01:00
Norman Feske
3a169d3a78 depot: update recipe hashes 2019-01-30 13:55:20 +01:00
Norman Feske
237d2bff3a base: fix deadlock during signal-context dissolve
This patch moves the removal of the signal context from the
'_platform_finish_dissolve' to the '_platform_begin_dissolve'
method. This is needed because the removal involves taking
the signal-registry lock. The latter must adhere the same
locking order as the code path used for signal delivery.

Fixes #3109
2019-01-30 13:55:19 +01:00
Norman Feske
158650ff01 base-nova: remove signal-delivery failure warning
Fixes #3136
2019-01-30 13:55:19 +01:00
Norman Feske
9859df8c6c test-fs_report: increase timeout (foc/x86_64/qemu) 2019-01-30 13:55:19 +01:00
Christian Prochaska
210fbcc4c2 gdb_monitor: fix possible page fault on thread removal
Fixes #3133
2019-01-30 13:54:54 +01:00
Emery Hemingway
4f88b664e2 Improve VFS server session quota management
Move the allocation of the session packet buffer into a subclass that is
constructed before the File_system RPC object. This allows the buffer
allocation to be wrapped in a constructor/destructor class and clearly
accounted for.

Fix #3134
2019-01-30 13:54:54 +01:00
Christian Helmuth
37b2aaa051 Equalize RAM quantum in acpi_drv configs
While the managed drivers already used 4M, interactive and nic failed on
hardware with larger ACPI tables.
2019-01-30 13:54:54 +01:00
Christian Helmuth
87c9186efd ports: enable basic clock support in tclsh 2019-01-30 13:54:53 +01:00
Christian Helmuth
f7f1509a27 Re-enable network tests on all platforms 2019-01-30 13:54:53 +01:00
Norman Feske
27bb44d39c launcher.run: adaptation to new window layouter 2019-01-30 13:54:53 +01:00
Norman Feske
431c80bbca Add missing 'root' attribute to vfs policies
The commit "os: avoid using deprecated APIs" tightens the policy
configuration of the VFS server such that the 'root' attribute is no
longer optional.
2019-01-30 13:54:53 +01:00
Martin Stein
f3dfe88477 build system: show full paths on ADA errors
Add '-gnatef' to the default 'CUSTOM_ADA_OPT' in generic.mk to ensure that, on
compile errors, the full source path is shown.
2019-01-30 13:49:55 +01:00
Christian Prochaska
342ddcf71a libsanitizer: replace use of 'Genode::printf()'
Fixes #3129
2019-01-30 13:49:55 +01:00
Christian Prochaska
4b805ccde9 base: move 'Buffered_output' class into public header
Fixes #3128
2019-01-30 13:49:55 +01:00
Norman Feske
d3759811b6 os/session_policy: warn if no policy exists
The situation where a 'Session_policy' is constructed for a label with
no matching policy is in almost all cases a configuration problem.
A diagnostic message eases pin-pointing such mistaks. By adding the
message to the 'Session_policy', servers don't need to manually handle
the exception to provide diagnostic information. This simplifies the
server code in many components.
2019-01-30 13:49:55 +01:00
Emery Hemingway
f529871162 Add [depot_user] to run tool builtins
Now that the depot_user procedure has found use in the depot_autopilot
it has become a convention.

Fix #3127
2019-01-30 13:49:55 +01:00
Norman Feske
6154d9067e libports: avoid using deprecated APIs
Issue #1987
Issue #3125
2019-01-30 13:49:55 +01:00
Norman Feske
ba2b0b8360 gems: remove the use of deprecated APIs
This patch also updates os/slave.h because the app/launcher cannot be
reasonably updated without it.

Issue #1987
Issue #3125
2019-01-30 13:49:54 +01:00
Norman Feske
f23579532e dde_*: remove the use of deprecated APIs
Issue #1987
Issue #3125
2019-01-30 13:49:54 +01:00
Norman Feske
954aff7002 demo: avoid using deprecated APIs
Issue #1987
Issue #3125
2019-01-30 13:49:54 +01:00
Norman Feske
6b94e65a95 os: avoid using deprecated APIs
Issue #1987
Issue #3125
2019-01-30 13:49:54 +01:00
Norman Feske
cb36d96569 netperf: remove mechanism to update 'times_up'
The mechanism relied on deprecated Genode APIs. To revive the mechanism,
we could use pthread_create.
2019-01-30 13:49:54 +01:00
Norman Feske
486e534df0 gdb_monitor: remove use of deprecated APIs
Issue #1987
2019-01-30 13:49:54 +01:00
Norman Feske
5f1f67153b Xml_node: safe alternatives to unsafe accessors
Issue #3125
2019-01-30 13:49:54 +01:00
Norman Feske
8cc11d6cc6 libc_terminal: remove use of deprecated APIs
Issue #1987
2019-01-30 13:49:54 +01:00
Norman Feske
fdbf30fc4c Xml_node: replace value(T *out) by value(T &out)
Promote the use of references instead of pointers.

Issue #1987
2019-01-30 13:49:54 +01:00
Norman Feske
98a75b1a78 noux: remove use of deprecated APIs
Issue #1987
2019-01-30 13:49:54 +01:00
Norman Feske
d7e552a169 libusb: remove use of deprecated APIs
Issue #1987
2019-01-30 13:49:53 +01:00
Norman Feske
3da6aab353 noux: enable strict warnings 2019-01-30 13:35:29 +01:00
Norman Feske
e889c58bbc noux: remove dependency from alarm library
Fixes #3123
2019-01-30 13:35:29 +01:00
Martin Stein
ffd4e231d7 run/depot_autopilot: less interactive mode
In less interactive mode, the run script doesn't give up on missing test
archives but instead removes the corresponding tests and marks them "missing".
This mode avoids total failure of a platform in automated test infrastructures
when only a few archives are missing.

Fixes #3120
2019-01-30 13:35:29 +01:00
Norman Feske
af146e7dcd Remove base/timed_semaphore.h from API
The former 'Genode::Timed_semaphore' mechanism is moved to the private
part of the two remaining users, namely dde_rump and the libc. Note
there are now two private copies of 'timed_semaphore.h'. This should be
regarded as an interim step until the use of this mechanism is removed
from both users.

This patch also cleans up the mechanism from legacy Genode API calls and
global side effects (alarm-thread singleton). The test/timed_semaphore
is now located at the libports repository as it now tests a mechanism of
the libc. The former timed_semaphore library is no more.

Fixes #3121
2019-01-30 13:35:29 +01:00
Norman Feske
7b37546a4d tool/abi_symbols: omit known internal symbols
This patch prevents the abi_symbols tool from generating symbols that
are known to occur in shared objects but must not be part of a library
ABI. This saves a bit of time during library-porting work.

However, to avoid the accidental use of ABI symbol definitions that lack
any form of manual curation, the abi_symbols tool outputs a special
message, which is explicitly checked-for by the check_abi tool.

Fixes #3112
2019-01-30 13:35:29 +01:00
Christian Prochaska
a155d0e531 qt5: fix parallel build issues related to generated files
Store all files generated by moc and rcc in the application's build
directory to prevent the use of unfinished generated files for other
applications built at the same time.

Issue #3115
2019-01-30 13:35:28 +01:00
Martin Stein
e0af049124 depot_autopilot: fix regression with nr. of tests
The output of the number of tests to run was removed accidentally with the
commit "depot_autopilot: provide repeat mode".
2019-01-30 13:35:28 +01:00
Martin Stein
f69d3020fd remove unused repos/app-file_cache* files
These files sneaked in accidentally with the commit "Support GNAT.IO in Ada
programs".
2019-01-30 13:35:28 +01:00
Alexander Boettcher
9a2bdf8798 vm_session: move from base-hw to base
Issue #3111
2019-01-30 13:35:28 +01:00
Alexander Boettcher
9f8198d946 hw: deny to attach managed dataspaces to VMs
Issue #3111
2019-01-30 13:35:28 +01:00
Stefan Kalkowski
5b8e1cdbbb foc: add recipe for imx6q_sabrelite base lib 2019-01-30 13:35:28 +01:00
Stefan Kalkowski
b765cef359 replace Wandboard by i.MX6 reference board
Instead of using the Wandboard Quad, the reference hardware from NXP
i.MX6 Quad Sabrelite will be used by Fiasco.OC, sel4 and hw by default.
2019-01-30 13:35:28 +01:00
Stefan Kalkowski
c65860ee53 enable i.MX6 Quad Sabrelite board for hw and foc 2019-01-30 13:35:28 +01:00
Norman Feske
2f9da1c7c8 Road map for 2019 2019-01-30 13:35:28 +01:00
Norman Feske
3bd4197951 gems: enable strict warnings for more components
Issue #465
2019-01-30 13:35:28 +01:00
Christian Prochaska
21ed41da9a usb_hid_drv: wait for keyboard LED registry in 'led_connect()'
It can happen that a keyboard gets plugged in and 'led_connect()' is
called while the keyboard LED of another keyboard is just being updated
(and the registry is locked).

Fixes #3118
2019-01-30 13:35:28 +01:00
Norman Feske
ece5cbbbb5 gems: utility for implementing LRU-based caches
This patch extracts the LRU cache implementation from the 'Cached_font'
so that it becomes reusable for other applications.

Fixes #3117
2019-01-30 13:35:28 +01:00
Stefan Kalkowski
6b4d76739e base: remove Signal_receiver::pending() method
Fix #1864
2019-01-30 13:35:28 +01:00
Christian Prochaska
e8ea28d897 socket fs: support non-blocking 'connect()'
Fixes #3113
2019-01-30 13:35:28 +01:00
Christian Prochaska
12c10dbcd1 libc: 'connect()' test
Fixes #3114
2019-01-30 13:35:28 +01:00
Norman Feske
ed65267bc5 depot: update recipe hashes 2019-01-14 12:34:41 +01:00
Christian Helmuth
9dfad6d9da run: plugin for Allnet MSR powerplug
The plugin was tested with ALL4176 but should support all modern Allnet
MSR devices according to the documentation

  https://service.allnet.de/image-ftp/ftp/pub/allnet/MSR/JSON/JSON_MSR.zip

It works just like the existing powerplug plugins by

  RUN_OPT += --include power_on/allnet --include power_off/allnet

and uses the following parameters

  --power-on-allnet-host        network address of device
  --power-on-allnet-user        user for device
  --power-on-allnet-password    password for device
  --power-on-allnet-port        target port/socket of device
  --power-off-allnet-host       network address of device
  --power-off-allnet-user       user for device
  --power-off-allnet-password   password for device
  --power-off-allnet-port       target port/socket of device
2019-01-14 12:34:41 +01:00
Norman Feske
97e3d05f37 base-foc: fix placement of utcb area stack area
This commit ensures that UTCB areas of PDs are positioned relative to
the stack areas of regular components, not the one of core.

Fixes #3108
2019-01-14 12:34:41 +01:00
Martin Stein
3f60dcfae8 sel4 run/depot_autopilot: handle resource leak
After a certain number of tests, presumably some resource in core is exceeded
and loading the successive test fails. This quickfix looks out for the
characteristic Core error and then reboots to avoid that all successive tests
are marked as failed.
2019-01-14 12:34:41 +01:00
Christian Prochaska
8aaffe829a usb_hid.run: enable more platforms for autopilot test
Fixes #3105
2019-01-14 12:34:41 +01:00
Norman Feske
81fb10daaa Consistently name block components
This patch replaces abbreviations like "blk", "cli", and "srv" by their
full forms "block", "client", and "server".

Fixes #1258
2019-01-14 12:34:39 +01:00
Norman Feske
bf62d6b896 Move timer from os to base repository
Since the timer and timeout handling is part of the base library (the
dynamic linker), it belongs to the base repository.

Besides moving the timer and its related infrastructure (alarm, timeout
libs, tests) to the base repository, this patch also moves the timer
from the 'drivers' subdirectory directly to 'src' and disamibuates the
timer's build locations for the various kernels. Otherwise the different
timer implementations could interfere with each other when using one
build directory with multiple kernels.

Note that this patch changes the include paths for the former os/timer,
os/alarm.h, os/duration.h, and os/timed_semaphore.h to base/.

Issue #3101
2019-01-14 12:33:57 +01:00
Alexander Senier
14cd115c82 Support GNAT.IO in Ada programs 2019-01-14 12:21:10 +01:00
Christian Prochaska
119a12cba5 qt5: support relative paths in qmake project files
Support paths like '../util.h' or 'resources/panel.qrc' in the HEADERS and
RESOURCES variables in qmake project files.

Fixes #3115
2019-01-14 12:21:09 +01:00
Christian Helmuth
745ee04583 Window manager test for tiled-console scenario 2019-01-14 12:21:09 +01:00
Christian Helmuth
21a61cd583 depot: update recipe hashes 2019-01-07 12:43:37 +01:00
Norman Feske
60dc783399 motif decorator: enable closer in pkg runtime 2019-01-07 12:43:37 +01:00
Josef Söntgen
f113460348 Move FUSE to world
Fixes #3104.
2019-01-07 12:43:37 +01:00
Norman Feske
39085f08fc Move libav, avplay, and qt_avplay to genode-world
Fixes #3103
2019-01-07 12:43:37 +01:00
Norman Feske
a15b825418 Move libsdl and companion libs to genode-world
Fixes #3100
2019-01-07 12:43:37 +01:00
Norman Feske
48aed0ea46 Move Dosbox to genode-world
Fixes #3099
2019-01-07 12:43:37 +01:00
Norman Feske
76e96e92cb nitpicker: avoid color bleeding
This patch improves the output of opaque pixels in the presence of an
alpha channel by adding a special case for the maximum alpha value.

Fixes #2831
2019-01-07 12:43:23 +01:00
Norman Feske
97bfc13237 sculpt: slight visual improvements of leitzentrale
This patch improves the appearance of the leitzentrale by eliminating
the (hardly visible) decorations from the GUI and graph views, and by
animating the motion of the graph position. The latter is meant to
remove the stuttering effect when the graph's size changes (and
re-centered).
2019-01-07 12:38:46 +01:00
Norman Feske
a636f90240 wm: update hover after drag operation
This patch improves the consistency of the hover handling after
finishing a drag operation. Normally, the window manager hides pointer
updates while the user is performing a drag operation with the mouse
from the decorator. However, in the special case where a drag operation
results in a window-layout change, the decorator's hover model may be
affected. Hence, the window manager must supply the current pointer
position when leaving the drag state.

Issue #3097
2019-01-07 12:38:46 +01:00
Norman Feske
7c79bfc903 motif decorator: visual feedback to mouse clicks
Issue #3097
2019-01-07 12:38:46 +01:00
Norman Feske
49e0036471 window layouter: avoid superfluous layout updates 2019-01-07 12:38:45 +01:00
Norman Feske
9efb957059 window_layouter: propagate pressed window controls
This patch supplements the dragging state of window controls to the
window layout so that decorators become able to visually reflect this
state, i.e., pressing the title bar while moving a window.

Issue #3097
2019-01-07 12:38:45 +01:00
Norman Feske
2d95c4dc1c themed_decorator: new 'motion' policy attribute
This commit adds the optional 'motion=<number>' attribute to the
decorator's <policy> nodes. The default value is 0. If a value higher
than 0 is specified, window-geometry changes are applied as an animation
where the <number> denotes the number of animation steps.

Issue #3096
2019-01-07 12:38:45 +01:00
Norman Feske
a3bbef5f21 themed_decorator: optionally disable decorations
This patch adds the boolean policy attribute "decoration", which
controls whether window decorations are presented or not. It is enabled
by default. By setting the attribute to "no", matching windows appear
without any border, which is desireable for Sculpt's component graph.

Issue #3096
2019-01-07 12:33:57 +01:00
Norman Feske
296a409a29 gems: make menu_view's animated_geomerty.h public
This commit moves menu_view's utility for animating rectangles available
at 'include/gems/animated_geometry.h'.

Issue #3096
2019-01-07 12:33:57 +01:00
Norman Feske
b188a4dbc9 lazy_value.h: improve handling of low steps value
Don't just clamp the speed value to a positive number but immediately
assign the destination value. This is needed in situations where the
number of steps is too low for proper acceleration and deceleration.

Issue #3096
2019-01-07 12:33:57 +01:00
Norman Feske
2565928495 fb_sdl: support the resizing of the SDL window
Fixes #3095
2019-01-07 12:33:57 +01:00
Norman Feske
56cb1885bb decorator: make window-layout updates more robust
This patch improves the window decorators in the following respects:

* Strict warnings are enabled now.
* The use of the 'List_model' makes the application of window-
  layout changes more robust. This is particularly the case for
  the restacking of windows.
* Display-mode changes are now supported by both decorators.

Issue #3094
2019-01-07 12:33:57 +01:00
Norman Feske
f7d33010e5 gems: strict warning fixes
Issue #3094
2019-01-07 12:33:57 +01:00
Norman Feske
cd29ca3c40 base: add List_model::apply_first
The new 'apply_first' method enables users of the list model to manually
traverse the list model via the 'Element::next' method instead of
iterating via 'for_each'. This is needed in situations where the
list-model elements are visited via recursion, not via a loop.

Issue #3094
2019-01-07 12:33:56 +01:00
Norman Feske
554a100407 wm.run: build decorator, use wm.config from repo
With these little tweaks, the run script becomes more convenient as a
testing ground.

Issue #3094
2019-01-07 12:33:56 +01:00
Norman Feske
dc9cd38189 wm: support TO_BACK command issued by decorator
Until now, decorators used to rely only on the TO_FRONT command for
propagating the window stacking to nitpicker. However, as the additional
use of the TO_BACK command allows for a more robust procedure, this
patch enhances the wm to handle both view stacking commands.

Issue #3094
2019-01-07 12:33:56 +01:00
Norman Feske
b3fa7b0650 wm: enable strict warning level
Issue #3094
2019-01-07 12:33:56 +01:00
Stefan Kalkowski
7f1692b3ca core: support unmap of managed dataspace generally
This commit solves several issues:

* correct calculation of overlap region when detaching regions
  in managed dataspaces
* prevent unmap of Fiasco.OC's core log buffer
* calculate the core-local address of regions in managed dataspaces
  if possible at all and use it to unmap on kernels where this is
  needed

Fix #976
Fix #3082
2019-01-07 12:33:56 +01:00
Stefan Kalkowski
e31ded2198 foc: silence mapping warnings
Ref #3082
2019-01-07 12:33:56 +01:00
Christian Helmuth
56650e7f79 depot: prevent warning with newer GPG versions
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
2019-01-07 12:33:56 +01:00
Alexander Boettcher
af710cdd7f sculpt: update browser VMs for 18.11
use Firefox 64.0
2019-01-07 12:33:56 +01:00
Martin Stein
f0842a27c5 depot_autopilot: provide repeat mode
Adds an config attribute to the Depot Autopilot component:

:<config repeat>:

  Can be one of

    "false"         - process the given test list only once,
    "until_forever" - endlessly repeat processing the given test list,
    "until_failed"  - repeat processing the given test list until it fails.

Adds an environment variable to the Depot Autopilot Run script:

:TEST_REPEAT:

  Same as the <config repeat> attribute of the Depot Autopilot.

This is useful when having to debug very sporadic errors during one test
or a series of tests.
2019-01-07 12:33:56 +01:00
Norman Feske
b7cb5839eb test/vfs_stress: prevent division by zero
Issue #3090
2019-01-07 12:33:56 +01:00
Norman Feske
ca6ee2d91a block_tester.run: fix use of ld attribute 2019-01-07 12:33:55 +01:00
Norman Feske
9818237918 test-ada: showcase Ada/SPARK object construction 2019-01-07 12:33:55 +01:00
Norman Feske
4f316cffbc init: update state reports on heartbeat responses
Init's state reports are updated whenever an interesting part of init's
internal state changes (e.g., when sessions are established, or when
children are started/removed). However, until now, a change of a skipped
heartbeat counter was not taken as trigger for state-report updates.

In scenarios where no other intersting event happened, the last reported
state did no reflect the current heartbeat state. In particular, when
the last report was issued during the construction of a new child just
before the child became able to respond to heartbeat requests, the stale
report hinted at heartbeat problems that were just an initialization
artifact. This problem became visible on some Qemu platform where the
child startup takes a long time.

The patch tracks the observed skipped-heartbeat counter and triggers a
report whenever the counter value changes.

Issue #3079
2019-01-07 12:33:55 +01:00
Martin Stein
68f6b9443e test/trace_logger: don't use Trace::timestamp
At least on foc pbxa9, Trace::timestamp gets stuck.
2019-01-07 12:33:55 +01:00
Stefan Kalkowski
c20c643b66 depot_autopilot: skip test-libc on rpi and sel4
Fix #3086
2019-01-07 12:33:55 +01:00
Norman Feske
ed7dfddc5d Increase timeout of init test
The increased timeout takes the use of NOVA or seL4 on Qemu into
account.

Issue #3079
2019-01-07 12:33:55 +01:00
Norman Feske
8f1f4f2652 Improve robustness of init test
By adding an additional synchronization point in the form of a matched
log message, this patch makes the timing behavior of the "test changing
provided services" step more deterministic. Without it, the scheduling
of OKL4 and base-hw resulted in a merge of two config updates into one.

Issue #3079
2019-01-07 12:33:55 +01:00
Christian Prochaska
46b68b0e66 gmp: search headers in REP_DIR first
Fixes #3068
2019-01-07 12:33:55 +01:00
Alexander Boettcher
035439c710 sel4: enable fpu for wand_quad 2019-01-07 12:33:55 +01:00
Norman Feske
89883a6988 Depot recipe for src/lighttpd 2019-01-07 12:33:55 +01:00
Norman Feske
89935e7308 gems: add pkg/drivers_nic-pc 2019-01-07 12:33:55 +01:00
Josef Söntgen
c43723abdd ports: update lighttpd to 1.4.52
In addition enable TLS.

Fixes #3069.
2019-01-07 12:33:55 +01:00
Josef Söntgen
0139fa20ff libports: add tcp_fsm header to libc includes
Needed by lighttpd-1.4.52

Issue #3069.
2019-01-07 12:33:54 +01:00
Josef Söntgen
c58ad11f2f libports: update OpenSSL to 1.0.2q
And enable SSL_CONF_* in libssl, needed by lighttpd's mod_openssl.

Issue #3069.
2019-01-07 12:33:54 +01:00
Stefan Kalkowski
5147c71fdf qt5: update qtscriptclassic archive path 2019-01-07 12:33:54 +01:00
Norman Feske
9ca42448c7 doc: grammar fix in the release notes 18.11
Thanks to Jeroen van Gelderen for reporting!
2019-01-07 12:33:54 +01:00
Christian Prochaska
a5547e5b1d base: improve floating point output
Fixes #2876
2019-01-07 12:33:54 +01:00
Sebastian Sumpf
3347d08b79 ldso: cleanup if loading of 'Shared_object' fails
This can happen, for example, during 'dlopen' if unresolved symbols are
present.

* Unload already loaded shared libraries
* Delete dependencies
* Flush initializer list (ctors)

fixes #3073
2019-01-07 12:33:54 +01:00
Josef Söntgen
7c4986bd83 dde_rump: remove out-dated CGD test 2019-01-07 12:33:54 +01:00
Josef Söntgen
108034b050 packet_stream: packets w/o payload are still valid
Packets whose data is stored within the Packet_descriptor itself
but not as payload, .e.g Usb::Packet_descriptor, are valid packets
after all. So loosen the packet valid check for zero-sized packets
is reasonable.

Fixes #3076.
2019-01-07 12:33:54 +01:00
Robin Eklind
6b35b9de00 doc: prevent line break between the* and *health*
Fixes #3077
2019-01-07 12:33:54 +01:00
Christian Prochaska
9c8e76b190 base: 'sanitizer' test
Issue #3072
2019-01-07 12:33:54 +01:00
Christian Prochaska
5569d2ddc2 mk: add 'SANITIZE_UNDEFINED' option
'SANITIZE_UNDEFINED = yes' in 'target.mk' adds the '-fsanitize=undefined'
compiler flag and links the program with libubsan and libsanitizer_common.

Issue #3072
2019-01-07 12:33:54 +01:00
Christian Prochaska
c2884a6e63 libports: libubsan and libsanitizer_common
Issue #3072
2019-01-07 12:33:54 +01:00
Norman Feske
03cbd4257f sequence: add 'repeat="yes"' config option
Fixes #3075
2019-01-07 12:33:54 +01:00
Norman Feske
d46b63a18c extract: allow stripping of leading path elements
Fixes #3074
2019-01-07 12:33:54 +01:00
Christian Helmuth
0dc4335fbc run: fix custom image disk size calculation 2019-01-07 12:33:53 +01:00
Martin Stein
f213a07c83 run/depot_autopilot: always log available results
This ensures that the depot_autopilot.run script, when exiting, always prints
a result overview of the so far available test results, except the Depot
Autopilot component has managed to print the result overview up to this point.
2019-01-07 12:33:50 +01:00
Stefan Kalkowski
59a8856773 depot_autopilot: sanitize XML results
Unequal numbers of double quotes let the XML parser of init fail,
therefore replace all double quotes when transfering previous
results after a reboot.

Ref #3027
2019-01-07 12:30:40 +01:00
Stefan Kalkowski
88b704db19 depot_autopilot: reduce timeouts of test pkgs
Our overall nightly test time greatly decreases when the timeouts for
the single tests are not that over-pessimistic. Using the slowest
platforms as reference, this commit reduces the test timeouts.

Ref #3027
2019-01-07 12:30:40 +01:00
Martin Stein
19e928271b run/depot_autopilot: reboot on some kernel faults 2019-01-07 12:30:37 +01:00
Martin Stein
54d1a676b7 run/depot_autopilot: reboot on log EOF 2019-01-07 12:25:46 +01:00
Martin Stein
f3a520e75d run/depot_autopilot: do not run on foc+panda 2019-01-07 12:25:46 +01:00
Martin Stein
7ad00d1152 base-hw/recipes: src/base-hw-muen 2019-01-07 12:25:46 +01:00
Christian Helmuth
600a5ecdaf hw: log stack pointer on x86 CPU exception 2019-01-07 12:25:46 +01:00
Emery Hemingway
bd53e5b496 VFS lwIP: send application data immediately
Call 'tcp_output' if application data has been successfully queued. This
sends data immediately that may otherwise remain queued until the next
periodic TCP timer event.

This reverts a change made in 3e31e2ba53.

Fix #3067
2019-01-07 12:25:46 +01:00
Martin Stein
a79bfad08e base-linux: init trace control 2019-01-07 12:25:46 +01:00
Martin Stein
f8a27e6acf pkg/test-init_loop: raise timeout to 150s
At least autopilot qemu x86_64 foc needs more time.
2019-01-07 12:25:46 +01:00
Christian Prochaska
73e3ed0bd0 gcov: print annotated source only on incomplete coverage
Fixes #3071
2019-01-07 12:25:46 +01:00
Christian Prochaska
97d8bea5ec gcov: print selected annotated source files only
Fixes #3070
2019-01-07 12:25:46 +01:00
Martin Stein
abe80a4bfe run/depot_autopilot: raise initial timeout to 40s
At least sel4 on qemu/x86_32 on autopilot needs more time.
2019-01-07 12:25:45 +01:00
Martin Stein
6a8a5d2167 run/depot_autopilot: print nr of tests to run
The number of tests to run is the number of test package-archives minus the
the those that are skipped for the given platform. The number is printed
directly after checking if the given platform is supported by the run script.
It helps the surrounding test infrastructure to ensure that, for instance, a
result graph always reflects the same total number of tests, even though there
is a sporadic problem with booting the platform.
2019-01-07 12:25:45 +01:00
Martin Stein
da3e5fd3d6 run/depot_autopilot: reset qemu args correctly 2019-01-07 12:25:45 +01:00
Alexander Boettcher
0a0a6ef591 nova: de-schedule SCs in destruction earlier
Fixes issues detected during destruction in

Issue #3041
2019-01-07 12:25:45 +01:00
Alexander Boettcher
85b998a4af os: nullpointer check in os/path.h
Issue #3022
2019-01-07 12:25:45 +01:00
Alexander Boettcher
67fd3333e2 base: avoid null pointer reference warning
Issue #3022
2019-01-07 12:25:45 +01:00
Alexander Boettcher
518d157f76 os: avoid null pointer acces in alarm lib
Issue #3022
2019-01-07 12:25:45 +01:00
Alexander Boettcher
1ec0619b3e base: avoid warnings in fifo.h
error: member 'Element' found in multiple base classes of different types

Issue #3022
2019-01-07 12:25:45 +01:00
Alexander Boettcher
dbeb1b82a9 os: avoid warning in ethernet.h
issued by clang/llvm static analyzer
2019-01-07 12:25:45 +01:00
Alexander Boettcher
aa03c4ce9f os: avoid garbage warnings in app/painter
Issue #3022
2019-01-07 12:25:45 +01:00
Alexander Boettcher
5572430ba5 os: avoid ambiguous warnings for vfs/server
between File_system and Vfs::File_system

Issue #3022
2019-01-07 12:25:45 +01:00
Alexander Boettcher
9bb0e10eec os: avoid warning in platform driver
calling wrong destructor issued by clang/llvm static analyzer

Issue #3022
2019-01-07 12:25:45 +01:00
Alexander Boettcher
c2d54aaede base: avoid null pointer warning in avl tree
Issue #3022
2019-01-07 12:25:45 +01:00
Alexander Boettcher
7536b665f1 core: avoid null pointer reference warning
Issue #3022
2019-01-07 12:25:44 +01:00
Martin Stein
8db02b0a39 run/depot_autopilot: env-variables user-interface 2019-01-07 12:25:44 +01:00
Stefan Kalkowski
8e13b376b0 hw: improve cross-cpu synchronization
This commit addresses several multiprocessing issues in base-hw:

* it reworks cross-cpu maintainance work for TLB invalidation by
  introducing a generic Inter_processor_work and removes the so
  called Cpu_domain_update
* thereby it solves the cross-cpu thread destruction, when the
  corresponding thread is active on another cpu (fix #3043)
* it adds the missing TLB shootdown for x86 (fix #3042)
* on ARM it removes the TLB shootdown via IPIs, because this
  is not needed on the multiprocessing ARM platforms we support
* it enables the per-cpu initialization of the kernel's cpu
  objects, which means those object initialization is executed
  by the proper cpu
* it rollbacks prior decision to make multiprocessing an aspect,
  but puts back certain 'smp' mechanisms (like cross-cpu lock)
  into the generic code base for simplicity reasons
2019-01-07 12:25:44 +01:00
Christian Helmuth
8236a18260 Revert "Use strictly-typed Microseconds for Libc timeout scheduling"
This reverts commit 4808565a28afe9ff248fb5c98aceb6f8d3e791c1.
2019-01-07 12:25:44 +01:00
Christian Helmuth
e1b27885f9 solo5: needs IRQ for timer on sel4 2019-01-07 12:25:44 +01:00
Stefan Kalkowski
1d0e063f49 base-sel4: recipe for Wandboard platform
* Allow depot_autopilot to be run on top of sel4/wand_quad too (Ref #3027)
2019-01-07 12:25:44 +01:00
Stefan Kalkowski
76966ed61a depot_autopilot: add route to IO_MEM for timer
* some timer drivers like epit for i.MX* need I/O memory access

Ref #3027
2019-01-07 12:25:44 +01:00
Christian Helmuth
6315e4503e dde_linux: adapt to changes in os/duration.h
The Linux emulation library provides preprocessor macros for min() and
max(), which now clash with implementation in duration.h. So, we disable
those macros in the delay implementation.
2019-01-07 12:25:44 +01:00
Alexander Boettcher
eead1af140 sel4: flush tlb on x86
Issue #3041
2019-01-07 12:25:43 +01:00
Stefan Kalkowski
6fb9c802d3 depot: enable package building for armv6
* Allow depot_autopilot to be run on top of arm_v6 too (Ref #3027)
2019-01-07 12:25:43 +01:00
Stefan Kalkowski
42c5f2e91e hw: add src package for base-hw-zynq_qemu
* Needed for nightly depot_autopilot tests (Ref #3027)
2019-01-07 12:25:43 +01:00
Stefan Kalkowski
216dc49741 depot_autopilot: skip test-libc with low memory
* Skip test-libc on top of foc_pbxa9 and hw_imx53_tz as both platforms
  have to few memory in their configuration
2019-01-07 12:25:43 +01:00
Martin Stein
271fd0ba06 run/depot_autopilot: show depot size 2019-01-07 12:25:43 +01:00
Martin Stein
858a7823fb init: print label on "no route to service" warning
It can be hard to interpret "no route to service" warnings if Init doesn't
print the session label
2019-01-07 12:25:43 +01:00
Martin Stein
79ca4e1718 init: show args on "denied env session" error
It can be hard to resolve "denied env session" errors when you don't have the
session label.
2019-01-07 12:25:43 +01:00
Martin Stein
7f959a06f6 depot_autopilot: tune for multi-platform support
Issue #3027
2019-01-07 12:25:43 +01:00
Christian Prochaska
ac8d030855 gcov: open files in buffered mode
Fixes #3065
2019-01-07 12:25:43 +01:00
Emery Hemingway
f2df40f58b Add simple Solo5 tests to depot autopilot
Add the following Solo5 tests to Autopilot: hello, fpu, globals, quiet,
blk. The remaining tests require a Rtc service or IP routing.

Ref #3027
2019-01-07 12:25:43 +01:00
Emery Hemingway
5c2599e24e Remove 'clock()' implementation, print warning
FreeBSD implements 'clock' with an accuracy of 128 ticks-per-second for
compatibility reasons, Linux uses 1000000 per-second. Remove 'clock' and
print an error because it is unlikely that this is the resolution
expected by the application.

Fix #3057
2019-01-07 12:25:43 +01:00
Martin Stein
82ded858aa nic_bridge: fix bug when reading MAC address
For reading the MAC address we try first to read it from the <policy> tag, and
when it is not defined in the <policy> tag, we allocate a MAC. But there was
no handling of the case that there is no appropriate <policy> tag. In this
case we want to create the session with an allocated MAC also.
2019-01-07 12:25:42 +01:00
Emery Hemingway
8cb8082206 Remove Nim support from toolchain
Nim components are best build externally using the Nimble tools and a
Genode SDK.

See https://github.com/ehmry/nim-genode

Fix #2949
2019-01-07 12:25:42 +01:00
Stefan Kalkowski
aeb7ab4774 hw: prevent potential dead-lock in signal destruction
Fix #3063
2019-01-07 12:25:42 +01:00
Emery Hemingway
8a3b0ebea9 Use strictly-typed Microseconds for Libc timeout scheduling
Fix #3050
2019-01-07 12:25:42 +01:00
Emery Hemingway
9c7d5b2a66 Implement print and min/max for Microseconds and Milliseconds
Ref #3050
2019-01-07 12:25:42 +01:00
Norman Feske
8f43a1303b News item for version 18.11 2018-11-29 14:48:01 +01:00
Christian Helmuth
d69cb1ba7b version: 18.11 2018-11-29 14:15:25 +01:00
Norman Feske
456dda9ac0 Release notes for version 18.11 2018-11-29 14:12:41 +01:00
Christian Helmuth
11eecdc7bd depot: update recipe hashes 2018-11-29 11:54:31 +01:00
Stefan Kalkowski
34480c9269 test-rm_fault: use ld.lib.so to test read-only mem
Due to the changing environment this test is executed (like depot_autopilot)
the binary test-rm_fault used to check ROM dataspace's read-only property
does not suit anymore. This commit changes the binary to ld.lib.so that is
normally still provided as a ROM dataspace.

Ref #3027
2018-11-29 11:54:31 +01:00
Stefan Kalkowski
fa67ec52ae cpu_sampler_noux: do not test platforms w/o pkg
Platform without driver-interactive package will fail. Therefore,
whitelist which platforms do work in the run-script
2018-11-29 11:54:31 +01:00
Stefan Kalkowski
41dfc51beb test-expat: use zero-filled read buffer
Fix #3062
2018-11-29 11:54:31 +01:00
Stefan Kalkowski
9857a0c956 depot_autopilot: disable test-python for ARM
The test for python requires x86 to be built. Therefore, there is no test
binary available when trying to execute that test on ARM with depot_autopilot.
2018-11-29 11:54:31 +01:00
Johannes Kliemann
db162477a4 ada: fix exception handling
Fixes #3061
2018-11-29 11:54:31 +01:00
Christian Prochaska
3b1653dad7 sculpt: update Arora launcher for release 18.11 2018-11-29 11:54:31 +01:00
Stefan Kalkowski
d7fa4cfb8b hw: enable eager FPU context switch for ARM
* Add an ieee754 FPU test
* Remove simple fpu test

Fix #2822
2018-11-29 11:54:31 +01:00
Norman Feske
4b4247f412 window layouter: limit maximized size to client
This patch constraints the window size of the generated layout to the
minimum of the client's real window size and the wanted window size
(both may differ when resizing or maximizing windows).
2018-11-29 11:54:31 +01:00
Norman Feske
08bb689ae7 window layouter: bring unknown windows to front
This patch improves the handing of new appearing windows for which only
a wildcard assignment - but no exact assignment - rule exists. In the
prior version, an interactively raised window would stay in front of
such a window, which is unintuitive. The new version applies the
to-front mechanism to unknown new windows. For known new windows (with
an exact assignment rule) their original stacking position is preserved.
2018-11-29 11:54:30 +01:00
Norman Feske
4145417f67 window_layouter: improve window-resize handling
This patch solves an off-by-one problem in the window-size calculation,
which resulted in sporadic artificial resize requests. In Sculpt, this
glitch caused flickering artifacts in VirtualBox windows caused by
superfluous guest desktop-resize handling.

Furthermore, the patch introduces the dropping of resize requests with
unchanged content.
2018-11-29 11:54:30 +01:00
Josef Söntgen
af5869cd07 sculpt: update download_debian launcher for 18.11 2018-11-29 11:54:30 +01:00
Alexander Boettcher
876f60169c sculpt: update top_view to 18.11 2018-11-29 11:54:30 +01:00
Alexander Boettcher
4ea98dfee4 sculpt: update browser VMs for 18.11 2018-11-29 11:54:30 +01:00
Emery Hemingway
376f086ec1 Split off graphical Mirage run into mirage_pretty
Ref #2945
2018-11-29 11:54:30 +01:00
Norman Feske
005d6d6b35 sculpt: trim config/deploy default
The commented-out <start> nodes are prone to become inconsistent with
the launchers. Hence, this patch removes them. Start nodes should better
be added by the '+' menu, at least initially.

Furthermore, the patch directs requests for the vfs.lib.so ROM to core's
ROM service to reduce the impact of low-level ABI changes (i.e., the
packet-stream layout) on existing vfs/libc-based packages.
2018-11-29 11:54:30 +01:00
Martin Stein
89020bc3c0 depot_autopilot: move RTC test to autopilot.list 2018-11-29 11:54:30 +01:00
Norman Feske
538c3a6692 init: consider lacking service name attribute
This patch makes init robust against invalid routing rules that lack a
name attribute in the '<service>' node. This situation may occur when
interactively editing routes in Sculpt.
2018-11-29 11:54:30 +01:00
Sebastian Sumpf
8015dbe8b7 Move OpenJDK to the Genode world repository
This reverts commit 58fb5ed722.

fixes #3060
2018-11-29 11:54:30 +01:00
Sebastian Sumpf
d3dbdae395 libc: add SO_LINGER and TCP_NODELY to socket fs plugin
issue #3060
2018-11-29 11:54:30 +01:00
Sebastian Sumpf
48e07d7dff vfs: support files names of with exactly 100 characters
GNU tar does not null terminate or create a long name for file names of
exactly 100 characters.

issue #3060
2018-11-29 11:54:30 +01:00
Emery Hemingway
2d17af9f28 Libc: use caller integer width for return value of sysctl PHYSMEM
Return a value in the same width as provided by the caller of sysctl for
PHYSMEM and USERMEM. This is to ensure that if a caller provides a
64-bit integer, a 64-bit value will be returned for 32-bit machines.

issue #3060
2018-11-29 11:54:29 +01:00
Norman Feske
98518e39cd drivers_interactive-pc: increase ps2_drv caps
This is needed because the added heartbeat monitoring.
2018-11-29 11:54:29 +01:00
Christian Helmuth
af49ec7583 Support custom DEPOT_DIR in noux_tool_chain_auto.run 2018-11-29 11:54:29 +01:00
Emery Hemingway
a20d37c50a Add [depot_user] hook to depot_autopilot 2018-11-29 11:54:29 +01:00
Emery Hemingway
a2bdcc68c2 Throw exception for invalid packets at packet streams
Some application code is dereferencing the pointer returned by
'packet_content' at packet streams without checking that it is valid.
Throw an exception rather than return a null pointer, except for
zero-length packets, which have somewhat implicit invalid content and
that we believe to be properly handled in all current cases.

The client-side of a packet stream cannot take corrective action if the
server-side is sending packets with invalid content, but the servers
that provide packet streams should catch this exception to detect
misbehaving clients.

Ref #3059
2018-11-29 11:54:29 +01:00
Norman Feske
e5d1d26535 sculpt: version 18.11 2018-11-29 11:54:29 +01:00
Sebastian Sumpf
91225fbcca qt5: forward window title to nitpicker
This enables Qt5 applications to set a Genode label via 'setWindowTitle'
from within Qt5 applications, and thus, making them identifiable to
other Genode components, like a layout manager.

fixes #3046
2018-11-29 11:54:29 +01:00
Norman Feske
13be339d81 sculpt: let window layouter recall its prior state
Issue #3024
Issue #3031
2018-11-29 11:46:02 +01:00
Norman Feske
b89cfa95e7 sculpt: launcher for recall_fs
The recall file system is a place where components can remember state.
E.g., to allow the window layouter to recall the window layout of the
previous session.
2018-11-29 11:46:02 +01:00
Norman Feske
6c70a51d28 sculpt_manager: improved popup toggling
In a corner case, the toggling of the popup menu entered a state
where the menu could not be opened anymore by the user. Specifically
the following input sequence triggered this problem.

1. The user opens the menu
2. The user clicks on the menu and holds the button
3. While holding the button, the user moves the pointer to the
   outside of the popup (e.g., to the '+' button)
4. The user releases the button.

In this situation, the popup is closed but the hover information for the
popup contains still the original clicked-on item. Hence, all subsequent
clicks on the '+' appear as both a click on the '+' (opening the popup)
and a click on the "hovered" popup entry (closing the popup).

The patch explicitely clears the popup's hover information when closing
the popup.
2018-11-29 11:46:02 +01:00
Emery Hemingway
7f1974e9e8 Update lwIP to 2.1.2
Fix #3035
2018-11-29 11:46:02 +01:00
Alexander Boettcher
9f4801363c tool: use static analyzer with depot creation tool
Convince wrapper to make static analyzer working with tool/depot/* tools.

Issue #3022
2018-11-29 11:46:02 +01:00
Alexander Boettcher
8199b3e685 tool: support static clang analyzer in build.mk
Issue #3022
2018-11-29 11:46:02 +01:00
Emery Hemingway
918281b01f Genode SDK
Makefile for generating a Genode SDK.

Fix #2948
2018-11-29 11:46:02 +01:00
Emery Hemingway
447329eaee Chroot: change root to explicit prefix and label sub-dirs
Change the root of a session request into an explicit path and apply the
label-to-path conversion using the "path_prefix" policy attribute. This
is in addition to only applying a root change with a "path" attribute.

Ref #3031
Fix #3056
2018-11-29 11:46:02 +01:00
Johannes Schlatow
74f2954013 packet_stream: improve buffer alignment
The bulk buffer is now 64Byte-aligned so that the allocated
packets get aligned likewise (assumed the packet allocator uses an
appropriately aligned block size). This ensures that each packet
starts at a new cache line on common platforms.

Issue #3053
2018-11-29 11:46:02 +01:00
Johannes Schlatow
4e375ec6df zynq: move RAM size to board defs 2018-11-29 11:46:02 +01:00
Johannes Schlatow
dc0bfd7008 zynq: zero-copy implementation of nic_drv
- Packet stream buffers are directly passed to DMA.
- Also enables pause frames and checksum offloading.

Issue #3053
2018-11-29 11:46:01 +01:00
Emery Hemingway
8ad56a6c0e Move libc headers to conform to x86_32, x86_64, and arm SPECS
Move the libc-i386, libc-amd64, and libc-arm include directories into
the standard "include/spec" directory. This allows the platform specific
headers in the libc API package to be detected in a generic manner.

Ref #3051
2018-11-29 11:46:01 +01:00
Emery Hemingway
7a11384177 Merge pthread into libc library
The pthread API is considered a standard feature of libc so better to
simply merge it with the libc. Pthreads are in fact already a part of
the libc in the form of weak symbols. This merger is also a prerequisite
for better integrating pthreads with the libc I/O task.

Fix #3054
2018-11-29 11:46:01 +01:00
Christian Prochaska
fe322b8e82 test-xml_generator: enable code coverage analysis
Issue #3048
2018-11-29 11:46:01 +01:00
Christian Prochaska
5639f31295 depot_autopilot.run: integrate gcov tool
Issue #3048
2018-11-29 11:46:01 +01:00
Christian Prochaska
651d9f587f depot.inc: 'append_src_and_api_depot_packages_to_tar' function
This function adds the src and api depot packages for the given pkg or src
packages to the given tar archive.

Issue #3048
2018-11-29 11:46:01 +01:00
Christian Prochaska
1f985dec38 mk: add 'COVERAGE' option
'COVERAGE=yes' in 'target.mk' adds gcov-specific compiler flags and links the
program with libgcov.

Issue #3048
2018-11-29 11:46:01 +01:00
Christian Prochaska
e74771e047 libports: add libgcov and gcov tool
Issue #3048
2018-11-29 11:46:01 +01:00
Emery Hemingway
18e855e4d5 Genode toolchain depot package
Fix #3028
2018-11-27 11:38:13 +01:00
Emery Hemingway
15039f3ae8 Update MPFR port URL
Ref #3028
2018-11-27 11:38:13 +01:00
Emery Hemingway
63b6e04dae Move GMP spec directories to standard locations
Ref #3028
2018-11-27 11:38:13 +01:00
Christian Prochaska
fd7ab79fe0 vfs: implement 'complete_sync()' in 'Single_file_system'
Fixes #3047
2018-11-27 11:38:13 +01:00
Ben Larson
cde542c37c libc: read whole file into buffer
Fix #3023
2018-11-27 11:36:36 +01:00
Martin Stein
789d908cee depot_autopilot: show result statistic
Print a line like "succeeded: 35 failed: 11 skipped: 2" below the list of test
results. Adds further attributes to <previous-results> to communicate also the
previous statistics.
2018-11-27 11:36:36 +01:00
Martin Stein
c405ec19ce pkg/test-rm_fault: event "Error: could modify ROM" 2018-11-27 11:36:36 +01:00
Martin Stein
c65a13b3a4 run/depot_autopilot: power off before reboot 2018-11-27 11:36:36 +01:00
Johannes Kliemann
eb7c367e25 ada: replace local runtime implementation with port
Fixes #3044
2018-11-27 11:36:36 +01:00
Christian Helmuth
dee4d43eb9 Use common abort message in solo5 run scripts
This enables our nightly tools to detect this abort is not fatal but
because of an unsupported platform.
2018-11-27 11:36:35 +01:00
Ben Larson
1039ef7a65 qt5: avoid unresponsive window when aborting close
Fixes #2997
2018-11-27 11:36:35 +01:00
Norman Feske
c6fd0055b1 sculpt: split window manager into multiple pkgs
This commit moves the window layouter and window decorator into
dedicated packages that can now be combined with the "wm" server at
runtime and restarted/reconfigured/swapped-out independently.

To use the window manager, one must start the 'wm', 'window_layouter',
and one of the 'motif_decorator' or 'themed_decorator' subsystems.

Fixes #3024
2018-11-27 11:36:35 +01:00
Martin Stein
eab7f54139 depot_autopilot: skip libc_getenv on foc x86
When doing the libc_getenv test on autopilot+foc+x86 and one of the
subsequent tests crashes the system so it gets rebooted by the run
script, the system doesn't come up again. It gets stuck after core
initialization.

Issue #3027
2018-11-27 11:36:35 +01:00
Martin Stein
abd3855161 test/rm_nested: fix EP double dissolve
Fixes #3045
2018-11-27 11:36:35 +01:00
Christian Helmuth
712df01341 libports: update hash of downloaded fatfs sources
The author updated http://www.elm-chan.org/fsw/ff/arc/ff13b.zip recently
with a marginal change of documents/doc/appnote.html.
2018-11-27 11:36:35 +01:00
Emery Hemingway
e63a870bce Update lwIP to 2.1.1
Fix #3035
2018-11-27 11:36:35 +01:00
Martin Stein
e0b7fb1929 nic_bridge: fixed MAC addresses
Enable configuration of a fixed MAC address for each client.

Fixes #3040
2018-11-27 11:36:35 +01:00
Stefan Kalkowski
a062ba6dd2 base: add tlb shootdown test metric to smp test
Fix #3041
2018-11-27 11:36:35 +01:00
Stefan Kalkowski
36fe50ebad base: unify mp_server and affinity test
* remove outdated cpufreq test for Arndale
* execute new SMP test on hardware not in Qemu in nightly tests

Ref #3041
2018-11-27 11:36:35 +01:00
Norman Feske
19d7a488de init: health monitoring of child components
Fixes #3039
2018-11-27 11:36:34 +01:00
Stefan Kalkowski
d56a7beadc hw: increase cpu frequency on Wandboard Quad
Ref #1807
2018-11-16 15:17:06 +01:00
Stefan Kalkowski
8c460b3ea5 hw: enable l2-cache on Wandboard Quad (fix #1807) 2018-11-16 15:17:06 +01:00
Norman Feske
4cffefe1dd News item about Genode Component Public License 2018-11-16 15:07:53 +01:00
Christian Helmuth
70e7499e48 depot: update recipe hashes 2018-11-16 15:07:53 +01:00
Martin Stein
2d041ac0fc depot_autopilot: evaluate sets of test packages 2018-11-16 15:07:53 +01:00
Martin Stein
146f45f3d4 Archive recipes for autopilot tests 2018-11-16 15:07:53 +01:00
Martin Stein
6a540652fa pkg/test-fs_report: add autopilot events 2018-11-16 15:07:53 +01:00
Martin Stein
0c60b312be liports/recipes: api/ and src/python 2018-11-16 15:07:53 +01:00
Martin Stein
21efcf9e45 os/recipes: src/nic_bridge 2018-11-16 15:07:53 +01:00
Emery Hemingway
6c8f1c8796 Add Terminal provider rules to depot deploy and depot autopilot
Support the '<terminal/>' tag in the depot package runtime '<provides/>'
declaration.

Fix #3034
2018-11-16 15:07:52 +01:00
Emery Hemingway
bc539ce892 Native Solo5 bindings
A shared library implementation of the unikernel middleware.

https://github.com/Solo5/solo5

Fix #2945
2018-11-16 15:07:52 +01:00
Emery Hemingway
5a4dab88d6 PDF viewer: revert changes to framebuffer model
The PDF viewer can crash under a number of conditions due to changes to
the internal framebuffer model that were made to support mouse wheel
panning. These changes are reverted until the model can be reimplemented
to explicitly support page panning.

Fix #3021
2018-11-16 15:07:52 +01:00
Norman Feske
1a75c5227e Rename wm pkg to motif_wm
This way, we can subsequently introduce a new 'wm' pkg that contains the
window manager only, w/o any hard-wired decorator and layouter.

Issue #3024
2018-11-16 15:07:52 +01:00
Christian Helmuth
61863e2ffb qt5: configurable layouter/decorator in run scripts 2018-11-16 15:07:52 +01:00
Norman Feske
c60604062c decorator: improve robustness of window restacking
This patch improves the detection of new appearing top-most windows.
Such a window should prompt the decorator to bring the corresponding
nitpicker view(s) to the front of the view stack. The original
implementation relied on hints provided by the layouter (the 'topped'
attribute). With the patch, the decorator tracks the top-most window by
itself, which improves the robustness.

As a second improvement, the patch defers the destruction of windows to
the point when all other window operations are completed. This hides
intermediate states when replacing one window by another in one step,
which is typical for console-like scenarios. Hence, this patch should
eliminate flickering artifacts when switching from one virtual console
to another.

Issue #3031
2018-11-16 14:53:26 +01:00
Norman Feske
a973d9902b gems: flexible window layouter
This commit replaces the former floating_window_layouter with a new
window_layouter component that supports the subdivision of screen space
into columns and rows, the concept of layers, and the principle ability
to store window layout information across reboots. The latter is
accomplished by reflecting the component's internal state as a 'rules'
report to the outside.

Fixes #3031
2018-11-16 14:53:20 +01:00
Martin Stein
5bb5a62d37 timeout_types.xsd: allow 0 seconds
The previous range was from 1..X because we only used it for durations. But
with the Depot Autopilot we want to use it also for a timestamp.
2018-11-16 14:37:47 +01:00
Martin Stein
a1ff3cc317 base-foc: recipes for ARMv7a platforms
* In base-foc/recipes/src/ replace base-foc with base-foc-pc
* To base-foc/recipes/src add base-foc-arndale, base-foc-pbxa9
* Ensure that the correct base-foc recipe is choosen by the run module
  'boot_dir/foc'
2018-11-16 14:37:47 +01:00
Martin Stein
655fbbd984 base-hw: recipes for ARMv7a platforms
* To base-hw/recipes/src add base-hw-arndale, base-hw-imx53_qsb,
  base-hw-imx53_qsb_tz, base-hw-odroid_xu, base-hw-panda, base-hw-rpi,
  base-hw-wand_quad
* Ensure that the correct base-hw recipe is choosen by the run module
  'boot_dir/hw'
2018-11-16 14:37:20 +01:00
Norman Feske
f93294975b base-linux: avoid double define of __always_inline
This patch fixes the following build problem that occurs on recent
GNU/Linux systems:

  /usr/include/x86_64-linux-gnu/sys/cdefs.h:307:0: error: "__always_inline" redefined
  ...
  /usr/include/linux/stddef.h:5:0: note: this is the location of the previous definition

The code in 'cdefs.h' does not check if the '__always_inline' is already
defined. The patch works around the problem by including the 'sys/cdefs.h'
first.
2018-11-16 14:37:20 +01:00
Martin Stein
ee91d7339c run: prevent duplicates in missing archive warning 2018-11-16 14:37:20 +01:00
Martin Stein
941f785b7f Add tests to autopilot.list 2018-11-16 14:37:20 +01:00
Martin Stein
f64ec500bf run/rtc: assert spec x86 and !linux 2018-11-16 14:37:20 +01:00
Martin Stein
36932ee129 run/fs_packet: raise test timeout 2018-11-16 14:37:20 +01:00
Martin Stein
0c70a69618 run/dynamic_config_slave: fix cap quota 2018-11-16 14:37:20 +01:00
Martin Stein
0b3351991a run/dynamic_config_loader: fix cap quota 2018-11-16 14:37:20 +01:00
Martin Stein
99d9830968 run/dynamic_config: fix caps attribute 2018-11-16 14:37:20 +01:00
Martin Stein
719848d59a run/trace_logger: remove unnecessary stuff 2018-11-16 14:37:20 +01:00
Martin Stein
fff80bfe6c run/terminal_crosslink: fix cap quota 2018-11-16 14:37:20 +01:00
Martin Stein
4e29c1ca40 test/xml_node: move to base 2018-11-16 14:37:19 +01:00
Martin Stein
ed1cec2efa test/xml_generator: move to base 2018-11-16 14:37:19 +01:00
Martin Stein
510d7644fa test/weak_ptr: move to os/ as it uses a timer 2018-11-16 14:37:19 +01:00
Martin Stein
51cae1f0a3 Add base lib to tests
For being able to build the tests via source archives, the 'base'
library must be denoted as dependency explicitely in their 'target.mk' file.
This is because when building archives, the API dependencies of used APIs are
not taken into account.
2018-11-16 14:37:19 +01:00
Martin Stein
0b8ea50589 test/slab: move to os/ as it uses timer driver 2018-11-16 14:37:19 +01:00
Martin Stein
ebfd49661e test/init: remove unused _expected_log_message 2018-11-16 14:37:19 +01:00
Martin Stein
0eef5b506c test-util_mmio: rename test-mmio 2018-11-16 14:37:19 +01:00
Martin Stein
590dc1ac59 test/util_mmio: simplify success conditions 2018-11-16 14:37:19 +01:00
Martin Stein
f439cf0de1 test/rm_nested: destroy all objects before finish
Explicit destruction of test objects (esp. RM connection) tests for
regressions in the service life-time implementation.

Issue #3012
2018-11-16 14:37:19 +01:00
Martin Stein
ebdb3c4c32 ada lib: prepare for creation of packages 2018-11-16 14:37:19 +01:00
Martin Stein
5e8c53f61c base_types.xsd: allow session labels of length 0 2018-11-16 14:37:19 +01:00
Stefan Kalkowski
fe3f67f712 test: add simple cpu benchmark test (fix #3026) 2018-11-16 14:37:19 +01:00
Stefan Kalkowski
24e6a5ee73 test/memcpy: add Genode's memset to the suite
Ref #3016
2018-11-16 14:37:18 +01:00
Alexander Boettcher
f53a56982c clang: use template keyword on template methods
avoids tons of warnings

Issue #3022
2018-11-16 14:37:18 +01:00
Alexander Boettcher
886619f63e base: set parent info in child_process solely once
clang:
 warning: Value stored to 'parent_info' is never read

Issue #3022
2018-11-16 14:37:18 +01:00
Alexander Boettcher
5120e5138c nova: avoid null pointer warnings
Issue #3022
2018-11-16 14:37:18 +01:00
Alexander Boettcher
f7364d8463 base: avoid warnings in list.h
clang:

error: member 'Element' found in multiple base classes of different types

Issue #3022
2018-11-16 14:37:18 +01:00
Alexander Boettcher
fc0dbc3f70 base: avoid null pointer warnings
warning: Called C++ object pointer is null

Issue #3022
2018-11-16 14:37:18 +01:00
Alexander Boettcher
17f7147ac1 base: avoid warnings about shift operations
clang:
 warning: The result of the '<<' expression is undefined
2018-11-16 14:37:18 +01:00
Alexander Boettcher
4b62f091a9 base: fix accessibility of enum in bit_array.h
avoids warning by clang:

error: 'BITS_PER_WORD' is a private member of 'Genode::Bit_array_base'

Issue #3022
2018-11-16 14:37:18 +01:00
Alexander Boettcher
9ee3843f35 timer: fix conversion error in timeout handling
clang complains: comparison is always false due to limited range of data type

Issue #3022
2018-11-16 14:37:18 +01:00
Christian Prochaska
7c9e850235 qt5: add typeinfo and vtable symbols to symbol files
Fixes #3025
2018-11-16 14:37:18 +01:00
Christian Helmuth
0867da28a2 depot: update recipe hashes 2018-10-29 09:36:23 +01:00
Emery Hemingway
3e5ac64ee2 Libc: support monotonic time without RTC
Use the Timer session duration for CLOCK_MONOTONIC and  CLOCK_UPTIME.
Use the Genode::Duration object for passing internal time, it supports
sub-millisecond time and helps disambiguate units of time.

Fix #3018
2018-10-29 09:36:23 +01:00
Emery Hemingway
6178e378c1 Test libc sleep and gettime in run/libc
Ref #3018
2018-10-29 09:36:22 +01:00
Emery Hemingway
3e31e2ba53 VFS LwIP: blocking TCP write
Block and loop until application writes are sent or buffered in their
entirety. Do not call "tcp_output" directly, LwIP calls this procedure
internally and calling it again appears to disrupt the LwIP TCP state
machine.

Fix #3017
2018-10-29 09:36:22 +01:00
Emery Hemingway
3958ea50a0 Allocator_avl: apply_any method
Provide an `apply_any` method for accessing any member of the allocator,
this is provided for destructing members of the allocator.

Ref #2996
2018-10-29 09:36:22 +01:00
Christian Helmuth
9ca214eee8 usb: quickfix pointer-emulation for touch screen
Move button-event reporting behind pointer-position update.

This is just a quickfix to restore correct pointer emulation with
dde_linux usb_drv. It does not change usb_hid_drv because the approach
is a questionable workaround of the current input event handling, which
reports events promptly on occurrence of inputs events and ignores
synchronization events completely. The original contrib code reported
the button press before absolute x and y positioning followed by a sync
event.

Issue #3019
2018-10-29 09:36:22 +01:00
Josef Söntgen
9557e64822 gems: add interactive SSH Terminal component
This component allows access to Terminal sessions via interactive SSH
sessions. Please read _repos/gems/src/server/ssh_terminal/README_ for
more detailed information.

Fixes #3014.
2018-10-29 09:36:22 +01:00
Josef Söntgen
82fb76c142 libssh: add async event bind patch
Issue #3014.
2018-10-29 09:36:22 +01:00
Josef Söntgen
9ab288d8e3 libports: update libssh to 0.8.4
Issue #3014.
2018-10-29 09:36:22 +01:00
Alexander Boettcher
5446c52c43 base: make Entrypoint placeable on specific cpu
Fixes #3008
2018-10-29 09:36:22 +01:00
Pirmin Duss
b112b7b4ce mesa: fix port_prepare on ARCH Linux
Issue #3003
2018-10-29 09:36:22 +01:00
Norman Feske
f21493272d test for measuring memcpy throughput (fix #3016) 2018-10-29 09:36:22 +01:00
Johannes Kliemann
c2d85ff554 Ada: allow separate GCC for gnatmake
Fixes #3011
2018-10-29 09:36:22 +01:00
Alexander Boettcher
b8cc468f02 base: support assignment of invalid weak_ptr
This fixes the region-map component implementation in core, which uses a
'Genode::Weak_ptr<Genode::Region_map_component> _faulting_region_map'
member. This member is assigned a valid weak_ptr or an invalid weak_ptr
according to the state machine.

Fixes #3012
2018-10-29 09:36:22 +01:00
Alexander Boettcher
e6ddffb93c nova: exclude framebuffer range from buddy memory
Fixes #3013
2018-10-29 09:36:21 +01:00
Alexander Boettcher
ca727ea3d9 nova: update to latest r10 branch
- which avoids some false postive overmap mappings
- and contains more accurate kernel memory accounting.

Fixes #3009
2018-10-29 09:36:21 +01:00
Norman Feske
7d641d5f1f base: add Reconstructible::conditional method
The new 'conditional' method simplifies the typical use case for
'Constructible' objects where the constructed/destructed state depends
on a configuration parameter. The method alleviates the need to
re-implement the logic again and again.

The patch also removes the 'Reconstructible' constructor arguments
because they are unused.

Fixes #3006
2018-10-29 09:36:21 +01:00
Martin Stein
fe303f0e46 init/config.xsd: add <service> specification
Fixes #3007
2018-10-29 09:36:21 +01:00
Alexander Boettcher
5473a36f81 seoul: produce hash stable port
Remove line printing the user name and the date in generated source code.

Fixes #3004
2018-10-29 09:36:21 +01:00
Emery Hemingway
cf7e23f0d6 Tool/run: configure power_on/amt and log/amt separately
Fix #3005
2018-10-29 09:36:21 +01:00
Martin Stein
ae55954919 nic_router_flood: reworked to stress/analyze more
Issue #2953
2018-10-29 09:36:21 +01:00
Martin Stein
7b47c8f0c6 net_flood: fix CRC error, make more precise
Issue #2953
2018-10-29 09:36:21 +01:00
Martin Stein
304cb290d9 nic_router: rework quota accounting
* Account all RAM/CAP quota of a session except quota for metadata used in
  core. The latter is considered when asking if a session can afford to make
  an operation but it does not get accounted to always be able to pay back all
  quota when a session closes. The general accounting mechanism is moved from
  atop of the allocators down to the level of RAM/RM session operations.
* report statistics about session objects and quota if <report stats="yes"
  quota="yes"/> is configured. (default is yes if <report> is present)

Issue #2953
2018-10-29 09:36:21 +01:00
Martin Stein
bd77bb41df nic_router: improve handling of TCP termination
Like suggested by RFC 2663, reprogram the dissolve timeout of a TCP link
state to 2 times the maximum segment lifetime (by default 1 minute) when
receiving a matching packet with the FIN flag set, or with the ACK flag
set to acknowledge a FIN of the remote side.

Mark a link state as closed (no further reprogramming of the dissolve
timeout) and set the dissolve timeout to 2 times the maximum segment
lifetime when receiving a packet with the RESET flag set.

Issue #2953
2018-10-29 09:36:21 +01:00
Martin Stein
3db7181104 nic_router: limit packets handled per signal
Make it configurable how many packets get handled at a max per signal to
prevent DoS attacks by clients.

Issue #2953
2018-10-29 09:36:21 +01:00
Martin Stein
b48c917984 nic_router: allow ld_verbose attribute
Issue #2953
2018-10-29 09:36:21 +01:00
Martin Stein
d6c6549354 nic_router: destroy links on insufficient resource
If the NIC router has insufficient CAP or RAM quota for the creation of
a state object for an interface, it tries to destroy a certain amount of
existing state objects of this interface to free resources. Afterwards,
it retries handling the current packet once. If it does fail again, the
router drops the packet.

Issue #2953
2018-10-29 09:36:21 +01:00
Martin Stein
4442c79526 nic_router: "packet alloc" error only when verbose
Issue #2953
2018-10-29 09:36:21 +01:00
Martin Stein
364f69edad Xml_generator: fix and test missing '\0'
Ensure that a '\0' always appears at the end of the ouput of the XML
generator.  Previously, exceptions during the Node(...) constructor
might have prevented this. This commit also extends the xml_generator
test to drive a harder test on exceptions in the Xml_generator.

Issue #2953
2018-10-29 09:36:20 +01:00
Martin Stein
85d589a49c Xml_generator: fix exception handling in Node(...)
When the functor provided to the Node constructor throws an exception,
do revert all changes in reverse order. Previously, the changes made
to the parent node were not considered by the exception handler which
caused unnecessary characters to remain in the out buffer for each
reverted node.

Issue #2953
2018-10-29 09:36:20 +01:00
Christian Helmuth
e88081a454 depot: update recipe hashes 2018-10-01 11:25:03 +02:00
Christian Prochaska
31ca9d9ad7 libusb: fix page fault after failed USB transfer
Fixes #3002
2018-10-01 10:41:46 +02:00
Christian Prochaska
9c6120ccad usb_drv: call 'mod_timer()' with absolute timeout value
Fixes #3001
2018-10-01 10:41:46 +02:00
Sebastian Sumpf
0cc87d3c85 ldso: check for DYNAMIC segment in ELF files
If the DYNAMIC segment cannot be located the ELF file may be statically
linked. In this case an error is raised.

Fixes #3000
2018-10-01 10:41:46 +02:00
Alexander Boettcher
a8ed11e75b sel4/arm: make alignment faults visible
Fixes #2993
2018-10-01 10:41:46 +02:00
Edgard Schmidt
24a2b15eec tutorial: document required KERNEL argument 2018-10-01 10:41:46 +02:00
Edgard Schmidt
0a74f35062 tutorial: remove blocking run_genode_until line 2018-09-24 11:48:16 +02:00
Edgard Schmidt
a3fdefa6f9 tutorial: remove unused variable 2018-09-24 11:44:37 +02:00
Josef Söntgen
d56454f153 dde_bsd: update mirror URL 2018-09-24 11:18:23 +02:00
Emery Hemingway
c697fb6345 Simple bulk TCP test
Send 8 MiB from one socket to another, anticipating short writes and
short reads from sockets.

Fix #2989
2018-09-24 11:18:23 +02:00
Roman Iten
f65a7650c5 depot: allow to inject version command
Issue #2991
2018-09-24 11:18:23 +02:00
Josef Söntgen
018aebc0c8 wifi_drv: re-arm scan timer when enabled again
Issue #2988.
2018-09-21 15:51:58 +02:00
Josef Söntgen
f888c70982 wifi_drv: use dynamic allocations for AP list
Issue #2988.
2018-09-21 15:51:33 +02:00
Alexander Boettcher
9eabe316bf depot: support for gpg command override
Fixes #2981
2018-09-21 15:49:52 +02:00
Christian Helmuth
0f9059dea8 depot: update recipe hashes 2018-09-21 13:24:46 +02:00
Norman Feske
05d9d753d3 News item for Sculpt VC 2018-09-21 13:19:20 +02:00
Norman Feske
e9e4b04bf4 Sculpt VC documentation 2018-09-21 13:19:19 +02:00
Josef Söntgen
d4de105a57 sculpt: update download_debian launcher for 18.09 2018-09-21 13:19:19 +02:00
Alexander Boettcher
4c948ba4fb sculpt: update firefox vm and top for 18.09 2018-09-21 13:19:19 +02:00
Alexander Boettcher
3824ad4756 nova: define kernel memory based on system memory
Switch to kernel branch, that determines the available system memory during
boot time. The overall kernel memory is still static, but during boot time
dynamically the amount can be chosen. Following 3 config option exists:

CONFIG_MEMORY_BOOT is the amount of kernel memory allocated in the BSS
statically - effectively chosen during link time - see linker script.

CONFIG_MEMORY_DYN_MIN && CONFIG_MEMORY_DYN_PER_MILL configures the dynamic
part of the kernel memory allocation applied during early kernel boot time.
CONFIG_MEMORY_DYN_MIN is the amount of memory which should be allocated at
least. CONFIG_MEMORY_DYN_PER_MILL defines the amount of the system memory in
per mill which should be allocated at most. The overall maximum kernel memory
is restricted to ~1G (64bit), due to the chosen internal virtual memory layout.

Fixes #2985
2018-09-21 13:19:19 +02:00
Christian Helmuth
5d15c8d534 sculpt: version 18.09 for VC release 2018-09-21 13:19:19 +02:00
Christian Prochaska
cc92636de0 sculpt: add Arora runtime packages and launcher
Fixes #2984
2018-09-21 13:19:19 +02:00
Alexander Boettcher
142d503cb4 vbox5: disable assertions in recipe vbox5-nova
Issue #2984
2018-09-20 09:07:31 +02:00
Josef Söntgen
337184fbc6 sculpt_manager: handle WIFI connecting state
Issue #2988.
2018-09-20 09:06:18 +02:00
Josef Söntgen
293e86eda9 wifi_drv: update README to reflect current state
Issue #2988.
2018-09-20 09:06:18 +02:00
Josef Söntgen
ecccbb46cb wifi_drv: add hidden network support
Fixes #2988.
2018-09-20 09:06:17 +02:00
Josef Söntgen
8193e7b3b4 wifi_drv: schedule on socket call kick
Issue #2988.
2018-09-20 09:06:17 +02:00
Roman Iten
e382f68e48 sculpt: support display resolutions up to 4K UHD
Issue #2987
2018-09-17 16:23:52 +02:00
Roman Iten
9343618a9c sculpt: increase memory quota of drivers subsystem
On some machines, both the AHCI and NVMe drivers are started within the
[drivers -> dynamic] subsystem. This ultimately exhausted the RAM quota
of this subsystem.

Issue #2987
2018-09-17 16:23:52 +02:00
Norman Feske
f4c55aa4db sculpt: interactive deployment
This patch introduces the distinction of the manually managed
config/deploy from the managed config/managed/deploy. The latter
incorporates interactive changes of the system by the user. There are
two user interactions supported.

First, by clicking on the '+' button at the top-left of the runtime
view, the user can select a component to launch. All launchers at
config/launcher/ are listed in the popup menu. Each launcher can be
lauched only once. While running, is not available in the popup
menu.

Second, when selecting a node that corresponds to a start node in
config/deploy or that was interactively launched, the detailed view
shows a 'remove' button, which can be used to exclude the component
from the deployment.

The result of the interactive manipulation is always available at
config/managed/deploy. Hence, the current situation can be made
persistent by using it as config/deploy.

Fixes #2986
2018-09-17 14:12:20 +02:00
Emery Hemingway
b51ee34b11 Depot: support for GPG command line override
Allow the gpg utility to be overridden on the command line. For
example, './tool/depot/publish GPG="ssh 10.0.1.3 gpg" ...' would invoke
a remote gpg over SSH.

Fix #2981
2018-09-17 14:11:37 +02:00
Christian Prochaska
1f5a083129 qt5: load nic_drv without dynamic linker on Linux
Fixes #2982
2018-09-13 15:25:25 +02:00
Christian Helmuth
5dcf06d208 depot: update recipe hashes 2018-09-13 15:21:26 +02:00
Martin Stein
590ad78bfd nic_router_uplinks.run: make it easier to debug
Issue #2973
2018-09-13 15:21:13 +02:00
Martin Stein
d0aa699299 nic_router_uplinks.run: adapt to new wifi driver
Issue #2973
2018-09-13 15:21:13 +02:00
Josef Söntgen
040eae4806 wifi_drv: fix tasklet_schedule
The tasklet_schedule implementation was missing the unblock call, which
was no problem in the past because the correspending task would get un-
blocked by other work items. Now that every workqueue has its own task,
there is nobody left to unblock the task and thereby execute the
tasklet. As a tasklet is the only way to transmit any pending frames
after transmission was temporarily suspended - because the device/fw
was not able to process the TX request - this rendered 6xxx devices
unusable whenever this situation occurred.

Fixes #2973.
2018-09-13 15:21:13 +02:00
Christian Helmuth
cc61227f93 Adapt vbox5_genode_usb_hid to current log messages 2018-09-13 15:21:12 +02:00
Christian Prochaska
090ba0e235 arora: call main function from dedicated thread
The Arora main thread sometimes blocks on a pthread condition variable,
which prevents Genode signal processing with the current implementation.
This is especially a problem when the thread who could unblock the main
thread calls 'Libc::suspend()'.

As a workaround until the pthread locking mechanisms get adapted to the
Genode libc execution model, the Arora main function can be called from
a dedicated thread.

Fixes #2978
2018-09-13 15:21:12 +02:00
Christian Prochaska
1d1942f48a arora.run: use VFS server for socket file system
Using the lxip VFS plugin locally can cause a deadlock in the browser
(see issue #2635).

Fixes #2977
2018-09-13 15:21:12 +02:00
Christian Prochaska
2300feaf9d arora.run: honor --depot-user
Fixes #2976
2018-09-13 15:21:12 +02:00
Emery Hemingway
86ee1b7448 Noux: close stdio at exit
Close the stdin, stdout, and stderr I/O channels at child exit. This
serves to flush buffers at the I/O resources which might not be written
otherwise.

Ref #2919
2018-09-13 15:21:12 +02:00
Christian Prochaska
7e7cb15bd1 arora.run: mount socket fs at '/socket'
Fixes #2975
2018-09-13 15:21:12 +02:00
Alexander Boettcher
6a496087ba nitpicker: report focus/hover when owner vanishes
Fixes #2974
2018-09-13 15:21:12 +02:00
Stefan Kalkowski
76e9645787 dde_linux: support of GSIs in new usb_host_drv 2018-09-13 15:21:11 +02:00
Martin Stein
abe1b98486 nic_router.run: fix resource requests
Raise cap quotas.

Issue #2972
2018-09-13 15:21:11 +02:00
Emery Hemingway
98380cebda VFS LwIP: do not free TCP PCBs on error
The VFS LwIP plugin is page-faulting on connect error because the LwIP
library frees a failed TCP protocol control block before calling the
error callback, and then the VFS plugin dereferences the PCB to free it
a second time. This problem was caused by a failure to follow
documentation during a transition from a C callback to a C++ method.

Fix #2972
2018-09-13 15:21:11 +02:00
Martin Stein
770fc77584 dde_linux lx_emul wait: get rid of unused args 2018-09-13 15:21:11 +02:00
Martin Stein
cc4a72243d print_lines: fix bugs in line length calculation
1) The loop for determining the line length read from a character offset
   before checking whether the offset is smaller than the given string
   length. This could have caused access outside the string buffer.

2) The routine for determining the line length first seeked for the
   offset of the last real character of the line and than added one for
   getting the length but only if the following character was '\n'. This
   has to be done for any other line-terminating character too. The only
   case where you don't want to do this is when the end of the whole
   string is reached.

Issue #2967
2018-09-13 15:21:11 +02:00
Christian Prochaska
9a2af89c4e vfs: use correct enum values in 'Dir_file_system::open_composite_dirs()'
Fixes #2968
2018-09-13 15:21:11 +02:00
Christian Prochaska
5adb6f0c5f socket_fs: show ioctl FIONREAD error message only once
Fixes #2969
2018-09-13 15:21:10 +02:00
Christian Prochaska
35f61475f5 libc_vfs: don't suspend in 'notify_read_ready()'
When 'notify_read_ready()' is called during 'select()' and fails,
suspending can cause a deadlock when the libc IO response handler becomes
active and calls 'select_notify()', which tries to acquire the
'select callback list lock', which is already acquired by the suspended
'select()' call.

It seems possible to ignore a failed 'notify_read_ready()' call instead of
suspending. When the VFS plugin calls the IO handler later when the
notification request can be processed, the 'select_notify()' call of the
libc IO response handler will eventually call 'notify_read_ready()' again.

Fixes #2970
2018-09-13 15:21:10 +02:00
Christian Helmuth
473fde900b ports: download vim archive from github
The FTP download was shaky and according to
https://www.vim.org/download.php, GitHub is the recommended way to
obtain vim.

Fixes #2943
2018-09-13 15:21:10 +02:00
Emery Hemingway
874ba409ca Libc: single-user getpwent implementation
Implement the passwd database subroutines with single-user database.
This database is populated with a <passwd/> sub-node of the libc
configuration node. All fields of the "passwd" struct may be specified
with reasonable defaults provided for a "root" user. This allows a
libc-based component to spoof user information for the sake of porting
existing Unix software.

A test is provided at run/libc_getpwent.

Fix #2919
2018-09-13 15:21:10 +02:00
Emery Hemingway
9f6838ae42 Libc: internal accessor for <libc/> config
Add an internal accessor for the libc configuration node.

Ref #2919
2018-09-13 15:21:10 +02:00
Emery Hemingway
64a63885d1 VFS: line buffer LOG file-system
Buffer data written to log file handles until newline or overflow.

Ref #2467
Ref #2919
2018-09-13 15:21:10 +02:00
Alexander Boettcher
d1e7ca23e2 sculpt: update Firefox VMs to 62.0 (Seoul + VBox5) 2018-09-13 14:54:21 +02:00
Alexander Boettcher
4d228e22cb core: destruct pd::_ram_quota after regions
Fixes #2966
2018-09-13 14:54:21 +02:00
Alexander Boettcher
4ca8e31e00 intel_fb: enable Intel VBT lookup via ACPI
Fixes #2965
2018-09-13 14:54:21 +02:00
Christian Helmuth
3697f50bd3 qt5: explicit file modification time in tar archives
GNU tar interprets the passed time value in local time by default, which
lead to unstable hashes again. So, now provide a complete date/time
value incl. time zone.

Related to #2842
2018-09-13 14:54:21 +02:00
Emery Hemingway
8a9b18e40e Fix for single file VFS servers
The VFS server does not support file-system with one single-file plugin
providing the root. This is because the "leaf_path" is not universally
implemented to handle the path "/". This fix is simply to skip a
"leaf_path" check when opening the path "/".

Ref #2919
2018-09-13 14:54:21 +02:00
Stefan Kalkowski
9221f7916a dde_linux: enable QEMU support for new usb_hid_drv 2018-09-13 14:54:21 +02:00
Stefan Kalkowski
1ec2f43713 dde_linux: use correct type in lx_emul's min
* use a macro for `min` inside lx_emul/kernel.h
* unify the definition of the clamp function

Fix #2964
2018-09-13 14:54:20 +02:00
Alexander Boettcher
bc9f0fdc34 nova: lock pager object state during fault lookup
Fixes #2950
2018-09-05 11:10:02 +02:00
Alexander Boettcher
f01464ef9e driver_manager: disable ohci when inside vbox
Fixes #2963
2018-09-05 11:08:54 +02:00
Alexander Boettcher
dbb37607c5 usb: fix regression in setup_timer
introduced by update to 4.16.3. Fixes page faults in OHCI USB driver part.

Issue #2963
2018-09-05 11:08:25 +02:00
Norman Feske
2049498af0 depot: update recipe hashes 2018-09-05 11:04:24 +02:00
Christian Helmuth
a6d7d5da07 tool/port: limit destructive git operations to port
Issue #2959
2018-09-05 11:04:24 +02:00
Emery Hemingway
a6acdac1cf Stop port recipe Git fallthrough with CONTRIB_DIR/.git
Ref #2959
2018-09-05 11:04:24 +02:00
Christian Helmuth
cc311355cd libports: update hash of downloaded fatfs sources (again)
The author updated http://www.elm-chan.org/fsw/ff/arc/ff13b.zip again
with a marginal documentation changes and an additional example.

Issue #2766
2018-09-05 11:04:24 +02:00
Christian Helmuth
20668ccfa3 libports: download bzip2 port from fossies.org
The original bzip.org domain expired.

Issue #2766
2018-09-05 11:04:24 +02:00
Alexander Boettcher
826db3d73e sculpt: support reset/poweroff by acpica
Issue #2935
2018-09-05 11:04:23 +02:00
Josef Söntgen
b93f15046c dde_linux: remove unused WPA code in src archive
Rather than removing the source files during the port preration, which
breaks preparing the port anew, they are now removed while creating
the src archive.

Fixes #2959.
2018-09-05 11:04:23 +02:00
Norman Feske
9c377906cf sculpt: increase runtime-view RAM/caps on demand
This patch unifies the handling of on-demand resource upgrades among
ram_fs and depot_rom, and applies the new pattern to the runtime view.
This way, runtime view becomes able to accommodate more complex
scenarios.
2018-09-05 11:04:23 +02:00
Alexander Boettcher
50dcf40f24 acpica: fix regressions (poweroff and semaphore)
introduced by acpica update to version 2018-08-10.

Fixes #2935
2018-09-05 11:04:23 +02:00
Emery Hemingway
fcbe060096 Remove legacy lwIP plugins
Now that the lwIP VFS plugin has become a first class IP stack it is
time to remove the lwIP 1.x library and the associated libc plugins.

Fix #2958
2018-09-05 11:04:22 +02:00
Emery Hemingway
1370fa7631 Remove Noux networking support
Noux networking is not well tested and not in practical use. It also
uses a number of deprecated libraries.

Ref #2535
Fix #2955
2018-09-05 11:04:21 +02:00
Josef Söntgen
0603481aaa terminal: remove upper character range check
The more constrained upper limit leads to ommitted characters like
umlauts.

Fixes #2957.
2018-09-03 17:07:00 +02:00
Norman Feske
358759f609 Minor refinement of the release notes 18.08
Thanks to Jeroen van Gelderen for the hint!
2018-09-03 17:07:00 +02:00
Norman Feske
bbff6ae529 dde_linux: keep .git contrib directory
This is a follow-up commit to "dde_linux: remove unused WPA supplicant
code" that prevents the potential data loss described in #2959.
2018-09-03 16:53:30 +02:00
Christian Helmuth
82c356015f version: 18.08 2018-08-30 12:18:59 +02:00
Norman Feske
de1c221bab News item for version 18.08 2018-08-30 12:17:51 +02:00
Norman Feske
e869254eb7 Release notes for version 18.08 2018-08-30 12:17:51 +02:00
Christian Helmuth
c2e0d0ae20 depot: update recipe hashes 2018-08-30 09:25:10 +02:00
Christian Prochaska
aa1488c768 qt5: handle 'Qt::WindowMaximized' and 'Qt::WindowFullScreen'
Fixes #2952
2018-08-30 09:24:48 +02:00
Alexander Boettcher
601521c47a sculpt: update tiny browser VMs (Seoul + VBox5) 2018-08-30 09:24:48 +02:00
Alexander Boettcher
9bead32552 sculpt: update top_view for 18.08 2018-08-30 09:24:47 +02:00
Christian Helmuth
cd0e8fd637 doc: mention dde_zircon repository to repos/README 2018-08-30 09:24:47 +02:00
Emery Hemingway
6f8e8a6ea4 LwIP: clamp reads to a value that can be expressed in 16 bits
There is a bug in the LwIP VFS plugin, the chained buffers used by Lwip
use sizes expressed in sixteen bits, and under conditions such as a read
of 1<<16 the higher bits are lost and the plugin performs a zero length
read, and the application interprets this as a closed connection.

Fix #2947
2018-08-30 09:24:47 +02:00
Josef Söntgen
0bcab1df84 sculpt: change download_debian pkg version 2018-08-30 09:24:47 +02:00
Emery Hemingway
2bdeaec3d2 Add and update Sculpt game launchers
The retro_frontend component is now a Nitpicker client with smoother
framebuffer resizing.
2018-08-30 09:24:47 +02:00
Josef Söntgen
8c9ea49ff5 dde_linux: remove unused WPA supplicant code
Since we use the git repo by now remove all unnecessary ballast like
unused code and the git history. The will bring down the wifi_drv's
src archive to reasonable size again.
2018-08-30 09:24:46 +02:00
Christian Prochaska
ecc4ac795a tool_chain: fix build problems on Ubuntu 18.04
Fixes #2939
2018-08-30 09:24:46 +02:00
Stefan Kalkowski
2882bd48e6 dde_linux: USB client driver for NIC version 4.16 2018-08-30 09:24:46 +02:00
Stefan Kalkowski
b32a3cd4d9 dde_linux: USB-client driver for HID version 4.16 2018-08-30 09:24:45 +02:00
Stefan Kalkowski
b02f483841 dde_linux: usb host controller driver version 4.16 2018-08-30 09:24:45 +02:00
Christian Prochaska
9d712b2ce9 vfs: libc_vfs_fs_chained.run script
Fixes #2944
2018-08-28 17:10:58 +02:00
Alexander Boettcher
0ee0844c59 vbox5: revoke VM memory during VM reset
Avoids reboot issues seen with Windows VMs.

Fixes #2946
2018-08-28 17:10:58 +02:00
Emery Hemingway
babb633922 Pdf_view: restore page up/down keys, wheel scroll
The component now handles key presses as documented.

Fix #2942
2018-08-28 17:10:57 +02:00
Emery Hemingway
26611db95b LwIP VFS: remove link status messages
Remove warnings from the plugin that were used to check behavior of
applications waiting for link and IP status changes.

Ref #2335
2018-08-28 17:10:57 +02:00
Emery Hemingway
e2215768a2 Add regulatory.db to Sculpt wifi_drv ROMs 2018-08-28 17:10:57 +02:00
Norman Feske
5e1e37df66 sculpt: version 18.08 2018-08-28 17:10:57 +02:00
Norman Feske
cbe6ef210f sculpt: basic interaction with runtime view
This patch enables the user to click on a component in the runtime view
to reveal more information such as the used/assigned RAM/caps and
secondary dependencies.
2018-08-28 17:10:56 +02:00
Norman Feske
cdef4c2548 sculpt: runtime view
This patch adds a graph of the current runtime state to the
leitzentrale. The topology of the graph depends on the first routing
rule of each component. For this reason, the patch re-orders routing
policies to make the most important route the first in the list.

The user can switch between the runtime view and the inspect window
by clicking on the corresponding menu dialogs. E.g., a click on the
storage dialog reveals the inspect window.
2018-08-28 17:10:55 +02:00
Christian Helmuth
40a84e0c81 input/ps2: poll for mouse-reset results
The PS/2 driver retries to get mouse-reset results for 700 ms, sleeping
after each attempt for 10 ms. So, the driver needs a Timer session now.

Fixes #2713
2018-08-28 17:10:55 +02:00
Norman Feske
25ee872703 sculpt: separate launchers from deploy config
The most important route of each launcher is at the top of routes and
will be used to layout the graph topology of the runtime view.

By caching the state reports generated by the runtime init, the sculpt
manager becomes able to quickly check for the presence of components. So
we can apply routing-dependency checks not only prior starting
components but also while components are running.

Fixes #2938
Fixes #2912
2018-08-28 17:10:55 +02:00
Christian Helmuth
240e70d989 run: configurable AMT power-on timeout
The default timeout is 5 seconds and can be changed like follows.

  RUN_OPT += --power-on-amt-timeout 11
2018-08-28 17:10:54 +02:00
Emery Hemingway
e0a97d5642 VFS: Send notifications on RAM file rename
Fix #2937
2018-08-28 17:10:54 +02:00
Norman Feske
c270e4fb30 base: exception safety during registry iteration
This patch fixes a problem in the non-const 'for_each' method of the
'Registry' data structure. If an exception was thrown from within the
functor of the 'for_each' operation, the not yet processed items of the
registry were dropped from the registry, which is not expected.
2018-08-28 17:10:54 +02:00
Christian Helmuth
ccf6b237bb chargen: keypad asterisk (*) character 2018-08-28 17:10:54 +02:00
Norman Feske
b4f596b197 Tool for querying information from file system
Issue #2936
2018-08-28 17:10:53 +02:00
Norman Feske
1aba1fe8b1 heap: diagnostic message on alloc(0) 2018-08-28 17:10:53 +02:00
Norman Feske
3976a43c84 gems/vfs.h: make 'File_content' more robust
This patch addresses two problems: By guarding the buffer allocation in
a nested class, an exception in the body of the 'File_content'
constructor reverts the allocation. Second, if the file has no content
no allocation should be performed. The previous version wrongly passed
a size of zero to the allocator in this case.
2018-08-28 17:10:53 +02:00
Norman Feske
89d0d648ed vfs: fix formatting in fs_file_system.h 2018-08-28 17:10:52 +02:00
Norman Feske
3c1ea3667d vfs server: avoid nesting of packet processing
This patch addresses a situation where _process_packets was called as a
side effect of watch notification (that was processed during an unlink
RPC operation). This scenario (triggered by the fs_query test)
ultimately ended up in a deadlock. Io/watch reponse handlers should
never re-enter the application logic.
2018-08-28 17:10:52 +02:00
Norman Feske
124a216a94 gems: add file/dir watch support to vfs.h 2018-08-28 16:48:47 +02:00
Martin Stein
99b8e062d7 */config.xsd: fix session-policy declarations
Issue #2908
2018-08-28 16:48:47 +02:00
Martin Stein
d2a36c5958 base: define generic config XSD types globally
The new base/xsd/config.inc defines generic XSD types such as 'Boolean' or
'Session_label'. It can be included in config XSD files by using:

! <xs:include schemaLocation="file://${GENODE_CONFIG_INC}"/>

The string ${GENODE_CONFIG_INC} is replaced by the run tool with the
above mentionened file path.

Issue #2897
2018-08-28 16:48:47 +02:00
Martin Stein
efad33c3c5 base-foc: implement Platform_thread execution_time
The return value is given in microseconds.

Issue #2908
2018-08-28 16:48:46 +02:00
Martin Stein
023de11dc6 acpica port: update to version 2018-08-10
Fixes #2935
2018-08-28 16:48:46 +02:00
Christian Helmuth
44a8bec56a dde_linux: streamline strlcpy/strlcat implementations 2018-08-28 16:48:46 +02:00
Norman Feske
ce414a5c5a fs_rom: revert workaround for possible livelock
The change "base: rm first-class support for static binaries" alleviates
the need for the workaround.
2018-08-28 16:48:46 +02:00
Christian Helmuth
db376bfddb input/ps2: defer led update on pending events
Issue #2888
2018-08-28 16:48:45 +02:00
Christian Helmuth
d909715f1b input/ps2: drop fake right-shift scancodes
Seen on X250

Description from https://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html

  The ten grey keys Insert, Home, PgUp, Delete, End, PgDn, Up, Left,
  Down, Right are supposed to function regardless of the state of Shift
  and NumLock keys. But for an old AT keyboard the keypad keys would
  produce digits when Numlock was on or Shift was down. Therefore, in
  order to fool old programs, fake scancodes are sent: when LShift is
  down, and Insert is pressed, e0 aa e0 52 is sent; upon release of
  Insert e0 d2 e0 2a is sent. In other words, a fake LShift-up and fake
  LShift-down are inserted.

Fixes #2888
2018-08-28 16:48:45 +02:00
Norman Feske
87908242c5 leitzentrale.run: minor config fix
Related to commit "base: rm first-class support for static binaries".

Issue #2866
2018-08-28 16:48:45 +02:00
Alexander Boettcher
cf3ff17c50 hw/x86: enable SMP support
Fixes #2929
2018-08-28 16:48:44 +02:00
Alexander Boettcher
f0f473392d hw: determine CPU count on x86
Issue #2929
2018-08-28 16:48:44 +02:00
Alexander Boettcher
bf340eee91 hw: provide CPU count to core by bootstrap
The count is supposed to provide the actual available CPUs, which may not
be equal to NR_OF_CPUS.

Issue #2929
2018-08-28 16:48:44 +02:00
Alexander Boettcher
538d91ecf2 hw/x86: ACPI tables parsing support
Issue #2929
2018-08-28 16:48:44 +02:00
Alexander Boettcher
e6046e0bc1 hw/x86: read out local APIC base dynamically
Issue #2929
2018-08-28 16:48:43 +02:00
Alexander Boettcher
a149131dc2 run: add microcode chain bootloader to nova
Fixes #2762
2018-08-28 16:48:43 +02:00
Alexander Boettcher
237f6a6a62 nova: provide microcode data via platform_info
Issue #2762
2018-08-28 16:46:05 +02:00
Alexander Boettcher
8cdc266417 ports: add microcode of Intel CPUs
Issue #2762
2018-08-28 16:46:00 +02:00
Norman Feske
a35f585286 sculpt: add missing pkgs to 'sculpt-installation' 2018-08-28 16:45:27 +02:00
Emery Hemingway
ffd688642a VFS LwIP: state tracking fixes
Better track the state of TCP connections and PCB pointers. Allow
received data that has queued to be read under any conditions.

Ref #2335
2018-08-28 16:45:27 +02:00
Emery Hemingway
67d88526b9 VFS LwIP: delay accepted connections
Ref #2335
2018-08-28 16:45:27 +02:00
Christian Prochaska
14a338af40 qt5: QtTest support
Fixes #2933
2018-08-28 16:45:27 +02:00
Christian Helmuth
3dc822f767 qt5: honor --depot-user in run scripts 2018-08-28 16:45:26 +02:00
Christian Helmuth
a8b6fbcc31 qt5: enable xhci in drivers run util 2018-08-28 16:45:26 +02:00
Johannes Kliemann
3b3e155c79 dde_zircon: add pc-ps2 driver
Fixes #2926
2018-08-28 16:45:26 +02:00
Christian Helmuth
21ca7be235 drivers managed: fix numlock handling
Now, numlock=true means report keypad digits and numlock=false means
report Home, End, etc.
2018-08-28 16:45:26 +02:00
Emery Hemingway
39294b8e78 Serve empty dataspace for empty files at cached_fs_rom
Fix #2932
2018-08-28 16:45:25 +02:00
Emery Hemingway
1cbb299c38 Remove report instrument from cached_fs_rom
The cached_fs_rom report is for monitoring internal behavior and is of
no other use.

Ref #2932
2018-08-28 16:45:25 +02:00
Norman Feske
688a5677f4 sculpt: fix deploy entry of acpica
The 'Report' route was missing. The commit also removes superfluous
routing rules for IO_PORT, IRQ, and IO_MEM that are captured by the
subsequenting wildcard anyway.

Issue #2909
2018-08-28 16:45:24 +02:00
Emery Hemingway
db23b276f2 Remove COW VFS plugin
The COW plugin provided only partial copy-on-write semantics and had
problems detecting recursive requests. Conversely, the import plugin has
much simpler behavior that is easy to test because it mirrors that of
the ram_fs server.

Ref #2745
2018-08-28 16:45:24 +02:00
Alexander Boettcher
8a5e762c24 nova: log_core.run adjustments 2018-08-28 16:45:24 +02:00
Christian Prochaska
aa909702c6 vfs_lxip: fix 'sendmsg()' result interpretation
Issue #2920
2018-08-28 16:45:24 +02:00
Josef Söntgen
6238d61f7e nic_router_uplinks.run: adapt to wifi_drv front end changes 2018-08-28 16:45:23 +02:00
Josef Söntgen
6f62f5d428 wifi: fix missing regulatory DB 2018-08-28 16:45:23 +02:00
Emery Hemingway
c75d9e2ee0 Rename network scenarios to make use of lxip explicit 2018-08-28 16:45:23 +02:00
Emery Hemingway
22ef3ed474 LwIP: manage Nic pbufs with a slab allocator
LwIP skips a packet copy by wrapping Nic stream buffer regions in LwIP
pbuf objects. Move from a fixed size array to a potentially unbounded
slab allocator for managing this buffer metadata.

Ref #2335
2018-08-28 16:45:23 +02:00
Josef Söntgen
4bb5046e1f sculpt_manager: adapt to new wifi_drv front end 2018-08-28 16:45:22 +02:00
Josef Söntgen
ae50bf84c6 netperf.inc: adapt to new wifi_drv front end 2018-08-28 16:18:34 +02:00
Josef Söntgen
ec9e8ecfaa wifi_drv: enable soft RFKILL and new front end
* TODO
2018-08-28 16:18:34 +02:00
Josef Söntgen
4a47b7cb41 sculpt_manager: update wifi_drv fw ROM rules 2018-08-28 16:18:33 +02:00
Josef Söntgen
870505bcd9 wifi: update iwlwifi to 4.16.3 2018-08-28 16:18:33 +02:00
Alexander Boettcher
eb62d9cc04 dde_linux: update intel_fb to 4.16.3
Fixes #2736
2018-08-28 16:18:33 +02:00
Josef Söntgen
80104f5192 usb: adapt to lx_kit/lx_emul update 2018-08-28 16:18:32 +02:00
Josef Söntgen
05179409be fec: adapt to lx_kit/lx_emul update 2018-08-28 16:18:32 +02:00
Josef Söntgen
ced585fd5e lxip: adapt to lx_kit/lx_emul updates 2018-08-08 13:33:38 +02:00
Alexander Boettcher
2efc64ace7 lx_kit: adjust to 4.16.3 2018-08-08 13:33:37 +02:00
Josef Söntgen
bb8e532361 http_srv: use libc print API
Thereby one can set 'stdout' to /dev/null.
2018-08-08 13:33:37 +02:00
Emery Hemingway
4678f27802 Propagate LwIP connect errors with sync
Ref #2335
Ref #2920
2018-08-08 11:34:21 +02:00
Christian Prochaska
80974b8f62 qt5: print error message in qtwebkit on failed 'mmap()'
Fixes #2927
2018-08-08 11:29:57 +02:00
Christian Prochaska
0d7dec0436 qt5: destroy finished thread in 'QThread::start()'
A 'QThread' can be reused when its execution is finished by calling
'QThread::start()' again. Before this commit, this created a new Genode
thread, but did not destroy a previously finished Genode thread first.

Fixes #2928
2018-08-08 11:29:32 +02:00
Emery Hemingway
007a977cb0 Fix CTRL keys for Workman layout
Fix #2931
2018-08-08 11:29:07 +02:00
Emery Hemingway
2041f957da Terminal: improved handling of escape sequences
Add additional parsing modes to the sequence decoder to detect and
discard unhandled sequences for ECMA-48, DEC private, and Xterm.

Add new behavior for cursor movement, cursor hiding, character deletion,
and line-wrapping.

Fix #2923
2018-08-08 11:27:41 +02:00
Christian Helmuth
f4ea50c6ff depot: update recipe hashes 2018-08-08 10:59:04 +02:00
Emery Hemingway
e521e100f1 Move LwIP to API package
This fix vfs_lwip recursion on archive creation.

Ref #2335
2018-08-08 10:59:03 +02:00
Johannes Kliemann
06a72facc5 Ada: fix ada_secondary_stack test 2018-08-08 10:59:03 +02:00
Johannes Kliemann
0ca197374e Ada: cleanup sources (license headers, beautify) 2018-08-08 10:59:03 +02:00
Alexander Senier
ddee65722f Ada: do not use default directories for gnatmake 2018-08-08 10:59:02 +02:00
Alexander Senier
069a9ad56f Ada: runtime support for 64bit arithmetics 2018-08-08 10:59:02 +02:00
Alexander Senier
ad3f020605 Ada: support for memcmp 2018-08-08 10:59:02 +02:00
Johannes Kliemann
ea8b7d8128 Ada: exception support 2018-08-08 10:59:02 +02:00
Emery Hemingway
e208fbb1b3 VFS LwIP: notify peek handles on recv
Ref #2335
2018-08-08 10:59:02 +02:00
Christian Prochaska
3a1c1d1fd5 libc: allocate more backing store in memory allocator
Add the size of the 'Dataspace' object and AVL-node slab blocks like in
the 'Genode::Heap' implementation.

Fixes #2925
2018-08-02 14:36:50 +02:00
Alexander Boettcher
2ec48c32cb foc: deny irq session creation on failure 2018-08-02 14:36:50 +02:00
Josef Söntgen
a7eb347ce2 libports: remove obsolete pingpong client 2018-08-02 14:36:50 +02:00
Emery Hemingway
a7e5d4ef03 LxIP: propagate write errors using SYNC_ERR_INVALID
The libc sockets implementation already syncs socket control files after
writes, so sync errors will induce failures for operations such as
"connect".

Fix #2920
2018-08-02 14:36:49 +02:00
Emery Hemingway
08b774e318 VFS: add an error to to the Sync_result enum
Sync errors can be used to indicate failed writes across the File_system
session.

Ref #2920
2018-08-02 14:36:49 +02:00
Christian Prochaska
7fabc45313 libc: return MAP_FAILED if 'mmap()' failed
Fixes #2924
2018-08-02 14:36:49 +02:00
Emery Hemingway
bf8b52ec3a Update LwIP to 2.1.0.rc1
This release candidate suppresses the remaining build warnings.

Ref #2335
2018-08-02 14:36:49 +02:00
Martin Stein
9b31aac1de LwIP tests: use VFS LwIP plugin
Issue #2335
2018-08-02 14:36:48 +02:00
Emery Hemingway
d9a4773194 LwIP VFS plugin
This patch reintroduces the LwIP stack to libc as a VFS plugin
implementing the socket_fs interface. Rather than use LwIP's socket
emulation layer this plugin interfaces directly to LwIP raw API and is
single threaded.

The internal TCP parameters of the stack are untuned.

Fix #2050
Fix #2335
2018-08-02 14:36:48 +02:00
Emery Hemingway
ac30e49df7 Update libssh to 0.7.5
Fix #2921
2018-08-02 14:36:48 +02:00
Alexander Boettcher
017685b1b2 nova: update kernel branch (MCA, invalid DMAR)
to avoid resetting due to invalid IOMMU/DMAR hardware units.

Fixes #2700
2018-08-02 14:36:48 +02:00
Josef Söntgen
e6c5ea21b4 sdl: react upon framebuffer resize to 0x0
Treat minimizing the framebuffer as explicit SDL_QUIT event.
2018-08-02 14:36:47 +02:00
Josef Söntgen
bd91e70fae gems: add runtime to wm pkg 2018-08-02 14:36:47 +02:00
Josef Söntgen
7002c9680a os: add fs_rom pkg recipe 2018-08-02 14:36:47 +02:00
Alexander Boettcher
ed01c57677 platform_drv: add RMRR region before assign pci 2018-08-02 14:36:47 +02:00
Sebastian Sumpf
82075a340d qemu-usb: add isochronous packet support to XHCI
fixes #2910
2018-08-02 14:36:46 +02:00
Sebastian Sumpf
0ed2ef230b vbox5: fix self-programming timer in XHCI model
A timer should set itslef not pending before calling the timout handler.
This is important for timeout handler that program the timeout again.

issue #2910
2018-08-02 14:36:46 +02:00
Sebastian Sumpf
037a0d6822 usb_drv: add isochronous packet support
Commit extents USB session an driver accordingly.

issue #2910
2018-08-02 14:36:46 +02:00
Sebastian Sumpf
b6bc44fd10 run: add support to preserve 'genode' directory
Add '--preserve-genode-dir' to RUN_OPT in order to preserve the 'genode'
directory in '<build_dir>/var/run/<run-script>'
2018-08-02 14:36:46 +02:00
Emery Hemingway
d00baf8db4 Refactor cached_fs_rom
Refactor the cached_fs_rom server to fix issues with packet congestion,
prevent recursive XML handling, and zero-length file handling.

Ref #2760
2018-08-02 14:36:45 +02:00
Alexander Boettcher
b7e95c1525 sculpt: update pkg for Tinycore+Vbox5 2018-08-02 14:36:45 +02:00
Alexander Boettcher
dd363da5b0 sculpt: update Seoul VM configuration
Changes to the Seoul configuration are required due to shared binary changes
by init (see #2866)
2018-08-02 14:36:45 +02:00
Emery Hemingway
0502836975 Cached_fs_rom: remove all I/O signal blocking
Keep things simple, do not block for any signals.
2018-08-02 14:36:44 +02:00
Emery Hemingway
7e08bba25c Cached_fs_rom: fix congestion error
When the cached_fs_rom saturates the packet stream of its File_system
session it will call the session request handler recursively as pending
transfers are completed. This is bad because the content of the XML node
currently being processed will change.

The session request handler can no longer be called directly, but the
"schedule" method will submit a signal to the request handler, and
requests will be processed after the current operation has completed.
2018-08-02 14:36:44 +02:00
Norman Feske
ac0562ec18 base: avoid Pd_session::Invalid_session condition
By adding a sanity check for the validity of the PD session targeted by
a transfer_quota operation, the corner case of an incomplete PD session
of a child can no longer trigger an 'Invalid_session' exception.
2018-08-02 14:36:44 +02:00
Norman Feske
17e6db431e sculpt: increase version to 18.07 2018-08-02 14:36:44 +02:00
Christian Prochaska
deb839ba6f libc: use 'alloc_aligned()' in fd allocator
`Allocator_avl_base::alloc()` now uses address size alignment, so
`Allocator_avl_base::alloc_aligned()` must be used for 1-byte alignment.

Fixes #2915
2018-08-02 14:36:43 +02:00
Christian Prochaska
526680e977 libc: initialize fd sets before use in 'poll()'
Fixes #2914
2018-08-02 14:36:43 +02:00
Christian Prochaska
b2f7a6a934 vfs_lxip: look up path in 'leaf_path()'
Fixes #2913
2018-08-02 14:36:43 +02:00
Christian Prochaska
e3005266b6 vfs: no 'handle_io_response()' in regular VFS functions
Calling 'handle_io_response()' in a regular VFS function (in contrast to a
post-signal hook) can cause problems if the caller of the VFS function holds
a lock which prevents the io response handler from returning.

With this commit, the user of the VFS becomes responsible for unblocking
threads which might be blocking after a failed 'queue_read()', 'queue_sync()'
or 'write()' call.

Fixes #2896
2018-08-02 14:36:43 +02:00
Christian Prochaska
b4dd9bc802 libc vfs plugin: serialize more file system calls
Issue #2635
2018-08-02 14:36:42 +02:00
Christian Helmuth
5f9ac94bef libports: update hash of downloaded fatfs sources
The author updated http://www.elm-chan.org/fsw/ff/arc/ff13b.zip recently
with a marginal change of documents/doc/appnote.html.
2018-08-02 14:36:42 +02:00
Norman Feske
9061217d80 sculpt: use vfs for config file system
By using the VFS server, we become able to populate the config-fs
content from a tar archive, which will be needed for Sculpt VC.

Issue #2902
2018-08-02 14:36:42 +02:00
Emery Hemingway
59ac5b10c7 Plugin for importing VFS content
This new vfs_import plugin allows a VFS instance to be populated during
construction using a sub-VFS configured in an '<import>' configuration
node. This allows the ram_fs File_system server to be replaced by the
VFS server by reimplementing the ram_fs 'content' feature.  At the
moment the copying of symlinks is not enabled, and the resources
obtained by the import file-system may not be freed after the import is
finished.

Fix #2906
2018-08-02 14:36:42 +02:00
Emery Hemingway
f6c47a46c6 Add type accessor to Genode::Directory::Entry
Ref #2906
2018-08-02 14:36:42 +02:00
Emery Hemingway
ac335ef58a Add Game Boy emulator to sculpt.run 2018-08-02 14:36:41 +02:00
Pirmin Duss
069f87a19f sculpt: add example to use acpica
When started acpica writes some reports to /report/acpica/.

Issue #2909
2018-08-02 14:36:41 +02:00
Pirmin Duss
5a182651db sculpt_manager: add missing parent routes to runtime
In the generated runtime file the parent provides routes for IO_MEM,
IO_PORT and IRQ are needed to run acpica as a child of runtime.

Issue #2909
2018-08-02 14:36:41 +02:00
Pirmin Duss
436b10729e acpica: create a package
Allow start of acpica inside the deploy config of sculpt.

Issue #2909
2018-08-02 14:36:40 +02:00
Alexander Boettcher
32a6d10de8 gems: support ohci in driver_manager 2018-08-02 14:36:40 +02:00
Norman Feske
4c96d697d5 sculpt_manager: reduce compile time
This little tweak reduces the compile time of the component to the half
by avoiding the repeated parsing of header files.
2018-08-02 14:36:40 +02:00
Norman Feske
a2dc07056e sculpt: use cached_fs_rom as depot_rom
Fixes #2904
2018-08-02 14:36:40 +02:00
Sid Hussmann
726327d95c audio_mixer: create recipe to deploy from depot
Issue #2907
2018-08-02 14:36:39 +02:00
Sid Hussmann
2b20fc1be2 audio_drv: add missing provides statements
Issue #2907
2018-08-02 14:36:39 +02:00
Emery Hemingway
ca042e4e6e Fix VFS notifications for ram file removal
The ram plugin to the VFS must send notifications to watch handles on
files when they are removed. This brings the VFS server to parity with
the ram_fs server for the sake of notifications.

Move run/fs_report to gems and use the vfs server and the vfs init
plugin in the test.

Ref #2902
2018-08-02 14:36:39 +02:00
Norman Feske
953c62c04c dde_linux: removed libc_setjmp dependency
This is no longer needed since dde_linux uses the lx_kit_setjmp
library now.
2018-08-02 14:36:39 +02:00
Norman Feske
6045277cca noux: fix compile warning 2018-08-02 14:36:38 +02:00
Norman Feske
d38227f840 depot: recipe for vfs_cow
Issue #2902
2018-08-02 14:36:38 +02:00
Norman Feske
4b46abf813 base: rm first-class support for static binaries
This patch removes the detection of statically linked executables from
the base framework. It thereby fixes the corner cases encountered with
Sculpt when obtaining the binaries of the runtime from the depot_rom
service that is hosted within the runtime.

Statically linked binaries and hybrid Linux/Genode (lx_hybrid) binaries
can still be started by relabeling the ROM-session route of "ld.lib.so"
to the binary name, pretending that the binary is the dynamic linker.
This can be achieved via init's label rewriting mechanism:

  <route>
    <service name="ROM" unscoped_label="ld.lib.so">
      <parent label="test-platform"/> </service>
  </route>

However, as this is quite cryptic and would need to be applied for all
lx_hybrid components, the patch adds a shortcut to init's configuration.
One can simply add the 'ld="no"' attribute to the <start> node of the
corresponding component:

  <start name="test-platform" ld="no"/>

Fixes #2866
2018-08-02 14:36:38 +02:00
Johannes Schlatow
c43ed44b17 Add vfs file size detection to ROM modules
When mounting a ROM module with binary="no", the
vfs will detect the 0-termination to calculate the
file size instead of using the dataspace size.

Fixes #2903
2018-08-02 14:36:37 +02:00
Emery Hemingway
b1b83f4d6d Process packets in batches at the VFS server
Process I/O packets in batches. If a batch is processed and there are
still packets pending, send a signal locally to the packet handler and
return to the entrypoint signal dispatcher. This prevents clients from
starving each other, which happens when a client continuously submits
packets at a faster rate than the server can process.

Fix #2900
2018-08-02 14:36:37 +02:00
Emery Hemingway
f3abee631a File_system packet processing test
Test of File_system I/O scheduling. It appears that a client not
submitting I/O packets slower than the VFS server can process will
starve other clients.

Ref #2900
2018-08-02 14:36:36 +02:00
Emery Hemingway
d2923253f3 Remove 'libc' from vfs_jitterentropy dependencies
Libc is no longer necessary for building the jitterentropy VFS plugin.

Ref #2900
2018-08-02 14:36:36 +02:00
Norman Feske
ae028d89cf driver_manager/sculpt: hook for manual USB policy
This patch adds the /config/usb file to Sculpt, which allows then user
to manually define rules for assigning USB devices to clients. The
content is incorporated by the driver manager into the USB driver
configuration. Note that this mechanism does not work for HID devices
because these devices are claimed by the USB driver's built-in HID
support.

Issue #2890
2018-08-02 14:36:36 +02:00
Martin Stein
fbe9d26c47 trace: initialize trace control in Thread::start
Previously, the trace control of a thread was initialized in its
constructor (which is generic for all components). This has the
disadvantage that the CPU-session-pointer member of the thread might not
be valid at this point. And it cannot be replaced by using the
"deprecated_env" CPU session neither as constructing the deprecated
environment in causes troubles in Core. But as the trace control
shouldn't be needed in Core anyway, the initialization can be moved to
the Thread::start implementation of non-core components. This code
already takes care of the CPU session pointer.

Fixes #2901
2018-08-02 14:36:35 +02:00
Emery Hemingway
09bf68e8ad Cached_fs_rom: serve static ROM sessions from a cache
This component is contrasted with the fs_rom server that serves
independent dataspaces to each client. Using a cache was not possible
until the region map session supported the creation of read-only
attachments.

Test at run/read_only_rom.

Ref #1633
Fix #2760
2018-08-02 14:36:35 +02:00
Martin Stein
495490743c nic_router: log ARP decisions when verbose
In verbose mode, some types of ARP packets were handled without any log about
what was done.

Issue #2899
2018-08-02 14:36:35 +02:00
Martin Stein
45347749fe nic_bridge: verbose mode
The verbosity mode of the NIC bridge can be toggled with the verbose attribute
(default value shown):

! <config verbose="no" />

If enabled, the NIC bridge logs sent and received packets as well as the
lifetime of interfaces connected to the bridge.

Issue #2899
2018-08-02 14:36:34 +02:00
Christian Prochaska
32d41388e2 pthread: 'pthread_join()' improvements
Make pthread_join() work in more situations and support passing the thread
return value.

Fixes #2892
2018-08-02 14:36:34 +02:00
Pirmin Duss
0ac9d1ee31 floating_window_layouter: handle config updates
update the internal representation of the config if it changes.

issue #2893
2018-08-02 14:36:34 +02:00
Pirmin Duss
6bb5b7190c depot: verify that runtime file is valid
issue #2894
2018-08-02 14:36:34 +02:00
Alexander Boettcher
bac7ba6639 nova: remove echo thread in core
and replace by remote delegate syscall

Fixes #2895
2018-08-02 14:36:33 +02:00
Roman Iten
117b932176 init: add "report" element to the config schema
Issue #2897
2018-08-02 14:36:33 +02:00
Norman Feske
170507a85c bash: support home and end keys
This commit contains a patch of bash's built-in default escape sequences
to match the 'screen' terminal as used by Genode's terminal component.

Fixes #2705
2018-07-03 10:44:55 +02:00
Christian Helmuth
b485caf33c depot: update recipe hashes 2018-07-03 09:40:11 +02:00
Norman Feske
e20fe9d402 bomb.run: disable on Pistachio
The test triggers the following assertion in the kernel, which will
remain unfixed as the kernel is no longer developed:

  Assertion queue_state.is_set(queue_state_t::send) failed in file
  .../pistachio/kernel/src/api/v4/tcb.h, line 727

This assertion is presumably similar / related to issue #1495.
2018-07-03 09:39:36 +02:00
Martin Stein
4ca69b6d6d netperf tests & router: update IP match string
Issue #2899
2018-07-03 09:39:36 +02:00
Martin Stein
052ed10a17 nic_router.run: fix invalid uplink
Do not generate invalid configurations for the uplink domain anymore. If
some tests are disabled and therefore their routing rules at the uplink
domain would be invalid, spare out these routing rules.

Issue #2899
2018-07-03 09:39:35 +02:00
Norman Feske
39e6dd3d25 core: destruction order of PD session members
This patch addresses a corner case revealed by the resource_request test
on seL4 after changing the child-destruction handling with commit "base:
close PD on 'close_all_sessions'". During the destruction of the PD
session, the backing store (session-local RAM dataspace factory) of the
signal broker's slab was destroyed before destructing the signal broker.
Instantiating the signal broker after the RAM dataspace factory fixes
the destruction order.
2018-07-03 09:39:35 +02:00
Emery Hemingway
c18bee3d5b Input::Binding for non-C++ language bindings
Quietly insert forward declaration of a Input::Binding class, and make
it a friend of Input::Event and Input::Session_client. This is to allow
non-C++ language bindings (Nim) to access private members by providing
their own implementation of the Binding class.

Fix #2889
2018-07-03 09:39:35 +02:00
Norman Feske
d068eaa9f7 input_filter.run: no char-repeat test using PIT
The legacy PIT timer driver is too jittery for the character-repeat
test. This patch disables the test for platforms using this device as
user-level time source, which are at the moment OKL4, Pistachio, and
seL4.
2018-07-03 09:39:35 +02:00
Alexander Boettcher
5fe0e3d5fb sculpt: use package with top_view
based on Sculpt TC 18.06
2018-07-03 09:39:35 +02:00
Alexander Boettcher
77be0b23e5 sculpt: use package with Tinycore Firefox 61
based on Sculpt TC 18.06
2018-07-03 09:39:34 +02:00
Norman Feske
5a194d82c8 driver_manager.run: support run/image/disk
This patch makes the run script compatible with the disk-image backend
of the run tool. Since this backend attaches the boot image as AHCI
disk 0, we have to supply our custom disk image as AHCI 1.
2018-07-03 09:39:34 +02:00
Emery Hemingway
e8dc6c84a4 Add missing XML header to vfs/file_system.h
Ref #2870
2018-07-03 09:39:34 +02:00
Christian Prochaska
1d3ec6f0ae Test successive thread creation and destruction
Fixes #2887
2018-07-03 09:39:34 +02:00
Christian Prochaska
2f7e421eed linux: destroy native CPU client after thread start
The native CPU client holds a capability reference and the reference
counter of the capability can reach its limit when many threads are
successively created and destroyed (destroyed by the Linux kernel).

Fixes #2886
2018-07-03 09:39:34 +02:00
Christian Prochaska
25b47758b7 linux: new slots for non-existent capabilities only
Prevent allocation of new cap-space slots each time a capability is
received by checking if the received capability already exists.

Fixes #2885
2018-07-03 09:39:33 +02:00
Norman Feske
46241da795 Runtime for saving copies of Sculpt's report fs
Fixes #2849
2018-07-03 09:39:33 +02:00
Norman Feske
6c6b19b198 sculpt: yield focus when switching away from Wifi
When first selecting an access point to connect to, and then - while the
passphrase entry field is displayed - switching to wired networking, the
keyboard focus was still referring to the passphrase entry field instead
of yieling the focus to the inspect window. This commit fixes the
problem by adding the wifi NIC target as additional condition.
2018-07-03 09:39:33 +02:00
Sid Hussmann
9039bd58bd input_filter: add chargen for de_ch keyboard layout
Resolves #2883
2018-07-03 09:39:33 +02:00
Norman Feske
a3858bff3c base: handle cancelation of session creation
This patch improves the handling of the corner case where a client
vanishes while a session request is in flight (CREATE_REQUESTED but
not yet AVAILABLE). This corner case could be sporadically observed with
the init_loop test on base-linux.

In the original version, the session would eventually be delivered but
never picked up by anyone. Such a stale session still uses resources that
should better be released. In the new version, the parent checks for the
liveliness of the client whenever a session is delivered. If there is no
client of the session, a close request is immediately issued to the
server. The session state must be preserved until the close requests has
been answered.
2018-07-03 09:39:32 +02:00
Norman Feske
ddff89d43e base: close PD on 'close_all_sessions'
This patch moves the closing of a child's PD session from the 'Child'
destructor to the 'close_all_sessions' method. This way, the child's
PD quota is immediately returned as soon as init flags a child as
'abandoned', which removes jitter from init's RAM-state reports.

The patch is supposed to make the 'init_loop.run' test much happier.
2018-07-03 09:39:32 +02:00
Norman Feske
1b993714c5 wm.run: use initial_width/height for nit_fb
This commit is a follow-up to "nit_fb: allow screen-relative
initial_width/height". With it, the nit_fb window created via the
launchpad can be interactively resized.
2018-07-03 09:39:32 +02:00
Stefan Kalkowski
41fdb1d369 foc: update to recent revision r79 (fix #2884) 2018-07-03 09:39:32 +02:00
Christian Helmuth
8d1d57fbdf Tweak run scripts for sel4 (caps, timeout) 2018-07-03 09:39:32 +02:00
Christian Prochaska
182d1d339b vbox5: print error messages in 'VirtualBoxBase::handleUnexpectedExceptions()'
Fixes #2879
2018-07-03 09:39:31 +02:00
Alexander Boettcher
0db81f66ae nova: propagate vga text info via platform_info
Issue #2880
2018-07-03 09:39:31 +02:00
Christian Prochaska
54a7301225 bender: update to fix foc boot issues
Fixes #2881
2018-07-03 09:39:31 +02:00
Sebastian Sumpf
10485b0d39 run: rename 'check_installed' to 'installed_command'
Also remove 'requires_installation_of', while also checking sbin
directories in 'have_installed'. The run scripts have been adjusted
accordingly.

Fixes #2853
2018-07-03 09:39:31 +02:00
Norman Feske
365d0bccd5 init.run: prioritize timer over test
The 200-second timeout of the init test triggers on some test platform
(in particular on qemu) while it is overly pessimistic on others.
This patch aims at stabilizing the timing behavior of the test across
the tested kernels/machines.
2018-07-03 09:39:31 +02:00
Norman Feske
3bbeacad20 init: preserve final state of exited children
This is a follow-up patch of "init: avoid too eager child restart". On
each config update of init, init re-applies child-specific configuration
changes. In the case of an already exited child, this re-evaluation
wrongly marked such a child as abandoned because the child's environment
sessions do no longer exist. Abandoning the child, in turn, triggers the
destruction and subseqent restart (because the <start> node of the
configuration still exists). The latter is bad for two reasons.

First, the exit state of the original instance becomes lost. Second, the
restart may have unexpected side effects due to sessions created by the
new instance. I.e., when resizing a partition in sculpt, init would
wrongly restart the gpt-write tool after the tool successfully exited.
This collides with a newly started instance of part_blk/resize2fs, which
now competes with the second gpt-write instance for the exclusive access
of the targeted block device.

The patch prevents init from re-applying configurations to exited
children. The accompanied test case covers the corner case.
2018-07-03 09:39:30 +02:00
Martin Stein
2af9cb7952 nic_router_flood.run: be more flexible
Do not simply wait for the good ping test to finish, but for the other
flood tests to trigger the RAM exhaustion. This makes the test more
robust with slower platforms or a different timing.

Issue #2857
2018-06-29 10:44:59 +02:00
Martin Stein
2733d3fea5 nic_router: verbose_packet_drop attribute
The log messages covered by verbose_packet_drop were previously
configured by the verbose attribute. This isn't the case anymore. Now,
you can configure them as follows:

! <config verbose_packet_drop="no" ... >
!     <domain verbose_packet_drop="no" ... />
! <config/>

The new attribute determines whether to log each packet drop and the
rational behind it. The <config> value affects all domains without a
<domain> local value.

Issue #2857
2018-06-29 10:44:59 +02:00
Martin Stein
e139c52262 nic_router: fix verbose_packets attribute
The default value of each <domain> is the <config> value. However, if
a <domain> local value is set, the <config> value doesn't affect this
value at all.

Fixes #2874
2018-06-29 10:44:58 +02:00
Martin Stein
0b8520a208 nic_router: act as ICMP Echo server
The ICMP-Echo-server functionality of the router has the following
configuration attributes (default values shown):

! <config icmp_echo_server="yes">
!    <domain icmp_echo_server="yes" ... />
! </config>

The icmp_echo_server attribute configures whether the router answers ICMP Echo
requests that address the router. The <config> value affects all domains
without a <domain> local value.

Issue #2874
2018-06-29 10:44:58 +02:00
Norman Feske
a9183da87b base: create-after-close session-request order
This patch ensures that session-create requests are handled after close
requests, which solves the corner case where one single-session server
receives a close and create request at the same time. E.g., when
expanding a partition with Sculpt, the gpt-write tool is removed and
part_blk is started (to execute resize2fs on top) in one step. Both
interact with the USB-block driver, which is a single-session server.

Fixes #2877
2018-06-29 10:44:58 +02:00
Alexander Boettcher
3148b67288 nova: use kernel branch r10
- Reordering and cleanup of commits to form a common branch shared by others
- Add right bit to deny portal usage for cross-core IPC
- avoid GP when switching on AMD SVM if disabled by UEFI/BIOS

Issue #2854
2018-06-29 10:44:58 +02:00
Martin Stein
055862c0eb nic_router: cancel remote ARP on new IP config
When a domain is updated to a new component config, the two criteria for
keeping an ARP waiting state of a remote domain are whether the remote
domain still exists and whether its IP config is still the same. This
means that a domain must also dissolve all of its remote ARP waiting
states if its IP config changes (without an update of the component
config). This wasn't the case until now.

Issue #2840
2018-06-29 10:44:58 +02:00
Martin Stein
9b619e95b2 nic_router: fix log when updating ARP waiters
Give the correct reason why an ARP waiter was dismissed.

Issue #2840
2018-06-29 10:44:58 +02:00
Emery Hemingway
fec223016f Sculpt: route input_filter chargen requests to config_fs_rom
The top-level Sculpt configuration is routing ROM requests for chargen
files from the input_filter to the parent, and this prevents new chargen
files to specified, for instance the German or Workman layout. Route ROM
requests with a combination of label_prefix and label_suffix patterns to
the config_fs_rom component, allowing the input_filter to be dynamically
reconfigurable.

Fix #2872
2018-06-29 10:44:57 +02:00
Emery Hemingway
745926d588 Convert pdf_view to a Nitpicker client
A native Nitpicker client uses less resources than a Framebuffer client
wrapped in a sub-init with nit_fb.

Fix #2871
2018-06-29 10:44:57 +02:00
Norman Feske
a9adc67421 os: improve robustness of init_loop test 2018-06-29 10:44:57 +02:00
Christian Prochaska
042ff27366 libc: remove VFS header dependency in 'component.h'
Fixes #2870
2018-06-29 10:44:57 +02:00
Christian Prochaska
38ae718509 usb_drv: wait for keyboard LED registry in 'led_connect()'
It can happen that a keyboard gets plugged in and 'led_connect()' is
called while the keyboard LED of another keyboard is just being updated
(and the registry is locked).

Fixes #2869
2018-06-29 10:44:56 +02:00
Emery Hemingway
96112ec66d test/fs_report: delay Report/ROM file removal
Ref #2839
2018-06-29 10:44:56 +02:00
Johannes Schlatow
4ae47c3f38 libc: add clock_getres (required by python 3) 2018-06-29 10:44:56 +02:00
Christian Helmuth
3161daacd7 platform_drv: use Expanding_reporter for pci report
If the number of PCI buses grows (seen with VMware player) the default
report size is exhausted quickly.
2018-06-29 10:44:56 +02:00
Christian Prochaska
6616b0efe7 pthread: improve stack attribute handling
- initialize the stack size attribute with `Libc::Component::stack_size()`
  as default value
- remove the possibly uninitialized `pthread` member from the attribute
  structure and obtain current attribute values in the
 `pthread_attr_get_np()` function, where the `pthread` object reference
  is given as argument
- let each thread obtain its stack address and actual stack size at thread
  start to have the information available for other threads

Fixes #2865
2018-06-29 10:44:56 +02:00
Christian Helmuth
b630bd8d6a dde_ipxe: enable flavor of I210 in apu2c4 boards
The apu2c4 boards have 3 i210 PCI devices (one for each LAN port). Other
apu2 boards use i211 device IDs according to https://www.pcengines.ch/apu2.htm
but could not be tested.

This commit also incorporates an upstream MAC address handling fix.
2018-06-29 10:44:55 +02:00
Josef Söntgen
cefd2e22fa dde_ipxe: support more flavors of I218V/I219LM
Fixes #2864.
2018-06-29 10:44:55 +02:00
Josef Söntgen
74dcc7a3d5 libc: use socket fs for DNS information
The libc will now use the file given by the 'nameserver_file' attribute
to get the DNS nameserver address instead of reading '/etc/resolv.conf'.
It defaults to '/socket/nameserver' which is the common location when
using the lxip VFS plugin. As a constraint the libc will read the first
line and expects the nameserver address without any keywords in front of
it.

Fixes #2861.
2018-06-29 10:44:55 +02:00
Emery Hemingway
a7a160eebc Package pdf_view to read from file-system
Merge the configuration from raw/pdf_view into the pkg/pdf_view runtime
file. Request a File_system session and load files from there, rather
than by ROM.

Ref #2859
2018-06-29 10:44:55 +02:00
Emery Hemingway
fb0a50c71c Pdf_view: load arbitrary *.pdf files, input improvements
The component is no longer loads from '/test.pdf', the first PDF file
found in the root directory of the file-system is loaded automatically.
The behavior cannot be overridden by configuration.

Feed MuPDF with characters from input events to MuPDF rather than
translate raw key codes to ASCII. This enables almost all MuPDF key
bindings without the need to maintain a lookup table. Mouse navigation
has been enabled as well. To print the key-bindings to log, press '?'.

Fix #2859
2018-06-29 10:44:55 +02:00
Emery Hemingway
9d8bf1373e Chroot: remove merge policies
The chroot server was conceived to automatically place File_system
sessions into segregated root directories by converting session labels
to paths. If multiple children needed to be grouped under the same path,
a 'merge' policy would truncate the session label before path conversion.
Now that init can rewrite session labels and thus reproduce truncation,
the chroot merge feature is redundant and can be removed.

Fix #2846
2018-06-29 10:44:54 +02:00
Emery Hemingway
98f1d83194 Automatic session quota upgrades for RM connections
Fix #2838
2018-06-29 10:44:54 +02:00
Emery Hemingway
366913c146 ram_fs: unmark modification from nodes that have been synced
Removed the modified mark from handles that have been written to when
they are synced, otherwise a notification would be sent again when the
handle is closed.

Ref #2839
2018-06-29 10:44:54 +02:00
Roman Iten
7e126f7fb6 run: use sgdisk instead of parted in image/uefi
Issue #2862
2018-06-29 10:44:54 +02:00
Roman Iten
4067cc7962 run: use sgdisk instead of parted in image/disk
Issue #2862
2018-06-29 10:44:54 +02:00
Martin Stein
90fcba79c6 nic_router: non-critical logs only when verbose
* Do not log events that are not critical (deadly) to the NIC router if not
  configured to be verbose,
* Print almost all log lines with a prefix of the domain name they are
  related to,
* And, do not use Genode::error and Genode::warning as they make it hard to
  read the log with the domain name prefixes.

Fixes #2840
2018-06-29 10:44:53 +02:00
Martin Stein
49a3a0e0d0 nic_router: multiple uplinks
Introduce the uplink tag:

! <config>
!    <uplink label="wifi"  domain="uplink">
!    <uplink label="wired" domain="wired_bridge">
!    <uplink               domain="wired_bridge">
! <config/>

For each uplink tag, the NIC router requests a NIC session with the
corresponding label or an empty label if there is no label attribute.
These NIC sessions get attached to the domain that is set in their
uplink tag as soon as the domain appears. This means their lifetime is
not bound to the domain. Uplink NIC sessions can be safely moved from
one domain to another without being closed by reconfiguring the
corresponding domain attribute.

Attention: This may render previously valid NIC router configurations
useless. A domain named "uplink" doesn't automatically request a NIC
session anymore. To fix these configurations, just add

! <uplink domain="uplink"/>

or

! <uplink label="[LABEL]" domain="uplink"/>

as direct subtag of the <config> tag.

Issue #2840
2018-06-29 10:44:53 +02:00
Martin Stein
d4f08b5a71 nic_router: get rid of the term "legacy"
The term was used for the old configuration during the handling of a new
configuration but in other places it was already called old_config.

Issue #2840
2018-06-29 10:40:14 +02:00
Martin Stein
ff7bc0ac6c nic_router: optimize handling of invalid domains
Dissolve and destroy the invalid domain first before deinitializing all
domains for the next round. This way, the deinitialization is not done twice
for the invalid domain.

Issue #2840
2018-06-29 10:40:14 +02:00
Martin Stein
27155a507f nic_router: fix DHCP-server deinitialization
Due to a bug in the deinitialization of the DHCP server of a domain (the
reference to the destroyed object was not cleared), the NIC router could
end up in a page fault caused by a double-free at the heap. This also fixes
the previously missing dissolving of the "DNS-server-from" relation to a
remote domain.

Issue #2840
2018-06-29 10:40:14 +02:00
Martin Stein
fc90c5f8f0 session_label: make typedef String public
Internally, Genode::Session_label has a typedef from String<capacity()> to
String. To have this typedef public is especially useful when reading a
label from an XML node. This can then be written as

! Session_label label = node.attribute_value("label", Session_label::String());

instead of

! Session_label label = node.attribute_value("label", String<160>());

which would be less generic (Session_label cannot be used directly as there
is no appropriate ascii_to implementation).

Issue #2840
2018-06-29 10:40:14 +02:00
Martin Stein
14357b0b44 nic_router_flood.run: test DoS against router
Currently has three clients that continuously create new UDP/TCP/ICMP
connections through the NIC router with NAT to the outer world and they
get never closed.  A fourth client does normal ping through the same
domain to the outer world that must succeed even after the RAM quota of
the other session at the router is exhausted. The test is restricted to
Qemu to not being at risk to flood real networks.

Issue #2857
2018-06-29 10:40:13 +02:00
Christian Helmuth
e3fd554026 qt5: fix file metadata when creating tar archives
This supports stable package hashes in all combinations of user, umask,
and creation time.

Related to #2842
2018-06-14 15:08:46 +02:00
Stefan Kalkowski
ebb7df8cbf init: set all child policies to eager destruction (INTERIM-TEST) 2018-06-14 11:49:16 +02:00
Stefan Kalkowski
dae9f9e164 foc: fix reply_and_wait ipc method
Currently, if the target of a reply capability gets destroyed, the
ipc syscall reply/wait returns with an error. Although we detect
the error condition we continue with reply/wait, which leads to
an endless loop. This commit introduces a condition analoque to
the base-library for pistachio and fiasco to do an open wait if an
error occured during a reply.
2018-06-14 11:48:54 +02:00
Norman Feske
30114e214b sculpt: update pkg versions in README 2018-06-14 11:47:52 +02:00
Norman Feske
ba326a7ec8 News item for Sculpt TC 2018-06-13 15:29:52 +02:00
Christian Helmuth
246bacd9da depot: update recipe hashes 2018-06-13 13:52:12 +02:00
Christian Helmuth
b178777c3e sculpt: prepare TC release
- version is 18.06
- update download_debian and qt5_textedit
2018-06-13 13:52:12 +02:00
Christian Helmuth
33f55d84eb Remove init from runtime for qt5_textedit pkg 2018-06-13 13:52:11 +02:00
Norman Feske
78d83ebda8 utf8.run: increase timeout, needed for sel4 2018-06-13 13:52:11 +02:00
Emery Hemingway
8f1eecdc29 fs_rom: read dataspace during session request
Fix #2863
2018-06-13 13:52:11 +02:00
Norman Feske
6491ba0589 init: avoid too eager child restart
This patch weakens the aggressive restart of a child with incomplete
environment sessions. The restart check is performed each time
the init configuration changes. In sculpt, this is not a rare special
case anymore but a frequent case when using the depot_rom as provider
for environment ROM sessions. In particular when starting a chain of
inter-depending children, the sculpt-manager quickly generates a
sequence of configurations with successively added start nodes.
2018-06-13 13:52:10 +02:00
Norman Feske
648539a513 init: don't report abandoned children
This is a fixup of "base: fix destruction of async env sessions".
2018-06-13 13:50:35 +02:00
Alexander Boettcher
ef482513c4 base: reset unfinished xml nodes in xml_generator
Fixes #2855
2018-06-13 13:50:35 +02:00
Alexander Boettcher
7243fe74e4 sculpt: use package with Tinycore Firefox 60.0.2 2018-06-12 12:11:51 +02:00
Norman Feske
d4c22654e1 init test: reduce RAM demand of app/dummy
The addition of the 'Cap_consumer' feature to app/dummy increased the
static RAM demand of the component to a point where 1 MiB no longer
suffices on sel4 (on this kernel, the base library uses a larger amount
of statically allocated data compared to the others). The tweaks enable
init.run and init_loop.run to work on sel4 on x86-64.
2018-06-12 12:11:51 +02:00
Christian Prochaska
d1524ba0b8 usb_block_drv: don't select alternate interface setting
Selecting an alternate interface setting, even if it is the same as the
current one, apparently makes the INQUIRY command fail with USB devices
like 'SanDisk Ultra Fit' (0781:5583) and 'Corsair Flash Voyager'
(1b1c:1a03) when the USB block driver is restarted.

Fixes #2860
2018-06-12 12:11:51 +02:00
Norman Feske
347d82bdc6 sculpt: handle removal of "used" storage target 2018-06-12 12:11:50 +02:00
Alexander Boettcher
0d9efd04a8 sculpt.run: add kernel log message 2018-06-12 12:11:50 +02:00
Norman Feske
37be984d34 fs_rom: workaround for possible livelock
Thanks to Alexander Boettcher for investigating!
2018-06-12 12:11:50 +02:00
Martin Stein
bf055e2cb4 nic_router: fix uncaught interface RAM exhaustion
* Catch Quota_guard exceptions wherever we do 'new (_alloc)' in Interface
  and in case drop the packet that caused the exception
* Modify Interface::handle_config_2 to not use the guarded allocator of the
  NIC session quota as we cannot handle a RAM exhaustion well at this point
  in time. Instead use a Constructible member in Interface so that a needed
  RAM adds up to the calculation in the create_session implementation where
  an exhaustion is handled via a service denial.

Issue #2857
2018-06-12 12:11:50 +02:00
Martin Stein
97ea513122 nic_router: fix pure virtual call in ~Interface()
The interface destructor called pure virtual methods at least when
cancelling ARP- waiting states. The implementations were made by the
deriving classes Session_component respectively Uplink. This led to an
abort of the NIC router as the destruction of the derived class was
already done. A similar problem already occured in the past during the
construction of Interface and was back then solved by introducing a
separate init() method. This commit, however, solved the problem by
making Interface a member of the other classes. Therefore, the init()
method could be removed again. Furthermore, the interface polica could be
moved from Session_component_base to Session_component. The commit also
had to generalize the way the link state of an interface is determined.

Fixes #2856
2018-06-12 12:11:49 +02:00
Norman Feske
fca3e59e26 sculpt: increase RAM quota of USB block driver
Thanks Sebatian Sumpf for testing!
2018-06-12 12:11:49 +02:00
Norman Feske
3372c1a7b2 sculpt: manage leitzentrale window layout
With this patch, the sculpt manager takes over the role the window
layouter of the leitzentrale, which eliminates the need to manually
position and size the inspect window.
2018-06-12 12:11:49 +02:00
Norman Feske
c1d2388c76 terminal: make background color configurable 2018-06-12 12:11:47 +02:00
Norman Feske
b96f0fa2df init: defer immediate restart of abandoned child
While a child is abandoned, we must limit the start of anothers with
the same name. Otherwise - of the child has startup problems - a number
of abandoned children with the same name may queue up. This becomes a
problem whenever the child destruction depends on an asynchronous
service that provides an env session for the children. If the service is
unable to keep up with the session requests (both create and close),
the queue of abandoned children becomes unbounded. Limiting the child
creation rate to one abandoned child per name mitigates this problem.
2018-06-12 12:11:47 +02:00
Norman Feske
6ab259d642 init: update state report on new/killed children
This patch reduces the latency of state reports when children are
removed or added, thereby, accellerating the feedback loop between a
management component and init during the staged startup or removal of
inter-dependent components.
2018-06-12 12:11:47 +02:00
Norman Feske
81613afa03 base: fix quota transfer to async env services
Whenever an environment session was provided by an asynchronous service,
e.g., the depot_rom of the sculpt scenario, the session quota was not
transferred to the server at session-creation time. This resulted in a
slow depletion of the server's quota over time. This patch ensures that
the delivery of session quota is consistent with the information
reported to the server as session argument.
2018-06-12 12:11:47 +02:00
Norman Feske
578bec11ac base: fix quota reversing when clients vanish
The 'Child::_revert_quota_and_destroy' assumes to be called from the
client's context, which is normally the case when destroying sessions.
However, if a client's session outlives the client (because the
asynchronous close request to the server is still pending), the session
cleanup is performed in the context of the server. Here, the
'session_response' implementation wrongly called
'_revert_quota_and_destroy' to the effect that the session quota was
withdrawn from the server (good) but subsequently transferred back to
the server (bad). The patch replaces the call of
'_revert_quota_and_destroy' with only the first - correct - part of the
transaction.
2018-06-12 12:11:46 +02:00
Norman Feske
7088e4faaa os: add init_loop test
This test monitors the RAM quota of a dynamic init and a server hosted
within the dynamic init in the presence of a repeatedly created and
destructed client.
2018-06-12 12:11:46 +02:00
Christian Helmuth
91b2e023b8 vfs/lxip: make gateway config attribute optional
This enables the application in router/gateway-less network
configurations, e.g., test environments.
2018-06-12 12:11:46 +02:00
Christian Helmuth
05f2ecc045 Increase RAM quota of depot download manager
Also increase run-script test timeout for qemu/sel4.
2018-06-12 12:11:45 +02:00
Christian Helmuth
7d4174bceb run: disable heuristics for apple gpt in parted
Newer revisions of parted require special privileges due to use of the
dmidecode tool, which logs permission errors to standard error. In these
cases parted still succeeds with its operation, so just ignore the
jabbering and prevent expect to exit.
2018-06-12 12:11:45 +02:00
Martin Stein
4630c4b9ff nic_router: fix domain invalidation during init
Previously we were doing the initialization once over all domains,
remembered which of them became invalid and destroyed those afterwards.
This isn't sufficient. As soon as one domain becomes invalid we have to
dissolve/destroy this one, deinitialize all other domains again (as they
could contain references to the invalid domain) and retry to initialize
them from the beginning. We proceed with this until we have one run
without a domain becoming invalid. Then we can be sure that the last
initialization run did not create references to any invalid domain.

Issue #2840
2018-06-12 12:11:45 +02:00
Martin Stein
410652d42a nic_router: invalidate domains with same name
If two domains have the same name, invalidate (dissolve, destroy) them both.

Issue #2840
2018-06-12 12:11:45 +02:00
Martin Stein
8004d8757f nic_router: generic Avl_string_tree
The generic helper Avl_string_tree of the NIC router is currently only
used for finding domains via their names, but in the future it can be
used for finding uplinks by their labels also. Additionally, it enables
us to throw an exception when inserting two elements with the same
identifier.

Issue #2840
2018-06-12 12:11:44 +02:00
Alexander Boettcher
193e14a489 grub2: avoid switching modes
to reduce flickering during boot

Issue #2778
2018-06-12 12:11:44 +02:00
Norman Feske
a3999c93f4 sculpt: sanitize deployment, diagnostic feedback
This patch suppresses the start of components that cannot run because
obvious runtime dependencies (used servers) are missing in the runtime.
In this situation, the sculpt manager gives diagnostic feedback to the
user in the runtime dialog.
2018-06-12 12:11:44 +02:00
Martin Stein
bf1428be18 nic_router: simplify routing rule classes
* Get rid of the base classes Rule and Leaf_rule,
* Make log output about initiated or invalid routing rules conform to the rest
  of the router log, and
* Ensure that each type of routing rule when being invalid invalidates its
  whole domain.

Issue #2840
2018-06-12 12:11:44 +02:00
Martin Stein
1330c27ac6 ping.run: mark as "not supported" on Linux & FOC
On Linux, we have a tap device as NIC back end but there is no one to
ping to in the subnet of the tap device. On FOC, the tests seem to trigger
a bug in the destruction of components with parent.exit(X); .

Fixes #2848
2018-06-12 12:11:44 +02:00
Norman Feske
ff1d3425b1 sculpt: more robust discovery intervention
Sculpt's discovery of the default storage target can be intercepted by
user input (i.e., pointer movements) at boot time. The patch makes this
intervention mechanism robust for the case where nitpicker's first hover
report arrives after all storage devices were already scanned.
2018-06-12 12:11:43 +02:00
Norman Feske
9334f6c05d sculpt: track both manual and managed NIC target
By tracking the states for an interactive selected NIC target (managed)
and a manual-defined NIC target (config/nic_router) separately, the
sculpt manager becames able to present the user with the ability to
interactively disable and re-enable a manually-managed network
configuration.
2018-06-12 12:11:43 +02:00
Norman Feske
ae55187a68 sculpt: increase ram-fs caps on demand 2018-06-12 12:11:42 +02:00
Norman Feske
950b270e74 init: support dynamic cap-quota adjustment
This patch makes init's dynamic quota balancing mechanism available for
capability quotas.

Fixes #2852
2018-06-12 12:11:42 +02:00
Christian Helmuth
639c838707 Update URL of ccid and pcsc-lite ports 2018-06-12 12:11:42 +02:00
Norman Feske
3ec96ab080 sculpt: avoid excess quota for sculpt manager
The sculpt manager wrongly paid for the nitpicker session of the fader
out of its own pocket. This patch reduces the quota transfer to the
amount provided the fader.
2018-06-12 12:11:42 +02:00
Josef Söntgen
5727da0c75 sculpt_manager: preserve hybrid MBR when expanding 2018-06-12 12:11:41 +02:00
Josef Söntgen
268b8205a1 gpt_write: add flag to preserve hybrid
When updating the GPT to match the underlying block device, the
protective MBR will normally also be updated. In case a hybrid MBR is
used, as is done if 'image/disk' is specified, setting the
'preserve_hybrid' flag will prevent the component from overriding the
MBR.
2018-06-12 12:11:41 +02:00
Norman Feske
7367ec2f1a sculpt: allow leitzentrale/state reports 2018-06-12 12:11:41 +02:00
Norman Feske
d2bd8f70f6 input_filter: fix condition for delayed press
The condition was too rigid. In the case where no motion occurred in
between the press and release events of the magic button, the delayed
press event would not be delivered. This - in turn - confused other
components (like nitpicker) down the input chain.
2018-06-12 12:11:41 +02:00
Christian Helmuth
f7ed614362 sculpt: fix inspect prompt in README 2018-06-12 12:11:40 +02:00
Alexander Boettcher
5ca30b0318 platform_drv: disable PCI DMA class specific
for such classes where it should be safe and where we have seen issues.
Disabling in general bus master DMA causes on some machines hard hangs, e.g.
because the USB handover protocol was violated.

Fixes #2835
2018-06-12 12:11:40 +02:00
Christian Helmuth
b8411ae1b8 sculpt: set vimrc completion/wildcard mode to menu 2018-06-12 12:11:40 +02:00
Norman Feske
d4408beeaf sculpt: show wifi button only if wifi card present 2018-06-12 12:11:39 +02:00
Norman Feske
fc800ef9e5 sculpt: let inspect window use vimrc from /config 2018-06-12 12:11:39 +02:00
Norman Feske
8400b90a64 sculpt: fix cursor shape for vbox5-tc-browser VM 2018-06-12 12:11:39 +02:00
Norman Feske
5eb41084a0 sculpt: decouple vm_fs from vm in config/deploy
The 'vm_fs' is also needed by 'download_debian', which must be executed
before 'vm'.
2018-06-12 12:11:39 +02:00
Norman Feske
7791937e84 init: reduce report latency for resource requests
In contrast to most information of init's state reports, which can be
monitored at a relatively low rate (like 2 seconds in Sculpt's runtime),
resource requests call for an immediate response by the consumer of the
report. Otherwise the requesting child stays unnecessarily blocked until
the next rate-limited state report is due. This patch adds a fast lane
for such low-latency state updates to init.
2018-06-12 12:11:38 +02:00
Christian Helmuth
4bfc32789e sculpt: manager depends on x86 (currently)
The sculpt manager uses the platform-session interface which is not
defined for other platforms currently.
2018-06-12 12:11:38 +02:00
Norman Feske
f12ddb4ee7 terminal: fix sporadic (underline) pixel artifact
The framebuffer refresh call missed to consider that content may not
vertically start at 0.
2018-06-12 12:11:37 +02:00
Alexander Boettcher
fd7357d9d5 vbox5: add log_core to test scripts
Issue #2207
2018-06-12 12:11:37 +02:00
Alexander Boettcher
70028f8445 nova: export kernel messages via memory
Fixes #2207
2018-06-12 12:11:37 +02:00
Christian Prochaska
38d5a5bf0e qt5: set fixed file times when creating tar archives for raw packages
Fixes #2842
2018-05-31 17:16:18 +02:00
Christian Prochaska
1093adca7e qt5_textedit improvements for use with sculpt
- support saving of files with no file name extension
- make the the "All Files (*)" file selection filter the default to see
  configuration files immediately

Fixes #2844
2018-05-31 17:15:14 +02:00
Alexander Boettcher
2755772478 vbox5: update to 5.1.38
Issue #2847
2018-05-31 17:12:44 +02:00
Alexander Boettcher
e087d6ad19 vbox5: quirk microcode patch attempts by guests
Fixes #2847
2018-05-31 17:12:25 +02:00
Christian Prochaska
de328c412a depot: qt5_textedit runtime package recipe
Fixes #2845
2018-05-31 17:11:17 +02:00
Christian Helmuth
a7dadd9dae depot: ignore some files on pkg generation
Now, the typical gitignore patterns

  *~ *.rej *.orig *.swp

are not added to the pkg.
2018-05-31 17:07:21 +02:00
Norman Feske
e8acc5eabc News item for version 18.05 2018-05-31 14:50:25 +02:00
Christian Helmuth
a08ff1d1ce version: 18.05 2018-05-31 14:02:21 +02:00
Norman Feske
e533fe44b0 Release notes for version 18.05 2018-05-31 14:02:21 +02:00
Christian Helmuth
bd86efe5fe depot: update recipe hashes 2018-05-31 14:02:21 +02:00
Norman Feske
43039e19f7 sculpt: update documentation to Sculpt TC 2018-05-31 14:02:20 +02:00
Norman Feske
3dd81b0d32 Sculpt for The Curious (TC)
This commit updates Early-Adopters (EA) version of Sculpt to the version
for The Curious (TC). Most importantly, it contains the new interactive
sculpt-manager component that automates many system management and
configuration tasks.
2018-05-31 14:02:20 +02:00
Christian Helmuth
5d5756d0cb Sort autopilot test list 2018-05-31 14:02:20 +02:00
Josef Söntgen
9760210c77 fs_rom: revert notification changes 2018-05-31 13:51:23 +02:00
Alexander Boettcher
4979221152 tool: support to use graphical grub2 2018-05-31 13:51:23 +02:00
Christian Prochaska
a6aa4863f3 depot: pubkey and download location of cproc 2018-05-31 13:34:54 +02:00
Alexander Boettcher
e285ecb76c core: avoid freeing wrong regions during attach
In case of an Alloc_return error, don't free the address at 0. If this
is a managed dataspace, there could be valid attachments which then gets
lost.

Make decreasing alignment search working. Continue with lower alignment
restrictions in case the optimal alignment wish can't be fulfilled.
2018-05-31 12:28:16 +02:00
Alexander Boettcher
30d004ab64 base: extend rm_nested test 2018-05-31 12:28:16 +02:00
Martin Stein
136b23cb5e ipxe nic_drv: do not leak packets on link down/up
On link down toggle the netdev off/on to drain the TX DMA. As long as the link
stays down, do not write packets to TX DMA.
2018-05-31 12:28:16 +02:00
Martin Stein
a3905fcf87 nic_router: do not leak packets on link down/up
Do not send nor buffer packets at interfaces with link state "down". This
prevents that packets that were routed to one network (allowed to see them),
due to a sudden link down/up, are leaked to another network that is not
allowed to see them.
2018-05-31 12:28:15 +02:00
Martin Stein
1306892fbf nic_router: fix interface update on missing domain
When updating an interface in the NIC router to a new configuration and
the domain name of the interface has not changed but the domain
disappeared, the NIC router did not detach from the old domain correctly
which led to broken remnants of interface state objects (like connection
states).

Adapt the nic_router_uplinks run script to work with the fix.
2018-05-31 12:28:15 +02:00
Christian Helmuth
e2559a822b server/fs_report: don't truncate file initially
fs_report truncated the report file on construction of the report
session to mimic an "empty report". This prevented existing use cases
where the initial state was already written to the file system by other
means.

I doubt that use cases exist where the inital empty-report mimic is
needed and (if I'm wrong) there is still the race of the consumer
reading the file just before the report session is constructed.
Reporters that want to enforce an empty initial report should send it
explicitly.
2018-05-31 12:28:15 +02:00
Alexander Boettcher
30c69e73b3 core: restrict mapping size recursively on regions 2018-05-31 12:28:15 +02:00
Norman Feske
5b8a2af979 depot_query: reflect query version in reports 2018-05-31 12:28:14 +02:00
Norman Feske
6f0a727aee depot_deploy: support lazy pkg installation
This patch enhances the 'Child' interface with the ability to retry the
deployment after an initial attempt failed. This way, packages can be
installed on demand based on the error feedback of deployment attempts.
2018-05-31 12:28:14 +02:00
Norman Feske
a4b94dad41 depot_download: limit fetchurl download attempts 2018-05-31 12:28:14 +02:00
Norman Feske
c21e5863b9 depot_download: produce 'state' report
The state report reflects the progress of downloading, verifying, and
extracting archives. For the download step, it includes the progress
as reported by fetchurl.
2018-05-31 12:28:14 +02:00
Norman Feske
a529a35ce6 sculpt: update list of ports in README 2018-05-31 12:28:13 +02:00
Norman Feske
64810bb138 menu_view: make root-widget size configurable
The config attributes 'width' and 'height' allow one to explicly specify
the menu-view's size instead of using the min size.
2018-05-31 12:28:13 +02:00
Norman Feske
d65a2c7cab menu_view: avoid initial animation of float widget 2018-05-31 12:28:13 +02:00
Norman Feske
5958fe0a69 menu_view: change voffset of button immediately
This patch changes the button widget to apply the vertical offset to its
child widgets at draw time, not at the layout phase. This way, the
visual feedback on button press/release changes is more direct because
it sidesteps the geometry animation.
2018-05-31 12:28:13 +02:00
Emery Hemingway
1af6bd1454 Fs_rom: send signals on file removal
Clients may wish to act on missing files. In any case the fs_rom
needs to reopen a watch handle when a file is deleted, and this
sort of change to the internal state machine is propelled by
client RPC requests.

Fix #2839
2018-05-31 12:28:12 +02:00
Norman Feske
87be50c542 os: add Expanding_reporter::generate(Xml_node)
This method allows for the verbatim reporting of an existing XML node.
2018-05-30 13:36:40 +02:00
Norman Feske
fc6e3c6b09 nitpicker: report boot-time motion activity 2018-05-30 13:36:40 +02:00
Norman Feske
b541379037 nitpicker: option to report display information
The new 'displays' report contains information about the used
framebuffer backend. It is issued when nitpicker has successfully passed
all initialization, in particular the connection to the framebuffer
driver. Hence, it can be taken as an indicator of whether the framebuffer
is available or not (e.g., caused by a faulty driver).
2018-05-30 13:36:40 +02:00
Martin Stein
22a69efafa nic_router: report DNS server 2018-05-30 13:36:40 +02:00
Martin Stein
3cac7e878d nic_router: invalid rules render domain invalid 2018-05-30 13:36:39 +02:00
Martin Stein
0592ac56c9 nic_router: handle invalid DHCP server 2018-05-30 13:36:39 +02:00
Martin Stein
49dc2b264f nic_router: point to point IP config 2018-05-30 13:36:39 +02:00
Martin Stein
44d97986a2 nic_router: attribute report.config_triggers 2018-05-30 13:36:39 +02:00
Martin Stein
c32c584f65 nic_router: fix uncaught exception on re-configure 2018-05-30 13:36:38 +02:00
Martin Stein
4802d22527 nic_router: reset uplink IP on link state change 2018-05-30 13:36:38 +02:00
Martin Stein
fe21ab48e0 nic_router: fix link-state for uplink interface 2018-05-30 13:36:37 +02:00
Adrian-Ken Rueegsegger
3108b71a89 Update Muen port
- Use device class in system policies to simplify platform-specific
  device assignment
- Increase timed event nr. bits from 5 to 6
2018-05-30 13:36:36 +02:00
Martin Stein
19816bcd31 nic_router: when freeing a link log it beforehand
So, it can be located more easily when something goes wrong while
freeing a link.

Fixes #2815
2018-05-30 13:36:36 +02:00
Martin Stein
734d174f33 net: get rid of unused mac_from_string method
Issue #2815
2018-05-30 13:36:36 +02:00
Martin Stein
cea22866a8 config.xsd: adapt Boolean type to ascii_to(bool)
Harmonize the set of allowed values with the implementation of ascii_to for
bool.

Issue #2815
2018-05-30 13:36:35 +02:00
Martin Stein
14482146c5 virtualbox_nic_router.run: test uplink reconnect
* Enable USB input
* Get rid of variables that adapted runscript to other platforms than x86_64
  hardware with nova and instead restrict the run script to this platform
* Use a dynamic config for routers
* Switch label of the uplink of router 1 so it connects to Wifi and NIC driver
  alternately
* Let uplink domain tag appear and dissapear

Issue #2815
2018-05-30 13:36:35 +02:00
Martin Stein
6a384df412 autopilot.list: add nic_router_uplinks
Issue #2815
2018-05-30 13:36:35 +02:00
Martin Stein
f278a3bafb nic_router_uplinks.run: test uplink re-connect
Automated test for switching the NIC-router uplink between NIC driver and Wifi
driver with DHCP and different subnets. Tests also removal and later re-
insertion of the uplink domain tag.

Issue #2815
2018-05-30 13:36:35 +02:00
Martin Stein
ba348b73e2 nic_router: re-use dynamic IPv4 config if possible
When re-configuring the NIC router, determine for each domain if at least one
interface stays with the domain. If a domain fullfills this and has a
dynamic IP config (received via a DHCP client), keep the IP config.

To achieve this, the following changes have been made to the existing NIC
router code:

* Split-up Interface::handle_config into three steps:

  1) Determine for each interface if its domain can keep its IP config or
     or if it has to mark it invalid. This must be done before (re-)attaching
     any interface because during "attach" several decisions are made based on
     the validity of the IP config of corresponding the domain.
     (E.g. whether to participate in sending DHCP DISCOVERs {IP config
     invalid} or whether to participate in sending pending ARP REQUESTs
     {IP config valid} ).

  2) Detach, attach, or re-attach each interface according to the
     configuration. This must be done before re-considering the temporary
     state objects of each interface because the latter might have effects
     on the interfaces of remote domains which must then be in place already.

  3) Re-consider temporary state objects of each interface. (E.g. transport
     layer connection states)

* Re-work IP-config setter in a way that it works as follows:

  1) If the old IP config is valid, let all local interfaces as well as remote
     interfaces that depend on the IP config of the domain detach from the old
     IP config.

  2) Overwrite with new IP config

  3) If the new IP config is valid, let all local interfaces as well as remote
     interfaces that depend on the IP config of the domain attach to the new
     IP config.

Issue #2815
2018-05-30 13:36:34 +02:00
Martin Stein
ed69c11b01 nic_router: label attribute for uplink domain
The new attribute config.domain.label has effect only at the uplink
domain-tag. It determines which label the NIC router shall use when
requesting the NIC session for the uplink domain. If value of this
attribute changes at the uplink domain-tag, the NIC router closes and
re-requests the NIC session of the uplink with the new label.

Issue #2815
2018-05-30 13:36:34 +02:00
Martin Stein
1cfcab536c nic_router: Ipv4_config::print method
Issue #2815
2018-05-30 13:36:34 +02:00
Martin Stein
6de79ad703 ping_nic_router.run: add nic_bridge behind router
This tests the case that behind a NIC router domain there are not only
directly connected clients of the subnet but also Layer 2 indirections like
a switch or a bridge which might be interesting for example for testing the
NIC routers DHCP server implementation.

Fixes #2837
2018-05-30 13:36:33 +02:00
Martin Stein
0996954abb ping tests: fix for linux and hw + arm
Some platforms need more caps in some components and more time to finish the
test.

Issue #2837
2018-05-30 13:36:33 +02:00
Martin Stein
75ff599a91 ping: shorter retry timeouts in DHCP client
Set DHCP-DISCOVER retry timeout and DHCP-REQUEST retry timeout from 10
seconds to 2 seconds. This prevents problems with tests where the NIC
driver comes up slowly and the first packets of the DHCP client get
dropped.

Issue #2837
2018-05-30 13:36:33 +02:00
Martin Stein
0d5ed994e2 nic_router: fix dst and client MAC in DHCP replies
The Ethernet destination MAC address of a DHCP reply is not the same as the
DHCP client MAC address. The DHCP server of the NIC router did not take care
of this by now.

Issue #2837
2018-05-30 13:36:33 +02:00
Martin Stein
bbc73e96ac nic_bridge.run: remove libm from boot modules
libm is obviously not needed anymore and not build. Thus, this fixes a run
error.

Issue #2837
2018-05-30 13:36:33 +02:00
Martin Stein
cee0c86c3c nic_bridge: fix reading of 'mac' attribute
Read as full MAC address and not as decimal uint8_t.

Issue #2837
2018-05-30 13:36:32 +02:00
Martin Stein
342bdaf4a2 net: generic ascii_to for Netaddress template
Issue #2837
2018-05-30 13:36:32 +02:00
Alexander Senier
43faf63fde pthread: fix deadlock in pthread_rwlock_*
Properly initialize and reset the _owner member, otherwise
correlating the unlock operation with the respective read/write
lock does not work.

Move locking the _nbr_mutex in the unlock operation after the
owner check. Otherwise, a reader holding that mutex and waiting
for the write lock would deadlock a writer trying to unlock the
_global_mutex.

Ref. Componolit/componolit#86
Ref. #2656
Fixes #2832
2018-05-30 13:36:32 +02:00
Christian Prochaska
230ed1de37 usb_block_drv: make device reset optional
Fixes #2836
2018-05-30 13:36:31 +02:00
Alexander Boettcher
0ef7e58ef9 platform_drv.inc: support acpi_drv and acpica
Issue #2816
2018-05-30 13:36:31 +02:00
Boris Mulder
39e1314d07 nit_fader.run: added cap quota, added some RAM to scout. Issue #2831 2018-05-30 13:36:30 +02:00
Norman Feske
7b6b3a4535 base: fix destruction of async env sessions
When an environment session is provided by a async service such as a
sibling component, the session metadata must be preserved until end of
the lifetime of the session at the server has been acknowledged by the
server. Since the session meta data of env sessions are always part of
the 'Child' object, the destruction of this object must be deferred
until this point.
2018-05-30 13:36:30 +02:00
Emery Hemingway
6d5393dd31 Simplify fs_rom internals
Merge the 'Packet_handle' into the 'Rom_root' and use an Id_space to
match File_system handles to session objects rather than a list. This
avoids the need to override 'Root_component::_destroy_session'.

Fix #2833
2018-05-30 13:36:29 +02:00
Norman Feske
b1b70e6c35 tool/link.h: remove outdated comment 2018-05-30 13:36:29 +02:00
Norman Feske
f390543550 e2fsprogs: disarm mount-point checks
On Noux, these checks are not needed because there is no notion of mount
points.
2018-05-30 13:36:29 +02:00
Norman Feske
ad40e71fdf e2fsprogs-minimal: add resize2fs 2018-05-30 13:36:28 +02:00
Norman Feske
0c26f33819 init: keep running even when RAM is exhausted
When exhausted of RAM quota while starting children, init used to throw
an uncaught 'Out_of_ram' exception as this condition was considered
fatal. However, this behavior is undesired when init is used in a highly
dynamic yet long-running fashion like sculpt's runtime subsystem. This
change keeps init running despite the error condition, giving the user
the chance to relieve the resource pressure.
2018-05-30 13:36:28 +02:00
Josef Söntgen
967abd4e91 sticks_blue_backdrop: increase RAM quota to 64MiB
Needed on 2560x1440 displays.
2018-05-30 13:36:28 +02:00
Josef Söntgen
329f8b30e9 sculpt: increase acpi_drv resources to satisfy T470p 2018-05-30 13:36:28 +02:00
Alexander Boettcher
675d31587c base: increase retry in expanding_pd_session 2018-05-30 13:36:27 +02:00
Alexander Boettcher
e6d20aba93 base: support to attach RAM dataspaces readonly
Fixes #1633
2018-05-30 13:36:27 +02:00
Alexander Boettcher
487e8ea934 acpica: adjust acpi device reports
If ACPI IRQs are received but no changes to the watched state for a specified
count can be observed, than generate nonetheless a Genode report.

Issue #2816
2018-05-30 13:36:25 +02:00
Christian Helmuth
aa8b725457 wifi: don't generate unused files in port 2018-05-30 13:36:25 +02:00
Reto Buerki
75ea9c35db Minor: Add comma to audio/bus.cc log message 2018-05-30 13:36:24 +02:00
Christian Helmuth
bba5a61ef9 Don't run ping test on unsupported platforms 2018-05-30 13:36:24 +02:00
Norman Feske
6be1d377db depot: recipe for src/gpt_write
Issue #2814
2018-05-30 13:36:24 +02:00
Norman Feske
df9eb55c5a depot: recipe for api/jitterentropy
The API archive makes the library usable for src/gpt_write.
2018-05-30 13:36:24 +02:00
Norman Feske
44a6e51114 noux: respond to terminal-close event 2018-05-30 13:36:23 +02:00
Norman Feske
78c09c27ca terminal: respond to window-close event 2018-05-30 13:36:23 +02:00
Norman Feske
d3626bd84f nitpicker: fix transparency artifacts
The 'View_stack::draw_rec' method limited the redraw to parts of the
view that were explicitly marked as dirty. This does not produce the
desired result when stacking multiple transparent views. Here, the
background views must be drawn regardless of whether they are marked as
dirty or not.
2018-05-30 13:36:23 +02:00
Norman Feske
096c1e1f7f run/image/disk: omit * from GENODE partition label
This way, the boot partition is not considered as default partition by
Sculpt unless the user explicitly marks it as such.

Issue #2778
2018-05-30 13:36:22 +02:00
Christian Helmuth
66d44289e1 tool/ports: streamline hash tool usage 2018-05-30 13:36:22 +02:00
Emery Hemingway
82897d672e Remove SHA1 verification for port downloads
Revert support for both SHA1 and SHA256 verification and support SHA256
only.

Ref #2767
2018-05-30 13:36:22 +02:00
Emery Hemingway
72cb71c827 Replace SHA1 hashes of port downloads with SHA256
Now SHA256 has been shown to be an adequate replacement for SHA1, use
SHA256 for verifying all port downloads.

Ref #2767
2018-05-30 13:36:22 +02:00
Emery Hemingway
e36ddaf659 Rename lwip library to lwip_legacy
Rename LwIP library in preparation for removal of LwIP libc plugin. The
current LwIP library will be replaced with a new version stripped of its
synchronous socket support. The next version will be incompatible with
the current, so removing 'lwip.lib.so' completely for a period makes it
easy to identify legacy users.

Fix #2797
2018-05-30 13:36:22 +02:00
Alexander Boettcher
b1389416d2 run: created hybrid MBR for image/disk
Issue #2778
2018-05-30 13:36:21 +02:00
Alexander Boettcher
0efa67893e acpica: generate report usable by platform_drv
Fixes #2816
2018-05-30 13:36:21 +02:00
Roman Iten
874815ebf6 run: improve error handling regarding depots
Fixes #2821
2018-05-30 13:36:21 +02:00
Christian Prochaska
c5f1ac615c Usb::Packet_handler: avoid completion handler recursion
Fixes #2828
2018-05-30 13:36:20 +02:00
Christian Prochaska
c6e4f5914e usb_block_drv: release packet after device reset
Fixes #2827
2018-05-30 13:36:20 +02:00
Christian Prochaska
68ec33b0d3 usb_block_drv: use 10-byte SCSI commands by default
Fixes #2826
2018-05-30 13:36:20 +02:00
Christian Prochaska
5ac56be748 usb_block_drv: set inquiry response length to 36 bytes
Fixes #2825
2018-05-30 13:36:20 +02:00
Christian Prochaska
cecd461f38 usb_block_drv: look up endpoints at runtime
Fixes #2824
2018-05-30 13:36:19 +02:00
Christian Prochaska
106a5f1d4d usb_block_drv: calculate block count correctly
Fixes #2823
2018-05-30 13:36:19 +02:00
Martin Stein
3d480ec947 nic_router: fix config update of ICMP links
Previously, the update of ICMP links on a new router configuration lead to an
uncaught exception.

Issue #2795
2018-05-30 13:36:19 +02:00
Christian Helmuth
23f4acfabc Remove redundant calls to exec_static_constructors() 2018-05-30 13:36:19 +02:00
Alexander Boettcher
501d82b99f platform_drv: skip assign device if iommu missing
Avoid red messages in the log on machines with no IOMMU, which recurring
confuse people.

Issue #2801
2018-05-30 13:36:18 +02:00
Norman Feske
24e6b677bd util/list_model.h: graceful handling of duplicates
This patch makes the 'List_model' utility robust against duplicated
occurrences of node IDs in the supplied XML data. If two or more XML
nodes correspond to the same model element, the existing element is
updated with the information of the subsequent XML nodes.
2018-05-30 13:36:18 +02:00
Norman Feske
bf52f73d03 menu_view: improved box and float layouts
This patch enhances the box layout such that child widgets are
equally stretched to the available size whenever the box layout's
size is larger than its min size. Furthermore, it corrects the
mixed-up use of the terms east and west in the float widget.
2018-05-30 13:36:18 +02:00
Norman Feske
2a9b0a163e depot_deploy: make child-state tracking reusable 2018-05-30 13:36:18 +02:00
Norman Feske
94db45036c fetchurl: expand report buffer on demand 2018-05-30 13:36:17 +02:00
Norman Feske
9fd2ab1aaf depot_download: forward fetchurl progress reports
This patch enables the observation of the download progress from the
outside of the depot-download subsystem.
2018-05-30 13:36:17 +02:00
Norman Feske
e314edb736 depot_download: respond to 'installation' changes
This patch enables the 'depot_download' subsystem to trigger downloads
whenever there is a new version of the 'installation' ROM.
2018-05-30 13:36:17 +02:00
Christian Helmuth
8f102264d3 server/fs_report: open/close file for each write
The file may also be changed by other components, so a open-close cycle
for write() is more robust. For example, Vim removes the original file
and recreates with the new content.
2018-05-30 13:36:17 +02:00
Josef Söntgen
ab77f94348 gems: add tool to write a GPT to a Block device
This component creates a GPT on a Block device. It supports the common
actions, as in adding, deleting and modifying entries in the GPT, while
considering alignment constraints. If needed it will round the length of
a partition down to meet those constraints. The component will not
perform layout checking, i.e., it does not care about overlapping
partitions. Only when apping a partition it will make sure that the
partition will fit.

Please read _repos/gems/src/app/gpt_write/README_ for more detailed
information on how to use the component and feel free to check out
_repos/gems/run/gpt_write.run_.

Fixes #2814.
2018-05-30 13:36:16 +02:00
Norman Feske
3065cceb73 menu_view: defer geometry animation to layout step
The box-layout widget used to trigger the geometry animation of its
children immediately when updating the widget from the XML model (by
calling 'child->Widget::geometry'). This caused layout inconsistencies
in situations where the box layout is defined not by the constraints of
the child widgets but from the outside (the parent calls Widget::size).
Since the final layout is not known before the parent defines the actual
size, this patch moves the trigger point for the geometry animation to
'Widget::size'.
2018-05-30 13:36:16 +02:00
Norman Feske
05b0010281 menu_view: optional 'version' widget attribute
The new 'version' attribute can be used to explicitly distinguish
widgets that have the same name. E.g., if one widget is removed and
another with the same name is created somewhere else at the same time,
the menu view would normally interpret this change as a movement.
By attaching a distinct 'version' the new instance, menu view won't
attempt perform a smooth transition between the old and new widgets.
2018-05-30 13:36:16 +02:00
Norman Feske
7d55adf01c nit_fb: defer mode change to client response
The '_active_mode' must not be changed at any time except when the
client asks for the 'Framebuffer::mode'. Otherwise, the dimensions of
dataspace used by the client is not always consistent with the mode
information as gathered by the client.
2018-05-30 13:36:15 +02:00
Roman Iten
5d23ef9447 run: make run script fail on unmet dependencies
Fixes #2820
2018-05-30 13:36:15 +02:00
Christian Prochaska
f4cfa0ca43 vbox5: remove 'force_ioapic' code
Fixes #2806
2018-05-30 13:36:15 +02:00
Christian Helmuth
cb3556877d pointer: show default pointer on empty shape report 2018-05-30 13:36:15 +02:00
Christian Helmuth
0f7de9268d check_port_source: download first kilobytes of file
Unfortunately, some sites do not support the HTTP/1.1 range header and
just serve the whole file, which takes it's time and may result in a
timeout.

Fixes #2819
2018-05-30 13:36:14 +02:00
Alexander Boettcher
d450573681 run: image/disk for UEFI & BIOS legacy boot
Fixes #2778
2018-05-30 13:36:14 +02:00
Alexander Boettcher
bbfa65a88a tool: remove rump tools
image/disk was the last user of the tools.

Issue #2778
2018-05-30 13:36:14 +02:00
Emery Hemingway
29c08d4751 Fix types for VFS error printing
Ref #2793
2018-05-30 13:36:14 +02:00
Christian Helmuth
87e41ef47e rump: remove debugging artifact (rump_dummy) 2018-05-30 13:36:13 +02:00
Emery Hemingway
1097a5c7c2 Libc: ignore address argument to TCP sendto
Generic code that operates over both UDP and TCP sockets might use
'sendto', but in the case of TCP the destination address ought to be
safely discarded. This seems to be the case for certain DNS software
that operates over both UDP and TCP.

Fix #2807
2018-05-30 13:36:13 +02:00
Christian Prochaska
2b75445ac1 usb_block_drv: keep driver instance between sessions
Fixes #2813
2018-05-30 13:36:13 +02:00
Martin Stein
505d30cc42 Update ping tests
On real hardware, the tests expect an IPv4 subnet such that UDP requests
to 10.0.0.2 port 12345 get answered with an ICMP destination port unreachable.

Issue #2775

support USB NIC

Issue #2788

Set DHCP discover timeout to 1 second because, for some reason, the first
DHCP discover attempt of the NIC router on the PandaBoard times out with the
nightly test infrastructure.

Issue #2788

Adaption to mac-address allocation changes
2018-05-30 13:36:13 +02:00
Martin Stein
2d229a2b72 ping: support UDP
Ping via specific UDP port instead of ICMP Echo with the two new configuration
attributes 'protocol' and 'dst_port'.

Issue #2775
2018-05-30 13:36:12 +02:00
Martin Stein
d93fda594a ping: dynamic IP configuration
Use DHCP to obtain and maintain an IP configuration if no static
configuration is given.

Issue #2775
2018-05-30 13:36:12 +02:00
Martin Stein
ce57319e4b nic_router: bind uplink session lifetime to domain
Normally, the NIC sessions are independent from the domain tags.
However, by now the uplink session, in contrast to the sessions of the
other domains, is still not a server but a client. This means that only
the NIC router itself can decide when to open and close uplink sessions
and how many. Thus, with this commit, we break with the pattern that
session lifetime is independent from domains by letting the NIC router
create the uplink session when the uplink domain appears and close the
session when the domain disappears.

Fixes #2795
2018-05-30 13:36:12 +02:00
Martin Stein
7085640f05 nic_router: remove 'mac_first' attribute
Since the router MAC is allocated like the donwlink MACs it can't happen
anymore that these MACs clash, for instance due to nested routers. Thus,
the range of the MAC allocators of nested routers must not be exclusive
anymore which deprecates the 'mac_first' configuration attribute.

Issue #2795
2018-05-30 13:36:12 +02:00
Martin Stein
e83f095fd2 nic_router: downlinks use own router MAC address
Allocate a virtual MAC address at runtime that is used as router
Ethernet-identity for all downlink domains. This makes the downlink
domains independent from the uplink session.

Issue #2795
2018-05-30 13:36:11 +02:00
Martin Stein
41dbad13e4 nic_router/nic_bridge: re-work Mac_allocator
The old MAC allocator had several drawbacks:

* the address base was a public static that could and must have been written
  directly from outside the class
* the in-use-flag array was based on unsigned values consuming 4 bytes each
  for only one bit of information
* it was a public header that we actually don't want to expose to all
  components but only to the few networking components
* it used the not-so-safe bit notation for integer members of GCC

The new version fixes all these drawbacks.

Issue #2795
2018-05-30 13:36:11 +02:00
Martin Stein
980f3e9c5c net: use Size_guard for packet-data accessors
Instead of handing over the maximum available size to the packet data
accessors, hand over a size guard that keeps track of the packets
boundaries.

This commit also moves the size-guard utilitiy header of Ping and NIC
Router to the include/net directory making it a part of the net library.
It applies the new approach to all net-lib users in the basic repositories.

Ping looses its configurability regarding the ICMP data size as this would
require an additional method in the size guard which would be used only by
Ping.

The size guard was also re-worked to fit the fact that a packet can
bring a tail as well as a header (Ethernet).

Issue #2788
2018-05-30 13:36:11 +02:00
Martin Stein
2bd163533b string.h: ascii_to for unsigned char
Issue #2795
2018-05-30 13:36:11 +02:00
Norman Feske
48bc69b14b run/image/disk: consider ext2 overhead
The original value of 256K does not suffice for images of the size of
sculpt.
2018-05-30 13:36:10 +02:00
Josef Söntgen
7f285bb074 part_blk: add reporting of expandable GPT entries
Issue #2803.
2018-05-30 13:36:10 +02:00
Josef Söntgen
45743ce884 part_blk: probe whole disk if no valid MBR found
Report the whole disk as partition 0 and probe file system. The
partitions type is set to 'disk'.

Issue #2803.
2018-05-30 13:36:10 +02:00
Josef Söntgen
90360674ed part_blk: report block size 2018-05-30 13:36:10 +02:00
Josef Söntgen
40a0fe9349 part_blk: add minimal file system probing
For now it is enough to differentiate the most commonly used file
system on Genode, e.g. Ext2 for the Genode partition and FAT32 for
(U)EFI partitions.

Issue #2803.
2018-05-30 13:36:09 +02:00
Josef Söntgen
9f8369c01e part_blk: change behaviour regarding GPT usage
The component will now always try to parse the MBR as well as the GPT
(in this order). It will bail out if both are considered valid, using
GPT/MBR hybrid tables is not supported.

Fixes #2803.
2018-05-30 13:36:09 +02:00
Norman Feske
cfe6e0f15b drivers_interactive-pc: increase caps for acpi
This is needed to use the pkg on a Thinkpad x250.
2018-05-30 13:36:09 +02:00
Norman Feske
bf0ef1b8eb base: remove unused argument name in list_model.h
Needed to use the utility with -Weffc++.
2018-05-30 13:36:09 +02:00
Alexander Boettcher
de9d1afa99 tool/run: move binaries to boot directory
Issue #2778
2018-05-30 13:36:08 +02:00
Alexander Boettcher
25f2c44874 run: use GPT for image/disk BIOS legacy
Issue #2778

The "create_grub2" script functionality is moved to the g2fg contrib sources
and also the GRUB2 head image (tool/grub2-head.img). The head image is now
partitioned as GPT and bootable in BIOS legacy mode.
2018-05-30 13:36:08 +02:00
Christian Prochaska
6080f4fb56 Fix 'vbox5_genode_usb_hid.run' / add to autopilot
Fixes #2802
2018-05-30 13:36:08 +02:00
Johannes Kliemann
8bffc33d8f ada: test secondary stack 2018-05-30 13:36:08 +02:00
Johannes Kliemann
e8e2fc48f8 ada: secondary stack support 2018-05-30 13:36:08 +02:00
Alexander Boettcher
0de62717f9 x86: detect root bridge properly
Beforehand the root bridge was expected to be at 0:0.0.

Fixes #2801
2018-05-30 13:36:07 +02:00
Sebastian Sumpf
58fb5ed722 jdk: OpenJDK for Genode
OpenJDK version 9 for Genode, contains the interpreter version of the
HotSpot virtual machine.

fixes #2791
2018-05-30 13:36:07 +02:00
Christian Helmuth
a6e0fdd505 libc: support syscall(SYS_thr_self,...)
This syscall returns the thread ID / light-weight PID of the calling
thread under FreeBSD.

Issue #2791
2018-05-30 13:36:07 +02:00
Sebastian Sumpf
ea6b4a0caf libports: port of ffi library
required by jdk

issue #2791

Forein function interface library, which takes care of calling
conventions of different platforms.
2018-05-30 13:36:07 +02:00
Sebastian Sumpf
9cdc24bd32 vfs: serialize file system calls
issue #2635
issue #2791
2018-05-30 13:36:06 +02:00
Sebastian Sumpf
abe76e0d93 vfs rom: return 0555 file permissions
issue #2791
2018-05-30 13:36:06 +02:00
Sebastian Sumpf
eccfa5e1e7 pthread: retrieve stack address and size
issue #2791
2018-05-30 13:36:06 +02:00
Sebastian Sumpf
df3e4edd76 vbox: adjust to 'pthread_attr' removal in pthread
issue #2791
2018-05-30 13:36:05 +02:00
Sebastian Sumpf
b4209cb3bb pthread: remove 'pthread_attr' from pthread class
issue #2791
pthread_attr is not associated with any thread, the statistics must be
gathered at runtime, while 'pthread_attr_get_np' may retrieve attributes
by from any thread. Addtionally, the attributes given to
'pthread_create' will most likely be deleted after the creation call.
2018-05-30 13:36:05 +02:00
Sebastian Sumpf
2ff11dc063 phtread: limit stack size to Genode's max stack size
issue #2791
2018-05-30 13:36:05 +02:00
Sebastian Sumpf
dfc2e2bd68 pthread: 'phtread_join'
issue #2791
2018-05-30 13:36:05 +02:00
Sebastian Sumpf
8605e15b4f libc: add suspend and resume_all to symbol map
This commit enables the pthread library to hook into the libc execution
model and can be reverted after #2812 is fixed.

Issue #2791
2018-05-30 13:36:05 +02:00
Sebastian Sumpf
bfd9c48039 libc: support RTLD_DEFAULT in dlsym
issue #2791
2018-05-30 13:36:04 +02:00
Sebastian Sumpf
419dc40c4d libc: rlimit add address-space size + number fds
issue #2791
2018-05-30 12:26:20 +02:00
Emery Hemingway
51722c1fe6 Update Nim to 0.18.0
Fix #2804
2018-05-30 12:26:20 +02:00
Christian Prochaska
f78d856b37 base-nova: increment 'pause' semaphore only when recall handler uses it in reply
Fixes #2796
2018-05-30 12:26:20 +02:00
Emery Hemingway
e005d966b4 Ram_fs: immediate directory notifications
Do not mark and defer notification for directories when a file is
created or removed, mark and immediately queue a notification.

Fix #2808
2018-05-30 12:26:19 +02:00
Stefan Kalkowski
a9082eb162 hw/panda: fix -O0 / -fno-omit-frame-pointer builds 2018-05-30 12:26:19 +02:00
Christian Prochaska
f347cb90f1 depot: qt5 recipes
Fixes #2792
2018-05-30 12:26:19 +02:00
Emery Hemingway
e2661c58dc Convert static VFS library to dynamic library
Fix #2759
2018-05-30 12:26:19 +02:00
Christian Helmuth
cbfec0deed ldso: check ctors sections of shared-object deps
The sole existence of shared-object dependencies lead to fatal
static-constructor errors before. Now, ldso checks if the ctors section
of objects in the init list are non-empty before whining.

Issue #2759
2018-05-30 12:26:18 +02:00
Roman Iten
058b92ca99 depot: tool for publishing current versions
In order to simplify the automation of publishing archives, this tool
publishes the current version as specified in the recipes.

Fixes #2799
2018-05-03 16:11:53 +02:00
Pirmin Duss
381a015b85 depot: add trimpim
Fix #2805.
2018-05-03 16:10:11 +02:00
Roman Iten
1b92943cf0 depot: add rite
Fix #2798.
2018-05-03 16:08:33 +02:00
Christian Helmuth
3b7d6394d7 depot: update recipe hashes 2018-05-03 15:32:01 +02:00
Christian Helmuth
5657375c9f Disable network tests on imx53_qsb_tz 2018-05-03 15:32:01 +02:00
Stefan Kalkowski
68015a6e9d base: remove cortex* compiler flags (fix #2787) 2018-05-03 15:32:01 +02:00
Stefan Kalkowski
ad1b958b81 depot: public key for skalk 2018-05-03 15:32:01 +02:00
Emery Hemingway
483d005350 VFS: detect root dir based on config node type
Ref #2782
2018-05-03 15:32:00 +02:00
Norman Feske
0b370671af wm: improve focus handling
This patch addresses the corner case where hovering changes while a
button is held, e.g., when accidentially moving the pointer out of a
application window's area during a drag-and-drop operation. The patch
makes the window manager aware of the drag/idle state. Only when idle,
the pointer position is propagated to the decorator now.
2018-05-03 15:32:00 +02:00
Norman Feske
b748c4186d nitpicker: deliver pointer pos on hover change
This way, a client is able to respond to the initial movement into the
view area.
2018-05-03 15:32:00 +02:00
Josef Söntgen
1f0f85f979 sculpt: add NVMe support
Fixes #2794.
2018-05-03 15:32:00 +02:00
Josef Söntgen
dd562f84fa driver_manager: add NVMe block driver
Issue #2794.
2018-05-03 15:32:00 +02:00
Norman Feske
134b07f41f wm layouter.config: improve key bindings
Handle the corner case of window cycling where the SCREEN modifier is
released before TAB. Raise focused window regardmess of key release
order.
2018-05-03 15:31:59 +02:00
Norman Feske
9b9eb01097 sculpt: increase default key-repeat rate 2018-05-03 15:31:59 +02:00
Norman Feske
8e0cc44e24 terminal: preserve content during resize
This patch eliminates the flickering of the terminal during resize.
2018-05-03 15:31:59 +02:00
Christian Helmuth
674b0ba947 Depot: nic_router-nat-dns
A runtime package that provides a Nic session with NAT via the
nic_router and a DNS service via Stubby.

Ref #2682
2018-05-03 15:31:59 +02:00
Emery Hemingway
3faf7aab8f Port of getdns and Stubby DNS resolver
Stubby is an application that acts as a local DNS stub resolver.

https://getdnsapi.net/
https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Daemon+-+Stubby

Ref #2682
2018-05-03 15:31:58 +02:00
Emery Hemingway
60eeddf639 Port of libyaml
http://pyyaml.org/wiki/LibYAML

Ref #2682
2018-05-03 15:31:58 +02:00
Emery Hemingway
96579a72e0 Libc: gracefully handle invalid socketaddr arguments
Ref #2682
2018-05-03 15:31:58 +02:00
Emery Hemingway
e4328de251 Test of the gettaddrinfo POSIX facility.
Ref #2682
2018-05-03 15:31:58 +02:00
Emery Hemingway
401ba6e7fd Manage socket_fs socket lifetime via handles
Socket_fs sockets are now created each time a 'new_socket' control file
is opened, not each time a 'new_socket' file is read. When a handle on a
'new_socket' file is closed the socket and its socket files are
destroyed. The accept control file on a listening socket reads "1" or
reads nothing to indicate a client connection is queued. Client sockets
are accepted by opening an 'accept_socket' file in the listen socket
directory. This file behaves like the aforementioned 'new_socket' file.

Ref #2707
2018-05-03 15:31:57 +02:00
Emery Hemingway
0b980073c1 VFS: close handles via handle method
The using pattern 'handle->close' is less error prone than attempting
'handle->ds().close(handle)' or 'fs.close(handle)'.

Ref #2782
2018-05-03 15:31:57 +02:00
Martin Stein
09ad962418 nic_bridge.run: don't execute on hardware
The nic_bridge test is not suitable to be executed on hardware so it should,
in case, print an appropriate message and return without doing anything else.

Issue #2788
2018-05-03 15:31:57 +02:00
Martin Stein
80749798c3 nic_bridge.run: remove posix.lib.so
The library is not needed anymore and led to an error when executing
the script.

Issue #2788
2018-05-03 15:31:57 +02:00
Martin Stein
11a297b557 net: consider tail of Ethernet frame
The Ethernet payload may be followed by padding of variable length and
the FCS (Frame Check Sequence). Thus, we should consider the value
"Ethernet-frame size minus Ethernet-header size" to be only the maximum
size of the encapsulated IP packet. But until now, we considered it to
be also the actual size of the encapsulated IP packet. This commit fixes
the problem for all affected components of the Genode base-repository.

Fixes #2775
2018-05-03 15:31:57 +02:00
Martin Stein
841d583678 net: implement Udp_packet::checksum_error
For checking the checksum of a UDP packet.

Issue #2775
2018-05-03 15:31:56 +02:00
Martin Stein
6b55790e73 net: use generic internet checksum
This reduces the redundant implementations of checksum calculation to
one generic implementation, makes the checksum interface conform over
all protocols, and brings performance optimizations. For instance,
the checksum is now calculated directly in big endian which saves us
most of the previously done byte-re-ordering.

Issue #2775
2018-05-03 15:31:56 +02:00
Martin Stein
836df90f6b nic_router: fix typo in Nat_rule::print
Issue #2775
2018-05-03 15:31:56 +02:00
Martin Stein
bb17e7cf01 nic_router-nat: ICMP NAPT and DNS info forward
Downlink uses DNS server info from Uplink and routes ICMP to Uplink while
applying NAT to it.

Issue #2775
2018-05-03 15:31:56 +02:00
Martin Stein
375a7c701a test/lwip clients: exit with error code
Issue #2751
2018-05-03 15:31:56 +02:00
Martin Stein
6ec8824d75 test/lwip/udp/client: handle missing attributes
Print a useful message if a manadatory config attribute is
missing and exit.

Issue #2751
2018-05-03 15:31:55 +02:00
Martin Stein
7adc7bc01a nic_router: more descriptive errors in DHCP server
Instead of telling the user merely that his/her DHCP server config
is invalid, tell him/her why exactly it is invalid.

Issue #2751
2018-05-03 15:31:55 +02:00
Johannes Schlatow
48aa50b97c test/trace_logger: fully automate test
Issue #2735

Co-authored-by: Martin Stein <martin.stein@genode-labs.com>
2018-05-03 15:31:55 +02:00
Johannes Schlatow
b47bf81b73 trace_logger: be aware of trace-buffer wraps
Issue #2735

Co-authored-by: Martin Stein <martin.stein@genode-labs.com>
2018-05-03 15:31:55 +02:00
Johannes Schlatow
9fc3344ee8 trace/buffer: keep "last" entry on wraps
When the former trace buffer implementation wrapped, the last entry
according to commit order couldn't be detected anymore. Now, the last
committed entry is always followed by an entry with length 0.

As a downside of this, there are now two meanings of "last" entry: It
means either that the entry marks the empty padding after the entry with
the highest memory address or that it actually marks the end of the
buffer according to commit order. This is an example state of the buffer
with the two types of "last" entry:

                           last                                     last
+-------------+------------+---+---------+-------------+------------+---+-------+
| len3  data3 | len4 data4 | 0 | empty   | len1  data1 | len2 data2 | 0 | empty |
+-------------+------------+---+---------+-------------+------------+---+-------+

If the entry with the highest memory address fits perfectly, the first
type of "last" entry is not needed:

                                  last
+------------+--------------------+---+-------+-------------+-------------------+
| len3 data3 | len4         data4 | 0 | empty | len1  data1 | len2        data2 |
+------------+--------------------+---+-------+-------------+-------------------+

If the buffer didn't wrap so far, there is only one "last" entry that
has both meanings:

                                                      last
+--------------------------+------------+-------------+---+---------------------+
| len1               data1 | len2 data2 | len3  data3 | 0 | empty               |
+--------------------------+------------+-------------+---+---------------------+

Issue #2735

Co-authored-by: Martin Stein <martin.stein@genode-labs.com>
2018-05-03 15:31:54 +02:00
Martin Stein
373134c4e7 net: safer access to packet data
Replace packet method 'T *data' by the new methods 'T &reinterpret_data'
for parsing or modifying existing sub-protocol packets and 'T
&construct_at_data' for composing a new sub-protocol packet. This has
the advantage that, when composing a new packet, the default constructor
that zero-fills the packet is always called first.

Fixes #2751
2018-05-03 15:31:54 +02:00
Christian Helmuth
58fcf577ea Fix hash-input list of drm port 2018-05-03 15:31:54 +02:00
Christian Prochaska
cbdeb41094 depot: icu recipe
Fixes #2785
2018-05-03 15:31:54 +02:00
Christian Prochaska
be8addc608 depot: mesa recipe
Fixes #2784
2018-05-03 15:31:53 +02:00
Christian Prochaska
0bded4478e qt5: modifier-state tracking
Issue #2761
2018-05-03 15:31:53 +02:00
Christian Helmuth
f53ff49276 Update stale port hash files
Detected with the new tool/ports/check_hash utility.
2018-05-03 15:31:53 +02:00
Christian Helmuth
a496360c5b tool/ports: utility for checking port hashes
Our nightly did not detect the current stale hashes because only updated
(in the sense of a changed hash) ports are prepared. Others were left
untouched besides the check_port_source step. Now, check_hash also
checks for missing hash file updates.
2018-05-03 15:31:53 +02:00
Norman Feske
afcad2a968 os: new Input::Event representation
This commit changes the 'Input::Event' type to be more safe and to
deliver symbolic character information along with press events.

Issue #2761
Fixes #2786
2018-05-03 15:31:25 +02:00
Norman Feske
df3ceda052 sculpt: limit rump-fs quota 2018-05-03 15:31:24 +02:00
Josef Söntgen
609074519d rump: remove superflous LOG messages
Issue #2783.
2018-05-03 15:31:23 +02:00
Josef Söntgen
1d6d6966a1 rump: add knob to set memlimit
By now, rump would query its available RAM quota to determine the
memory limit minus some RAM reserved for Genode meta-data. This
does not work when the VFS rump plugin is used as the available
quota belongs to the VFS server. In this case the memlimit should
be set by specifing the RAM in the plugin's config, e.g.:

! <vfs>
!   <rump fs="ext2fs" ram="64M" writeabl="yes"/>
! </vfs>

Fixes #2783.
2018-05-03 15:31:23 +02:00
Josef Söntgen
a6760efc14 vfs/rump: close kqueue on watcher destruction
Issue #2783.
2018-05-03 15:31:22 +02:00
Martin Stein
53821a6285 depot_download.run: raise quotas for sel4
Give chroot and report_rom 2M instead of 1M to satisfy Sel4 on x86
64-bit.

Issue #2781
2018-05-03 15:31:22 +02:00
Martin Stein
e8d17af1d0 depot_download_mgr: raise chroot quota for sel4
Give chroot 32K more to satisfy Sel4 on x86 64-bit.

Issue #2781
2018-05-03 15:31:22 +02:00
Martin Stein
341de74d83 depot_query.run: raise query quota for sel4
Issue #2781
2018-05-03 15:31:22 +02:00
Martin Stein
52a69b8a6f base-sel4: handle PTE selectors exceeded
In Vm_space::map when allocating a new page-table-entry selector, the
allocator may throw an exception that there are no selecztors left which
was not caught by now.  Now, we catch this exception, flush the mapping
cache to free all selectors again and retry to allocate.

Fixes #2781
2018-05-03 15:31:22 +02:00
Johannes Kliemann
c02ef3ec94 ada: compile runtime bodies, customizable tools
This is a follow-up commit for "ada: runtime and library support".

Issue #2748
2018-05-03 15:31:21 +02:00
Sebastian Sumpf
0c6504da5c vfs_rump: fix FAT support
fixes #2589
2018-05-03 15:31:21 +02:00
Martin Stein
5ef56395f0 test/timeout: raise polling round time
On the Raspberry PI, the 2 seconds of round time in the polling test
were not sufficient to reach the goal of at least 1000 successful polls.
Thus, the commit sets the round time to 2.5 seconds which doesn't hurt to
much but allows the RPI to just make it.

Fixes #2779
2018-05-03 15:31:21 +02:00
Hinnerk van Bruinehsen
c421f59314 Update to seL4 9.0.1 2018-05-03 15:31:21 +02:00
Hinnerk van Bruinehsen
2278104a8d sel4: update to version 9.0.0 2018-05-03 15:31:21 +02:00
Martin Stein
178efe9c97 fetchurl.run: add missing gpio driver
Fixes #2780
2018-05-03 15:31:20 +02:00
Christian Prochaska
b2935b504d depot: drm recipe
Fixes #2772
2018-05-03 15:31:20 +02:00
Christian Prochaska
f58717205a depot: qoost recipe
Fixes #2771
2018-05-03 15:31:20 +02:00
Christian Prochaska
b8def5a3c2 depot: gpu_session recipe
Fixes #2770
2018-05-03 15:31:20 +02:00
Christian Prochaska
1d6301c689 depot: expat recipe
Fixes #2769
2018-05-03 15:31:20 +02:00
Christian Prochaska
4aefa395af depot: pcre16 recipe
Fixes #2768
2018-05-03 15:31:19 +02:00
Emery Hemingway
80b3994500 prepare_port: prefer SHA256 file verification
SHA1 is susceptible to collision attacks and is generally deprecated.
Source code archives are particularly vulnerable because the hash digest
can be tweaked by hiding by arbitrary data in code comments and files
not processed during build.

With this in mind the 'prepare_port' tool now attempts to verify digests
as SHA256 with a fallback to SHA1. When CHECK_HASH=no is set the tool
will refuse to verify digests as SHA1. The use of SHA1 for creating
unique port versions is retained because the hashes are produced locally
from inputs stored in a git history.

Issue #2767
2018-05-03 15:31:19 +02:00
Emery Hemingway
b8ad9ad880 Update FatFS port to v0.13b
Remove integer patch. The tests pass without applying it, and better to
use unmodified upstream code whenever practical.

Fix #2766
2018-05-03 15:31:19 +02:00
Emery Hemingway
1afbc7f952 Update egl_api port
Use Github URL that references a commit rather than the unversioned
Khronos URL.

Fix #2765
2018-05-03 15:31:19 +02:00
Norman Feske
6389434222 input_filter: rm input selection in output node
This patch largely reverts the feature of selecting parts of input nodes
from within the output node (as originally introduced by commit
7263cae5a18b4f1f2293d031f9bafcf05ba51146). The selection of content
should be consistently performed by input nodes instead. The principle
ability of copying input nodes verbatim into the output stays available.

Issue #2691
2018-05-03 15:31:19 +02:00
Norman Feske
afadbbbb04 rom_filter: add attribute matching for input nodes
The new 'attribute' and 'value' attributes of input nodes
can be used to select input sub nodes that match the presence and value
of the specified attribute.

Issue #2691
2018-05-03 15:31:18 +02:00
Boris Mulder
4b4760ce8e rom_filter: initially try to parse input ROM
Issue #2691
2018-05-03 15:31:18 +02:00
Norman Feske
26a2591896 menu_view: VFS-based font handling
Fixes #2773
2018-05-03 15:31:18 +02:00
Norman Feske
403b5413fc depot: raw/fonts_fs recipe
Configuration for using the VFS as font server.
2018-05-03 15:31:18 +02:00
Norman Feske
f0ac01395f sculpt: read config from /rw/config/<VERSION>/
By incorporating the sculpt version into the path where customizations
are stored, we can update and roll back sculpt versions without risking
configuration incompatibilities. By default, the sculpt version
corresponds to <genode-dir>/VERSION.
2018-05-03 15:31:18 +02:00
Norman Feske
a75413a21b Remove noux_shell_script.run
This functionality is covered by noux_tool_chain.
2018-05-03 15:31:17 +02:00
Norman Feske
13419755f9 terminal: fix condition in zero-character handling
The condition must first check the io-buffer length and then check the
content. Otherwise, cat'ting a file that is padded with zeros up to
page size (io-buffer size) yields an out-of-range read access.
2018-05-03 15:31:17 +02:00
Norman Feske
1f1302e185 terminal: use VFS-based font handling
This patch replaces the terminal's formerly built-in fonts with the new
VFS-based font handling.

To avoid the copying of the terminal's font configuration across run
scripts, this patch adds the new terminal/pkg runtime package, which
includes everything needed for instantiating a terminal: the actual
terminal component, the library dependencies (vfs_ttf, which in turn
depends on the libc), a font (bitstream-vera), and a reasonable default
configuration.

Fixes #2758
2018-05-03 15:31:17 +02:00
Norman Feske
0011dd1623 terminal: remove built-in keyboard layout handling
Fixes #2757
2018-04-19 13:38:34 +02:00
Norman Feske
8bcf540915 os: add Text_painter::Font::height method
Issue #2716
2018-04-19 13:38:33 +02:00
Norman Feske
e896d13eec vfs_ttf: respond to dynamic config changes
Issue #2740
2018-04-19 13:38:33 +02:00
Norman Feske
6a12a6b4ba vfs: reduce ROM-update rate Rom_file_system::stat
The 'stat' method is called for all paths, not just the specific file
system node of the ROM module. The ROM update is needed only in the
latter case.

Otherwise, when always updating the ROM on stat, stat calls on the VFS
become very expensive in the presence of a mounted ROM module if the ROM
is obtained from fs_rom (which re-watches the file and all its
individual path elements whenever the 'update' RPC function is called).
2018-04-19 13:38:33 +02:00
Norman Feske
0a72b37363 vfs: Simple::env::apply_config 2018-04-19 13:38:33 +02:00
Norman Feske
20f7d0aed0 Simplify noux_tool_chain_auto.run
This patch make the scenario independent from device drivers, which were
solely needed to display a graphical terminal. The output of the
scenario is now printed via the log_terminal component, which makes the
logging output of nightly tests more useful.
2018-04-19 13:38:33 +02:00
Norman Feske
e834624bfa Remove noux_two_terminal_fs.run
This interactive run script is largely a duplication of
noux_terminal_fs.
2018-04-19 13:38:33 +02:00
Christian Helmuth
47569458d4 depot: update recipe hashes 2018-04-19 12:39:20 +02:00
Christian Helmuth
a25ec92a30 sel4: explicit vpath for each file in core
The pattern rule picked up the wrong platform_services.cc in the
depot-archive case only because the archive integrates generic and
sel4-specific source files into REP_DIR.
2018-04-19 12:39:20 +02:00
Christian Helmuth
169d5bc376 run: non-fatal exit on unsupported base build config
The kernel-specific boot dir scripts exit with 0 and log "Test
requires..." to inform the logger frontend of the base-archive
unavailability.
2018-04-19 12:39:20 +02:00
Christian Helmuth
761d75423d sel4: rename ld-sel4.lib.so to ld.lib.so in archive 2018-04-19 12:39:20 +02:00
Christian Helmuth
c6ca89fb0a Use nographic qemu in depot_query test 2018-04-19 12:39:19 +02:00
Christian Helmuth
f9ca0ae119 Remove unused libm/posix libraries from extract test 2018-04-19 12:39:19 +02:00
Josef Söntgen
505ff0bb11 ping: exit run script on not supported platforms
Fixes #2756.
2018-04-19 12:39:19 +02:00
Johannes Kliemann
1261c18ce9 ada: runtime and library support
The Ada runtime can now be set with the ADA_RTS variable. The ada
library builds a (currently) minimal runtime from the gcc sources that
come with Genode (to stay consistent with the used compiler) and sets
the runtime path accordingly. It is build as a shared library ada.lib.so
which needs to be added to the build files.

I split the existing Ada test into program and library, and moved it
to libports as it depends on the runtime library residing in this
repository too.

Fixes #2748
2018-04-19 12:38:54 +02:00
Norman Feske
cb78516bf1 os: add tests to autopilot
Since the autopilot has become able to use the depot, futher tests can
be enabled by default.
2018-04-19 12:38:53 +02:00
Emery Hemingway
c1ff581fb4 Copy-on-write VFS plugin
VFS plugin to replicate from one file-system to another. Can be used to
seed a mutable file-system with an immutable file-system. The plugin is
configure with two paths, a read-only path, and a read-write path. This
is an initial implementation that copies files on open. It is not
optimized to perform actual copy-on-write, but the result is the same.

<vfs>
	<dir name="immutable"> ... </dir>
	<dir name="mutable">   ... </dir>
	<dir name="cow">
		<cow ro="/immutable" rw="/mutable"/>
	</dir>
</vfs>

Fix #2745
2018-04-19 12:38:51 +02:00
Emery Hemingway
3c07860aad VFS: watch result is ERR_UNACCESSIBLE by default
Ref #2745
2018-04-19 12:38:50 +02:00
Emery Hemingway
97f50e8e15 VFS: dir fs Opendir must open at least one directory to succeed
Ref #2745
2018-04-19 12:38:50 +02:00
Emery Hemingway
fde056506e depot_query: catch exceptions for missing directories
Ref #2742
2018-04-19 12:38:27 +02:00
Emery Hemingway
82a683eccc VFS: construct file-systems using Vfs::Env object
Reduce the size and forward compatibility of VFS file-system
constructors by passing an object holding accessors for 'Genode::Env',
'Genode::Allocator', response handlers, and the root file-system.

Fix #2742
2018-04-19 12:38:27 +02:00
Reto Buerki
810f59b555 muen: Update sinfo to variant resources API 2018-04-19 12:38:25 +02:00
Reto Buerki
5c3461a851 Update Muen port
- Switch to sinfo variant resources API
- Improved MSI IRQ representation and processing
- Genode system policy adjustments
2018-04-19 12:38:25 +02:00
Stefan Kalkowski
ad99688853 imx53_qsb: enable automated network tests
Fix #2749
2018-04-19 12:38:24 +02:00
Stefan Kalkowski
2af5dbc201 dde_linux: enable more platforms for nic_drv
In addition to the i.MX6Q SoC, the Freescale network driver
works now on i.MX6SX and i.MX53 SoCs.

Ref #2749
2018-04-19 12:38:24 +02:00
Stefan Kalkowski
a3171befe9 dde_linux: canceling a pending work is no error
Ref #2749
2018-04-19 12:38:24 +02:00
Stefan Kalkowski
7949c194e9 gpio_drv: mask IRQ until it is acknowledged
When working with GPIO interrupts on i.MX6SX for Ethernet PHYs
it became obvious that the GPIO driver repeatedly receives interrupts
for the same event, because it acknowledges the interrupt before a
client has handled the event.

Ref #2750
2018-04-19 12:38:24 +02:00
Stefan Kalkowski
f653be1ebc gpio_drv: add support for i.MX6
Fix #2750
2018-04-19 12:38:24 +02:00
Josef Söntgen
ca108222c6 dde_ipxe: add pciid for I219-LM (found in T470p)
Fixes #2753.
2018-04-19 12:38:23 +02:00
Josef Söntgen
77a2e02a0d libc: increase FS_BLOCK_SIZE to 4KiB
Fixes #2752.
2018-04-19 12:38:23 +02:00
Josef Söntgen
970f8cf3ed noux: increase Chunk size to 64KiB
Increasing the size leads to less context-switches when doing file I/O
and to better throughput.

Issue #2752.
2018-04-19 12:38:23 +02:00
Emery Hemingway
7091f5febe libc: enforce suspend is not called from initial stack
In other words: Loosen the former property that suspend can only be
called from the first user stack and, thus, enable additional user
stacks, e.g., in coroutine libraries.

Fix #2737
2018-04-19 12:38:23 +02:00
Josef Söntgen
04516a0d39 nvme_drv: add driver for NVMe storage devices
This driver component provides support for using consumer NVMe storage
devices, i.e. it omits name space managment and will always use the
first name space, on Genode. For now it defaults to a reasonable low
configuration:

  -    1 I/O queue (completion/submission tuple)
  -  128 entries in the I/O queue
  - 4096 as the only I/O transaction memory page size

Fixes #2747.
2018-04-19 12:38:22 +02:00
Josef Söntgen
372e426ec7 platform_drv: recognize PCIe NVMe controller
Issue #2747.
2018-04-10 13:56:22 +02:00
Josef Söntgen
ce93e47e89 os: add Block session tester component
Issue #2747.
2018-04-10 13:56:04 +02:00
Christian Helmuth
d54f95d497 depot: update recipe hashes 2018-04-10 13:03:26 +02:00
Norman Feske
10c9b8a221 sculpt: change DNS server to 1.1.1.1
The previously used nameserver 213.73.91.35 of the CCC seems to be no
longer available.
2018-04-10 13:03:26 +02:00
Norman Feske
ecd7ff80b8 sculpt: add rudimentary GUI components
This patch enhances the default deploy scenario with the themed window
manager, a backdrop, and the (commented-out) nano3d demo.
2018-04-10 13:03:26 +02:00
Martin Stein
f9af0e6f0c net: packed attribute for Icmp_packet 2018-04-10 13:03:26 +02:00
Martin Stein
fa59dc0a5b nic_router: use DHCP parameter request list
Send a list of the expected options with the DHCP DISCOVER and REQUEST
when acting as DHCP client.

Fixes #2738
2018-04-10 13:03:19 +02:00
Martin Stein
ca1751528d net: utilities for DHCP parameter-request lists
Issue #2738
2018-04-10 11:20:49 +02:00
Martin Stein
77e968a5e3 nic_dump: add config XML schema file
Issue #2738
2018-04-10 11:20:49 +02:00
Martin Stein
d6e1c462cc nic_dump: default attribute
The 'default' attribute is useful to change the default value for those
protocol attributes that are not explicitely set in the configuration of
the component.

Issue #2738
2018-04-10 11:20:49 +02:00
Martin Stein
ed13a0a262 nic_dump: make protocols configurable
Each supported protocol now has an attribute with the name of the protocol in
the config tag. Each of these attributes accepts one of four possible values:

* no      - do not print out this protocol
* name    - print only the protocol name
* default - print a short summary of the most important header values
* all     - print all available header values

Example:

! <config eth="name"
!         arp="all"
!         ipv4="default"
!         dhcp="no"
!         icmp="all"
!         udp="no"
!         tcp="default"
!         ... />

Corresponding output example:

! ETH IPV4 10.0.2.212 > 10.0.2.55   time 7158 ms (Δ 11 ms)
! ETH IPV4 10.0.2.55 > 10.0.2.201  TCP 80 > 49154 flags ' time 6976 ms (Δ 5 ms)
! ETH ARP hw 1 prot 2048 hwsz 6 protsz 4 op 1 srcmac 02:02:02:02:02:01 srcip 10.0.2.212 dstmac 00:00:00:00:00:00 dstip 10.0.2.55 time 7074 ms (Δ 98 ms)

Issue #2738
2018-04-10 11:20:49 +02:00
Norman Feske
fed42e1742 sculpt: support window-manager key bindings 2018-04-10 11:20:48 +02:00
Norman Feske
a98a32757a Enable basic key bindings in pkg/wm 2018-04-10 11:20:48 +02:00
Norman Feske
14180d60be nitpicker: center initial pointer position 2018-04-10 11:20:48 +02:00
Norman Feske
e77aa70ba2 sculpt: adapt deploy config to new focus handling 2018-04-10 11:20:48 +02:00
Norman Feske
fcae056c84 depot: runtime pkg for rom_reporter 2018-04-10 11:20:47 +02:00
Norman Feske
0f3a507691 wm.run: fix quotas, adapt to new focus handling 2018-04-10 11:20:47 +02:00
Norman Feske
9d233b73a3 nitpicker: improve 'Session::focus' handling
Nitpicker's 'Session:focus' call used to trigger a one-off focus change
at call time. This focus change did not pass the same code paths as a
focus change triggered by a "focus" ROM update, which led to
inconsistencies.

This patch changes the implementation of 'Session::focus' such that the
relationship of the caller and the focused session is preserved after
call time. Whenever the calling session is focused in the future, the
specified session will receive the focus instead. So 'Session::focus'
represents no longer a single operation but propagates the information
about the inter-session relationship. This information is taken into
account whenever the focus is evaluated regardless of how the change is
triggered.

This makes the focus handling in scenarios like the window manager more
robust.

Issue #2746
2018-04-10 11:20:47 +02:00
Norman Feske
23696760c3 fb_sdl: drop spurious motion events without motion
Relative motion events with a motion vector of (0,0) should not exists.
They cause jittery movements of nitpicker's pointer position. This
patch filters out such events.
2018-04-10 11:20:47 +02:00
Martin Stein
0bd73e440d nic_router: do DHCP requests without source IP
Issue #2738
2018-04-10 11:20:47 +02:00
Christian Helmuth
49f64a0cac run: adapt qemu RAM size for okl4/x86
Our static okl4 system-integration configuration specifies a fixed RAM
range from 32 to 800 MiB, which must be satisfied by Qemu or strange
errors happen due to accesses beyond RAM. (Fixes current issues with
nic_router.run.)
2018-04-10 11:20:46 +02:00
Martin Stein
db3250f6ee nic_dump: adapt to new README scheme 2018-04-10 11:20:46 +02:00
Martin Stein
d67484bb87 trace_logger/README: add examples subsection 2018-04-10 11:20:46 +02:00
Martin Stein
4aa7057e68 trace_logger: adapt to new README scheme 2018-04-10 11:20:46 +02:00
Martin Stein
f68a719f4c ping/README: add examples subsection 2018-04-10 11:20:46 +02:00
Martin Stein
0fc3202160 ping: adapt to new README scheme 2018-04-10 11:20:45 +02:00
Martin Stein
cf32243822 ping_nic_router.run: add icmp_idle_timeout_sec 2018-04-10 11:20:45 +02:00
Martin Stein
b70fa7b0c1 nic_router: adapt to new README scheme 2018-04-10 11:20:45 +02:00
Martin Stein
38e50a5b4f nic_router/README: adapt to new ICMP features 2018-04-10 11:20:45 +02:00
Martin Stein
ce9a0cbc19 nic_router/config.xsd: add icmp_idle_timeout_sec 2018-04-10 11:20:45 +02:00
Martin Stein
72ddbf84ee autopilot.list: add ping_nic_router test
Fixes #2732
2018-04-10 11:20:44 +02:00
Martin Stein
d35d946adf ping_nic_router.run: ICMP through a nic_router
This tests ping with simple IP forwarding, ping with NAPT as well as
forwarding of ICMP "Destination Unreachable" messages through the NIC
router.

Issue #2732
2018-04-10 11:20:44 +02:00
Martin Stein
6edf9ccf5a net: get rid of static constructors 2018-04-10 11:20:44 +02:00
Martin Stein
29685f48ef autopilot.list: add ping test
Issue #2732
2018-04-10 11:20:44 +02:00
Martin Stein
84a3fbd239 app/ping: perform ICMP Echo to another IP host
The 'ping' component continuously sends ICMP Echo requests to a given IP host
and waits for the corresponding ICMP Echo replies. For each successfull ICMP
Echo handshake it prints a short statistic. By now, it can be used only with a
static IP configuration. The size of the ICMP data field can be configured. It
gets filled with the letters of the alphabet ('a' to 'z') repeatedly.

Issue #2732
2018-04-10 11:20:44 +02:00
Norman Feske
97317b0c95 terminal: change term caps from linux to screen
Fixes #2743
2018-04-10 11:20:43 +02:00
Christian Helmuth
92edcb17e5 Warn on redundant call to exec_static_constructors() 2018-04-10 11:20:43 +02:00
Martin Stein
b3791fabc2 test/timeout: test locks in handlers
Originally, the timeout framework caused deadlocks when acquiring the same
lock from different timeout handlers. This use case is now tested in the
timeout test.

Fixes #2704
2018-04-10 11:20:43 +02:00
Martin Stein
f681f9e844 test/timeout: fix typo
Issue #2704
2018-04-10 11:20:43 +02:00
Martin Stein
93a0c66589 timeout: do not handle timeouts while scheduling
To handle all pending timeouts in the context of scheduling a timeout
was only necessary because the Timeout framework once made use of the
Alarm framework. The method Alarm_scheduler::schedule_absolute took an
absolute deadline as argument and we couldn't change this beause the
Alarm framework was also used without the Timeout framework. We had to
calculate this absolute deadline with the now time of the Timeout
framework but the Alarm framework has its own now time that is always a
bit behind the one of the Timeout framework. This lead to bad decisisons
when finding the right position for the new timeout. Now, we can call
schedule_absolute with a relative duration and thereby fix the problem.

When we schedule an absolute timeout without considering the small time
difference, the end-time for the timeout that is calculated using the
local time value is also smaller than the expected end-time. This can
also lead to directly triggering timeouts that should have triggered
with a certain delay.

As it is not trivial to update the local time value while scheduling a
timeout _without_ calling other timeout handlers, we simply raise the
duration of the new timeout by the age of the local time value.

Issue #2704
2018-04-10 11:18:18 +02:00
Martin Stein
f152e3e9d0 timeout: dequeue all pending alarms before reschedule
This fixes the problem that large timeouts, when rescheduled, are interpreted
to be from the last now_period instead of, what would be right, the next
now_period. This occured if there were multiple pending alarms at the head of
the queue and the reschedule of the first one was done with the other outdated
deadlines still in place.

Issue #2704
2018-04-10 11:11:55 +02:00
Martin Stein
bfb96536da timeout: _setup_alarm calculates deadline itself
Instead of taking the absolute deadline of a timeout as argument from
outside (where it is calculated with a freshly requested now time), we
now take a relative duration as argument and calculate the deadline with
the scheduler-internal now time (which can be a little bit outdated).
This enables us to schedule timeouts without updating the internal now time
and thereby handle all pending timeouts.

Issue #2704
2018-04-10 11:11:55 +02:00
Martin Stein
38dbd59d8a timeout: become independent of the Alarm framework
Integrate the code of the Alarm framework directly into the Timeout
framework.  The former Alarm-framework methods are all private to the
corresponding classes of the Timeout framework and get prefixed with
'_alarm__'. The latter avoids name clashes and makes it easier to
simplify the code later.

Issue #2704
2018-04-10 11:11:54 +02:00
Martin Stein
8c7bbdecdf nic_router: conform log in Domain
In the domain class there were several places where output was generated
not conforming to the typical output format of the router ("[domain]
event: parameters").

Issue #2670
2018-04-10 11:11:54 +02:00
Martin Stein
87eb23f562 nic_router: fix uncaught Domain_tree::No_match
When having an interface that yet is not attached to a domain, then a new
configuration comes in and the interface receives a domain name (via the
policy tag) but the corresponding domain doesn't exist, an exception
Domain_tree::No_match is thrown but was not caught and handled until now.

Issue #2670
2018-04-10 11:11:54 +02:00
Martin Stein
54b10b1b38 nic_router: forward ICMP dst unreachable messages
This follows the guidelines in RFC 5508 to enable forwarding of ICMP
"Destination Unreachable" that correspond to an existing link state in
the NIC router. It also serves as blueprint for forwarding ICMP error
messages in general (They are merely not enabled because we don't test
them).

Issue #2732
2018-04-10 11:11:54 +02:00
Martin Stein
6a988749a1 nic_router: print packet info before sending it
By now, the 'verbose packets' output when sending packets was printed after
finish sending the packet. This makes following the packet flow harder if you
have multiple components that print such information.

Issue #2732
2018-04-10 11:11:54 +02:00
Martin Stein
168407a40a nic_router: config attribute 'mac_first'
The mac_first attribute tells the MAC-address allocator of the router
from which MAC address to start allocating. This is useful, for
instance, if you have nested nic_routers. In this case, identical
MAC-allocator settings have led to name clashes in the past, so, you
want to be able to configure them differently.

Issue #2732
2018-04-10 11:11:53 +02:00
Martin Stein
7b3343c2dc nic_router: NAPT for ICMP echo messages
This follows the guidelines in RFC 5508 to enable ICMP echo through a NAPT
channel of the NIC router. It serves also as blueprint for ICMP queries in
general (they are merely not enabled because we don't test them by now).

Issue #2732
2018-04-10 11:11:53 +02:00
Martin Stein
d2adce7ba6 nic_router: fix bug in Link::handle_config
We updated UDP link states with the wrong idle-timeout value.

Issue #2732
2018-04-10 11:11:53 +02:00
Martin Stein
8981d3baf5 nic_router: conform log in Interface::_handle_eth
Prefix "Drop Packet" messages always with "[<DOMAIN>]".

Issue #2732
2018-04-10 11:11:53 +02:00
Martin Stein
9b936dd120 nic_router: packet verbose at detached interfaces
The 'verbose packets' output previously was not generated for Interfaces
without a domain. But this is desirable as the router nonetheless
receives packets at such interfaces. This is now fixed and such output
is simply prefixed with a "[?]" denoting that the interface has no
domain.

Issue #2732
2018-04-10 11:11:53 +02:00
Martin Stein
98617432c3 nic_router: send ICMP error on unroutable packet
Send an ICMP "Destination Network Unreachable" as response to packets that
are not routable by the NIC router.

Issue #2732
2018-04-10 11:11:52 +02:00
Martin Stein
4dc8f6dca4 nic_router: fix missing IPv4.ECN initialization
We missed to zero-out the ECN field in IPv4 packets. We don't use the ECN
field but there might be old data left in the packet RAM allocated by the
NIC packet streams. If we don't zero-out ECN it might leak old data.

Issue #2732
2018-04-10 11:11:52 +02:00
Martin Stein
9c73326bbb lwip: enable ICMP support
This switches on the LwIP opts flag for handling ICMP packets (as far as
supported).

Issue #2732
2018-04-10 11:11:52 +02:00
Martin Stein
009330ab4c nic_dump: support ICMP
Print out common header information of the Internet Control Message
Protocol.

Issue #2732
2018-04-10 11:11:52 +02:00
Martin Stein
365bd347a6 net: ICMP protocol
Packet format and common utilities for the Internet Control Message
Protocol.

Issue #2732
2018-04-10 11:11:52 +02:00
Emery Hemingway
8ba26c612a FatFS watch support
Implement watch support using a watch handle list.

Test at run/fs_rom_update_fat.

Ref #1934
2018-04-10 11:11:51 +02:00
Emery Hemingway
c0ed3ca2bd Vfs Rump watch support
Implement watch support using the BSD kevent facility.

Test at run/fs_rom_update_ext2.

Ref #1934
2018-04-10 11:11:51 +02:00
Emery Hemingway
9c6b720ec1 Notification support for the VFS library
Add a new 'Vfs_watch_handle' type to the VFS interface. This handle type
will pass a handle context up through the I/O handler to the application
when a notification event occurs.

Watch support implemented for RAM and File_system plugins, all other
file-systems return WATCH_ERR_STATIC by default.

Test at run/fs_rom_update_ram and run/fs_rom_update_fs.

Fix #1934
2018-04-10 11:11:51 +02:00
Emery Hemingway
344d46ce78 Comparision operators for Genode::Path
Ref #1934
2018-04-10 11:11:51 +02:00
Emery Hemingway
f7ba777fff VFS audit plugin
Plugin for auditing VFS access using the VFS server. Useful for tracking
which files ported software expects to be present.

Fix #2160
2018-04-10 11:11:50 +02:00
Emery Hemingway
8310a94843 os/path: const 'string' accessor
Ref #2160
2018-04-10 11:11:50 +02:00
Emery Hemingway
e1a079954b Fetchurl: optionally attempt to re-fetch failed URLs.
Fix #2733
2018-04-10 11:11:50 +02:00
Emery Hemingway
1ca2b6fab3 run: fix depot tool regex to support '.' versions
Fix #2720
2018-04-10 11:11:50 +02:00
Emery Hemingway
9204a8c260 Depot: OpenBSD audio driver package
Fix #2722
2018-04-10 11:11:50 +02:00
Emery Hemingway
68c1b8675c gems: magic ring buffer
A ring buffer that uses a single dataspace mapped twice in consecutive
regions. This allows any operation that is less or equal to the size of
the buffer to be read or written in a single pass. The capacity of
Magic_ring_buffer is defined at runtime.

Fix #2725
2018-04-10 11:09:47 +02:00
Norman Feske
1784d9ab27 gems: playground for 'Text_painter' 2018-04-10 11:09:46 +02:00
Norman Feske
738b64909e libports: add ttf-bitstream-vera port 2018-04-10 11:09:46 +02:00
Norman Feske
81e55e8901 gems: TrueType VFS plugin
This commit introduces a VFS plugin that exposes the glyphs and
metadata of a TrueType font as a pseudo file system. The TTF font data
is obtained from the VFS. The resulting pseudo file system is a
directory that contains the files 'glyphs', 'baseline', 'max_width',
and 'max_height'.

The counter part of the plugin is the 'Vfs_font' class that implements
the 'Text_painter::Font' interface by accessing the pseudo file system
as provided by the TTF VFS plugin.

Fixes #2740
2018-04-10 11:09:20 +02:00
Norman Feske
c5066a7317 Make gems/vfs.h utils fit for use in VFS plugins
This patch enhances the VFS access utilities of gems/vfs.h to be usable
with a prior created root directory. It also adds a
'File_content::bytes' method for operating of the raw content, which is
needed in situations where the data pointer is passed to a third-party
parser.
2018-04-10 11:09:19 +02:00
Norman Feske
23f07331c8 gems: ttf_font library 2018-04-10 11:09:19 +02:00
Norman Feske
f837df34b1 libports: stb single-file header libraries 2018-04-10 11:09:19 +02:00
Norman Feske
3778558608 os: reworked nitpicker_gfx/text_painter.h
This patch improves the `Text_painter` utility that is commonly used by
native Genode components to render text:

- Support for subpixel positioning
- Generic interface for accessing font data
- Basic UTF-8 support

Since the change decouples the font format from the 'Text_painter' and
changes the API to use the sub-pixel accurate 'Text_painter::Position'
type, all users of the utility require an adaptation.

Fixes #2716
2018-04-10 11:09:18 +02:00
Norman Feske
4c0f70fbcb gems: enable strict warnings for depot_query 2018-04-10 11:09:18 +02:00
Norman Feske
c9d90c7f9f gems: support -Weffc++ in vfs.h 2018-04-10 11:09:18 +02:00
Norman Feske
07cd0d5809 vfs: add 'Readonly_value_file_system'
This file system is meant as a building block for pseudo file systems
that host a directory of several small files where each corresponds to
an attribute of the pseudo file system.
2018-04-10 11:09:18 +02:00
Norman Feske
48c5707a0c vfs: relax root_dir argument of 'Dir_file_system'
By letting the 'Dir_file_system' accept an arbitrary 'File_system'
as root directory, we can use the 'Dir_file_system' as a building
block for creating other file-system types.
2018-04-10 11:09:18 +02:00
Norman Feske
b0b92e4ee2 vfs: pass root directory to plugins
This patch enables the use of the VFS from VFS plugins by passing a
reference of the root directory to the constructors of file-system
instances. Since it changes the signature of 'Vfs::Dir_file_system',
any code that uses the VFS directly requires an adaptation.

Fixes #2701
2018-04-10 11:09:17 +02:00
Sebastian Sumpf
f61c0c6309 lx_kit: Do not align DMA memory kmalloc
Aligning memory to page size will require at lead 8KB per allocation (even for 8
bytes). This should severely reduce memory requirements of all dde_linux
projects.

related to #2731
2018-04-10 11:09:17 +02:00
Sebastian Sumpf
eab4c887ec usb: fix memory leaks during device disconnect
fixes #2731
2018-04-10 11:09:17 +02:00
Emery Hemingway
864e8ab0c8 Add Report session to fetchurl's used_apis
The fetch progress report requires Report headers to be present.

Ref #2702
2018-04-10 11:09:17 +02:00
Alexander Boettcher
a347be2222 sel4: enable wandboard sd card bench test
Issue #2665
2018-04-10 11:09:16 +02:00
Alexander Boettcher
de82980e89 wandboard: improve memory usage of ethernet driver
Use a 8K slab entry instead of 16K slab entry, per 2K
network packet.

Issue #2665
2018-04-10 11:09:16 +02:00
Alexander Boettcher
fce15b4f13 sel4: adjust network scenarios for wandboard
Issue #2665
2018-04-10 11:09:16 +02:00
Alexander Boettcher
0b7e2a1642 sel4: invalidate ram if used uncached later on
Fixes #2665
2018-04-10 11:06:01 +02:00
Martin Stein
c8fcaf007e nic_router.run: provide test for 'dns_server_from'
Fixes #2730
2018-04-10 11:06:01 +02:00
Martin Stein
e213b9046d nic_router: inform clients on DNS server change
If the remote DNS server address value of a DHCP server changes, the affected
interfaces do a link down/up to inform all DHCP clients that they should
re-request their DHCP info.

Issue #2730
2018-04-10 11:06:00 +02:00
Martin Stein
4bee38ea62 nic_router: DHCP server considers dns_server_from
The dns_server_from attribute of the dhcp-server tag has effect only if
the dns_server attribute of the same tag is not set. If this is the
case, the dns_server_from attribute states the domain from whose IP
config to take the DNS server address. This is useful, for instance, if
the stated domain receives the address of a local DNS server via DHCP.
Whenever the IP config of the stated domain becomes invalid, the DHCP
server switches to a mode where it drops all requests unanswered until
the IP config becomes valid again.

Issue #2730
2018-04-10 11:06:00 +02:00
Martin Stein
fec53690d7 nic_router: get DNS server from dynamic IP config
If available, read and remember DNS server address from DHCP replies per
domain.

Issue #2730
2018-03-29 16:13:22 +02:00
Martin Stein
04c3ae56ed nic_router: read DHCP-server config only once
Until now, the DHCP server of a domain was re-constructed each time the
IP config changed. This is not necessary as a domain that acts as DHCP
server must have a static IP config as it would be senseless to act as
DHCP server and client at the same time. Now, a configured DHCP server
is constructed only when the Domain gets constructed and stays alive
until the domain gets destructed. Furthermore, we now throw Domain::Invalid
if there is no static IP config plus a DHCP server configured. However, by
now, this exception is not caught as it is not trivial to destruct the
domain at this point.

Issue #2730
2018-03-29 16:12:05 +02:00
Martin Stein
7d50219902 nic_router: add missing 'override' declarations
Issue #2730
2018-03-29 16:10:13 +02:00
Martin Stein
b344f2bc39 nic_router: fix pure virtual call in Interface
The Interface constructor previously tried to attach to a domain.  This
might include sending a DHCP request to get the domain a valid IP config.
But in order to achieve this, the constructor used a pure virtual method
of Interface which crashes due to the unfinished vtable. To fix this bug,
the attach attempt was moved to a new Interface::init method.

Issue #2730
2018-03-29 16:09:52 +02:00
Martin Stein
1044c2fcab nic_router: simplify the pointer utility
Instead of Pointer<T>::set use assignment operator with implicit constructor
from T-reference. Instead of Pointer<T>::unset use assignment operator with
Pointer<T>(). Instead of Pointer<T>::deref provide () operator.

Issue #2730
2018-03-29 16:03:28 +02:00
Martin Stein
a3b04c55f3 nic_router_dyn_config.run: test re-configurability
A very basic test of the re-configurability. It overwrites the configuration
once without making any changes, once with removing all domains except
uplink, and a third time recovering to the initial configuration to see if
the clients keep going as soon as their domains are back.

Fixes #2670
2018-03-29 15:39:45 +02:00
Martin Stein
92a30e0953 nic_router: handle configuration changes
The router reacts as follows to a configuration change:

1) Construct new internal configuration representation (the old one stays
   in place to be able to do comparisons in the following steps)
2) Iterate through all user-dependent objects (interfaces, link states, ARP
   information, DHCP information) and re-check which remain valid with the
   new configuration and which must be dismissed.
3) Adapt the objects that remain valid to the new configuration (re-write
   references) and remove or detach the dismissed objects.
4) Do a link state DOWN at each interface and a link state UP at each
   interface that remains attached to a domain.
5) Replace the old internal configuration representation with the new one

This way, the router keeps as much user dependent states as possible
while going through a configuration change. Thus, overwriting the old
configuration with an exact copy of itself is (almost) transparent to
clients of the router. Almost, because there are things the router must
do on every configuration handling, like re-scheduling the expiration
timeouts of links.

Ref #2670
2018-03-29 15:39:44 +02:00
Martin Stein
4e8453b7bf nic_router: destroy list items during for_each
The for_each method of the List wrapper remembers the next list item
before calling the functor on the current one, so, the current one can
be destroyed during the functor.

Ref #2670
2018-03-29 15:39:44 +02:00
Martin Stein
930c29a50c nic_router: != operator for IP config
Ref #2670
2018-03-29 15:39:36 +02:00
Martin Stein
ec240a64d9 nic_router: != operator for IP address prefix
Ref #2670
2018-03-29 15:39:36 +02:00
Martin Stein
709afcd945 nic_router: overwritable reference wrapper
While references are const and always valid, this wrapper is like a reference
that is only always valid and can be overwritten.

Ref #2670
2018-03-29 15:32:39 +02:00
Martin Stein
119b9f9c2c nic_router: alloc specific bits at bit allocator
Method to allocate specific bits at a Bit_allocator_dynamic

Ref #2670
2018-03-29 15:32:39 +02:00
Martin Stein
03062b83b6 nic_router: alloc specific port at port allocators
Methods to allocate a specific port at Port_allocator and
Port_allocator_guard.

Ref #2670
2018-03-29 15:30:20 +02:00
Martin Stein
e0081cfc29 nic_router: safe pointer class for const objects
Const_pointer class that enables the use of the pointer wrapper for
const ojects.

Ref #2670
2018-03-29 15:30:03 +02:00
Martin Stein
5926261e08 nic_router: Avl_tree wrapper with destroy_each
AVL tree wrapper with method to destruct and deallocate each item of the
tree.

Ref #2670
2018-03-29 15:30:03 +02:00
Martin Stein
44dd55a268 nic_router: destroy_each for domain tree
List method to destruct and deallocate each item of a domain tree.

Ref #2670
2018-03-29 15:24:02 +02:00
Martin Stein
d5f645ee69 nic_router: destroy_each for list wrapper
List method to destruct and deallocate each item of a list.

Ref #2670
2018-03-29 15:23:31 +02:00
Martin Stein
8fff7df438 nic_router: safe pointers that are valid and const
Add safe pointer constructor that takes a reference as argument to enable the
use of the safe pointer wrapper as const object.

Ref #2670
2018-03-29 15:22:52 +02:00
Martin Stein
2c2037952d nic_router: support interfaces without a domain
Clients can connect at any time to the NIC router. The interfaces (sessions)
get attached to the appropriate domain as soon as it appears. This implies
that interfaces can also be detached from a domain without beeing destructed
when the domain disappears. All user dependent states of an interface such as
the link states, DHCP allocations and ARP information get lost when the
interface gets detached.

Ref #2670
2018-03-29 15:22:34 +02:00
Martin Stein
63de13b50e nic_router: conform domain labeling in log
Adapt domain labeling of packet receive/send messages in log to other domain
specific log messages.

Ref #2670
2018-03-29 15:21:07 +02:00
Martin Stein
2a77976164 nic_router: add verbose_packets per domain
A domain logs its packets if one of the global 'verbose_packets' or its local
'verbose_packets' is switched on.

Ref #2670
2018-03-29 15:20:20 +02:00
Martin Stein
bd16f89617 nic_router: add verbose_packets attribute
This separates the decision wether to log the received and sent packets
from the 'verbose' attribute. This information is now only logged if
'verbose_packets' is switched on. If 'verbose' is switched on, only
routing decisions and optional hints are printed.

Ref #2670
2018-03-29 15:20:15 +02:00
Martin Stein
b69134f1fe nic_router.run: test DHCP server
Very basic test of the DHCP server functionality.

Ref #2670
2018-03-29 15:19:29 +02:00
Martin Stein
95005a0ae3 test/lwip/udp/client: deal with packet loss
Try it 10 times and expect 5 of them to succeed.

Ref #2670
2018-03-29 15:16:35 +02:00
Martin Stein
ff7c378ff9 bit_allocator: alloc specific block of bits
Method to try to allocate specific bits of the Bit_allocator_dynamic.

Ref #2670
2018-03-29 15:16:11 +02:00
Martin Stein
72036d3f88 test/lwip/http_clnt: don't succeed falsely
Ref #2670
2018-03-29 15:09:47 +02:00
Martin Stein
8c65219c96 util/string: add ascii_to for unsigned short
Ref #2670
2018-03-29 15:09:05 +02:00
Martin Stein
eb11e077fc list_model: fix missing include
Ref #2670
2018-03-29 15:07:15 +02:00
Christian Helmuth
b07d6eced8 depot: update recipe hashes 2018-03-29 14:59:07 +02:00
Alexander Boettcher
26918b82b3 hw: provide svm/vmx features via platform_info
Issue #2710
2018-03-29 14:59:07 +02:00
Alexander Boettcher
a6a196f042 sel4: add tsc and svm/vmx feature to platform_info
Issue #2710
2018-03-29 14:59:07 +02:00
Alexander Boettcher
bc2a998261 demo: test demo scenario bootup by autopilot 2018-03-29 14:59:06 +02:00
Christian Helmuth
6151e1bbb2 Disable super-page I/O mappings on FOC and Fiasco
We disable super-page I/O mappings because our unmap code does not flush
local mappings from core and, thus, breaks later re-mappings of
different page size.

Issue #2547
2018-03-29 14:59:06 +02:00
Alexander Boettcher
5d1f08d512 seoul: update seoul-genode.run
Issue #2715
2018-03-29 14:59:06 +02:00
Alexander Boettcher
e51e3dcdbd seoul: update disk backend
Fixes races in disk allocators, add more sanity checks and handles corner
case like alloc_packet failed in block packetstream.

Issue #2715
2018-03-29 14:59:05 +02:00
Alexander Boettcher
4b826d10ef grub2: update to fix boots without using bender
Fixes #2727
2018-03-29 14:59:05 +02:00
Christian Helmuth
9242b4278c Remove ATAPI from ahci_drv config in test
ATAPI does not work reliably on QEMU and is not tested by the run script
anyway.
2018-03-29 14:59:05 +02:00
Alexander Senier
ac42670a0e Add fstatfs to libc ABI symbols
Fixes #2721
2018-03-29 14:59:05 +02:00
Reto Buerki
47724c68c2 platform_drv/x86: Switch to ECAM/MMCONF
Switch port I/O based PCI config space access to memory-mapped IO.  The
base address of the PCI configuration space is acquired by mapping the
ACPI ROM and reading the first <bdf> node. An exception is thrown if the
first <bdf> node is not for PCI domain zero or if multiple <bdf> nodes
exist. This is to reduce complexity and also because multiple PCI
domains are rare.

The PCI configuration space is accessed via I/O mem dataspace which is
created in the platform_drv root and then passed on to the PCI session,
device components and finally to the actual PCI config access instances.

The memory access code is implemented in a way to make it work with Muen
subject monitor (SM) device emulation and also general x86 targets. On
Muen, the simplified device emulation code (which works also for Linux)
always returns 0xffff in EAX to indicate a non-existing device.
Therefore, EAX is enforced in the assembly templates.

Fixes #2547
2018-03-29 14:59:04 +02:00
Alexander Boettcher
661be648d5 pistachio: don't remove KIP range from io_mem alloc
The KIP address range resides in virtual memory while io_mem alloc
manages physical-address ranges.

The patch enables the use of ECAM/MMCONF for PCI configuration.

Issue #2547
2018-03-27 13:44:28 +02:00
Alexander Boettcher
77bbe87dc8 nova: avoid endless loop in core
Issue #2547
2018-03-27 13:44:28 +02:00
Alexander Boettcher
675aa2cd2f okl4: leverage complete virtual address space
Issue #2547
2018-03-27 13:44:28 +02:00
Norman Feske
cb188f5f93 terminal: support Latin-1 subset of UTF-8 2018-03-27 13:44:28 +02:00
Emery Hemingway
219c2fa2e1 EGL api library
Library for EGL headers only. Useful for components that dynamically
load an EGL shared library.

Fix #2718
2018-03-27 13:44:27 +02:00
Emery Hemingway
c3b483d12a Prepate_port: create directories when downloading bare files
Ref #2718
2018-03-27 13:44:27 +02:00
Emery Hemingway
b60fd14679 Depot: update pubkey for ehmry
Fix #2719
2018-03-27 13:44:27 +02:00
Norman Feske
d59d07b5e3 os: util/utf8.h for UTF-8 string handling
This patch adds a simple UTF-8 decoder at 'os/include/util/utf8.h'
along with a test at 'os/run/utf8.run'.

Fixes #2717, related to issue #2716
2018-03-27 13:44:27 +02:00
Alexander Boettcher
57fcd5e0c4 seoul: adjust vga model to framebuffer host size
Configure the available vga/vesa memory based on the given Genode framebuffer
size and not the way around.

Issue #2715
2018-03-27 13:44:26 +02:00
Alexander Boettcher
bb768c2cab seoul: adjust Intel network model to recent VM
Issue #2715
2018-03-27 13:44:26 +02:00
Alexander Boettcher
3bcb45b4e7 seoul: support g++ -Weffc++ option
Issue #2715
2018-03-27 13:43:10 +02:00
Alexander Boettcher
6e2bd945b1 ports: support g++ -Weffc++ for vmm utils
Issue #2715
2018-03-27 13:43:10 +02:00
Alexander Boettcher
ed320f6f03 seoul: support rtl8029 network model
Issue #2715
2018-03-27 13:43:10 +02:00
Alexander Boettcher
8e8878f187 seoul: show vga messages during early disc boot
Issue #2715
2018-03-27 13:43:10 +02:00
Alexander Boettcher
2403c32d4f seoul: add top utility to seoul*.run scenarios
Issue #2715
2018-03-27 13:43:10 +02:00
Alexander Boettcher
05765cd25b depot: public key of alex-ab
Issue #2715
2018-03-27 13:43:09 +02:00
Norman Feske
e5068fb469 gems: add cap quotas to decorator run scripts 2018-03-27 13:43:09 +02:00
Norman Feske
eaa412022f tool/run: improve depot/create suggestion
When a pkg is missing, the user should create <arch>/pkg instead
of only the missing pkg. This way, all depending binaries are created in
one step. Otherwise the missing binaries are detected at the next time
the run script is executed. This patch relieves the user from iterating
manually.
2018-03-27 13:43:09 +02:00
Norman Feske
579ca1063c os: support non-int coordinates in 'Point<>' 2018-03-27 13:43:09 +02:00
Alexander Boettcher
f7cacd16a0 vbox5: avoid assertion in DevHDA
seen with beginning of Virtualbox 5.1.34 update

Issue #2658
2018-03-27 13:43:08 +02:00
Christian Helmuth
f2b9a6238c stdcxx: std::istream::ignore support 2018-03-27 13:43:08 +02:00
Emery Hemingway
4b165190ee Link EGL to Mesa
Link the EGL library with Mesa. SDL's `GL_GetProcAddress` now calls
`eglGetProcAddress` rather than lookup procedures directly in the Mesa
library.

Components may still wish to list 'mesa_api' in LIBS to access OpenGL
headers.

Fix #2711
2018-03-27 13:43:08 +02:00
Boris Mulder
964aac599c wpa_supplicant: report auth_failures
Fixes #2668
2018-03-08 15:45:34 +01:00
Emery Hemingway
f27953c48d Standalone POSIX pipe utility
Pipe between files using POSIX stdio. This facilitates raw transfers
between arbitrary resources exposed by the VFS library.

Fix #2708
2018-03-08 15:22:12 +01:00
Alexander Boettcher
f294ec608e rump: tweak memory configuration
Adjust managed dataspace (== max memory provided to rump kernel) based
on 32/64 bit architecture. On 32bit is it 256M, on 64bit is 4G.

Additionally limit the actual announced memory to rump by the available RAM and
by the maximum size of the managed dataspace.

Fixes #2709
2018-03-08 14:28:49 +01:00
Alexander Boettcher
80e1dce1b0 nova: abandon hypervisor_info_page ROM
replace by platform_info ROM supposed to exist on all supported
kernels.

Fixes #2710
2018-03-08 14:24:05 +01:00
Alexander Boettcher
0fbd892b5c foc: provide platform_info ROM
Issue #2700
2018-03-08 14:21:45 +01:00
Christian Helmuth
1f7b5e75bf depot: update recipe hashes 2018-03-08 12:05:10 +01:00
Norman Feske
3887ba8a21 menu_view: fix hover reporting
The 'Widget::hovered' method discarded the result of the traversal of
the widget tree.
2018-03-08 12:05:10 +01:00
Alexander Boettcher
8e9390e964 apci_drv: ignore invalid ACPI tables 2018-03-08 12:05:10 +01:00
Norman Feske
d332ee3fcd nit_fader: update view visibility for late clients
The visibility of the client's view is re-evaluated at each animation
step. However, when the client appears long after the initial
fade-in/out animation is completed, the initial visibility state
remaines unchanged. This happens when booting the Sculpt scenario in
Qemu where the the nit_fb instances of the leitzentrale could not be
started in time. This patch fixes the issue by re-evaluating the view
visibility also at the view-creation time.
2018-03-08 12:05:09 +01:00
Christian Helmuth
2eb13c9047 depot: execute content rules sequentially 2018-03-08 12:05:09 +01:00
Emery Hemingway
84ac5891b2 Fetchurl progress reporting
Refactor the fetchurl utility to optionally report the initial fetch
state, fetch progress, and the final state.

Fix #2702
2018-03-08 12:05:09 +01:00
Emery Hemingway
ed1c87c8d6 Xml_generator support for floating point values
Ref #2702
2018-03-08 12:05:08 +01:00
Boris Mulder
d15b396202 fetchurl: fail on error 2018-03-08 12:05:07 +01:00
Alexander Boettcher
033e333691 depot: recipe for Seoul VMM 2018-03-08 12:05:07 +01:00
Christian Prochaska
6986b6ca95 Noux: move ELF signature check into 'Child_env'
Fixes #2703
2018-03-08 12:05:06 +01:00
Stefan Kalkowski
bad002acb1 hw: link core with debug symbols optionally
This commit changes the semantic of run_boot_dir to link a core
binary with debug symbols only when the designated library is in place.

Follow-up fix refering to issues #2339 and #2700
2018-03-08 12:05:06 +01:00
Alexander Senier
37b08797c0 pthread: basic pthread_rwlock_* operations
Fixes #2656
2018-03-08 12:05:06 +01:00
Christian Helmuth
07b371a095 sculpt: link PDF version in README 2018-03-08 12:05:05 +01:00
Norman Feske
d5a361c180 News item about Sculpt EA 2018-03-08 12:05:05 +01:00
Christian Helmuth
20e2a58c5e noux: sync before calling ftruncate()
Issue #2695
2018-03-08 12:05:05 +01:00
Christian Helmuth
db23227ac3 libc: sync before calling ftruncate()
Issue #2695
2018-03-08 12:05:05 +01:00
Josef Söntgen
d67e369433 libc: sync before calling fstat()
Issue #2695
2018-03-08 12:05:04 +01:00
Adrian-Ken Rueegsegger
9cb71d0260 run: Move shared procedure to load/pxe.inc
The install_pxe_bootloader_to_run_dir procedure is required by the tftp
as well as the ipxe load script. Move it to a separate file which is
include by both.
2018-03-08 12:05:04 +01:00
Alexander Boettcher
9a46c670c1 vbox5: update to 5.1.34
Issue #2658
2018-03-08 12:05:04 +01:00
Emery Hemingway
f63e4312ec sculpt: load 'installation' from file only
Do not allow the depot_download_manager to load the installation ROM
from core.
2018-03-01 14:18:09 +01:00
Christian Helmuth
1eefc8d42d version: 18.02 2018-02-28 13:57:59 +01:00
Christian Helmuth
1cb9eeee05 Update doc/components.txt 2018-02-28 13:00:28 +01:00
Norman Feske
a9cee58264 News item for version 18.02 2018-02-28 12:59:55 +01:00
Norman Feske
ddf2315dff Release notes for version 18.02 2018-02-28 12:59:55 +01:00
Josef Söntgen
7b8164d75e depot: add cnuke 2018-02-28 12:23:27 +01:00
Christian Helmuth
a8f186c7d4 depot: update recipe hashes 2018-02-28 11:05:05 +01:00
Christian Helmuth
e552f570eb Adapt doc/depot.txt to current versions 2018-02-28 11:05:05 +01:00
Christian Helmuth
adc3aa452a libc: close all handles of a socket before release
This prevents diagnostic messages like

  Error: partial write detected 0 vs 31

for writes into already released socket directories due to a still-open
handle to the socket data file.
2018-02-28 11:05:05 +01:00
Josef Söntgen
cd7cb5fbf4 depot_deploy: update blueprint pkg path
We need to update the blueprint pkg path as well in case the start node
is changed. Otherwise the query tool will keep using the initially
configured pkg path.
2018-02-28 11:05:05 +01:00
Christian Helmuth
ddd5e8abb4 Provide /dev/random in runtime for fetchurl
libcrypto transparently opens /dev/random to seed its PRNG or logs an
error if this fails.
2018-02-28 11:05:04 +01:00
Christian Helmuth
e3d1b8b044 openssl: clarify error message on missing /dev/random 2018-02-28 11:05:04 +01:00
Christian Helmuth
d72517e673 Remove replenish error message from quota guard 2018-02-28 11:05:04 +01:00
Christian Helmuth
064e738d53 libc: reduce noise on setsockopt/getsockopt 2018-02-28 11:05:04 +01:00
Alexander Boettcher
a322fbf822 os: avoid warning in vfs server
[init -> depot_download -> dynamic -> fetchurl] Error: packet operation=3 failed

Issue #2672
2018-02-28 11:05:03 +01:00
Christian Helmuth
ad56976131 tool/publish: fix help for PUBLIC_DIR 2018-02-28 11:05:03 +01:00
Christian Prochaska
77c5e55f4f sculpt: move test executon into separate run script
Fixes #2694
2018-02-28 11:05:03 +01:00
Josef Söntgen
3d14a94eac sculpt: use depot-user for boot-image archives 2018-02-28 11:05:03 +01:00
Norman Feske
d9a34d9460 sculpt: add README at '/' of leitzentrale 2018-02-28 11:05:03 +01:00
Norman Feske
32b93e1f63 sculpt: documentation 2018-02-28 11:05:02 +01:00
Norman Feske
76b82020d4 depot_query: handle missing user info gracefully
This patch handles the case where the pubkey or download location for a
queries depot user is missing.
2018-02-28 11:04:59 +01:00
Christian Prochaska
7ac9a16090 Noux: check ELF signature on 'execve()'
Issue #2687
2018-02-28 11:04:58 +01:00
Christian Prochaska
ecff980761 libc: 'rmdir()': delete directories only
Fixes #2685
2018-02-28 11:04:58 +01:00
Emery Hemingway
88757a674a libc: sync socket control files to check for write errors
Ref #2335
2018-02-28 11:04:58 +01:00
Josef Söntgen
8dda68a1bd verify: propagate error on corrupted .sig files
In case the signature file is corrupt, e.g. it could not be downloaded
successfully, the gnupg code just prints an error message but will not
return the error to the user. So we patch the code to return the error
and check the value in the calling code.
2018-02-28 11:04:58 +01:00
Reto Buerki
65f1100453 muen: Skip MSI setup for devices with no IRQ
The sinfo API now also exports PCI devices without logical IRQs.
Therefore, explicitly check interrupt count in get_msi_params() function
and ignore such devices.
2018-02-28 11:04:57 +01:00
Adrian-Ken Rueegsegger
9e4ff8c196 Update Muen port
- Use latest Muen version
- Sync VirtualBox Muen subject state
- Drop unneccessary subject IP patch
- Adapt Muen RUN_OPTs
- Update documentation

Note: the GPL 2017 toolchain is now required and as the debug output
      format has changed the mulog-subject.py script must be updated on
      autopilot instances.
2018-02-28 11:04:57 +01:00
Josef Söntgen
97c2699392 netperf_wifi: disable 11n (batching) temporarily 2018-02-28 11:04:57 +01:00
Stefan Kalkowski
9f945a782f run: enable Wandquad board for network tests
Ref #2665
2018-02-28 11:04:57 +01:00
Stefan Kalkowski
d5dc234a00 dde_linux: wandboard ethernet driver
Fixes #2665
2018-02-28 11:04:56 +01:00
Emery Hemingway
590f51dbe1 dde_linux: Build net/ipv4/datagram.c for UDP connect
Fix #2683
2018-02-28 11:01:32 +01:00
Norman Feske
03574e4a79 Adaptation to lxIP-based fetchurl 2018-02-28 11:01:32 +01:00
Emery Hemingway
e1f7dd0553 Migrate fetchurl to socket_fs
Remove the dependency on the deprecated LwIP libary.

Remove the progress logging callback. Should a progress indicator be
desired, a progress report would be more appropriate.

Fix #2684
2018-02-28 11:01:31 +01:00
Norman Feske
5261462d7a depot: src/vfs_lxip recipe 2018-02-28 11:01:31 +01:00
Emery Hemingway
f177107a4f Fix string handling in Lxip
Use a utility method to copy application provided strings into control
file buffers. This fixes an potential connect error.

Ref #2535
2018-02-28 11:01:31 +01:00
Emery Hemingway
01800ad1a3 vfs_lxip: check that socket is ready for I/O
Check that the Linux socket structure is populated before performing
read or write operations on control files.

Fix #2679
2018-02-28 11:01:31 +01:00
Norman Feske
eabe83d4f2 Adaptation to chroot 'writeable' attribute
Issue #2643
2018-02-19 20:50:48 +01:00
Josef Söntgen
2e9a19d5b0 chroot: enforce writeable policy decision
The writeable decision given in the policy will always override the
decision made by the client.

Fixes #2643
2018-02-19 20:50:48 +01:00
Norman Feske
7bee21a4fd depot: fix firmware name in pkg/wifi/runtime 2018-02-19 20:50:48 +01:00
Norman Feske
ff7eeb852b sculpt: minor refinements
based on the feedback of early adopters.

- Leitzentrale transparency
- Support for 2560x1440 screens
2018-02-19 20:50:47 +01:00
Norman Feske
e79ce5a036 depot: update recipe hashes 2018-02-16 08:42:31 +01:00
Josef Söntgen
d4576833d6 dde_linux: silence waitqueue related warnings 2018-02-16 08:42:30 +01:00
Josef Söntgen
f8376e1f49 libc_noux: silence common not implemented warnings 2018-02-16 08:42:30 +01:00
Josef Söntgen
dd73cf9baf libc: silence common not implemented warnings 2018-02-16 08:42:30 +01:00
Norman Feske
126c72c9c8 mesa-gears.run: add missing rtc config
Without the 'rtc' configuration, the gears won't move.
2018-02-16 08:42:29 +01:00
Norman Feske
5286456e48 depot_deploy: graceful handling of missing content
This patch improves the error handling for the case where the depot
lacks the content of the to-be-deployed pkg. Instead of infinitely
reattempting to obtain blueprints for such content, the deploy tool
prints a single message.
2018-02-16 08:42:29 +01:00
Norman Feske
cb9a448fc9 Sculpt system scenario
Issue #2676
2018-02-16 08:42:29 +01:00
Norman Feske
cc8b03ae4f depot_deploy: customization hooks for start nodes
This patch enables the manual customization of 'ram', 'caps', and
'version' attributes of start nodes.
2018-02-15 10:27:00 +01:00
Norman Feske
7260a16f67 driver manager: key remappings for sculpt
This patch adds two key remappings for the magic keys of the sculpt
scenario. KEY_DASHBOARD toggles the leitzentrale. KEY_RESTART resets
the noux-control subsystem of the leitzentrale.

Issue #2676
2018-02-15 10:27:00 +01:00
Norman Feske
ead12669d5 gems: depot_deploy.run
This scenario is meant as a playgound for the depot_deploy component and
as a testing environment while creating new runtime packages.

Issue #2676
2018-02-15 10:26:46 +01:00
Norman Feske
fc902b797e depot: runtime definitions for sculpt installation
This patch supplements 'runtime' files to several pkg archives,
which thereby become deployable by the depot_deploy tool.

Issue #2676
2018-02-15 10:22:10 +01:00
Norman Feske
0253cdd50c ports: src/e2fsprogs-minimal noux package 2018-02-15 10:22:10 +01:00
Norman Feske
1053d78201 ports: src/bash-minimal noux package 2018-02-15 10:22:10 +01:00
Norman Feske
5d9eb55274 driver manager: policy for 'default' block device
If only a single AHCI device is present, the block service provided by
the drivers subsystem allows the client to refer to this block device
via the label 'default'.

Issue #2676
2018-02-15 10:22:10 +01:00
Norman Feske
69ac68ca98 nit_fb: prevent enlarging mode when out of RAM
This patch adds a safety check to nit_fb to ensures that nit_fb never
runs out of RAM. Should the available RAM not suffice for resizing the
virtual framebuffer to a new mode, it keeps the current mode.
2018-02-15 10:22:10 +01:00
Emery Hemingway
013eb506a8 Vfs::Dir_file_system: do not use Vfs_handle for opening directories as files
The Dir_file_system uses static cast to convert handles from the
application to a plugin local type. For this reason, only the local
handle type may be returned from 'opendir' or 'open'. This fixes the
unexpected behavior when opening directories as files.

Fix #2533
2018-02-15 10:22:09 +01:00
Emery Hemingway
2bbb183a18 Libc: check O_DIRECTORY flag at 'open' and 'read'
Return an error when opening a file with 'O_DIRECTORY'. Return an error
when reading directories.

Ref #2533
2018-02-15 10:22:09 +01:00
Emery Hemingway
2b006dbaac Noux: no read/write on open directories
Directories may be opened, but they cannot be read from or written to.

Ref #2533
2018-02-15 10:22:09 +01:00
Alexander Boettcher
e05a708024 os: reset packet_allocator members
Fixes #2632
2018-02-15 10:22:09 +01:00
Christian Prochaska
70112d29da depot: preserve timestamps in source packages of Noux applications
Fixes #2680
2018-02-15 10:22:09 +01:00
Alexander Boettcher
accc7e7521 fs servers: handle result propagation better
This patch removes the notion of partial writes from the file-system
servers. Since write operations are asynchronously submitted, they are
expected to succeed completely, except for I/O errors. I/O errors are
propagated with the write acknowledgement but those are usually handled
out of band at the client side. Partial writes must never occur because
they would go undetected by clients, which usually don't wait for the
completion of each single write operation.

Until now, most file-system servers returned the number of written bytes
in the acknowledgement packet. If a server managed to write a part of
the request only, it issued the acknowledgement immediately where it
should have cared about writing the remaining part first.

The patch detects such misbehaving server-side code. If partial writes
unexpectedly occur, it prints a message and leaves the corresponding
request unacknowdleged.

Issue #2672
2018-02-15 10:22:08 +01:00
Alexander Boettcher
f4e9c94bf2 vfs lib: complain about unsuccessful fs packets
Issue #2672
2018-02-15 10:22:08 +01:00
Alexander Boettcher
bfd24de4ad vfs: notify all blockers in fs adapter
if requested so ( by _post_signal_hook.arm(nullptr) )

Issue #2664
2018-02-14 20:41:10 +01:00
Alexander Boettcher
f05c4df36a vfs: handle submit_ready signal in fs adapter
to avoid starvation.

Issue #2664
2018-02-14 20:41:09 +01:00
Emery Hemingway
4a3fc21ada New watch handle mechanism for File_system session
File_system clients may now watch files and directories for changes by
opening a 'Watch_handle' rather than submitting a 'CONTENT_CHANGED'
packet to the server. When a change happens at a node with an open
Watch_handle a CONTENT_CHANGED packet will be sent from the server to
the client. This serializes registration with other handle operations
and separates I/O handle state from notification handle state.

Test at run/fs_rom_update.

Ref #1934
2018-02-14 20:41:09 +01:00
Alexander Boettcher
21b2b7e1ea rump: handle error case in vm_vfs rump layer
Fixes #2677
2018-02-14 20:41:09 +01:00
Hinnerk van Bruinehsen
ff7e8086d7 bash: update to version 4.4.18 2018-02-14 20:41:09 +01:00
Hinnerk van Bruinehsen
fce01f8b84 sed: update to version 4.4 2018-02-14 20:41:09 +01:00
Hinnerk van Bruinehsen
f2d1ba483e which: update to version 2.21 2018-02-14 20:41:09 +01:00
Hinnerk van Bruinehsen
e0f9e26c21 findutils: update to version 4.6 2018-02-14 20:41:08 +01:00
Hinnerk van Bruinehsen
78ad18ca45 tar: update to version 1.30 2018-02-14 20:41:08 +01:00
Hinnerk van Bruinehsen
86e0c45514 coreutils: update to version 8.29 2018-02-14 20:41:08 +01:00
Hinnerk van Bruinehsen
047275f16b grep: update to version 3.1 2018-02-14 20:41:08 +01:00
Hinnerk van Bruinehsen
e57863c0e5 less: update to version 487 2018-02-14 20:41:08 +01:00
Emery Hemingway
d82ddeeaff Add Intel Wireless-N 1000 to raw/wifi_firmware
Fix #2674
2018-02-14 20:41:07 +01:00
Emery Hemingway
90753f3e50 Update Fatfs library to 0.13a, vfs_fatfs recipe
Fix #2673
2018-02-14 20:41:07 +01:00
Emery Hemingway
db20aad591 VFS Rump: increase open file limit
Ref #2642
2018-02-14 20:41:07 +01:00
Emery Hemingway
980a2da677 VFS Rump: catch exceptions, print unhandled errors
Ref #2642
2018-02-14 20:41:07 +01:00
Emery Hemingway
c7d0accac0 VFS: catch Out_of_ram and Out_of_cap exceptions
Catch out of RAM and capability exceptions and return error values.
Abort opening a composite directory at Dir_file_system where an
opendir call on any child file-system returns an OUT_OF_RAM or
OUT_OF_CAPS error.

Ref #2642
2018-02-14 20:41:07 +01:00
Alexander Boettcher
c34a4bfdb4 vbox5: update to 5.1.32
Issue #2658
2018-02-14 20:41:06 +01:00
Alexander Boettcher
e156511157 vbox5: update to 5.1.30
Issue #2658
2018-02-14 20:41:06 +01:00
Alexander Boettcher
529be993c7 vbox5: update to 5.1.28
Issue #2658
2018-02-14 20:41:06 +01:00
Alexander Boettcher
d76826ae83 vbox5: update to 5.1.26
Issue #2658
2018-02-14 20:41:06 +01:00
Alexander Boettcher
bd81eac98b vbox5: update to 5.1.24
Issue #2658
2018-02-14 20:41:06 +01:00
Alexander Boettcher
8287abf63f virtualbox.run: switch to vbox5
Issue #2658
2018-02-14 20:41:05 +01:00
Christian Prochaska
50966583f6 noux: handle short writes in the libc plugin
Fixes #2661
2018-02-14 20:41:05 +01:00
Alexander Boettcher
2ee15cc2e0 nova: enable -Weffc++ for kernel
Issue #465
Issue #2646
2018-02-14 20:41:05 +01:00
Alexander Boettcher
711cce3f4d nova: provide exec. time caused by cross core IPC
Issue #2646
2018-02-14 20:41:05 +01:00
Alexander Boettcher
9269d09e18 sel4: support tracing of exec. time of core thread
Issue #2646
2018-02-14 20:41:04 +01:00
Alexander Boettcher
2bd873e2b4 nova: support tracing of exec. time of core thread
Issue #2646
2018-02-14 20:41:04 +01:00
Norman Feske
7670f048c1 tool/depot: publish missing archives only
The timestamp-based rules of make do not work well for the publish tool
because depot archives are often re-created with the same content but a
different modification time, in particular when creating archives via
'FORCE'. This way, those archives are re-published every time, which
becomes a time-consuming operation since all archives must be signed.

This patch filters the targets based on the content that is already
present in the public/ location. All existing archives are skipped.
2018-02-14 20:41:04 +01:00
Norman Feske
cd7e3425ee nit_fb: allow screen-relative initial_width/height
This change enables the use of negative values for the 'initial_width'
and 'initial_height' attributes to specify values that are relative to
the screen size. This is consistent with the meaning of the 'width' and
'height' attributes.
2018-02-14 20:41:04 +01:00
Norman Feske
cd45a3b8d6 libports: set mupdf gamma value to 1.5
This makes the look of tikz illustrations consistent with the look when
viewing them in evince (as I do while creating them).
2018-02-14 20:41:04 +01:00
Norman Feske
065c2163dd depot: recipe for src/depot_deploy 2018-02-14 20:41:04 +01:00
Norman Feske
d7522defde depot_deploy: support multiple runtimes
This patch changes the 'depot_deploy' tool to spawn any number of
runtimes. In contrast to the original version, which merely consumed a
blueprint generated by a pre-configured 'depot_query' instance, the new
version actively generates queries as needed. So there is a feedback
loop between 'depot_deploy' and 'depot_query'. The instantiation of
subsystems is controlled by the '<start>' nodes of the 'depot_deploy'
configuration. For each start node, the tool tries to determine the
ingredients (provided by the depot) by asking the 'depot_query' tool.
Once the information is complete, a corresponding start node of the
dynamic init instance is generated.
2018-02-14 20:41:03 +01:00
Norman Feske
3149506963 depot_query: refined <runtime> node structure
This patch introduces the subnodes <provides>, <requires>, and
<content> to the <runtime> node. All <rom> sessions that are
expected from the depot appear within the <content> node, which
sets them nicely apart from <rom> sessions that may be required
as runtime arguments.

Note that the <requires> and <provides> nodes do not appear in the
patch because the existing depot_deploy tool does not interpret this
information (the pkg/test-fs_report runtime does not provide any
service, and the timer session is provided as a common route).
2018-02-14 20:41:03 +01:00
Norman Feske
a57dd46aff depot_query: obtain query from separate ROM
This patch adds the config attribute 'query'. If set to the value "rom",
the query information is obtained from a ROM session labeled "query".
Otherwise, the query information is expected to be part of the config.

This enables us to use the component in two different scenarios. In
one scenario, 'depot_query' is embedded in a managed dynamic init.
Here, taking the query from the config is easy. In the other scenario,
'depot_query' is running as a daemon with a once-configured VFS but
varying queries. The queries originate from a component that does not
control the 'depot_query' config.
2018-02-14 20:41:03 +01:00
Norman Feske
a22b0c3ac6 noux: respond to terminal-size changes 2018-02-14 20:41:03 +01:00
Norman Feske
8aa1e349fc terminal session: propagate resize events
The new 'Terminal_session::size_changed_sigh' RPC function registers a
signal handler that is triggered each time when the terminal size
changes. It enables the client to adjust itself to the new size by
subsequently calling the 'size' RPC function. Of all terminal servers,
only the graphical terminal triggers this signal.
2018-02-14 20:41:03 +01:00
Norman Feske
96a068f90a terminal: improve internal structure
This patch reorganizes the terminal's source code to become easier to
extend. It also enables the strict warning level.
2018-02-09 14:04:32 +01:00
Christian Prochaska
12c8e51071 terminal fixes
- handle line wraps in 'ech()'
- take (1,1) origin into account in 'hpa()' and 'vpa()'
- unify handling of SGR escape sequences of different lengths
- accept the '[?2004h' and '[?2004l' escape sequences (used by midnight commander)

Fixes #2671
2018-02-09 14:04:25 +01:00
Norman Feske
fefeb29d5f Depot-download subsystem 2018-02-09 14:04:17 +01:00
Norman Feske
66a93d9199 os: add 'Expanding_reporter' to os/reporter.h
The 'Expanding_reporter' wrapper for the 'Reporter' eliminates
the burden of handling 'Xml_generator::Buffer_exceeded' exceptions
from components that generate reports.

Fixes #2655
2018-02-09 14:04:06 +01:00
Norman Feske
8d09d02b85 depot: update recipe hashes 2018-02-09 13:34:24 +01:00
Stefan Kalkowski
9d16169a65 run: remove NIC driver from nic_*.run tests
Instead of having a lot of platform specific quirks in the run test,
and to also test it on platforms currently missing a NIC driver,
this commit removes hardware drivers from the nic_router and
nic_bridge run scripts, and uses the nic_loopback server instead.
2018-02-09 13:34:24 +01:00
Christian Helmuth
4853d61c3b qt5: download qtscriptclassic via http
FTP repeatedly causes trouble in some regions.
2018-02-09 13:34:24 +01:00
Martin Stein
abf9557bb5 AVL node/tree: make non-copyable
AVL trees can't be copied with the default copy constructor as the
parent pointer of the first item of both of the resulting trees would
point to the original tree. Copying an AVL node, however, generally
violates the integrity of the corresponding tree. The copy constructor
of Avl_tree is used in some places but in those places it can be
replaced easily. So, this commit deletes the copy constructor of
Avl_node_base which makes Avl_node and Avl_tree non-copyable.

Issue #2654
2018-02-09 13:34:23 +01:00
Martin Stein
4e9ff5ad7b trace_subject_reporter: fix missing include
Issue #2654
2018-02-09 13:34:23 +01:00
Norman Feske
38aab18392 doc: update GPL to AGPLv3 in contributions.txt 2018-02-09 13:34:23 +01:00
Emery Hemingway
79a433ae77 Fix Nim release mode
Append "-d:release" to NIM_OPTS, not NIM_ARGS in the 'release' spec.
Compiling for a release removes some runtime assertions.

Fix #2662
2018-02-09 13:34:23 +01:00
Christian Helmuth
bb9d15b8b9 intel_fb: prevent destruction of session singleton
Issue #2588
2018-02-09 13:34:22 +01:00
Stefan Kalkowski
28f7568e82 run: always return driver names in platform.inc
On platforms without nic or audio driver support, the corresponding
functions to return the correct names should return a meaningful
name instead of an empty list. Otherwise, in an erroneous run-script
that calls those functions to append names to the boot modules
the whole 'bin' directory is appended instead, which leads to big
image files or errors when linking the boot modules to core.
2018-02-09 13:34:22 +01:00
Stefan Kalkowski
e9a8d83eb5 depot: recipe for clipboard
Ref #2446
2018-02-09 13:34:22 +01:00
Stefan Kalkowski
7ba6297988 clipboard: handle focus at startup
Fixes #2667
2018-02-09 13:34:22 +01:00
Stefan Kalkowski
c79ffc5c79 dde_ipxe: build for x86 only
Fixes #2666
2018-02-09 13:34:22 +01:00
Christian Helmuth
30b0bd641f Remove obsolete config_args library dependency 2018-02-09 13:34:21 +01:00
Christian Prochaska
3c3c86bdba noux_tool_chain_auto.run: use '[depot_dir]' instead of '$genode_dir/depot'
Fixes #2663
2018-02-09 13:34:21 +01:00
Christian Helmuth
166e487559 libc: withstand pthreads calling with_libc() 2018-02-09 13:34:21 +01:00
Christian Prochaska
584aaec2a5 noux: close files marked with the 'close_on_execve' flag on 'execve()'
Fixes #2660
2018-02-09 13:34:21 +01:00
Christian Prochaska
c7d1a9e270 noux_tool_chain_auto.run: add tclsh
Issue #2648
2018-02-09 13:34:20 +01:00
Norman Feske
4447a54059 ports: add tclsh as noux package
Fixes #2648
2018-02-09 13:34:20 +01:00
Norman Feske
c2590995c0 posix ABI: require 'main' symbol
Issue #2648
2018-02-09 13:34:20 +01:00
Norman Feske
ddc50431e6 ports: allow more customizations in gnu_build.mk
This patch adds hooks for customizing the location of the configure
script within the package, the build target, as well as the install
step. This is useful for packages like tcl that deviate from the
usual layout of source packages.

Issue #2648
2018-02-09 13:34:20 +01:00
Martin Stein
ccc67d6f68 trace_logger: convenient tracing frontend
The 'trace_logger' component can be used to easily gather, process and export
different types of tracing data. Which subjects to select is configurable via
session label policies and thread names. Which data to collect from the
selected subjects can be configured for each subject individually, for groups
of subjects, or for all subjects. The gathered data can be exported as log
output.

This is an example configuration of the 'trace_logger' component which shows
the default value for each attribute except the policy.thread and
policy.label:

! <config verbose="no"
!         session_ram="10M"
!         session_arg_buffer="4K"
!         session_parent_levels="0"
!         period_sec="5"
!         activity="no"
!         affinity="no"
!         default_policy="null"
!         default_buffer="4K">
!
!    <policy label="init -> timer" />
!    <policy label_suffix=" -> ram_fs" />
!    <policy label_prefix="init -> encryption -> "
!            thread="worker"
!            buffer="4K"
!            policy="null" />
! </config>

For more details see os/src/app/trace_logger/README.

Fixes #2654
2018-02-09 13:34:20 +01:00
Martin Stein
3e6d1b96e7 trace/policy/rpc_name: enable building again
Building this policy was disabled by a REQUIRES = riscv_toolchain_bugfix
to prevent compiler crashes on nightly test builds. Since the latest
RISCV toolchain update, test builds for RISCV crash at much more places
which makes this single work-around senseless.

Issue #2654
2018-02-09 13:34:20 +01:00
Martin Stein
c10554851d trace_session: fix exception list in 'trace' RPC
Trace_session::trace might throw Nonexistant_subject which was neither
documented nor declared in the RPC interface.

Issue #2654
2018-02-09 13:34:19 +01:00
Martin Stein
c68d551c41 base/trace/buffer.h: fix circular #include
Previously, base/trace/buffer.h included base/thread.h which includes
base/trace/logger.h which includes base/trace/buffer.h.

Removed the base/thread.h include in base/trace/buffer.h as it is not
needed.

Issue #2654
2018-02-09 13:34:19 +01:00
Martin Stein
f0cfaaa147 create_uboot: better documentation
Issue #2654
2018-02-09 13:34:19 +01:00
Martin Stein
ef1dee8bc6 init config.xsd: add ld_verbose attribute
Issue #2654
2018-02-09 13:34:19 +01:00
Johannes Schlatow
bfe0031304 base-hw: enable SMP support for Zynq-7000 boards
Issue #2641
2018-02-09 13:34:19 +01:00
Emery Hemingway
abd536d5d3 Libc: zero sysctl buffer before strncpy
The uname utility from coreutils needs its read buffer zero-terminated,
regardless of read length.

Fix #2657
2018-02-09 13:34:18 +01:00
Christian Helmuth
4a444651c5 gems: loop on partial reads in file util 2018-02-09 13:34:18 +01:00
Alexander Boettcher
666f6c9ac4 ahci: enable pci config command memory access
Issue #2620
2018-02-09 13:34:18 +01:00
Alexander Boettcher
fcadbc9023 platform_drv: try enabling msi independent of gsi
value written in pci config space.

Issue #2620
2018-02-09 13:34:18 +01:00
Alexander Boettcher
336140c5f1 platform_drv: enable full access for pci bridges
Issue #2620
2018-02-09 13:34:18 +01:00
Alexander Boettcher
1f1d1af041 dde_linux: enable pci config command memory access
Issue #2620
2018-02-09 13:34:18 +01:00
Norman Feske
10f1616c28 base: add util/list_model.h
The new 'List_model' utility helps with the implementation of
component-internal data models created and updated from XML.

Fixes #2653
2018-02-09 13:34:17 +01:00
Norman Feske
cde8163770 os: make 'Buffered_xml' util publicly available
The 'Buffered_xml' utility is used by three components and a fourth is
on the way. To avoid another duplication of the code, this patch makes
it publicly available at 'os/buffered_xml.h'.
2018-02-09 13:34:17 +01:00
Christian Helmuth
a740b066a6 Correct date for FOSDEM 2018 news item 2018-02-09 13:34:17 +01:00
Norman Feske
faea43906f init test: conserve RAM in dummy app
This patch replaces the 'Heap' by a 'Sliced_heap' to avoid the
allocation of a 16 KiB memory block when 'dummy' acts as a server. On
seL4, such an allocation would exceed the 1M quota as assigned by the
init.run script.
2018-02-09 13:34:17 +01:00
Roman Iten
9175d801e0 qt5: emit started signal in qthread
Fixes #2651.
2018-02-09 13:34:17 +01:00
Christian Prochaska
d0eacdd0d6 stdcxx: define _GLIBCXX11_USE_C99_STDLIB
Fixes #2652
2018-02-09 13:34:17 +01:00
Josef Söntgen
fe6f616cf1 nit_fb: add attribute for initial dimensions
The 'initial_width' and 'initial_height' attributes were added to
accomodate the use-case to set the initial dimensions whenever 'nit_fb'
is used in a dynamic fashion, e.g, in combination with a window manager.
These attributes may not be mixed with the 'width' and 'height'
attributes, which are mostly used when a static size configuration is
desired.
2018-02-09 13:34:16 +01:00
Martin Stein
6575df84c5 nic_router: fix use of outdated ARP-cache entries
When a NIC session is destructed at the router, we have to remove all ARP
cache entries that match the MAC address of that session. Otherwise the
outdated entries might be re-applied later, leading to wrong destination
MAC addresses in routed packets.

Fixes #2637
2018-02-09 13:34:16 +01:00
Pirmin Duss
0423eb4499 stdcxx: fix src recipe
fixes #2649
2018-02-09 13:34:16 +01:00
Alexander Senier
33ba587813 stdcxx: Add missing symbols to ABI
- typeinfo for std::runtime_error
- typeinfo for std::regex_error
- vtable for std::regex_error
2018-02-09 13:34:16 +01:00
Norman Feske
c7fa3b69d9 file_terminal: remove superfluous log message 2018-02-09 13:34:16 +01:00
Norman Feske
e9b9f684ef os: reduce log noise by trace-info apps 2018-02-09 13:34:16 +01:00
Alexander Boettcher
a9a8c65f53 base: remove debug message from Allocator_guard 2018-02-09 13:34:15 +01:00
Norman Feske
e6b87e9d20 depot_query.run: use label_last 2018-02-09 13:34:15 +01:00
Norman Feske
4619e2e84c init: new label_last attribute for session routes
Fixes #2647
2018-02-09 13:34:15 +01:00
Norman Feske
eff67d3131 depot_query: support nested pkgs and raw content 2018-02-09 13:34:15 +01:00
Norman Feske
5641ebcd1b depot_query: 'binary' and 'config' as attributes
By specifying the 'config' of a '<runtime>' as an attribute, we can
distinguish the case where the config is obtained from a ROM session
from the case where the config is specified inline as a '<config>' node.
2018-02-09 13:34:15 +01:00
Norman Feske
506bc023b7 depot: add layouter.config to raw/wm
This way, the wm subsystem does no longer propagate the ROM request for
the layouter configuration via the label 'config' to the parent.
2018-02-09 13:34:15 +01:00
Norman Feske
f07cfbe02d depot: add missing nit_fb to pkg/pdf_view 2018-02-09 13:34:14 +01:00
Norman Feske
6d6aff0093 run: no duplicates in create_tar_from_depot
This patch ensures that depot snapshots created by the run tool
won't contain duplicated content, which would result cyclic hard
links.
2018-02-09 13:34:14 +01:00
Norman Feske
18d963419d depot: recipe for src/depot_query 2018-02-09 13:34:14 +01:00
Norman Feske
dcce0a1032 depot: force SHA256 digest for signing archives 2018-02-09 13:34:14 +01:00
Norman Feske
562325a28b Road map for 2018 2018-02-09 13:34:14 +01:00
Norman Feske
c8c910a41b fetchurl: dim debug-message noise 2018-02-09 13:34:13 +01:00
Norman Feske
f1ce555cd9 depot: recipes for src/extract and used libs 2018-02-09 13:34:13 +01:00
Norman Feske
5b6bd8459f Signature checking tool based on GnuPG
The new 'verify' component facilitates the code of GnuPG to verify
detached OpenPGP signatures against public keys.

Since GnuPG depends on libgcrypt and libgpg-error, the patch adds these
libraries to the libports repository.

Fixes #2640
2018-02-09 13:34:13 +01:00
Norman Feske
8fca8a9a04 nitpicker: refresh when focused client disappears
This fix handles the case where the focused domain loses its focus
because the currently focused client vanishes. In this case, the focus
will be undefined and the non-focused views of the domain become
tinted again. The refresh should take effect immediately as soon as the
client vanishes.
2018-02-09 13:34:13 +01:00
Norman Feske
e0e9b3b32e init: close all sessions of exited children
With this patch, init responds to the exit of a child by closing all
sessions of the child. E.g., if a child is a GUI application, its
nitpicker session is closed at the time of exit, not at the time when
the start node disappears from init's configuration.

Since this change requires a modification of the 'Genode::Child' class,
it takes the chance to make the child-destruction less brutal. The
new version ensures that all threads of the destructed subsystem are
destructed before other sessions, in particular PD sessions. This
eliminates spurious page-fault warnings during the child destruction.

On Fiasco.OC, closing the CPU session of a thread while being called by
the thread causes a deadlock. Hence, we skip the eager destruction of
CPU sessions on this kernel.

Related to issue #2659
2018-02-09 13:31:27 +01:00
Martin Stein
47b11bf9b7 autopilot.list: add netperf_*_router tests
Fix #2624
2018-02-09 13:26:03 +01:00
Martin Stein
fe46d50ab3 netperf tests: test nic_router throughput
Adds two new netperf tests, netperf_lxip_router and netperf_lwip_router
who test the TCP throughput of the NIC router when routed with a tcp-forward
rule and NAT.

Issue #2624
2018-02-09 13:26:03 +01:00
Alexander Boettcher
02d33e7b28 nova: disable IOMMU fault reporting on-demand
if too many faults are caused by devices.

Fixes #2631
2018-02-09 13:26:02 +01:00
Alexander Boettcher
df26dc07e9 trace_subject_reporter: adjust ram usage
to trace connection

Issue #2638
2018-02-09 13:26:02 +01:00
Alexander Boettcher
7c0894159f top: consider dead thread with execution time
which executed in the current measurement period but are now dead.
Keep the Entry object up to next period, where the recent_execution_time will
become 0 since it will not execute definitely.

Issue #2638
2018-02-09 13:26:02 +01:00
Alexander Boettcher
2a0f940bd7 top: adapt to ram usage of trace connection
Issue #2638
2018-02-09 13:26:02 +01:00
Alexander Boettcher
9fc4ee5f6c base: free up all meta-data of trace subjects
Issue #2638
2018-02-09 13:26:02 +01:00
Martin Stein
26f65f4996 Xml_node: fix bug in Xml_node::decoded_content
Previously, the dst_len value was not decreased after each character that was
written to the dst buffer. This way, if the content length was greater than
dst_len, decoded_content wrote to memory out of bounds.

Issue #2644
2018-02-09 13:26:02 +01:00
Martin Stein
84e476facb Xml_node: do not consider '0' in decoded_content
Do not leave space for a terminating '0' at the end of the dst buffer in
decoded_content as the method does not write this '0'. The caller of the
method shall take care of it instead.

Issue #2644
2018-02-09 13:26:01 +01:00
Martin Stein
1936667a53 test/xml_node: test Xml_node::decoded_content
Issue #2644
2018-02-09 13:26:01 +01:00
Sebastian Sumpf
963f5de117 vbox5: increase boot speed of Linux guests
Until now, if we examined an EPT fault and the corresponding guest
physical memory was not allocated, we forwarded the faulting instruction
to the instruction emulator, which in turn handled the memory allocation
implicitly. This lead to long instruction emulation times on certain
instructions (e.g. 'rep mov' on large memory junks).  Therefore, we now
allocate and map the corresponding guest physical memory immediately in
the EPT fault handler and directly return to the guest.

fixes #2645
2018-01-17 12:19:44 +01:00
Christian Helmuth
6013889028 depot: update recipe hashes 2018-01-17 12:14:44 +01:00
Norman Feske
6133977d8b News item for FOSDEM 2018 2018-01-17 12:14:44 +01:00
Christian Helmuth
ce44dcf9c1 netperf: explicitly test IPv4 only 2018-01-17 12:14:44 +01:00
Christian Helmuth
a1e22789af fetchurl: NIC driver binary from platform_drv.inc 2018-01-17 12:14:43 +01:00
Christian Helmuth
d26554f38d vbox: support symlinks on host file system
Before this commit, symbolic links in shared folders lead to the use of
unimplemented functions, ie., halted the VMM.
2018-01-17 12:14:43 +01:00
Josef Söntgen
4009239328 vfs: skip synced file systems in complete_sync
Fixes #2606.
2018-01-17 12:14:43 +01:00
Josef Söntgen
fb1c504568 gpu: the Intel multiplexer is only for x86_64
Require x86_64 because memory/adress space limitations on x86_32
restrict the use-cases on such a platform anyway. Doing that,
we can also assume that memory adresses are always 64bit long and
do not have to handle 32bit adresses.
2018-01-17 12:14:43 +01:00
Christian Helmuth
55b070d204 Update download URL of mpc library port 2018-01-17 12:14:43 +01:00
Martin Stein
8844c57254 net-stat: remove as it is not used and outdated
According to the creator of the net-stat lib, this lib was a mere debugging
tool that is not used anymore nor worth the work of updating the it to
modern Genode coding paradigms. Also, there exist no tests for the lib.
2018-01-17 12:14:42 +01:00
Norman Feske
80ef5fa73c Enable use of 'check_abi' in build system
This patch invokes the 'check_abi' tool for each shared library that
implements an ABI.

Issue #2639
2018-01-17 12:14:42 +01:00
Christian Helmuth
b7fffb1b24 abi: remove duplicates and internal symbols, fix sizes
The most important part of this patch are symbol-size changes, which
potentially lead to data corruption.

Issue #2639
2018-01-17 12:14:42 +01:00
Norman Feske
95785a9c46 Tool for checking consistency between lib and ABI
Fixes #2639
2018-01-17 12:14:42 +01:00
Martin Stein
fbd545ae70 net: remove unused enums
Issue #465
2018-01-17 12:14:41 +01:00
Martin Stein
4f1d43ce21 net: remove placement new operators
They are not used any more.

Issue #465
2018-01-17 12:14:41 +01:00
Martin Stein
f4a2d932e3 net: check packet data size in accessor
Instead of having a method validate_size in each packet class, check
sizes in the data accessor of the surrounding packet class. This packet
accessor is the one that casts the data pointer to the desired data type
so it is sensible that it also checks whether the desired type would
exceed the available RAM before doing the cast. This also fits nicely
the fact that for the top-level packet-class of a packet, the size must
not be checked (which was previously done).

Issue #465
2018-01-17 12:14:41 +01:00
Sebastian Sumpf
89a9e88a7e vfs: GNU long file name support for tar 2018-01-17 12:14:41 +01:00
Josef Söntgen
67869a697b run: add deport-dir argument
By specifying '--depot-dir' in the RUN_OPTS it is possible to override
the default depot ($GENODE_DIR/deport) location with the given path.
2018-01-17 12:14:40 +01:00
Josef Söntgen
114af00913 depot: make DEPOT_DIR overridable 2018-01-17 12:14:40 +01:00
Josef Söntgen
a867c29633 libc: return on nanosleep with zero timeout
In case the calculated timeout value is zero return directly and do
not call Libc::suspend as it will suspend us indefinitely.

Fixes #2636.
2018-01-17 12:14:40 +01:00
Christian Helmuth
2b711f59ed nit_fb: fix resizing on framebuffer-mode change
Respect relative width/height configuration if the underlying
framebuffer dimensions change.
2018-01-17 12:14:40 +01:00
Christian Helmuth
81ada6b4f2 lwip: tweak configuration for downloading clients
The TCP window scaling is implemented for servers (like netperf's
netserver) only. The client implementation just uses the lower 16 bits
of the TCP_WND configuration value, which we therefore maximize to ~64K.
2018-01-17 12:14:40 +01:00
Norman Feske
bdc8e1f8fb libports: component for extracting archives
Issue #2528
2018-01-17 12:14:39 +01:00
Norman Feske
219218dd38 libarchive: enable support for tar.xz
Issue #2528
2018-01-17 12:14:39 +01:00
Ben Larson
dc246544de port library: liblzma
Issue #2528
2018-01-17 12:14:39 +01:00
Ben Larson
b34f70d312 port library: lz4
Issue #2528
2018-01-17 12:14:39 +01:00
Norman Feske
a36def9a10 depot_query: respond to config updates 2018-01-17 12:14:39 +01:00
Norman Feske
9e0dafbd93 depot_query: move 'Archive' utils to include/depot
This enables other depot tools to use the same utilities.
2018-01-17 12:14:38 +01:00
Norman Feske
9a671cf8bc depot_query: support to query <dependencies>
The '<dependencies>' attribute 'path' refers to a depot archive.
Depending on the attributes 'source="no"' and 'binary="no" (defaults
shown), the depot_query component determines the source/binary
dependencies of the given archive. The result has the form of a report
with a sequence of <missing> and <present> nodes, each equipped with the
'path' of the dependency.
2018-01-17 12:14:38 +01:00
Norman Feske
b0abfc2dcd depot_query: rename <query> to <blueprint> node
Since the <query> node results in the generation of a "blueprint"
report, it should better be named <blueprint>. This also clears the way
for adding further query types such as <dependencies>, following the
same pattern of generating a report of the corresponding query name.
2018-01-17 12:14:38 +01:00
Norman Feske
6552313098 depot_query: query user information
The new '<user name"...">' node allows for querying the download
location and public key of the specified name.
2018-01-17 12:14:38 +01:00
Norman Feske
f5fb9684db gems/vfs.h: intuitive meaning of 'Directory const'
With this patch, it becomes possible to pass a 'Directory const &' to
the constructor of 'File_content', which is intuitive as the directory
content is not changed by reading a file.
2018-01-17 12:14:37 +01:00
Norman Feske
75e22fef4a gems/vfs.h: fix end-of-data condition
The 'File_content::for_each_line' method did not correctly detect the
end of data for files without a trailing linebreak, thereby cutting the
last character from the last line.
2018-01-17 12:14:37 +01:00
Norman Feske
5d6f97cc1d drivers_managed-pc: simplification
This patch removes the former use of ram_fs, fs_rom, and fs_report from
the subsystem and uses a report_rom instead. The fs-based reporting was
introduced to accommodate automatically instantiated usb_block drivers,
which turned out to be impractical for the sculpt scenario.
2018-01-17 12:14:37 +01:00
Norman Feske
95a2fc7167 os: component to reflect ROMs as reports 2018-01-17 12:14:37 +01:00
Norman Feske
c513a63a04 ports: vim-minimal noux package/recipe 2018-01-17 12:14:37 +01:00
Norman Feske
cb24b1064d ports: coreutils-minimal noux package/recipe
This variant of coreutils contains only the tools that are essential
for the sculpt scenario's initial state.
2018-01-17 12:14:36 +01:00
Norman Feske
366bba0227 Exclude higher-level repos from strict warnings
This is a follow-up commit to "Increase default warning level", which
overrides Genode's new default warning level for targets contained in
higher-level repositories. By explicitly whitelisting all those targets,
we can selectively adjust them to the new strictness over time - by
looking out for 'CC_CXX_WARN_STRICT' in the target description files.

Issue #465
2018-01-17 12:14:36 +01:00
Norman Feske
c30299feca Increase default warning level
This patch enables the warnings -Wextra, -Weffc++, and -Werror for
compiling Genode components. It thereby helps us to detect bugs like
uninitialized member variables or missing virtual destructors at compile
time. The warning level is defined via the new 'CC_CXX_WARN_STRICT'
variable. For targets that compile 3rd-party code where this warning
level is not applicable, the variable may be explictly set to an empty
value in the corresponding build-description file.

Issue #465
2018-01-17 12:14:35 +01:00
Norman Feske
eba9c15746 Follow practices suggested by "Effective C++"
The patch adjust the code of the base, base-<kernel>, and os repository.
To adapt existing components to fix violations of the best practices
suggested by "Effective C++" as reported by the -Weffc++ compiler
argument. The changes follow the patterns outlined below:

* A class with virtual functions can no longer publicly inherit base
  classed without a vtable. The inherited object may either be moved
  to a member variable, or inherited privately. The latter would be
  used for classes that inherit 'List::Element' or 'Avl_node'. In order
  to enable the 'List' and 'Avl_tree' to access the meta data, the
  'List' must become a friend.

* Instead of adding a virtual destructor to abstract base classes,
  we inherit the new 'Interface' class, which contains a virtual
  destructor. This way, single-line abstract base classes can stay
  as compact as they are now. The 'Interface' utility resides in
  base/include/util/interface.h.

* With the new warnings enabled, all member variables must be explicitly
  initialized. Basic types may be initialized with '='. All other types
  are initialized with braces '{ ... }' or as class initializers. If
  basic types and non-basic types appear in a row, it is nice to only
  use the brace syntax (also for basic types) and align the braces.

* If a class contains pointers as members, it must now also provide a
  copy constructor and assignment operator. In the most cases, one
  would make them private, effectively disallowing the objects to be
  copied. Unfortunately, this warning cannot be fixed be inheriting
  our existing 'Noncopyable' class (the compiler fails to detect that
  the inheriting class cannot be copied and still gives the error).
  For now, we have to manually add declarations for both the copy
  constructor and assignment operator as private class members. Those
  declarations should be prepended with a comment like this:

        /*
         * Noncopyable
         */
        Thread(Thread const &);
        Thread &operator = (Thread const &);

  In the future, we should revisit these places and try to replace
  the pointers with references. In the presence of at least one
  reference member, the compiler would no longer implicitly generate
  a copy constructor. So we could remove the manual declaration.

Issue #465
2018-01-17 12:14:35 +01:00
Norman Feske
2a33d9aa76 pthread: prevent copy of Genode::Thread object
This patch also adjusts virtualbox because it relies on pthread-internal
interfaces.

Fixes #2630
2018-01-17 12:14:34 +01:00
Sebastian Sumpf
8af45fd5fb rump: retrieve port sources using git
fixes #2621
2018-01-17 12:14:34 +01:00
Stefan Kalkowski
bac3d620c6 vfs/rump_fs: test for ext2 file deletion
Ref #2621
2018-01-17 12:14:34 +01:00
Stefan Kalkowski
6611c38184 depot: recipe for log_terminal
issue #2447 prequisite for #2621
2018-01-17 12:14:34 +01:00
Martin Stein
226c4a475b nic_router: do not warn on sending to empty domain
The warning "no interface connected to domain" was introduced when only one NIC
session at a time could be connected to a domain. It should help to track
packet drops that were caused by startup timing issues between servers and
clients. However, a user should watch the "NIC sessions" value of a domain
(verbose_domain_state) instead when debugging packet loss. With support for
multiple sessions per domain, even a non-empty domain may still miss the
session that connects the desired server.

Fix #2629
2018-01-17 12:14:33 +01:00
Emery Hemingway
36104098ad libc: fill stdio descriptors even if invalid
Stdin, stdout, and stderr are mapped to descriptors 0, 1, and 2
respectively. If these first three descriptors are not allocated before
the application becomes active then normal files and sockets can be
opened under these numbers, potentially causing unexpected application
behavior.

Fix #2628
2018-01-17 12:14:33 +01:00
Norman Feske
61e1bed2c2 Adaptation to changed RTC handling in libc
This is a follow-up commit to "libc: prevent timer session if rtc not
configured".

Issue #2625
2018-01-17 12:14:33 +01:00
Norman Feske
1be4a0aeaf libc: prevent timer session if rtc not configured
This patch makes the creation of the libc's timer session depend on
whether or not the 'rtc' attribute of the <libc> configuration is
defined. If not configured, 'clock_gettime' returns 0.

Fixes #2625
2018-01-17 12:14:33 +01:00
Norman Feske
d873c13e16 fetchurl: create compound dir of downloaded file
Fixes #2623
2017-12-22 11:43:39 +01:00
Norman Feske
fd89f510ca fetchurl.run: update list of needed boot modules 2017-12-22 11:43:39 +01:00
Norman Feske
e40b3bbb30 fetchurl: with_libc around curl_global_init
This is needed when downloading files via https.
2017-12-22 11:43:39 +01:00
Martin Stein
57bfd09328 nic_router: no memcpy on self-written packets
Previously, all packets that the router wanted to sent were first prepared to
their final state and then copied at once into the packet stream RAM. This is
fine for packets that the router only passes through with modifying merely
a few values. But for packets that the router writes from scratch on its own,
it is better to compose the packet directly in the packet stream RAM.

Fix #2626
2017-12-22 11:43:39 +01:00
Martin Stein
b6991f9c03 nic_router: send with individual composing functor
Normally, Interface::send always takes the base and size of the RAM region
where a packet was composed and copies this finished packet at once into the
packet stream RAM. But we want to be able to also compose packets directly in
the packet stream RAM, so that no memcpy is needed. Thus, Interface::send now
takes a functor that describes how to compose the packet, then allocates the
packet stream RAM and applies the functor to this RAM. there is also a version
of Interface::send that provides the old behavior but with the new back end.
This way, we stay backwards-compatible.

Issue #2626
2017-12-22 11:43:39 +01:00
Martin Stein
4c76a87fec nic_router: explanatory comment about link objects
Issue #2609
2017-12-22 11:43:39 +01:00
Christian Prochaska
3f74862666 depot: recipe for stdcxx library
Issue #2446
2017-12-22 11:43:39 +01:00
Christian Helmuth
f44edd407b run: fix import_from_depot for variable args
Apply the approach to join the argument list 'args' to pass a single
list argument to _collect_from_depot. Actually, this story teaches me to
shy away from {*} because of its special semantics, which are

  {*} makes each item in a list an individual argument of the current
  command (https://wiki.tcl.tk/17158)

This is a direct follow up to "run: let import_from_depot accept list
variables", which broke calling import_from_depot with a number of
individual arguments.

Issue #2619
2017-12-22 09:31:36 +01:00
Christian Helmuth
553cf556af depot: update recipe hashes 2017-12-21 15:01:56 +01:00
Stefan Kalkowski
7499379862 depot: recipe for part_blk 2017-12-21 15:01:55 +01:00
Martin Stein
b0e155d316 nic_router: fix available IP count in DHCP server 2017-12-21 15:01:55 +01:00
Martin Stein
d6d0bcd960 nic_router: no Arp_packet constructor when sending
When composing an ARP packet for sending, it's pointless to use the Arp_packet
constructor as the constructor only checks whether the packet is malformed.

Issue #2618
2017-12-21 15:01:55 +01:00
Martin Stein
1cae5ec8f6 nic_router: handle all "No_X_packet" exceptions
Issue #2618
2017-12-21 15:01:55 +01:00
Martin Stein
75df14f190 run: use XSD files from depots too
Fix #2619
2017-12-21 15:01:55 +01:00
Martin Stein
f01bdb9949 run: let import_from_depot accept list variables
When doing something like this in a run script ...

lappend arg X
lappend arg Y
lappend arg Z
import_from_depot arg

... the internals of import_from_depot do not treat $arg as list but as one
string and interprets it as malformed depot path. We can handle this by
applying {*} to $arg inside the procedure.

Issue #2619
2017-12-21 15:01:54 +01:00
Martin Stein
edf1f9d849 nic_router: report some useful information
The NIC router can now be configured to periodically send reports.
Configuration example (shows default values):

<config>
	<report interval_sec="5" bytes="yes" config="yes">
</config>

If the 'report' tag is not available, no reports are send.
The attributes of the 'report' tag:

'bytes'        : Boolean : Whether to report sent bytes and received bytes per
                           domain
'config'       : Boolean : Whether to report ipv4 interface and gateway per
                           domain
'interval_sec' : 1..3600 : Interval of sending reports in seconds

Issue #2614
2017-12-21 15:01:54 +01:00
Martin Stein
4d6fcbb8b6 nic_router.inc: automatically count clients
Avoid that the user has to define the number of HTTP/UDP clients manually.
This count is used by the run scripts to generate the expected log output.

Fix #2609
2017-12-21 15:01:54 +01:00
Martin Stein
869297a672 nic_router: avoid "close" where we mean "dissolve"
In the context of link state objects we often used the term "close" were we
actually meant "dissolve". The term "close" originated from the TCP connection
state and is still used in TCP links in the correct manner.

Issue #2609
2017-12-21 15:01:54 +01:00
Martin Stein
859a5fd208 nic_router: simplify Interface::_new_link
Issue #2609
2017-12-21 15:01:53 +01:00
Martin Stein
3ced146733 nic_router.run: more tailored router config
Add to the router config only what is needed according to which tests are
enabled.

Issue #2609
2017-12-21 15:01:53 +01:00
Martin Stein
9e1d776da5 nic_router.run: test hub functionality
The new test 7 is by now deactivated by default as enabling all tests at a time
would trigger resource exhaustion on some platforms.

Issue #2609
2017-12-21 15:01:53 +01:00
Martin Stein
4927a6f679 nic_router: multiple interfaces at one domain
Act as hub for the interfaces at a domain. This also changes the roles of the
Domain and Interface classes. By now the Interface held the data structures for
the ARP cache, foreign ARP waiters, and the searchtrees for layer 3 links. All
these structures have moved to the Domain while the memory allocations and
lifetime management for the contents of these structures still come from from
the according Interface object. The mentioned data structures were also adapted
to fit the fact that they now may maintain objects of different interfaces.

Issue #2609
2017-12-21 15:01:53 +01:00
Martin Stein
f524fb8e61 nic_router: support domain-local IPv4
If an IPv4 packet targets an IP local to the domain it comes from and doesn't
target the routers IP of that domain, forward it to all other interfaces of
the domain without considering any other routing.

Issue #2609
2017-12-21 15:01:53 +01:00
Martin Stein
b63d83e6a3 nic_router: get rid of Interface::print
Actually interfaces have no own human-readable identifier. They shall instead
use the print functionality of their domain.

Issue #2609
2017-12-21 15:01:52 +01:00
Martin Stein
2d153c40e4 nic_router.run: generate result string via loop
Issue #2609
2017-12-21 15:01:52 +01:00
Martin Stein
cfbd1f0749 nic_router.inc: allow for individual peer names
Previously, the function that returned the XML config for a network test
client/server in the scripts formed the component name of the peer solely
by combining the protocol name, "client" or "server", and a suffix that
is given as argument. However, to group multiple clients together in one
domain via their session label at the NIC router we want peers with the same
name prefix. Thus, the function now simply takes the whole name as argument.

Issue #2609
2017-12-21 15:01:52 +01:00
Martin Stein
0a77987778 nic_router: support domain-local ARP
Improve ARP handling code in general:
Make the several cases and their handling more clear by using a more
readable if/else statement structure. Drop gratuitous ARP requests.

Domain-local ARP:
Handle ARP packets that target local IPs other than the routers IP
(forward them to all other interfaces of the domain).

Issue #2609
2017-12-21 15:01:52 +01:00
Martin Stein
bfddad17a3 nic_router: avoid use of old term "IP allocation"
IP allocations were renamed DHCP allocations without fixing the according
places in log messages and comments. This commit rectifies this omission.

Issue #2609
2017-12-21 15:01:52 +01:00
Martin Stein
54532b99f9 nic_router: don't use color codes in log
Issue #2609
2017-12-21 15:01:51 +01:00
Christian Prochaska
bd36933636 abi_symbols: annotate the size for 'R'-type symbols
Fixes #2622
2017-12-21 15:01:51 +01:00
Emery Hemingway
ed89f2f7f0 Add millisecond accessor to Genode::Duration value object
Add a 'trunc_to_plain_ms' method to Gende::Duration to make
millisecond-accurate timing safer and more convenient.

Ref #2335
2017-12-21 15:01:51 +01:00
Johannes Schlatow
d4a75ed9bb base-hw: move spec/zynq files to zynq_qemu
This is necessary because in contrast to the zynq boards (see specs in genode-world), only zynq_qemu uses UART_0.
These files should thus fall under the zynq_qemu spec.

Fixes #2615
2017-12-21 15:01:51 +01:00
Johannes Schlatow
684052df5e base-linux: implement lx_sigmask/lx_sigword explicitly
In newer glibc versions, the '__sigword' and '__sigmask' macros are only
available in sigsetops.h which is not installed. These macros are not
system-specific, hence we implement them explicitly ourselves.

Fixes #2616
2017-12-21 15:01:51 +01:00
Stefan Kalkowski
b4e437000a virtualbox5: prevent null-pointer dereference
Fix #2612
2017-12-21 15:01:50 +01:00
Norman Feske
2f7217b29f depot: add REBUILD argument to create, build tools
Fixes #2617
2017-12-21 15:01:50 +01:00
Norman Feske
7e3334ca02 core: make region-map verbosity configurable
With this patch, diagnostic messages generated by core's region-map
handling are printed only if the PD session is created with 'diag'
mode enabled.
2017-12-21 15:01:50 +01:00
Norman Feske
f148388227 ports: hook to filter content of noux install
The new variable 'INSTALL_TAR_CONTENT' allows one to customize the
content of the generated tar archive instead of including the entire
install directory.
2017-12-21 15:01:49 +01:00
Josef Söntgen
6b89eaaf79 mixer: handle config verbosity update 2017-12-21 15:01:49 +01:00
Josef Söntgen
9f2bec52d5 drivers.config: accommodate intel_fb_drv CAP quota 2017-12-21 15:01:49 +01:00
Josef Söntgen
93e42bf5b9 driver_manager: increase intel_fb_drv CAP quota 2017-12-21 15:01:49 +01:00
Norman Feske
9899fed654 drivers_managed-pc: support system reset 2017-12-21 15:01:49 +01:00
Norman Feske
e23fc5a1fc init: refine verbosity handling
This patch makes service-announce messages depend on the configured
verbosity. It also omits "parent provides" title messages if no new
parent services are added during a config update.
2017-12-21 15:01:48 +01:00
Norman Feske
30f96657f1 rom_filter: make verbosity configurable 2017-12-21 15:01:48 +01:00
Norman Feske
552662d594 core: omit allocator info at boot time
Fixes #2549
2017-12-21 15:01:48 +01:00
Norman Feske
48132c9ca3 fs_rom: remove debug message 2017-12-21 15:01:48 +01:00
Norman Feske
e4bb85b4de fs_rom: style (avoid Genode:: prefix) 2017-12-21 15:01:48 +01:00
Alexander Boettcher
892f51ab1c os: add app to transform kernel/core output to LOG
Issue #2207
2017-12-21 15:01:48 +01:00
Alexander Boettcher
a36465426b base-<kernel>: export core log as ROM
Issue #2207
2017-12-21 15:01:47 +01:00
Alexander Boettcher
15cc6d688f core: add support to export log output as ROM
Issue #2207
2017-12-21 15:01:46 +01:00
Alexander Boettcher
2cb635c3e3 base-*: rename core_log.cc to core_log_out.cc
Issue #2207
2017-12-21 15:01:46 +01:00
Alexander Boettcher
30fd10933a okl4: support run script name containing "core"
Issue #2207
2017-12-21 15:01:46 +01:00
Norman Feske
9f140ab843 chroot: adjust license header to AGPLv3 2017-12-21 15:01:46 +01:00
Norman Feske
17bf2564fa depot: improved args check in dependencies tool
This patch lets the dependencies tool give better feedback to the user
whenever an argument lacks the needed version information.
2017-12-21 15:01:45 +01:00
Emery Hemingway
4d9037d112 Hard-link loop detection for VFS tar file-system
Detect loops by walking hard-links at two different speeds and checking
for lapping. Tar link walking is no longer a recursive procedure.

Caught a loop created by GNU tar 1.29.

Fix #2611
2017-12-21 15:01:45 +01:00
Alexander Boettcher
16b395dce3 sel4: use kernel branch 7.0 + our mastered commits
Fixes #2562
2017-12-21 15:01:45 +01:00
Norman Feske
a52541de18 depot: move versions to subdirectory
This patch changes the depot layout such that each archive is
represented as a directory that contains the versions of the archive as
subdirectories.

Issue #2610
2017-12-21 15:01:45 +01:00
Norman Feske
2d041f0e9c depot: switch from .tgz to .tar.xz
Issue #2610
2017-12-21 15:01:44 +01:00
Norman Feske
52301b3bb2 gems/vfs.h: adaptation to recent VFS API change
This is a follow-up commit to "vfs: handle root directory explicitly".
2017-12-21 15:01:44 +01:00
Martin Stein
4dd69b1d5a nic_router: do not warn when using default values
Issue  #2590
2017-12-21 15:01:44 +01:00
Sebastian Sumpf
9e93ea3e1c noux_tool_chain_auto: compile zlib instead of core
fixes issue #2601
2017-12-21 15:01:44 +01:00
Norman Feske
079f00e083 depot: recipe for src/fetchurl 2017-12-21 15:01:43 +01:00
Norman Feske
c9a5f0ce45 libports: import fetchurl from world
Fixes #2578
2017-12-21 15:01:43 +01:00
Norman Feske
a3c217757c depot: recipes for api/curl and src/curl 2017-12-21 15:01:43 +01:00
Norman Feske
531a4bbb7e libports: ABI for curl 2017-12-21 15:01:42 +01:00
Norman Feske
6d4e0c456b depot: recipes for api/libssh, src/libssh 2017-12-21 15:01:42 +01:00
Norman Feske
de38b2ece3 libports: ABI for libssh 2017-12-21 15:01:42 +01:00
Norman Feske
5574dd3465 Port of libarchive
Fixes #2528
2017-12-21 15:01:42 +01:00
Stefan Kalkowski
ec6b23897f dde_ipxe: enable support for intel i219v card 2017-12-21 15:01:42 +01:00
Stefan Kalkowski
bdf70c0ecc base-foc: fix thread pause/resume
Fix #2594
2017-12-21 15:01:41 +01:00
Martin Stein
88be272113 noux_tool_chain.inc: don't use '&' in XML values
Was used in bash commands in the <inline> tag of the RAM FS.
Now we use an extra file and a <rom> tag instead.

Fixes #2605
2017-12-21 15:01:41 +01:00
Alexander Boettcher
dd463d3014 base: signal ref count independent of signal count 2017-12-21 15:01:40 +01:00
Alexander Boettcher
c5f59ddfb1 signal.run: avoid deadlock during test destruction 2017-12-21 15:01:40 +01:00
Alexander Boettcher
9e34ba1458 core: release signal context in signal_ep thread
otherwise the Signal_source_component::_signal_queue gets corrupted.

Issue #2584
2017-12-21 15:01:39 +01:00
Alexander Boettcher
bf74c1694d base: catch ipc error in signal proxy
actually do what the comments says ...

Issue #2584
2017-12-21 15:01:39 +01:00
Alexander Boettcher
a38ec2854a base: fix lock issue in signal context destruction
Issue #2584
2017-12-21 15:01:39 +01:00
Alexander Boettcher
419a48aa06 acpica: support AcpiOSStall
Fixes #2597
2017-12-21 15:01:39 +01:00
Josef Söntgen
3f91f7402d doc: adapt getting started to unified builds 2017-12-21 15:01:38 +01:00
Christian Prochaska
58cbd11f6a drivers_interactive-pbxa9: add input_filter
Fixes #2604
2017-12-21 15:01:38 +01:00
Martin Stein
9c0bd03363 nic_router: no DHCP fail on unexpected DISCOVER
If a client decides to spontaneously send a DHCP DISCOVER again, even though
he has received a still valid IP config from the router, we don't want to
discard the DISCOVER like it was done before but discard the IP config
assignment and offer a new one.

Issue #2534
2017-12-21 15:01:38 +01:00
Martin Stein
70c5c31ec9 nic_router: better warnings on bad DHCP requests
Be more descriptive about why the NIC router thinks that a DHCP request
sent to him is bad.

Issue #2534
2017-12-21 15:01:38 +01:00
Emery Hemingway
b32f2d126a update Nim toolchain recipe
The current upstream development version has improved asyndispatch
performance for Genode.

Fix #2599
2017-12-21 15:01:38 +01:00
Martin Stein
703a013b60 base-foc: warn if 'acknowledge_exception' fails
Issue #2594
2017-12-21 15:01:37 +01:00
Sebastian Sumpf
8808b99cc5 vfs: remove session ram quota checks
The first client that creates a session, has to pay for possibly large
vfs plugin allocations (e.g., rump), which should be payed for by the
server.
2017-12-21 15:01:37 +01:00
Martin Stein
c3853494c8 nic_router: domain-state-verbose flag
When this flag is set in the config tag, the NIC router will print a
short information to the log for each general state change of a domain.
This includes currently the IP-configuration state and the number of
connected NIC sessions. This a useful addition as the normal verbose
flag's purpose is a very deep insight into almost every activity in the
router, which is cool for debugging sophisticated problems but normally
floods the log and therefore discards this option for, e.g., desktop
systems. In such systems, the new verbosity is pretty discreet but
already gives a good hint on why packets may get dropped by the router
although the routing rules are correct.

Issue #2534
2017-12-21 15:01:37 +01:00
Martin Stein
fc7999a62a nic_router: add config schema
Fix #2600
2017-12-21 15:01:37 +01:00
Martin Stein
b8d8bc3142 nic_router: do not route to domains w/o IP config
Ref #2534
2017-12-21 15:01:37 +01:00
Martin Stein
fb2398dbf2 run: target-specific config schemata
The run tool now by default checks configurations with target-specific
XML schemata. Each component may define a config schema file in its
target.mk via the CONFIG_XSD variable. When the run tool has checked an
configuration of an init instance, it additionally goes through the
start nodes of the config. For each start node it checks whether there
is an XSD file that matches. If so, the run tool also checks the config
of the start node (if existant). This is done recursively. I.e., also
the child configs of a sub-init of a sub-init of the top-level init
receive a config check.

Issue #2600
2017-12-21 15:01:36 +01:00
Sebastian Sumpf
568865bde0 noux: remove contexts from Vfs_io_channel
Channels, and therefore contexts, may be shared between children
causing corruption when a child is destroyed while another child still
uses the old context within the channel.

related to #2601
2017-12-21 15:01:35 +01:00
Josef Söntgen
dcce3d5a40 libports: create avplay recipe
Issue #2602.
2017-12-21 15:01:35 +01:00
Josef Söntgen
26f3a43df0 libports: create libav recipe
Issue #2602.
2017-12-21 15:01:35 +01:00
Josef Söntgen
f591c12e77 libports: create SDL_image recipe
Issue #2602.
2017-12-21 15:01:35 +01:00
Josef Söntgen
64f7a04cec libports: create SDL_mixer recipe
Issue #2602.
2017-12-21 15:01:34 +01:00
Josef Söntgen
7fad78ba03 libports: create SDL_net recipe
Issue #2602.
2017-12-21 15:01:34 +01:00
Josef Söntgen
841b99ba3b libports: create SDL recipe
Fixes #2602.
2017-12-21 15:01:34 +01:00
Christian Prochaska
d8b1159cbd drivers_interactive-linux: add input filter
Fixes #2603
2017-12-21 15:01:34 +01:00
Martin Stein
b812179e82 signal: fix race in Signal_receiver pending_signal
In the past, we had the lock of the context we found for the rest of the scope
of pending_signal. Now we use for_each_locked to find the context and the
lock is released as soon as we return from for_each_locked. Thus, we need to
lock the context again before returning it to avoid that the copy constructor
during the return reads values that are currently changing.

Fixes #2532
2017-12-21 15:01:34 +01:00
Norman Feske
bf60e1486d wm: add missing dissolve for decorator input
The missing dissolve of the dummy decorator input component resulted in
problems when using the themed_decorator when repeatedly opening and
closing windows. In contrast to the default decorator, the themed
decorator creates and destroys nitpicker sessions per window.
2017-12-21 15:01:33 +01:00
Martijn Verschoor
8fe0a7514f Nic::Session_component: pass entrypoint in constructor
Added a new constructor that takes the entrypoint as constructor
argument. The original constructor retrieves the entrypoint from the
Genode environment. This does not allow to use a different entrypoint.
2017-12-21 15:01:33 +01:00
Stefan Kalkowski
219615b0eb hw: remove code duplication of core and hw lib
Fix #2593
2017-12-21 15:01:33 +01:00
Stefan Kalkowski
323de9b229 hw: map kernel text segment read-only
Fix #2592
2017-12-21 15:01:33 +01:00
Martin Stein
3cdcb528ff nic_router: advanced timeout configuration
Replace former rtt_sec attribute of the <config> tag by more specific
(and still optional) attributes for timeouts used in the NIC router
(these are also the default values):

<config dhcp_discover_timeout_sec="10"
        dhcp_request_timeout_sec="10"
        dhcp_offer_timeout_sec="10"
        udp_idle_timeout_sec="30"
        tcp_idle_timeout_sec="600"
        tcp_max_segm_lifetime_sec="30">

Details about the new attributes can be found in the README of the router.

Issue #2590
2017-12-21 15:01:32 +01:00
Martin Stein
564e6a6885 nic_router: read seconds attributes generic
Issue #2590
2017-11-30 16:58:49 +01:00
Christian Helmuth
53c87d18ed version: 17.11 2017-11-30 15:04:01 +01:00
Norman Feske
14a6be97cf News item for version 17.11 2017-11-30 15:03:34 +01:00
Norman Feske
799b07f21d Release notes for version 17.11 2017-11-30 15:03:33 +01:00
Christian Helmuth
25ca29002e depot: update recipe hashes 2017-11-30 11:24:49 +01:00
Christian Helmuth
1ae527ea67 qt5: qtvirtualkeyboard example depends on swrast 2017-11-30 11:23:22 +01:00
Christian Prochaska
a0a54df74c qt5: pointer shape support
Fixes #2586
2017-11-30 11:23:22 +01:00
Christian Prochaska
b0b436acef launchpad: allow 'Report' parent service
... for the mouse pointer shape report in Qt applications launched by 'qt_launchpad'

Issue #2586
2017-11-30 11:23:22 +01:00
Christian Prochaska
425d18e866 pointer: strip the last label element when matching labels
Issue #2585
2017-11-30 11:23:22 +01:00
Christian Prochaska
72dec21d8f pointer: fix visibility flag handling
Issue #2585
2017-11-30 11:23:22 +01:00
Christian Prochaska
dd98bd67a0 pointer: custom pointer shape support
Make the revised 'vbox_pointer' component the new 'pointer' component.

Fixes #2585
2017-11-30 11:23:22 +01:00
Christian Prochaska
18993b5ede vbox_pointer: make shape support configurable
Have the 'Report' session announcement and "hover" and "xray" ROM requests
only when needed when 'vbox_pointer' becomes the new 'pointer'.

Issue #2585
2017-11-30 11:23:21 +01:00
Christian Prochaska
78b38cd65b vbox_pointer: provide a 'Report' service for shape reports
Issue #2585
2017-11-30 11:23:21 +01:00
Christian Prochaska
5099d00eb3 vbox_pointer: use RGBA encoding in shape report
RGBA is more likely to be supported by new clients than VirtualBox's BGRA encoding.

Issue #2585
2017-11-30 11:23:21 +01:00
Christian Helmuth
f710e10206 fs_rom: log permission-denied errors 2017-11-30 11:23:21 +01:00
Christian Helmuth
0923ea5bea lib/vfs/rump: safely destroy dir and file handles 2017-11-30 11:23:21 +01:00
Christian Helmuth
1556300ea6 vfs: close directory handle in node destructor 2017-11-30 11:23:21 +01:00
Stefan Kalkowski
d1e0e460a1 hw: de-reference deleted kernel objects
Fix #2591
2017-11-30 11:23:20 +01:00
Alexander Boettcher
f68be31fa3 usb_hid.run: filter_out messages from core 2017-11-30 11:23:20 +01:00
Alexander Boettcher
154c16753c vbox*.run: apply win81 test heuristic to win10 2017-11-30 11:23:20 +01:00
Martin Stein
3d12e7b242 timeout x86_64 sel4: do not expect a precise time
On x86 64 bit with SeL4, the test needs around 80MB that must be
completely composed of 4KB-pages due to current limitations of the SeL4
port. Thus, Core must flush the page table caches pretty often during
the test which is an expensive high-prior operation and makes it
impossible to provide a highly precise time.
2017-11-30 11:23:20 +01:00
Martin Stein
99ddaaa9d7 timer epit: fix multi-wraps and bug in rate limit
Multi-wraps
-----------

Previously, on every new timeout, we programmed registers LR=timeout and
CMP=0. The counter than counted from LR down to 0, triggered the IRQ,
jumped back to LR, and counted down again. If one installed small
timeouts (< 1000 us), it was likely that the counter wrapped multiple
times before we were able to read it out. Initially, this was not a big
issue as the additional wraps were simply ignored and the amount of time
lost through this was not big. But when we want to do correct rate
limitation, multiple wraps cause an overflow in the additional
calculations, and this has a big effect on the resulting time value.

Thus, we now program the counter to start from ~0 and count down to 0.
We set CMP=~0-timeout so that the timer still triggers the IRQ at the right
time. The counter continues counting down after the IRQ has triggered until
we install a new timeout. We do not consider anymore that the counter wraps.
The maximum timeout is set to half the maximum counter value, so, we should
be able to install a new timeout before the counter wraps.

Rate limit for time updates
---------------------------

In the time span between two interrupts we have to remember how many ticks
we have already added to the time value. This is because at each call of
curr_time we can only see how many ticks have passed since the last call of
schedule_timeout and not since the last call of curr_time. But we want to
limit the rate of time updates in curr_time. With the member for ticks that
were already added since the last call to schedule_timeout we can then
calculate how many are yet to be added.
2017-11-30 11:23:20 +01:00
Alexander Boettcher
dbf7588a76 netperf: increase caps for sel4 x86_64 2017-11-30 11:23:20 +01:00
Sebastian Sumpf
38abfc79f5 rump: reduce size of rump
* integrate rump's contrib code into Genode's build system and build what is
  required by Genode, only
* checkout needed NetBSD sources directly from CVS

fixes #2589
2017-11-30 11:23:19 +01:00
Christian Prochaska
15a5db61c8 Reduce number of write-read rounds on Qemu in libc fs tests 2017-11-30 11:23:19 +01:00
Christian Prochaska
e6a638e78c gdb_monitor: increase RAM quota in run scripts 2017-11-30 11:23:19 +01:00
Alexander Boettcher
057749a3a9 timeout.run: avoid variation caused by log message 2017-11-30 11:23:18 +01:00
Christian Helmuth
d5518aa938 lib/vfs/lxip: support configuration of MTU
The MTU can be set via the "mtu" attribute like follows.

  <vfs> <lxip mtu="1200" dhcp="yes"/> </vfs>
2017-11-30 11:23:18 +01:00
Martin Stein
96fa3ef28c cpu_quota.run: be more tolerant on QEMU in general
As we may run several tests on the same CPU in paralell,
we have to consider more inconsistency in timing.
2017-11-30 11:23:18 +01:00
Martin Stein
adfb1a77e2 timer/epit: remove unused code
* use correct/more modern types
* get rid of old code that was for the public use of the EPIT backend
* merge Epit_base into Time_source
2017-11-30 11:23:18 +01:00
Alexander Boettcher
c9bcce57e8 timer/epit: limit timeout rate
Limit rate to 1000 per second as it raises the throughput under stress
significantly without having an effect on the tested accuracy.

Issue #2579
2017-11-30 11:23:18 +01:00
Alexander Boettcher
c63fe241f4 run: disable wifi netperf on non-ACPI 32bit kernel 2017-11-30 11:23:17 +01:00
Alexander Boettcher
4761826843 sel4: change a error message into warning
This condition is non-fatal in the most cases, so leave it as a
diagnostic message.
2017-11-30 11:23:17 +01:00
Christian Helmuth
64c8b06377 dde_linux: fix mod_delayed_work(delay)
'delay' is a relative timeout while mod_timer() needs an absolute point
in time.
2017-11-30 11:23:17 +01:00
Christian Helmuth
2b649cb633 libc: handle socket_fs special cases
- catch inaccessible file on bind()
- support UDP ENETDOWN and TCP EAGAIN on sendto()
2017-11-30 11:23:17 +01:00
Christian Helmuth
73a3ef4dbe lib/vfs/lxip: stack info (nameserver etc.) in test 2017-11-30 11:23:17 +01:00
Martin Stein
ea76b08f9f lib/vfs/lxip: provide nic link state in a file 2017-11-30 11:23:17 +01:00
Josef Söntgen
ad3ec34690 avplay: limit requested video-mode
In case the video geometry (WxH) is larger than the current size of
the framebuffer, match its size and let libav do the scaling. This
enables the playback of 1080p movies on smaller screens.

Issue #2583.
2017-11-30 11:23:16 +01:00
Josef Söntgen
d57ebae6a0 test/sdl: handle resizing
Issue #2583.
2017-11-30 11:23:16 +01:00
Josef Söntgen
af1c965831 sdl: forcefully disable double-buffering
Issue #2583.
2017-11-30 11:23:16 +01:00
Josef Söntgen
6ca8f4c174 sdl: remove deprecated API usage
In addition framebuffer resizing is now also supported.

Fixes #2583.
2017-11-30 11:23:16 +01:00
Josef Söntgen
86c1f65dfe pthread: implement stacksize attribute
Issue #2583.
2017-11-30 11:23:15 +01:00
Norman Feske
f36bc80bd7 driver_manager-pc: numlock handling
This patch incorporates key remapping rules for the input filter that
depend on the global numlock state.
2017-11-30 11:23:15 +01:00
Norman Feske
3ea960932e input_filter: support <include> in <remap> nodes 2017-11-30 11:23:15 +01:00
Norman Feske
e204b9532b rom_filter: allow use of input as attribute value 2017-11-30 11:23:15 +01:00
Norman Feske
1514667b42 demo.run: showcase the use of 'nit_focus' 2017-11-30 11:23:15 +01:00
Norman Feske
f94f96c3ee nit_focus component that implements click-to-focus 2017-11-30 11:23:15 +01:00
Norman Feske
b05ad847b9 nitpicker: equip hover report with 'active' info
This patch supplements the existing 'hover' report with the information
whether or not the user has recently moved the pointer. This works
analogously to how the 'focus' report features the information about
recent button/keyboard activity.

Together, the 'hover' and 'focus' reports may be combined to observe
prolonged user inactivity, e.g. to activate a lock screen.
2017-11-30 11:23:14 +01:00
Norman Feske
544274feb9 nitpicker: respond to external focus policy
This patch enables nitpicker to use an external focus policy instead of
the traditional builtin click-to-focus policy. The external focus policy
is obtained from a 'focus' ROM. The focus ROM is expected to have a
'label' attribute with the value set to the label of the to-be focused
client.
2017-11-30 11:23:14 +01:00
Norman Feske
7ca56a62fd nitpicker: report last clicked-on client
The new report can be activated via the 'clicked' attribute of the
'<report>' configuration node.
2017-11-30 11:23:14 +01:00
Norman Feske
82e2900aa7 nitpicker: re-organize implementation
This patch revises the implementation of nitpicker in the following
respects:

- Split the implementation into smaller files,
- Consistently use the 'Nitpicker' namespace,
- Avoid the use of format strings,
- Retire old (and hackish) debug mode,
- Removal of unused timer connection,
- Merging 'Session' into 'Session_component',
- Merging 'Mode' into 'User_state',
- Adding the notions of 'View_owner' and 'Focus' as interfaces,
- Untangle 'User_state' and 'View_stack'
2017-11-30 11:23:14 +01:00
Norman Feske
40c9226bb9 os: add Color::print, enhance ascii_to<Color>
This patch adds a 'Color::print' method as counterpart to the 'ascii_to'
function. If the color is opaque (alpha is 255), its output has the form
"#rrggbb". If the color has a distinct alpha value, the output has the
form "#rrggbbaa". The new version of the 'ascii_to' overload for 'Color'
is able to deal with both forms.
2017-11-30 11:23:14 +01:00
Alexander Boettcher
0a5dcc86ed platform_drv: separate acpi and system feature 2017-11-30 11:23:14 +01:00
Alexander Boettcher
0b09cc8cf6 driver_manager: improve fb-driver selection
This is a follup-up commit for "driver_manager: add fb_boot_drv
support". It refines the heuristics for selecting the most suitable
framebuffer driver be prevent boot_fb_drv from being preferred over
the VESA driver when running in Qemu.
2017-11-30 11:23:13 +01:00
Sebastian Sumpf
9d0518661b usb: remove warning in 'find_next_zero_bit_le'
in case no zero bit is found.
2017-11-30 11:23:13 +01:00
Sebastian Sumpf
b8eae11356 qemu-usb: device updates 2017-11-30 11:23:13 +01:00
Norman Feske
c41a9e6a21 drivers_managed-pc: support audio, acpica 2017-11-30 11:23:13 +01:00
Norman Feske
4e115a7de2 acpica: request 'Acpi' only if 'acpi_ready="yes"'
The synchronization with the ACPI driver is not needed when starting
acpica at a later stage. It could already be disabled via the
'acpi_ready="yes"' config attribute. However, acpica still
unconditionally requests the so-called "Acpi" service, which is an
alias for the platform_drv's "Platform" service. This patch disables the
use of this alias when the 'acpi_ready' synchronization is disabled.
2017-11-30 11:23:13 +01:00
Norman Feske
72f2ea349d init: forward RAM/cap quota session errors
This patch supplements init's service-forwarding mechanism to propagate
the insufficient RAM/cap quota conditions from the server to the client.
Without it, the client's session request stays pending infinitely.
2017-11-30 11:23:13 +01:00
Norman Feske
44977e3519 base: increase initial stack size on x86_64 2017-11-30 11:23:12 +01:00
Norman Feske
9b09f0e2cb depot: recipe for src/acpica 2017-11-30 11:23:12 +01:00
Norman Feske
b7eb5d94f2 acpica: remove debug version
The debug version comes with an unwelcome libc dependency, which is
solely needed for the formatted output of error messages. Since the
distinction between the regular and the debug versions remained unused
in practice, this patch removes the debug version.
2017-11-30 11:23:12 +01:00
Norman Feske
cda71e198f init: limit rate of periodic reports by 'delay_ms'
This is a follow-up patch to "init: periodic state updates if sensible".
In situations where the report rate is deliberately limited via the
'delay_ms' attribute while also reporting child-resource stats, we don't
want generate reports at a fixed rate of one second. This patch limits
the rate according to the 'delay_ms' value.
2017-11-30 11:23:12 +01:00
Norman Feske
d2c7cfa5fa input_filter: avoid closing input sessions
The input filter used to temporarily close all input sessions upon its
reconfiguration. In most cases, the same set of sessions is
re-established immediately afterwards. However, at the server (driver)
side, the closing of the session implicitly disables the input-event
queue. Hence events generated by the hardware while the session is
closed are dropped. This becomes a noticeable problem when using the
recently added <rom> modifier feature for handling capslock. The change
of the ROM always triggers the re-configuration of the input filter.
When pressing capslock and other keys at a high rate, press/release
events may get lost.

This patch solves this problem by maintaining all input sessions that
are defined in both the old and new configuration. It thereby removes
the short duration where the input event queues are temporarily disabled
at the drivers.
2017-11-30 11:23:12 +01:00
Norman Feske
c05ab9c310 drivers_managed-pc: propagate keyboard LEDs
This patch supplements the drivers subsystem with the ability to
propagate the global capslock and numlock states to PS/2 and USB HID
keyboards.
2017-11-30 11:23:12 +01:00
Sebastian Sumpf
fe4f304815 usb: LED suppport 2017-11-30 11:23:11 +01:00
Christian Helmuth
12461291b8 Draw frame in framebuffer test
Issue #2555
2017-11-30 11:23:11 +01:00
Christian Helmuth
4112037c0c hw: fix building usb_armory
This removes cpu_trustzone.cc (which was removed in
d6a05245f2) from the build dependencies.

Issue #2540
2017-11-30 11:23:11 +01:00
Alexander Boettcher
19fe5da9be core: use separate signal ep
Fixes #2584
2017-11-30 11:23:11 +01:00
Alexander Boettcher
8bc4389411 core: support to serve signals by another ep
Issue #2584
2017-11-30 11:23:11 +01:00
Martin Stein
d37f32fb21 nic_router.run: raise timeouts for sel4+qemu 2017-11-30 11:23:11 +01:00
Christian Prochaska
c6718677b2 vbox_pointer: fix visibility flag handling
Fixes #2580
2017-11-30 11:23:10 +01:00
Alexander Boettcher
5e4b523357 top: increase number of supported trace subjects
and print error if it may not be enough.
2017-11-30 11:23:10 +01:00
Sebastian Sumpf
9c852c750a vfs: handle root directory explicitly
This makes '/' and the actual root of VFS distinguishable. A VFS root
may contain one ore more '/' entries for each file system. 'opendir' for
the VFS root opens all file systems via 'open_composite_dir', while
'opendir' for '/' only returns a VFS handle.

Fixes #2569
2017-11-30 11:23:10 +01:00
Christian Helmuth
66d5954fc5 Adapt stack size of threads in signal test
This fixes the warning "small stack of 3996 bytes [...] may break Linux
signal handling" on 32-bit base-linux.
2017-11-30 11:23:10 +01:00
Emery Hemingway
0de751a1c9 Rename app/mupdf to app/pdf_view, create depot recipes
The name 'mupdf' is both the name of a library and a component, thus
preventing a depot recipes for both the shared library and component.

Fix #2582
2017-11-30 11:23:10 +01:00
Christian Helmuth
18fcbbe1a1 depot: support path names including spaces
Related to #2582
2017-11-30 11:23:09 +01:00
Alexander Boettcher
858f5732ba hw: add mbi2 framebuffer support
Issue #2555
2017-11-30 11:23:09 +01:00
Alexander Boettcher
e1ac124a4d hw: evaluate also ACPI RSDP v1 with MBI2
Issue #2526
2017-11-30 11:23:09 +01:00
Alexander Boettcher
2b6ae514b5 sel4: add mbi2 framebuffer support
Issue #2555
2017-11-30 11:23:09 +01:00
Martin Stein
e87f63944f timeout: replace Duration operators by methods
void += (Microseconds) -> void add(Microseconds)
void += (Milliseconds) -> void add(Milliseconds)
bool < (Duration)      -> bool less_than(Duration)

Issue #2581
2017-11-30 11:23:09 +01:00
Martin Stein
26bcd439f7 timeout: fix bug in duration + duration testing
The += operator contained bugs. We now also do some tests on the Duration
type at the beginning of the timeout test.

Fixes #2581
2017-11-30 11:23:09 +01:00
Martin Stein
5d39acd3c3 timer: clamp one-shot timeouts to avoid overflow
Issue #2579
2017-11-30 11:23:08 +01:00
Alexander Boettcher
f3dafbf5a6 nova: limit timeout rate in nova_timer_drv
Issue #2579
2017-11-30 11:23:08 +01:00
Alexander Boettcher
59f97802a9 timer.run: provide more information if test fails
Issue #2579
2017-11-30 11:23:08 +01:00
Alexander Boettcher
80778b267d timer: read PIT timer solely after interrupt
Stop gap solution until #2579 gets resolved.
2017-11-30 11:23:08 +01:00
Alexander Boettcher
2ba5f8f4f3 timer framework: use Time_source::curr_time()
Issue #2579
2017-11-30 11:23:08 +01:00
Norman Feske
e8db9bda9a libports: fix download location of fribidi
Apparently, fribidi.org is no more and just points to the GitHub project
now.
2017-11-30 11:23:07 +01:00
Alexander Boettcher
f4aff87e25 make _timer_ticks_to_us 64bit safe
fixes PIT running to fast on seL4 x86_64
2017-11-30 11:23:07 +01:00
Norman Feske
a255ffaee9 input: disarm obnoxious press/release events
This patch adds a sanity check to the Event::type accessor. If the key
code of a given PRESS or RELEASE event is out of the valid range, it
reports an INVALID event. This way, client side code does not need to
deal with such edge cases. E.g., on Lenovo notebooks, the ps2 driver
reports strange key events when pressing shift-pageup/pagedown,
violating the general assumption that there is a release event for each
press event. By flagging these events as INVALID, the client-side logic
stays intact.
2017-11-30 11:23:07 +01:00
Norman Feske
f2a5648deb ps2_drv: respond to dynamic reconfiguration 2017-11-30 11:23:07 +01:00
Josef Söntgen
b3b10c1439 dde_linux: create wifi recipe 2017-11-30 11:23:07 +01:00
Josef Söntgen
5a5af878f7 libports: create vfs_jitterentropy recipe 2017-11-30 11:23:07 +01:00
Josef Söntgen
c364c4de2a libports: create libssl recipe 2017-11-30 11:23:07 +01:00
Josef Söntgen
a6b4812b78 libports: create libcrypto recipe 2017-11-30 11:23:06 +01:00
Josef Söntgen
f32344138f openssl: patch source relative paths in SSL 2017-11-30 11:23:06 +01:00
Josef Söntgen
987ec9d371 os: create recipe for mixer 2017-11-30 11:23:06 +01:00
Josef Söntgen
3988d6cde2 dde_bsd: create recipe for audio_drv 2017-11-30 11:23:06 +01:00
Alexander Boettcher
7d54d1da0c sel4: enable support for direct unmap in core
Issue #2563
2017-11-30 11:23:06 +01:00
Emery Hemingway
caba2d3021 Enforce use of a custom Nim compiler
Use a custom Nim compiler at '/usr/local/genode-nim' that can be built
with a makefile at 'tool/tool_chain_nim'.

Fix #2545
2017-11-30 11:23:06 +01:00
Alexander Boettcher
990b7945a7 sel4: use kernel branch 7.0 + our mastered commits
for uefi, multiboot2, benchmark interface adaptations and ARM define build
fixes.

Issue #2562
2017-11-30 11:23:05 +01:00
Alexander Boettcher
9c6de44f98 core: use core mem allocator in Pd_session
Fixes #2563
2017-11-30 11:23:05 +01:00
Christian Prochaska
365bec38a0 gdb_monitor: handle session requests for child services
Fixes #2574
2017-11-30 11:23:05 +01:00
Christian Prochaska
41b3d3abc1 init: make 'Server' class usable by external components
Issue #2574
2017-11-30 11:23:05 +01:00
Josef Söntgen
a110fef4d9 libports: initial e2fsck port
In contrast to the already available e2fsprogs port, this one does not
depend on Noux.

Issue #2558.
2017-11-30 11:23:05 +01:00
Josef Söntgen
84e0ffe7cb rump_fs: try to mount the fs on startup
By now the file system gets mounted and unmounted on demand (whenever
the first clients comes along and whenever the last client leaves).
As a precaution we now also try to mount and unmounted the file system
in the init phase to prevent the first client from failing to its own
surprise.

Issue #2558.
2017-11-30 11:23:05 +01:00
Josef Söntgen
f2d063be07 rump_fs: add support for session (un-)mounting
Issue #2558.
2017-11-30 11:23:05 +01:00
Josef Söntgen
616352b840 rump_fs: disable access time updates
Mount all file system with 'noatime' option because it is hardly useful
if there is no proper base period.

Issue #2558.
2017-11-30 11:23:04 +01:00
Josef Söntgen
adb00d329f rom_filter: copy input node content to output node
Add suppport for copying the content of an 'input' node to the 'output'
node.

Issue #2558.
2017-11-30 11:23:04 +01:00
Josef Söntgen
f9c2e0e21c lx_block: add file based Block driver for Linux
Issue #2558.
2017-11-30 11:23:04 +01:00
Alexander Boettcher
9646c17f2e bender: fix free memory calculation for Multiboot2
Fixes #2487
2017-11-30 11:23:04 +01:00
Emery Hemingway
de5c0603f1 platform_drv: account session capabilities with a Cap_quota_guard
The platform driver is a critical component and must not allow sessions
to deplete its own resource quotas.

Fix #2576
2017-11-30 11:23:04 +01:00
Emery Hemingway
0b60b8954b app/backdrop: use 'with_libc'
Fix #2577
2017-11-30 11:23:04 +01:00
Christian Helmuth
44a43aa060 libc: generate nsparser.h in build directory 2017-11-30 11:23:03 +01:00
Christian Helmuth
c76faff7d4 ncurses: remove absolute path from generated source
This is for a stable source-package hash.
2017-11-30 11:23:03 +01:00
Martin Stein
054b8de67b tool/run/grub2: user-friendly missing message
Ref #2526
2017-11-30 11:23:03 +01:00
Martin Stein
f831800ae0 test/lxip/udp_client: remove because not used
Was once introduced it for the NIC router/dump tests which do not use it
anymore.

Fix #2543
2017-11-30 11:23:03 +01:00
Martin Stein
9e888df3c9 nic_dump/router.run: share nic_router.inc
Move common stuff from both scripts to the new include file.

Ref #2543
2017-11-30 11:23:03 +01:00
Martin Stein
657fa16f8c nic_router: use LwIP- instead of LxIP UDP-tests
Currently, LxIP peers need a lot of RAM (the simple test-client/server for the
nic_router test need at least 28 MB per component). As the nic_router test
previously used 6 instances of such components and a lot of other components,
it had issues with insufficient RAM on some platforms. By using two new
LwIP-based UDP tests instead, we save more than 100 MB.

Ref #2543
2017-11-30 11:23:03 +01:00
Martin Stein
f6dd1f9b9c tool/depot: user-friendly error on missing port
In general, make the message conform to the according message of the
common build system. Adds instruction how to fix the missing/outdated
port.

Fixes #2573
2017-11-30 11:23:03 +01:00
Martijn Verschoor
55a014acbc dde_linux wifi: firmware for Intel Wireless 3160
Fixes #2572
2017-11-30 11:23:02 +01:00
Martin Stein
8e80c05be7 signal: organize signal contexts as ring list
Ref #2532
2017-11-30 11:23:02 +01:00
Emery Hemingway
07b36573ea Restrict VFS Dir_filesystem allocations to 'opendir' only
Allocations made at the client-side of the VFS must be contained within
functions that may return errors indicating resource exhaustion.

Fix #2569
2017-11-30 11:23:02 +01:00
Emery Hemingway
a0c0f3d7c9 Print support for VFS errors
Ref #2569
2017-11-30 11:23:02 +01:00
Emery Hemingway
c9f4b455c5 vfs_rump: use inode values provided by rump
Ref #2569
2017-11-30 11:23:02 +01:00
Emery Hemingway
ca0c86e7af Enforce cap quotas at VFS server, increase initial File_system cap donation
Check at the VFS server that the capability cost of sessions do not
exceed the session quota donation. Raise the default initial capability
donation for File_system connections.

Fix #2553
2017-11-30 11:23:02 +01:00
Stefan Kalkowski
83a88d46b7 dde_linux: remove timer optimization
Instead of storing whether the first item in the timeout list was already
programmed using the timer service, just program the first timeout in the
list unconditionally. In the past we lost a timeout at least when using the
usb ethernet driver on hw/arndale sporadically.
2017-11-30 11:23:01 +01:00
Alexander Boettcher
44adc3c404 tool: use grub2 instead of grub1 for iso boot
Fixes #2526
2017-11-30 11:23:01 +01:00
Alexander Boettcher
7ff6e96623 base: avoid pagefault if session creation failed 2017-11-24 09:07:32 +01:00
Alexander Boettcher
e54ad5c73a vbox: support capslock state provided by ROM
Fixes #2568
2017-11-24 09:07:31 +01:00
Alexander Boettcher
86f269feba nova: update kernel to fix sporadic hangs
Fixes #2571
2017-11-24 09:02:04 +01:00
Alexander Boettcher
1e04836a6d nova: read out tsc freq of some more Intel CPUs
instead of measuring the frequency. Avoids inaccuracy which leads to failing
tests on Genode regarding timing.

Fixes #2566
2017-11-24 09:02:04 +01:00
Alexander Boettcher
9672329772 fb_boot_drv: evaluate fb pitch
Fixes #2555
2017-11-24 09:02:04 +01:00
Alexander Boettcher
bf3c57511b nova: add support for boot fb pitch
Issue #2555
2017-11-24 09:02:04 +01:00
Martin Stein
411601ebd1 input_filter: add missing virtual Source::~Source
Previously the destructors of classes derived from Source were not
called when destructing a Source because Source missed the declaration
of a virtual destructor. This caused at least problems when
reconstructing a Chargen_source with its Chargen_repeater that includes
a One_shot_timeout. In this case, the members of the Alarm behind the
timeout were not reset and the next time beeing used the Alarm appeared
to be still active which wasn't true.

Fixes #2570
2017-11-24 09:02:03 +01:00
Christian Helmuth
b1c9db8a0d libc: dispatch pending signals at selective points 2017-11-24 09:02:03 +01:00
Christian Helmuth
491be000ca depot: update recipe hashes 2017-11-09 12:19:59 +01:00
Stefan Kalkowski
d164cbac8c hw: do not change x86 paging attributes on fly
Instead of changing the attributes (e.g., Xd bit) of the top-level page-tables,
set them to allow everything. Only leafs of the paging hierarchy are set
according to the paging attributes given by core. Otherwise, top-level page-
table attributes are changed during lifetime, which requires a TLB flush
operation (not intended in the semantic of the kernel/core).
This led to problems when using the non-executable features introduced by
issue #1723 in the recent past.
2017-11-09 12:18:44 +01:00
Stefan Kalkowski
c365918b82 noux: attach linker area as executable area
Thanks to cproc for the investigation.

Ref #1938
Ref #1723
2017-11-09 12:18:44 +01:00
Stefan Kalkowski
01698233fd foc: use kernel with correct cache flush (arndale)
Thanks to ssumpf for finding the regression!
2017-11-09 12:18:44 +01:00
Norman Feske
a63afe53ae sel4: check for python module "six" 2017-11-09 12:18:43 +01:00
Norman Feske
3b0899aae1 drivers_interactive-pc: apply mouse acceleration 2017-11-09 12:18:43 +01:00
Norman Feske
26d4753a3c input_filter: accelerate relative motion events 2017-11-09 12:18:43 +01:00
Norman Feske
55dc3abf00 Move gems/bezier.h to util/bezier.h (in repos/os)
This way, os components (i.e., input_filter) can use it for nonlinear
interpolation.
2017-11-09 12:18:43 +01:00
Norman Feske
0126523b83 bash: remove dependency from ld
The dependency was added as a supposed work-around of a dysfunctional
fork when building bash as depot archive. However, it turned out that
the actual problem was related to the timestamps of 3rd-party source
file, which were discarded by the recipes/src/bash/content.mk.
2017-11-09 12:18:43 +01:00
Norman Feske
bd18152d32 depot: preserve timestamps in src/bash 2017-11-09 12:18:43 +01:00
Stefan Kalkowski
593fe2a571 driver_manager: hand out USB serial sessions too 2017-11-09 12:18:42 +01:00
Norman Feske
ece48d7df5 drivers_interactive-pc: emulate scroll wheel 2017-11-09 12:18:42 +01:00
Norman Feske
a6b29530e8 input_filter: scroll-wheel emulation
The new '<button-scroll>' filter generates artificial wheel events from
relative motion events when the user holds a magic button.
2017-11-09 12:18:42 +01:00
Norman Feske
7b4ef66d91 nitpicker: update focus report after reconfig
A new configuration may implicitly change the domain color of the
currently focused session. We need to refresh the report to trigger an
update of the status bar.
2017-11-09 12:18:42 +01:00
Norman Feske
27c9e5c6e8 os: generalize xray trigger component
This commit replaces the old xray_trigger component by a new component
called global_keys_handler. For details, please refer to the issue text
and the accompanied README file.

Fixes #2554
2017-11-09 12:18:42 +01:00
Sebastian Sumpf
0b4b2b2fb2 depot: recipe for src/ipxe_nic_drv (dde_ipxe) 2017-11-09 12:18:42 +01:00
Alexander Boettcher
aec97b7da0 driver_manager: add fb_boot_drv support 2017-11-09 12:18:41 +01:00
Alexander Boettcher
13690ec898 package boot_fb_drv 2017-11-09 12:18:41 +01:00
Norman Feske
2b632760b6 driver manager: increase RAM quota for usb_drv
Without this patch, usb_drv would issue a resource request when
assigning a USB device to a VM in the sculpt scenario.

Furthermore, the patch adjusts the intel_fb quota to enable it on
devices where the driver allocates the framebuffer in many 4K pieces.
2017-11-09 12:18:41 +01:00
Josef Söntgen
bc6f523c8d wifi: initialize 'struct device' member properly
Normally this is done in 'platform_device_add()' but let's do it in
our 'platform_device_register_simple()' implementation.
2017-11-09 12:18:41 +01:00
Norman Feske
96351801c9 wifi_drv: implement vzalloc
This function is called by the rarely executed error handling code
(iwl_mvm_fw_error_dump) of wifi.lib.so.
2017-11-09 12:18:41 +01:00
Alexander Boettcher
804fb4e10d update recipe drivers_interactive-pc for hardware
fails on native hardware because of missing caps and missing configuration
of the drivers subinit
2017-11-09 12:18:41 +01:00
Christian Helmuth
8b05deba13 rump: remove .git directories from src recipe
This spares us about 200M but still leaves us with 600M.
2017-11-09 12:18:40 +01:00
Johannes Kliemann
6cbf54aefb qt5: example of qtvirtualkeyboard
Fixes #2496
2017-11-09 12:18:40 +01:00
Johannes Kliemann
b0187ddc28 qt5: setup QPlatformInputContext on nitpicker
Issue #2496
Fixes #2495
2017-11-09 12:18:40 +01:00
Alexander Senier
520eedb829 libc: Signal ELOOP if file not found and O_NOFOLLOW set 2017-11-09 12:18:40 +01:00
Alexander Senier
66f3742112 dde_linux/usb: Support HTC device in RNDIS test
Fixes #2550
2017-11-09 12:18:40 +01:00
Alexander Senier
77010d6434 dde_linux/usb: Don't treat trimming SKB to current len as error
The rndis_host driver calls skb_trim with the current SKB length which
results in many "errors" logged. We shouldn't treat this condition
as an error.
2017-11-09 12:18:39 +01:00
Alexander Senier
f15e8fec8f dde_linux/usb: Add RNDIS driver 2017-11-09 12:18:39 +01:00
Alexander Senier
50ec5c03c1 dde_linux/usb: Support CDC Ethernet 2017-11-09 12:18:39 +01:00
Alexander Senier
6d69f946a8 dde_linux/usb: Do not unset carrier flag in register_netdev
Linux does not do that in register_netdev() either. Some drivers set the
carrier flags on attach and never reenable it (as seen with rndis_host).
Consequently, the usbnet driver refuses to receive data as it checks the
carrier state before enqueuing new SKBs to its receive queue.

Apart from rndis_host, this change was tested with an ax88179_178a
device which worked as expected.
2017-11-09 12:18:06 +01:00
Alexander Senier
aa0f13fba5 dde_linux/usb: Initialize head pointer of SKB 2017-11-09 12:18:06 +01:00
Emery Hemingway
97c5e21ed6 server/vfs: do not append '/' to directory paths
Fix #2544
2017-11-09 12:18:05 +01:00
Alexander Boettcher
c1493b2ed2 usb: avoid pagefault during session destruction
due to pointer to object allocated in context of the session object.

Fixes #2565
2017-11-09 12:18:05 +01:00
Alexander Boettcher
03ae78173b platform_drv: free up dataspaces on session close
Fixes #2564
2017-11-09 12:18:05 +01:00
Norman Feske
4eebd140b0 nitpicker: report current key state
Fixes #2552
2017-11-09 12:18:05 +01:00
Christian Prochaska
547cc06976 ram_fs: throw exception when unlinked node gets accessed
Fixes #2536
2017-11-09 12:18:05 +01:00
Christian Helmuth
30948a4b0d depot: update recipe hashes 2017-11-06 13:57:25 +01:00
Christian Prochaska
e6b7e1f6e1 vbox5: fix substring calculation for VM files in root directory
Fixes #2561
2017-11-06 13:57:25 +01:00
Christian Helmuth
65b2e63bb9 Ensure stable sorting order in tools
This eliminates certain surprises with port contents and depot hashes.
2017-11-06 13:57:25 +01:00
Alexander Boettcher
0f6afa3d89 dde_ipxe: enable Intel I219-LM PCI-ID
lenovo t460p
2017-11-06 13:57:25 +01:00
Josef Söntgen
eae0445cd8 init: generate a state report when children exit
Whenever a childs is terminated the exit value is propagate through a
new state report. Thereby it becomes possibly for a managing component
to react upon the terminating condition of a child.

Issue #2558.
2017-11-06 13:57:24 +01:00
Josef Söntgen
3b5a34c163 libc: fix DIOCGMEDIASIZE handling in VFS plugin
Use the provided argp pointer to store the result but bail out early if
it points into the void.

Issue #2558.
2017-11-06 13:57:24 +01:00
Josef Söntgen
2f32308c0b wifi_drv: use task for sending frames
Until now the client called the Linux code directly through the EP
when sending ethernet frames and was not part of the driver's internal
task scheduling. This will lead to problems if the sending code needs
to grab a lock as those depend on running from within a Lx::Task.
Although this has only happend recently when using 8260 devices, this
is an issue that needs to be fix.

This commit addresses the issue by using a dedicated transmit task
in whose context the Linux code sends the ethernet frame or rather
newly allocated skb.

Fixes #2559.
2017-11-06 13:57:24 +01:00
Josef Söntgen
bb95121ee5 wifi_drv: remove unnecessary debug message
AFAICT, we do the right thing by calling 'consume_skb()'.

Issue #2559.
2017-11-06 13:57:24 +01:00
Martin Stein
94f4e2a276 os/recipes: nic_router
Fixes #2560
2017-11-06 13:57:24 +01:00
Martin Stein
b2ea164c76 nic_router: fix bugs in DHCP client functionality
Ref #2560
2017-11-06 13:57:24 +01:00
Martin Stein
db6a2419f2 nic_dump: fix bug in packet log
Ref #2560
2017-11-06 13:57:24 +01:00
Christian Helmuth
1b4128d3d9 Adapt sub_rm test to current Linux 32-bit
As noted above the former enum for the local-attachment address we
discovered address clashes on current Linux installations, esp. 32-bit
runtime on 64-bit Linux. The local_attach_addr is now configurable in
the run script and the memory maps heuristics were removed.
2017-11-06 13:57:23 +01:00
Christian Helmuth
b0683a5acf Increase test RAM quotas for sel4 64-bit 2017-11-06 13:57:23 +01:00
Christian Helmuth
d67db5cd74 Increase timeouts for some tests on Qemu 2017-11-06 13:57:23 +01:00
Stefan Kalkowski
b6b775cd60 depot: recipe for grep
Issue #2446
2017-11-06 13:57:23 +01:00
Stefan Kalkowski
61739de2f4 depot: recipe for pcre library
Issue #2446
2017-11-06 13:57:23 +01:00
Stefan Kalkowski
2116bcf733 depot: recipe for findutils
Issue #2446
2017-11-06 13:57:23 +01:00
Stefan Kalkowski
be4e34b6b5 hw: unify mmu fault handling
Recent work related to issue 1723 showed that there is potential
to get rid of code duplication in MMU fault handling especially
with regard to ARM cpus.
2017-11-06 13:57:22 +01:00
Stefan Kalkowski
7f5bec5c0d tool/run: link core with debug symbols optionally
If there is no debug/core-<kernel>.o library available, e.g., when
running a scenario in a fresh build directory where core is provided
via a depot package, the build_core_image step of the run tool was
canceled in the past, when trying to access the non-existing library.
This commit changes the semantic of build_core_image to link a core
binary with debug symbols only when the designated library is in place.

This fixup is related to issue #2339
2017-11-06 13:57:22 +01:00
Martin Stein
42b1eefe73 virtualbox_nic_router: two routers, all dynamic
Two nested NIC routers between virtualbox and the NIC driver.
Both routers are DHCP clients at the uplink and DHCP servers at the
downlink.

Ref #2534
2017-11-06 13:57:22 +01:00
Martin Stein
9d84d8b3bd nic_router: rename and move Ip_allocation
Rename Ip_allocation Dhcp_allocation and move it to dhcp_server.* .

Ref #2534
2017-11-06 13:57:22 +01:00
Martin Stein
127ceaccb5 nic_router: move Dhcp_server to extra header/unit
Ref #2534
2017-11-06 13:57:22 +01:00
Martin Stein
5e227f9ff1 nic_router: minor style fixes
Ref #2534
2017-11-06 13:57:22 +01:00
Martin Stein
db9d4d3a3c nic_router: DHCP client functionality
If the attribute 'interface' is not set in a 'domain' tag, the router tries to
dynamically receive and maintain an IP configuration for that domain by using
DHCP in the client role at all interfaces that connect to the domain. In the
DHCP discover phase, the router simply chooses the first DHCP offer that
arrives. So, no comparison of different DHCP offers is done. In the DHCP
request phase, the server is expected to provide an IP address, a gateway, a
subnet mask, and an IP lease time to the router. If anything substantial goes
wrong during a DHCP exchange, the router discards the outcome of the exchange
and goes back to the DHCP discover phase. At any time where there is no valid
IP configuration present at a domain, the domain does only act as DHCP client
and all other router functionality is disabled for the domain. A domain cannot
act as DHCP client and DHCP server at once. So, a 'domain' tag must either
have an 'interface' attribute or must not contain a 'dhcp-server' tag.

Ref #2534
2017-11-06 13:57:21 +01:00
Martin Stein
3560555acc nic_router: encapsulate IPv4 peer config in class
An IPv4 config (for a domain/interface of the router) consists of
an IPv4 address, a subnet prefix specifier, an optional gateway
IPv4 address, and some flags that declare whether these fields and
the config as a whole are valid. To make the handling of those
tightly connected values easier and less error prone, we encapsulate
them in a new class.

Ref #2534
2017-11-06 13:57:21 +01:00
Martin Stein
0ca248551a net: move Ipv4_address_prefix to nic_router
As this tool is not used by any other component make it local to the
NIC router to keep the net-lib interface small.

Ref #2534
2017-11-06 13:57:21 +01:00
Martin Stein
50aba6f21b dhcp: support reading of some further option types
Client ID, maximum message size, IP lease time, and requested address.
All needed for the upcoming DHCP client.

Ref #2534
2017-11-06 13:57:21 +01:00
Martin Stein
615878bb05 init: periodic state updates if sensible
Under certain circumstances we don't want inits state report to become too
outdated even if there is no change to its config or the sessions of its
children. This is the case if init is requested to provide a capability or RAM
info of it's children via its state report. Now, init automatically updates
the state report with each 1000 ms if the attribute 'child_caps' or
'child_ram' is positively set in the 'report' tag.
2017-11-06 13:57:21 +01:00
Sebastian Sumpf
3409eeeb34 wifi_drv: occasionally crashes during session destruction
Drop rx-packets in case there is no client session

fixes #2557
2017-11-06 13:57:21 +01:00
Christian Prochaska
f18e8a4553 vbox5: build 'RTPathAppend()' implementation
Fixes #2556
2017-11-06 13:57:20 +01:00
Norman Feske
189c5fa628 input_filter: improve capslock handling
Furthermore, the patch reduces the noise in the log produced by
false-positive error messages that are actually warnings.

Fixes #2548
2017-11-06 13:57:20 +01:00
Norman Feske
a0a7d5d165 ps2_drv: drive mode indicator LEDs
The new feature is demonstrated by the input.run script. It uses a
dynamic ROM service to toggle the keyboard LEDs at different intervals.

Fixes #2546
2017-11-06 13:57:20 +01:00
Stefan Kalkowski
d6a05245f2 hw: remove User_context
Fix #2540
2017-11-06 13:57:20 +01:00
Stefan Kalkowski
0635d5fffb hw: turn Cpu_idle into a Thread
Fix #2539
2017-11-06 13:57:20 +01:00
Stefan Kalkowski
84331ac0f7 hw: remove obsolete Kernel::Cpu_context
Due to the changes when fixing issue #2091 the Kernel::Cpu_context
became superfluent and is not used anymore.

Fix #2538
2017-11-06 13:57:20 +01:00
Alexander Boettcher
e532fc83b6 vbox5: use sched_yield instead of pthread_yield
Fixes #2551
2017-11-06 13:57:19 +01:00
Christian Helmuth
73f1fa9a1f ahci: log vendor/device IDs as hex 2017-11-06 13:57:19 +01:00
Christian Helmuth
ca172aa4fb fiasco: remove etc from depot recipe
The tools.conf in base-fiasco/etc was obsolete and must therefore not
packaged.

This commit removes sporadic recipe hash changes due to missing or
existent etc/tools.conf.
2017-11-06 13:57:19 +01:00
Alexander Boettcher
0ac6f6159e tool: add unscoped_label to xml schema 2017-11-06 13:57:19 +01:00
Alexander Boettcher
5e5c705fbc init_smp.run: limit spawned init's for x86_32 2017-11-06 13:57:19 +01:00
Martin Stein
2eef27fca4 timer test: raise tolerance at max trigger count
Timing itself costs time. Thus, the stressfull timeout phase of the
test is not exactly as long as set but a little bit longer. This is why the
fast timeouts are able to trigger more often than they are expected to
(the timer has a static timeout-rate limit). Normally we consider this effect
through an error tolerance of 10%. But at least on foc x86_32 (PIT with very
low max timeout), timing is so expensive that 10% is not enough. We have to
raise it to 11%.
2017-11-06 13:57:19 +01:00
Martin Stein
d4920eade4 timer.run: end test on uncaught exceptions 2017-11-06 13:57:18 +01:00
Norman Feske
3a350b65a3 init: handle Service_denied for forwarded sessions
This patch propages the 'Service_denied' condition of forwarded sessions
to the parent. Without it, the invalid session request stays pending
infinitely, which leads to the problem described in issue #2542. It
turns out that suggested solution given in the issue text is actually
not needed when applying this fix.

Fixes #2542
2017-11-06 13:57:18 +01:00
Norman Feske
1ccd9a2fdb rom_filter: expand target buffer on demand
The ROM filter did not handle the situation where the generated content
exceeds the size of the initially allocated dataspace for the target
buffer. This patch wraps the XML generation in a retry loop that
expands the buffer as needed.
2017-11-06 13:57:18 +01:00
Norman Feske
f3988a27d4 nit_fb: support 'origin' attribute
This patch makes the specification of screen coordinates more flexible.
First, the 'origin' attribute allows one to refer to either of the four
screen corners without knowing the screen size. Second, the 'width'
and 'height' values now accept negative values, which are relative to
the screen size.
2017-11-06 13:57:18 +01:00
Norman Feske
dd5b03671d os: don't limit file-systems-session upgrades
The 'File_system::Connection' already performs an on-demand session
upgrade should the server report an 'Out_of_caps' or 'Out_of_ram'
condition. So file-system clients are normally relieved from handling
those exceptions. However, the upgrade was limited to two attempts per
operation (which amounts to 16 KiB). When using the Rump VFS plugin in
the VFS server, this amount does not always suffice. So the exception is
reflected to the client. I observed this problem as a message "unhandled
error" printed by fs_rom. This patch removes the upgrade limit such that
a greedy file-system server becomes iteratively upgraded until it stops
arguing or the client's RAM is exhausted.
2017-11-06 13:57:18 +01:00
Alexander Boettcher
676d05b751 vbox: stop input processing if vm is powered down
avoids tons of red messages about the fact that vm is already down
2017-11-06 13:57:18 +01:00
Emery Hemingway
6aba4871a7 lib/vfs/lxip: allow missing nameserver configuration
Ref #2535
2017-11-06 13:57:17 +01:00
Christian Helmuth
88a3fda36a netty: check result of UDP sendto 2017-11-01 08:39:49 +01:00
Alexander Boettcher
26eb0ce794 nova: use kernel with enabled SMAP feature
Issue #1723
2017-11-01 08:39:49 +01:00
Alexander Boettcher
9655ebbefe sel4: enable nx bit handling for ARM
Issue #1723
2017-11-01 08:39:49 +01:00
Alexander Boettcher
4dd5e6b266 hw: enable nx bit handling for arm 2017-11-01 08:39:49 +01:00
Alexander Boettcher
aa1d5a7dd1 hw: enable nx bit handling for x86_64
Issue #1723
2017-11-01 08:39:48 +01:00
Alexander Boettcher
8ea584b1d2 foc: enable nx bit handling for x86_64 and arm
Issue #1723
2017-11-01 08:39:48 +01:00
Alexander Boettcher
f2c3225ab6 nova: enable nx bit handling for x86_64
Issue #1723
2017-11-01 08:39:48 +01:00
Alexander Boettcher
db329b02b5 base: enable executable memory fault handling
Fixes #1723
2017-11-01 08:39:48 +01:00
Alexander Boettcher
03b8e70d3f rm_fault: add fault test for exec access violation
Issue #1723
2017-10-20 11:45:21 +02:00
Alexander Boettcher
e3d9f41496 base: provide dst fault address for write fault
Issue #1723
2017-10-20 11:45:20 +02:00
Alexander Boettcher
d18262da1f libc: add mempool for rwx memory
Issue #1723
2017-10-20 11:45:20 +02:00
Alexander Boettcher
e87b322616 libc: support executable memory allocations
in internal memory allocator used by libc and vbox*

Issue #1723
2017-10-20 11:45:20 +02:00
Alexander Boettcher
dfa8b787be noux: attach executable memory as such
Issue #1723
2017-10-20 11:45:20 +02:00
Alexander Boettcher
e6dcdcf277 base: attach executable memory as such
- tracing policy

Issue #1723
2017-10-19 13:47:03 +02:00
Alexander Boettcher
c4c9e1fe7f vbox: attach executable memory as such
Issue #1723
2017-10-19 13:46:41 +02:00
Alexander Boettcher
db0589727a seoul: attach executable memory as such
Issue #1723
2017-10-19 13:46:25 +02:00
Alexander Boettcher
1bbe34540f run: permit qemu 2.8.1 with seoul/virtualbox
Issue #1723
2017-10-19 13:46:14 +02:00
Christian Helmuth
ee4ee6a8ac depot: update recipe hashes 2017-10-19 13:31:18 +02:00
Alexander Boettcher
ddb2805f3a run: disable non-working tests for x86_32 machine
to due limited capabilities of the native hardware
2017-10-19 13:31:18 +02:00
Stefan Kalkowski
4e97a6511b hw: switch page-tables only when necessary
* Instead of always re-load page-tables when a thread context is switched
  only do this when another user PD's thread is the next target,
  core-threads are always executed within the last PD's page-table set
* remove the concept of the mode transition
* instead map the exception vector once in bootstrap code into kernel's
  memory segment
* when a new page directory is constructed for a user PD, copy over the
  top-level kernel segment entries on RISCV and X86, on ARM we use a designated
  page directory register for the kernel segment
* transfer the current CPU id from bootstrap to core/kernel in a register
  to ease first stack address calculation
* align cpu context member of threads and vms, because of x86 constraints
  regarding the stack-pointer loading
* introduce Align_at template for members with alignment constraints
* let the x86 hardware do part of the context saving in ISS, by passing
  the thread context into the TSS before leaving to user-land
* use one exception vector for all ARM platforms including Arm_v6

Fix #2091
2017-10-19 13:31:18 +02:00
Stefan Kalkowski
ca60e24ad9 hw: run core threads in privileged mode
* introduce new syscall (core-only) to create privileged threads
* take the privilege level of the thread into account
  when doing a context switch
* map kernel segment as accessable for privileged code only

Ref #2091
2017-10-19 13:31:17 +02:00
Stefan Kalkowski
7e47fa58b3 hw: use x86 exception stack unconditionally
Always switch to the "exception stack" instead of having a hardware initiated
stack switch during exceptions/interrupts when the privilege level changes only.
Moreover, this commit increases the exception stack slightly.

Ref #2091
2017-10-19 13:31:17 +02:00
Stefan Kalkowski
42db1e112b hw: introduce kernel/user address space split
* introduces central memory map for core/kernel
* on 32-bit platforms the kernel/core starts at 0x80000000
* on 64-bit platforms the kernel/core starts at 0xffffffc000000000
* mark kernel/core mappings as global ones (tagged TLB)
* move the exception vector to begin of core's binary,
  thereby bootstrap knows from where to map it appropriately
* do not map boot modules into core anymore
* constrain core's virtual heap memory area
* differentiate in between user's and core's main thread's UTCB,
  which now resides inside the kernel segment

Ref #2091
2017-10-19 13:31:17 +02:00
Stefan Kalkowski
362337a9e8 hw: remove bootstrap in clean rules
Ref #2091
2017-10-19 13:31:16 +02:00
Christian Helmuth
0da420c104 Limit max string length in log session for okl4
This commit also adds a test to test-log.
2017-10-19 13:31:16 +02:00
Christian Helmuth
487162a53d base-nova: enforce building kernel with -Os
Issue #1248
2017-10-19 13:31:16 +02:00
Christian Prochaska
e4fa8e8fcf vfs server: remove special case of rootdir handles
With this patch, the VFS server returns distinguishable IDs when opening
the root directory multiple times.
2017-10-19 13:31:15 +02:00
Martin Stein
5f65791962 nic_router: bad-protocol message only if verbose
This was an error output-line for each affected packet previously but it
is pretty normal for the router to receive packets whose network layer
protocol it doesn't know . In the default case, these packets shall be
ignored silently.

Ref #2490
2017-10-19 13:31:15 +02:00
Martin Stein
30a96706cb nic_router: dhcp server functionality
One can configure the NIC router to act as DHCP server at interfaces of a
domain by adding the <dhcp> tag to the configuration of the domain like
this:

<domain name="vbox" interface="10.0.1.1/24">
    <dhcp-server ip_first="10.0.1.80"
                 ip_last="10.0.1.100"
                 ip_lease_time_sec="3600"
                 dns_server="10.0.0.2"/>
    ...
</domain>

The attributes ip_first and ip_last define the available IPv4 address
range while ip_lease_time_sec defines the lifetime of an IPv4 address
assignment in seconds. The IPv4 address range must be in the subnet
defined by the interface attribute of the domain tag and must not cover
the IPv4 address in this attribute. The dns_server attribute gives the
IPv4 address of the DNS server that might also be in another subnet.
The lifetime of an offered assignment is the configured round trip time of
the router while the ip_lease_time_sec is applied only if the offer is
requested by the client in time.

The ports/run/virtualbox_nic_router.run script is an example of how to
use the new DHCP server functionality.

Ref #2490
2017-10-19 13:31:15 +02:00
Martin Stein
03144093b3 nic_router: do link garbage collect on each packet
Previously, garbage collect was only done when an incoming packet passed the
Ethernet checks. Now it is really done first when receiving a packet at an
interface.

Ref #2490
2017-10-19 13:29:45 +02:00
Martin Stein
215937ff0f nic_router: handle ARP requests for foreign IPs
If the router has no gateway attribute for a domain (means that the router
itself is the gateway), and it gets an ARP request for a foreign IP, it shall
answer with its own IP.

Ref #2490
2017-10-19 13:29:45 +02:00
Martin Stein
ee88d4d2d5 nic_router: use same packet log-format as nic_dump
Ref #2490
2017-10-19 13:29:45 +02:00
Martin Stein
e5b9a6cc8b nic_router: rework round-trip-time handling
Do not use two times the RTT for the lifetime of links but use it as
it is configured to simplify the usage of the router. Internally, use
Microseconds/Duration type instead of plain integers.

Ref #2490
2017-10-19 13:29:45 +02:00
Martin Stein
71bd9a1f10 nic_dump: configurable packet print
The nic_dump uses a wrapper for all supported protocols that
takes a packet and a verbosity configuration. The wrapper object can
than be used as argument for a Genode log function and prints the
packet's contents according to the given configuration. The
configuration is a distinct class to enable the reuse of one instance
for different packets.

There are currently 4 possible configurations for each protocol:
* NONE          (no output for this protocol)
* SHORT         (only the protocol name)
* COMPACT       (the most important information densely packed)
* COMPREHENSIVE (all header information of this protocol)

Ref #2490
2017-10-19 13:29:45 +02:00
Martin Stein
d63c40af3e dhcp: extend options utilities
Provide utilities for appending new options to an existing DHCP packet
and a utility for finding existing options that returns a typed option
object. Remove old version that return untyped options.

Ref #2490
2017-10-19 13:29:44 +02:00
Martin Stein
791fd9806f ipv4 address: conversion from and to integer
Ref #2490
2017-10-19 13:29:43 +02:00
Martin Stein
d0f5838c61 net: clean up header fields and accessors
Apply the style rule that an accessor is named similar to the the underlying
value. Provide read and write accessors for each mandatory header attribute.
Fix some incorrect structure in the headers like with the flags field
in Ipv4_packet.

Ref #2490
2017-10-19 13:29:43 +02:00
Martin Stein
7b55d4d5d9 ethernet: rework type for ethernet type value
Encapsulate the enum into a struct so that it is named
Ethernet_frame::Type::Enum, give it the correct storage type
uint16_t, and remove those values that are (AFAIK) not used by
now (genode, world).

Ref #2490
2017-10-19 13:29:43 +02:00
Martin Stein
3f269b773d nic_dump: use Duration instead of unsigned
Ref #2490
2017-10-19 13:29:42 +02:00
Martin Stein
97b1a22a8a nic_dump: measure time only if needed
Ref #2490
2017-10-19 13:29:42 +02:00
Martin Stein
6b4b662357 nic_router: fix for unknown transport protocols
Do not stop routing if the transport layer protocol is unknown but
continue with trying IP routing instead. The latter was already
done when no transport routing could be applied but for unknown transport
protocols we caught the exception at the wrong place.

Ref #2490
2017-10-19 13:29:42 +02:00
Martin Stein
642254134e timer test: rate limiting and no starvation
No starvation of timeout signals
--------------------------------

Add several timeouts < 1ms to the stress test and check that timeout
handling doesn't become significantly unfair (starvation) in this situation
where some timeouts trigger nmuch faster than they get handled.

Rate limiting for timeout handling in timer
-------------------------------------------

Ensure that the timer does not handle timeouts again within 1000
microseconds after the last handling of timeouts. This makes denial of
service attacks harder. This commit does not limit the rate of timeout
signals handled inside the timer but it causes the timer to do it less
often. If a client continuously installs a very small timeout at the
timer it still causes a signal to be submitted to the timer each time
and some extra CPU time to be spent in the internal handling method. But
only every 1000 microseconds this internal handling causes user timeouts
to trigger.

If we would want to limit also the call of the internal handling method
to ensure that CPU time is spent beside the RPCs only every 1000
microseconds, things would get more complex. For instance, on NOVA
Time_source::schedule_timeout(0) must be called each time a new timeout
gets installed and becomes head of the scheduling queue. We cannot
simply overwrite the already running timeout with the new one.

Ref #2490
2017-10-19 13:29:42 +02:00
Martin Stein
b811ef4331 signal: fix starvation by fast signal contexts
In the past, a signal context, that was chosen for handling by
'Signal_receiver::pending_signal and always triggered again before
the next call of 'pending_signal', caused all other contexts behind
in the list to starve. This was the case because 'pending_signal'
always took the first pending context in its context list.

We avoid this problem now by handling pending signals in a round-robin
fashion instead.

Ref #2532
2017-10-19 13:29:42 +02:00
Emery Hemingway
cd21074201 server/tcp_terminal: wrap RPC functions in 'with_libc' 2017-10-19 13:29:41 +02:00
Christian Helmuth
f9b3c6d2cf Remove unused os/alarm.h include from loader 2017-10-19 13:29:41 +02:00
Martin Stein
df71e02ef6 alarm: fix bug in _setup_alarm
We did not set the correct now_period previously but it wasn't conspicuous
because the bug triggered not before a full period had passed which on most
platforms is a pretty long time.

Ref #2490
2017-10-19 13:29:41 +02:00
Alexander Boettcher
9705c90d87 nova: update kernel to fix sporadic hangs 2017-10-19 13:29:41 +02:00
Sebastian Sumpf
7a359f95a3 wifi: use with libc in config update 2017-10-05 17:40:05 +02:00
Christian Helmuth
28004bc9e6 timer: limit rate of handling timeouts
Ensure that the timer does not handle timeouts again within 1000
microseconds after the last handling of timeouts. This makes denial of
service attacks harder. This commit does not limit the rate of timeout
signals handled inside the timer but it causes the timer to do it less
often. If a client continuously installs a very small timeout at the
timer it still causes a signal to be submitted to the timer each time
and some extra CPU time to be spent in the internal handling method. But
only every 1000 microseconds this internal handling causes user timeouts
to trigger.

If we would want to limit also the call of the internal handling method
to ensure that CPU time is spent beside the RPCs only every 1000
microseconds, things would get more complex. For instance, on NOVA
Time_source::schedule_timeout(0) must be called each time a new timeout
gets installed and becomes head of the scheduling queue. We cannot
simply overwrite the already running timeout with the new one.

Ref #2490
2017-10-05 17:40:05 +02:00
Christian Helmuth
23f65803fa libc: update recipe for resolv integration 2017-10-05 17:40:05 +02:00
Emery Hemingway
226fcbc02f Remove remote shell support from libc
The remote shell facilities are past deprecation and there is an
obligation to prevent their use rather than to support them. This patch
removes the related function definitions from 'unistd.h', which have not
been been included in the Genode libc ABI regardless.

Fix #2530
2017-10-05 17:40:05 +02:00
Emery Hemingway
8ca63d4a6e libc: reintegrate libc_resolv library
Remove getaddrinfo and freeaddrinfo from the Libc::Plugin and get rid of
the extra libc_resolv library. Remove getaddrinfo/freeaddrinfo symbol
hiding patch for FreeBSD sources. Remove libc_resolv from Makefiles and
run scenarios.

Fix #2273
2017-10-05 17:40:04 +02:00
Christian Helmuth
170b532892 Support read-only data symbols in ABI
This also adapts existing symbol files
2017-10-05 17:40:04 +02:00
Emery Hemingway
a67d24e509 import chroot from world repository
Fix #2529
2017-10-05 17:40:04 +02:00
Christian Helmuth
82d20f94cd Enable writeable in ahci_drv for libc vfs tests
Thanks to Steven Harp for reporting.
2017-10-05 17:40:04 +02:00
Sebastian Sumpf
754d1bd4a3 usb_report_filter: check device ds
Make sure we actually can report devices on USB driver device updates.

related to #2527
2017-10-05 17:40:04 +02:00
Sebastian Sumpf
7c269cb933 qemu-usb: Handle failing packet allocations gracefully
* catch failed allocations
* if a packet allocation fails, return NAK USB packet state
* increase packet stream size to 6 MiB

fixes #2527
2017-10-05 17:40:04 +02:00
Christian Helmuth
b3f620436c dde_linux: fix timer deletion and modification (lx_kit) 2017-10-05 17:40:03 +02:00
Christian Helmuth
7b9edcf90c lxip: fix timer deletion and modification
Linux del_timer() and mod_timer() return if the timer was pending before
the modification. Additionally, these functions are potentially called
from handler function of the timer to modify and, therefore, checking
for timeout != INVALID_TIMEOUT is not sufficient as the timeout is
indeed valid when the handler is executed.
2017-10-05 17:40:03 +02:00
Christian Helmuth
9ff82d76c0 lxip: fix timer handling and jiffies update 2017-10-05 17:40:03 +02:00
Alexander Boettcher
be753ee863 tool: add genode xml schema to xmllint check
Fixes #2513
2017-10-05 17:40:03 +02:00
Norman Feske
f04ef8ed40 run: align data after last boot module
In the image.elf file, the very last boot module is followed
by arbitrary other core-local data. Since those boot modules are
exported as page-granular dataspace to the outside of core via core's
ROM service, we need to ensure that the last page is padded with zeros.
2017-10-05 17:40:03 +02:00
Norman Feske
6d361b337b input/root.h: support re-opening of sessions
This patch fixes an aliasing problem of the 'close' method signature
that prevented the Input::Root_component::close method to be called.
This way, the event-queue state was not reset at session-close time,
which prevented a subsequent session-creation request to succeed. With
the patch, input servers like ps2_drv, usb_drv that rely on the
Input::Root_component support the dynamic re-opening of sessions. This
happens in particular when using a dynamically configured input filter.
2017-10-05 17:40:03 +02:00
Norman Feske
86656517e3 nitpicker: reset background if backdrop vanishes
Fixes #3
2017-10-05 17:40:03 +02:00
Christian Helmuth
ad49fba42a Fix syntax in lxip_udp_echo run script
Thanks to Steven Harp for reporting.
2017-10-05 17:40:02 +02:00
Norman Feske
ab0b0ac3a0 run: compress image.elf in NOVA boot dir 2017-10-05 17:40:02 +02:00
Josef Söntgen
e1ada57bfa vfs: use unsigned 64bit for media size ioctl
Fixes #2523.
2017-10-05 17:40:02 +02:00
Martin Stein
3f37a12e2d timer connection: fix mixing of time sources
We update the alarm-scheduler time with results of
Timer::Connection::curr_time when we schedule new timeouts but when
handling the signal from the Timer server we updated the alarm-scheduler
time with the result of Timer::Connection::elapsed_us.  Mixing times
like this could cause a non-monotone time value in the alarm scheduler.
The alarm scheduler then thought that the time value wrapped and
triggered all timeouts immediately. The problem was fixed by always
using Timer::Connection::curr_time as time source.

Ref #2490
2017-10-05 17:40:02 +02:00
Norman Feske
dae563725b drivers_interactive-pc: increase key-repeat rate 2017-10-05 17:40:02 +02:00
Norman Feske
ef9435b9ed depot: recipe for src/vbox5-nova 2017-10-05 17:40:02 +02:00
Norman Feske
4835da0f4d depot: add posix lib to api/libc archive 2017-10-05 17:40:01 +02:00
Norman Feske
15606dfc49 depot: recipe for api/stdcxx
This recipe copies the entire stdcxx library into the API archive, which
is an interim solution until we introduce a proper ABI for stdcxx. With
this current version, every user of the stdcxx ABI will implicitly build
the stdcxx library.
2017-10-05 17:40:01 +02:00
Norman Feske
40b12bb83c vbox5: extract license info from 3rd-party archive
This information is needed to create a matching LICENSE file for the
vbox5 src archive.
2017-10-05 17:40:01 +02:00
Norman Feske
ace5400953 depot: recipe for src/libiconv 2017-10-05 17:40:01 +02:00
Norman Feske
2ad57d3850 libports: libiconv ABI 2017-10-05 17:40:01 +02:00
Norman Feske
26d4d227ea ports: define cap quota in vbox_pointer.run 2017-10-05 17:40:01 +02:00
Norman Feske
bea305aec5 depot: avoid rule aliaing in api/base content.mk
This patch merges two similar rules, which create content at 'include'
into a single rule. This prevents a possible race condition when
creating archives in parallel.
2017-10-05 17:40:01 +02:00
Alexander Boettcher
1cc09ac786 platform_drv: transfer of quota to device_pd
Issue #2507
2017-10-05 17:40:00 +02:00
Alexander Boettcher
c66c23b7f1 intel_fb: avoid assertion on X201
Issue #2208
2017-10-05 17:40:00 +02:00
Christian Helmuth
ddfd3c0d7e linux: stack-area handling with recent Linux kernels
We moved the stack-area segment 128 MiB behind text and data to comply
with assumptions in the kernel ELF loader.

This commit also reenables static binaries on linux and removes the
unused stack_area.stdlib.ld script.

Fixes #2521
2017-10-05 17:40:00 +02:00
Sebastian Sumpf
ff800af820 ahci: make port enumeration independent from port count
fixes #2522
2017-10-05 17:40:00 +02:00
Norman Feske
6bfd4f4276 gems: driver-manager subsystem for PC platforms
This is a drivers subsystem that starts the most fundamental
(framebuffer, input, block) device drivers dynamically, depending on the
runtime-detected devices. The discovered block devices are reported
as a "block_devices" report.
2017-10-05 17:40:00 +02:00
Norman Feske
37b5c9a2c1 nano3d.run: fix cap quota for drivers subsystem 2017-10-05 17:40:00 +02:00
Christian Helmuth
d80fadc635 intel_fb: optionally respect connector hz config 2017-10-05 17:39:59 +02:00
Christian Helmuth
c63f7725be intel_fb: support forced virtual framebuffer size 2017-10-05 17:39:59 +02:00
Christian Helmuth
02d7b401fe intel_fb: initial backlight brightness of 75% 2017-10-05 17:39:59 +02:00
Norman Feske
6fcf95d536 terminal: cursor-key handling w/o set key layout
This patch applies the handling of cursor keys, function keys, and page
up/down keys even if no keymap is defined. This is the case when using
the terminal with character events produced by the input filter.
2017-10-05 17:39:59 +02:00
Norman Feske
c6690ea447 ports: use depot in noux_vim.run, noux_bash.run 2017-10-05 17:39:59 +02:00
Norman Feske
ea21576eac bash: make dependency from ld.lib.so explicit
This patch is a workaround for the apparent problem that noux
applications, which perform execve, implicitly use functionality from
the dynamic linker, not explicitly via the libc. If the binary lacks the
dependency information, noux will fail on the execve attempt. The latter
is the case when the noux package is built as a depot archive where
library dependencies are not traversed over multiple levels.
2017-10-05 17:39:59 +02:00
Norman Feske
796810ea06 depot: recipe for src/vbox_pointer 2017-10-05 17:39:59 +02:00
Norman Feske
47b7ce5149 depot: recipe for rtc_drv,top 2017-10-05 17:39:58 +02:00
Norman Feske
d8861262b2 depot: recipe for cpu_load_display 2017-10-05 17:39:58 +02:00
Norman Feske
f10af1cc57 depot: recipe for src/xray_trigger 2017-10-05 17:39:58 +02:00
Norman Feske
070aa62f92 depot: recipes for file_terminal, terminal_log 2017-10-05 17:39:58 +02:00
Norman Feske
1953a31031 depot: recipe for src/noux 2017-10-05 17:39:58 +02:00
Norman Feske
9d3d7c4cb4 depot: recipes for ncurses,vim,coreutils,e2fsprogs 2017-10-05 17:39:58 +02:00
Norman Feske
14b5e81f1e depot: recipe for src/intel_fb_drv 2017-10-05 17:39:58 +02:00
Norman Feske
23e15cb2ab gems: add missing with_libc call in file_terminal
Ref #2286
2017-10-05 17:39:57 +02:00
Norman Feske
d9d32847b1 xray_trigger: make initial state configurable 2017-10-05 17:39:57 +02:00
Norman Feske
0574cdf705 libports: ncurses ABI 2017-10-05 17:39:57 +02:00
Norman Feske
1d56c3d3aa base: remove non-critical quota messages
In nested scenarios like driver_manager.run, the initial session quota
for IO_PORT, IO_PORT, and IRQ sessions is expectedly insufficient.
However, the condition is properly handled by re-attemping the request
with a slightly increased quota. Still, core prints a warning each time
the request is denied for quota reasons, which spams the log. This patch
removes the non-critical message.
2017-10-05 17:39:57 +02:00
Norman Feske
040e331f77 mupdf: support resizeable framebuffers 2017-10-05 17:39:57 +02:00
Martin Stein
d62c3117de run/timeout: test if maximum timeouts trigger bugs
Create periodic and one-shot timeouts with the maximum duration
to see if triggers any corner-case bugs. They must not trigger during
the test.

Ref #2490
2017-10-05 17:39:57 +02:00
Martin Stein
8fd914c6ab timeout: fix outdated time in alarm scheduler
If we add an absolute timeout to the back-end alarm-scheduler we must first
call 'handle' at the scheduler to update its internal time value.
Otherwise, it might happen that we add a timeout who's deadline is so big that
it normally belongs to the next time-counter period but the scheduler thinks
that it belongs to the current period as its time is older than the one used
to calculate the deadline.

Ref #2490
2017-10-05 17:39:56 +02:00
Martin Stein
2633ff8661 alarm: fix information loss due to int-cast
When we have two time values of an unsigned integer type and we create
the difference and want to know wether it is positive or negative within
the same value we loose at least one half of the value range for casting
to signed integers. This was the case in the alarm scheduler when
checking wether an alarm already triggered. Even worse, we casted from
'unsigned long' to 'signed int' which caused further loss on at least
x86_64. Thus, big timeouts like ~0UL falsely triggered directly.

Now, we use an extra boolean value to remember in which period of the
time counter we are and to which period of the time counter the deadline
of an alarm belongs. This boolean switches its value each time the time
counter wraps. This way, we can avoid any casting by checking wether the
current time is of the same period as the deadline of the alarm that we
inspect. If so, the alarm is pending if "current time >= alarm
deadline", otherwise it is pending if "current time < alarm deadline".

Ref #2490
2017-10-05 17:39:56 +02:00
Sebastian Sumpf
a932fc2e5a depot: recipe for rump/file_system
Ref #2446
2017-10-05 17:39:56 +02:00
Christian Helmuth
b586b00845 Fix typo in usb_hid test script 2017-10-05 17:39:56 +02:00
Emery Hemingway
b20b14de27 support for Nim {.compile.} pragma for C sources
Inject bundled C files into build recipes with the Nim {.compile.}
pragma.

Fix #2516
2017-10-05 17:39:56 +02:00
Christian Prochaska
9b8228d76f Noux: fix race condition on Vfs_io_channel destruction
Fixes #2518
2017-10-05 17:39:56 +02:00
Alexander Boettcher
5336ba4b8c nova: report CPU idle times using genode cpu ids
Fixes #2517
2017-10-05 17:39:56 +02:00
Johannes Kliemann
d3f5a369a7 ada: implemented add in ada
Fixes #2515
2017-10-05 17:39:55 +02:00
Alexander Boettcher
d43a5a6ef1 sel4: adjust root cnode size for wand_quad board
and cleanup for x86 32/64 the autoconf.h patches

Fixes #2514
2017-10-05 17:39:55 +02:00
Alexander Boettcher
013efb58ac sel4: free up top root directory of processes
Issue #2514
2017-10-05 17:39:55 +02:00
Alexander Boettcher
675e2f062a base: increase stack of entrypoint thread in core
Issue #2514
2017-10-05 17:39:55 +02:00
Martin Stein
4fa0cb5c29 timer pit: handle and display bad latency
If the PIT timer driver gets activated too slow (e.g. because of a bad priority
configuration), it might miss counter wraps and would than produce sudden time
jumps. The driver now detects this problem dynamically, warns about it and
adapts the affected values to avoid time jumps.

Ref #2400
2017-10-05 17:39:55 +02:00
Emery Hemingway
488396e78b server/vfs: status completes or throw Invalid_handle
The 'status' RPC method of the File_system session must complete
successfully or throw 'Invalid_handle' for any error.

Ref #2512
2017-10-05 17:39:55 +02:00
Emery Hemingway
8207fb8d98 libc: sync bind sock control file before continuing with listen
Fix #2512
2017-10-05 17:39:54 +02:00
Norman Feske
a79378ff19 mupdf: add missing 'with_libc' call
Ref #2286
2017-10-05 17:39:54 +02:00
Norman Feske
e99f2d0595 window layouter: fix initial window positioning
This patch fixes the positioning of windows according to configured
policies. Thanks to Alexander Senier for reporting the issue!
2017-10-05 17:39:54 +02:00
Christian Helmuth
b446e17bcd sel4: instruct python to skip .pyc generation
This keeps the contrib directory clean.
2017-09-07 11:47:16 +02:00
Christian Helmuth
fe33193ae1 pistachio: remove autom4te cache from contrib dir
The cache directory content is slightly different on each prepare-port
run and fortunately not used at build time. So, we just remove it at the
end of port preparation.
2017-09-07 11:47:16 +02:00
Christian Helmuth
555ebe1ffe okl4: copy elfweaver tool to build directory
When using the elfweaver to generate boot images, python stores
precompiled modules in the source directory besides the .py files. This
changed the contrib source tree with binary files specific to the build
host. As a result the depot create tool picked up the changed source
tree and produced strange new hashes. Now, the tool sources are copied
to the build directory where python can do its optimizations and the
depot stays clean.
2017-09-07 11:47:16 +02:00
Emery Hemingway
5c4f0e1340 depot: recipe for server/terminal
Ref #2446
2017-09-07 11:47:16 +02:00
Martin Stein
82c763fe75 nic_router: provide link state
The NIC router always reports the link state "Up" (true) because
the effective link state depends on the targeted remote interface
and thus on the individual routing for each packet. Consequently,
also the signal handler for state changes gets ignored.

Ref #2490
2017-09-07 11:47:15 +02:00
Martin Stein
a1e32a3ad9 nic_router: use local but individual MAC addresses
IP stacks may treat a network interface as "down" when it states a MAC
address with the I/G bit (bit 40) set to "Group" (value 0) instead of
"Individual" (value 1). This was observed with a TinyCore 8 inside a
Virtualbox VM. Thus, the previously choosen 03:03:03:03:03:00 as base
for the MAC address allocator is bad. Now we use the 02:02:02:02:02:00
instead. This also ensures that the MAC addresses are not marked as
"Universal" but as "Local" (bit 41, value 1) which is correct in general
as the router allocates MAC addresses only for virtual networks.

Ref #2490
2017-09-07 11:47:15 +02:00
Christian Prochaska
8a6ad5f94b Linux_dataspace: increase file name length
Fixes #2508
2017-09-07 11:47:15 +02:00
Emery Hemingway
9bfc29e456 tool/run: Wake On Lan support
Fix #2509
2017-09-07 11:47:15 +02:00
Martin Stein
68cd5e8004 nic_router & timer* tests: prioritize timer driver
The timer driver should always be of the highest priority to avoid
problem with timers that have low max-counter values like the PIT
with only 53 ms.

Ref #2400
2017-09-07 11:47:15 +02:00
Alexander Boettcher
fd59c5f92a nova: remove framebuffer in uefi mode from ram allocator
Issue #2242
2017-08-30 14:20:46 +02:00
Christian Helmuth
0adbd1ce24 version: 17.08 2017-08-30 12:42:42 +02:00
Norman Feske
628cfbdab7 News item for version 17.08 2017-08-30 12:41:43 +02:00
Norman Feske
4ae4e745e9 Release notes for version 17.08 2017-08-30 12:41:43 +02:00
Christian Helmuth
2ed904faab depot: update recipe hashes 2017-08-30 12:41:43 +02:00
Christian Helmuth
2cc9fa1f14 okl4: apply patches in deterministic order 2017-08-30 12:41:43 +02:00
Alexander Boettcher
035e28d7d9 sel4: apply patches in deterministic order
Issue #2242
2017-08-30 10:01:36 +02:00
Martin Stein
b531a862bb nic_dump: link state and mac address
The NIC dump component didn't support forwarding of link states and link-state
signals until now. Furthermore, it now prints MAC address and link state
on session creation and on every link state change.

Ref #2490
2017-08-30 10:01:36 +02:00
Martin Stein
84ad50b527 nic_dump: synchronize down/uplink creation
Previously, the uplink session was created on component startup while the
creation of the downlink session is timed by the client component. This
created a time span in which packets from the uplink were dropped at the
nic_dump. Now the uplink session-request is done by the session component
of the downlink.

Ref #2490
2017-08-30 10:01:35 +02:00
Martin Stein
570b5a6920 libc_resolv/_lxip: fix undefined references...
... to Libc::Plugin::getdirentries, Libc::Plugin::mmap, and
Libc::Plugin::msync.

Ref #2490
2017-08-30 10:01:35 +02:00
Christian Helmuth
3c4709fcc7 Update README
Short note about depot/ and public/ directories.
2017-08-30 10:01:35 +02:00
Christian Helmuth
46a98abf36 Update doc/components.txt 2017-08-30 10:01:35 +02:00
Christian Helmuth
28764e2332 Increase cap quota for wifi_drv 2017-08-30 10:01:35 +02:00
Christian Helmuth
23b78c76cb Increase cap quota for test-smartcard 2017-08-30 10:00:01 +02:00
Alexander Boettcher
903cd8d719 noux_net_netcat: use disjoint mac addresses for platforms 2017-08-30 10:00:01 +02:00
Alexander Boettcher
def14f327d okl4: remove tools of okl4 during make clean 2017-08-30 10:00:01 +02:00
Alexander Boettcher
4c382d85b2 sel4: adjust cap ram quota of fault_detection.run 2017-08-30 10:00:01 +02:00
Martin Stein
12eb7a44d0 x86 timeout test: consider instable tsc (quickfix)
This is a quickfix to avoid testing microseconds precise time on older x86
machines that have no invariant TSC as interpolation source.

Ref #2400
2017-08-30 10:00:01 +02:00
Christian Helmuth
fd344eb273 netperf: use disjoint mac addresses for platforms 2017-08-30 10:00:00 +02:00
Christian Helmuth
3bc93d1242 vbox: fine-tune automatic test runs on Muen
Currently, only win7 32-bit tests run successfully and are whitelisted.
We may extent the list in future with other supported guests.
2017-08-30 10:00:00 +02:00
Christian Helmuth
ae0c9e7692 Increase cap quota for usb_drv 2017-08-30 10:00:00 +02:00
Sebastian Sumpf
f361cb28a5 base-hw: timer support for RISC-V
issue #2423
2017-08-30 10:00:00 +02:00
Alexander Boettcher
bcfcc1db9c sel4: handle unmap error more gracefully
Issue #2505
2017-08-30 10:00:00 +02:00
Sebastian Sumpf
9094517809 base-hw: BBL fix warnings
* fix compile warnings
* added license headers to Genodes' part of BBL

issue #2423
2017-08-30 10:00:00 +02:00
Sebastian Sumpf
991a5a5622 ldso: export symbols required by RISC-V
issue #2423
2017-08-30 09:59:59 +02:00
Sebastian Sumpf
e17accb3ba base-hw: RISC-V save/restore 'x29' correctly
* register x29/t4 was not saved and therefore not restored correctly
* change 'warning' to 'error' before '_die' is called

issue #2423
2017-08-30 09:59:59 +02:00
Sebastian Sumpf
7113c17100 run: update RISC-V run script support
* fix build error for bbl upon intial build
* set memory to 128 MB in spike
* support 'forever' timeout

issue #2423
2017-08-30 09:59:59 +02:00
Christian Helmuth
2f38f50b1e Revert "vbox4: disable muen run targets due to issue #2399"
This reverts commit 523b317fe6.
2017-08-30 09:59:59 +02:00
Josef Söntgen
bc0c78708c sdl: add OpenGL support
Issue #2507.
2017-08-30 09:59:59 +02:00
Josef Söntgen
0fa9a0dda7 sdl: adapt test programm
Issue #2507.
2017-08-30 09:59:59 +02:00
Sebastian Sumpf
b9bc48dd63 mesa: split lib and API (headers)
Issue #2507.
2017-08-30 09:59:58 +02:00
Sebastian Sumpf
89cb3aa238 mesa-demos: add more examples
Issue #2507.
2017-08-30 09:59:58 +02:00
Sebastian Sumpf
dbeb7410f8 mesa: adjust i965 EGL backend for Gpu session
Issue #2507.
2017-08-30 09:59:58 +02:00
Josef Söntgen
947235ee34 drm: use Gpu session for i965 driver
Issue #2507.
2017-08-30 09:59:58 +02:00
Josef Söntgen
198019edca os: add Gpu driver for Intel Gen8 HD graphics
This commit introduces a experimental 3D driver for Intel Gen8 HD
graphics devices as well as the corresponding Gpu session.

Fixes #2507.
2017-08-30 09:59:57 +02:00
Josef Söntgen
1ac7b034ba launchpad: add Gpu to service list
Issue #2507.
2017-08-30 09:59:57 +02:00
Alexander Boettcher
830f6934f9 base: add support to unconstrain virtual space
Issue #2507.
2017-08-30 09:59:57 +02:00
Emery Hemingway
812a0c9eed tool/ports: bare tarball support
Ref #2467
2017-08-30 09:59:57 +02:00
Emery Hemingway
604ff9ca2c msync and Sytem V semaphore dummies
Ref #2467
2017-08-30 09:59:57 +02:00
Emery Hemingway
c2c47d2e35 libc: silence close() failure messages
Return EBADF but do not log an error for invalid descriptors.

Ref #2467
2017-08-28 16:49:51 +02:00
Emery Hemingway
2c4f0e5505 port of PCG random number generator library
http://www.pcg-random.org/
http://www.pcg-random.org/using-pcg-c.html

Ref #2477
Fix #2499
2017-08-28 16:49:51 +02:00
Emery Hemingway
1fce8d0d74 default ahci_drv and part_blk Block sessions to read-only
Add a "writeable" policy option to the ahci_drv and part_blk Block
servers and default from writeable to ready-only. Should a policy
permit write acesss the session request argument "writeable" may still
downgrade a session to ready-only.

Fix #2469
2017-08-28 16:49:51 +02:00
Alexander Boettcher
cf2886dc8f core: avoid freeing memory of unknown state
This should actually never happen. However if it happens, be a bit robuster
and don't provide the memory for re-use (which causes tons of other trouble
afterwards).

Issue #2505
2017-08-28 16:49:51 +02:00
Josef Söntgen
404a82d5ee register_set: do not shift when ITEM_WIDTH is 64
Issue #2507.
2017-08-28 16:49:50 +02:00
Martin Stein
7f29eff75a hw lapic: find best frequency dynamically
Some x86 machines do have a LAPIC speed < 1000 ticks per millisecond
when configured to use the maximum divider (as it was always the case).
But we need microseconds precision for the timeout framework. Thus,
reduce the divider dynamically until the frequency fullfills our
requirements.

Ref #2400
2017-08-28 16:49:50 +02:00
Martin Stein
d9073a1848 timer/util: generic TIMER_MIN_TICKS_PER_MS
Ref #2400
2017-08-28 16:49:50 +02:00
Martin Stein
ffaf99ae86 timeout test: remove error-limit exception for PIT
The problems with the PIT timer drivers were fixed so it is not necessary
anymore to treat them special.

Ref #2400
2017-08-28 16:49:49 +02:00
Martin Stein
399e1586be timer: generic timer_ticks_to_us implementation
There are hardware timers whose frequency can't be expressed as
ticks-per-microsecond integer-value because only a ticks-per-millisecond
integer-value is precise enough. We don't want to use expensive
floating-point values here but nonetheless want to translate from ticks
to time with microseconds precision. Thus, we split the input in two and
translate both parts separately. This way, we can raise precision by
shifting the values to their optimal bit position. Afterwards, the results
are shifted back and merged together again.

As this algorithm is not so trivial anymore and used by at least three
timer drivers (base-hw/x86_64, base-hw/cortex_a9, timer/pit), move it to a
generic header to avoid redundancy.

Ref #2400
2017-08-28 16:49:49 +02:00
Martin Stein
652187b25e timer pit: fix precision reduction to milliseconds
Due to the simplicity of the algorithm that translated from timer ticks
to time, we lost microseconds precision although the timer allows for it.

Ref #2400
2017-08-28 16:49:49 +02:00
Martin Stein
16745946e0 hw pit: fix precision reduction to milliseconds
Due to the simplicity of the algorithm that translated from timer ticks
to time, we lost microseconds precision although the timer allows for it.

Ref #2400
2017-08-28 16:49:49 +02:00
Martin Stein
02bbb2efaf test/timeout: use elapsed_us instead of elapsed_ms
Ref #2400
2017-08-28 16:49:49 +02:00
Martin Stein
22294d3b18 timer connection: fix division by null
When synchronizing with the remote time source, we have to take care that the
measured time difference cannot become null because its real value is smaller
than the measurement granularity. Since the granularity is one microsecond, we
simply go on polling timestamp and time until the microsecond has passed.
This busy waiting should be no problem for the system for two reasons. First,
it is limited to a relatively small amount of time and second, a busy lock
does not happen because the time source that is responsible for the limiting
factor is explicitely called on each poll.

Ref #2400
2017-08-28 16:49:49 +02:00
Christian Helmuth
2356128237 Remove unused Qemu TCP redir from autopilot scripts 2017-08-28 16:49:48 +02:00
Christian Helmuth
1f0f182151 Increase cap quota for test-pthread
The test creates 100 pthreads in a loop, which should immediately
self-destruct. Therefore, we can grant more than 130 caps.
2017-08-28 16:49:48 +02:00
Christian Helmuth
21116803b3 Cleanup warning message from %p 2017-08-28 16:49:48 +02:00
Alexander Boettcher
e73521a95e nova: fix fpu nullpointer access in kernel 2017-08-28 16:49:48 +02:00
Alexander Boettcher
d424f6e066 vbox*.run: fix scripts
- cap quota shortage
- ram quota shortage
- limit VM memory to 1 GB (before 9 GB) in multiple run test case
2017-08-28 16:49:48 +02:00
Christian Prochaska
ee352abc56 run: add Xen support
When building Genode on a Linux system running in a Xen Dom0, the 'xen'
run target can run a Genode scenario in a Xen DomU.

Usage: in build/x86_*/etc/build.conf, define:

RUN_OPT = --include boot_dir/$(KERNEL) --include image/iso --include power_on/xen --include log/xen --include power_off/xen

The Xen DomU runs in HVM mode and loads Genode from an ISO image. Serial
log output is printed to the console and graphical output is shown in an
SDL window.

The Xen DomU ist managed using the 'xl' command line tool and it is
possible to add configuration options in the 'xen_args' variable in a run
script. Common options are:

- disabling the graphical output:

  append xen_args { sdl="0" }

- configuring a network device:

  append xen_args { vif=\["model=e1000,mac=02:00:00:00:01:01,bridge=xenbr0"\] }

- configuring USB input devices:

  append xen_args { usbdevice=\["mouse","keyboard"\] }

Note: the 'xl' tool requires super-user permissions and interactive
password input can be troublesome in combination with 'expect' and is not
practical for automatic tests. For this reason, the current implementation
assumes that no password input is needed when running 'sudo xl', which can
be achieved by creating a file '/etc/sudoers.d/xl' with the content
'user ALL=(root) NOPASSWD: /usr/sbin/xl'
(where 'user' is the Linux user name).

Fixes #2504
2017-08-28 16:49:48 +02:00
Alexander Boettcher
7a006ccf50 uefi: adjust framebuffer.run to use fb_boot_drv
Issue #2242
2017-08-28 16:49:47 +02:00
Alexander Boettcher
4ac0bd514f sel4: add uefi boot support via mbi2
Multiboot2 provides the ACPI RSDP pointer from the GRUB2 bootloader.

Issue #2242
2017-08-28 16:49:47 +02:00
Alexander Boettcher
4de2e52b34 sel4: provide ACPI infos by 'platform_info' ROM
Issue #2242
2017-08-28 16:49:47 +02:00
Alexander Boettcher
a8227e80af sel4: kernel patch to get ACPI information
Issue #2242
2017-08-28 16:49:47 +02:00
Alexander Boettcher
09ce611353 sel4: free-up virtual regions in core
Fixes #2505
2017-08-28 16:49:47 +02:00
Alexander Boettcher
a63eb3cc37 base: don't free initial slab in destructor
Issue #2505
2017-08-28 16:49:46 +02:00
Stefan Kalkowski
08a311b033 hw: make address variables 64-bit safe (fix #2503) 2017-08-28 16:49:46 +02:00
Stefan Kalkowski
ea46c462a4 base: make stack area base specifiable for core
When running core as the kernel inside every component, a separate
stack area for core is needed that is different from the user-land
component's one.

Ref #2091
2017-08-28 16:49:46 +02:00
Stefan Kalkowski
3906568908 util: make bit array and allocator copyable
Ref #2091
2017-08-28 16:49:46 +02:00
Stefan Kalkowski
500893e7ec hw: prevent absolute addresses in x86_64 assembler
Ref #2091
2017-08-28 16:49:46 +02:00
Stefan Kalkowski
b8cd58e6a5 hw: enable mappings beyond 4G on x86_64
Fix #2498
2017-08-28 16:49:46 +02:00
Stefan Kalkowski
264e64d3ec hw: prevent segment register re-loading
Fix #2497
2017-08-28 16:49:45 +02:00
Christian Prochaska
e90d21c9ab wifi_drv: add missing 'Libc::with_libc()'
Fixes #2506
2017-08-28 16:49:45 +02:00
Johannes Kliemann
c509cabdba os: fix fb_boot_drv framebuffer padding
Fixes #2486
2017-08-28 16:49:45 +02:00
Christian Helmuth
7f2087e105 muen: adapt initial IP of genode subject
The entry point changed in "hw: add UEFI boot support" due to the
additional Multiboot2 header.

Issue #2242
2017-08-28 16:49:45 +02:00
Christian Prochaska
2e62d2d4be libc: construct 'Timeout' object on-demand for pthreads
Fixes #2502
2017-08-28 16:49:45 +02:00
Christian Prochaska
f5afd28d1f test/libc_vfs_block: add missing 'Libc::with_libc()'
Fixes #2500
2017-08-28 16:49:45 +02:00
Christian Prochaska
1a3a302708 test/moon: add missing 'Libc::with_libc()'
Fixes #2501
2017-08-28 16:49:44 +02:00
Emery Hemingway
90eaad6cc2 depot recipe for blk_cache
Ref #2460
2017-08-28 16:49:44 +02:00
Emery Hemingway
ead59325c7 lib/vfs/fatfs: sync after every write
Ref #2410
2017-08-28 16:49:44 +02:00
Alexander Boettcher
430bde3636 core: remove unmap from rm_client
The flush/unmap of memory is tied to an address space and not to a thread.
Move the handling from the Rm_client to the Adress_space class.

Issue #2209
2017-08-28 16:49:44 +02:00
Alexander Boettcher
6792456e4e hw: provide ACPI infos via platform_info ROM
in uefi/mbi2 boot case

Issue #2242
2017-08-28 16:49:44 +02:00
Alexander Boettcher
972031cbbc hw: add UEFI boot support
via grub2 using multiboot 2

Issue #2242
2017-08-28 16:49:44 +02:00
Alexander Boettcher
c2950e13eb core: serve parent and core service by one ep
Fixes #2484
2017-08-28 16:49:43 +02:00
Alexander Boettcher
b1a27b417b core: fix deadlock in signal delivery
Acquire Signal_context objects locks via Object_pool::apply() in the
context of the entrpyoint thread, instead in the context of the calling
thread.

Fixes #2485
2017-08-28 16:49:43 +02:00
Alexander Boettcher
31d11ec990 nova: fix implement Pd_session::map
Fixes #2209
2017-08-28 16:49:43 +02:00
Norman Feske
aec4f0db2d libc: generate nslexer.c,nsparser.c at build stage
The files are generated via flex and bison. Until now, this step was
performed when preparing the libc port. Unfortunately, the generated
files have subtle differences depending on the flex/bison versions
installed in the host. For example, the bison version number appears in
the generated code. This, in turn, breaks the hash mechanism of the
depot where a src/libc archive ends up being slightly different when
created on different hosts.

By moving the code generation to the build stage, the src/libc archive
merely contains the nslexer.l and nsparser.y source files but not the
generated files.
2017-08-28 16:49:43 +02:00
Sebastian Sumpf
ff935ee1b0 libports: Mesa demos + adjust Qt5
* Adjust Qt5 to new Mesa version
* Added eglgears
* Adjust Mesa library build target

fixes #2488
2017-08-28 16:49:43 +02:00
Sebastian Sumpf
66db2ee54e libports: Mesa 11.2.2
OpenGL 4.5 with software and i965 rendering back ends.

issue #2488
2017-08-28 16:49:43 +02:00
Sebastian Sumpf
dbff692c86 libports: DRM library 2.4.65
issue #2488
2017-08-28 16:49:42 +02:00
Sebastian Sumpf
c1029dd556 libc: add '__fpclassifyf' to libc symbol map
issue #2488
2017-08-28 16:49:42 +02:00
Sebastian Sumpf
61ae2e5b80 libc-plugin: make fd allocator thread safe
issue #2488
2017-08-28 16:49:42 +02:00
Sebastian Sumpf
17df52bfbd libc: allow RTLD_GLOBAL for dlopen
issue #2488
2017-08-28 16:49:42 +02:00
Emery Hemingway
1e9ad9e3d9 Nim toolchain improvements
- Fix fatal exception handling so that stack traces are dumped
- Add 'include/nim' directories to Nim module search path
- Enable release optimizations for release builds

Fix #2493
2017-08-28 16:49:42 +02:00
Norman Feske
556fec24b1 core-linux: avoid block-for-signal assertion
This patch removes the assertion about the unexpected call of
'block_for_signal' within core. On Linux, this call is actually
expected because of the handling of SIGCHLD signals by core.
2017-08-28 16:49:41 +02:00
Norman Feske
94f428a8b6 depot: update src/menu_view recipe
The menu-view component uses the gems/include/polygon_gfx/ headers now.
2017-08-28 16:49:41 +02:00
Norman Feske
82dc836c50 gems: update menu_view.run, show depgraph 2017-08-28 16:49:41 +02:00
Norman Feske
063413ca1f menu_view: animate geometric changes 2017-08-28 16:49:41 +02:00
Norman Feske
bb52181bc5 menu_view: fix frame dropping after sleep
When idle, menu_view de-schedules timer events to save processing time.
Once reactivated by a dialog update, it computes the passed time and
applies the result to the animator. However, the animation was most likely
started by the update not during the sleep. So the passed time must not
be applied to the animation in this case. Otherwise, many animation steps
are computed at once within a single visible frame.

Furthermore, the patch adjusts the REDRAW_PERIOD to 2, which is a better
value for geometric movements as opposed to mere color-blending effects
where the frame rate does not matter so much.

It also refines the nitpicker-buffer relocation in a way that extends
the buffer but does not shrink it. This lowers the interaction with
nitpicker in situations where the dialog size changes a lot.
2017-08-28 16:49:41 +02:00
Norman Feske
cdebd0a994 menu_view: depgraph widget
The new <depgraph> widget arranges child widgets in the form of a
dependency graph.
2017-08-28 16:49:41 +02:00
Norman Feske
f073c51b49 menu_view: support labels with no background
By applying the text output to the alpha buffer in addition to the pixel
buffer, labels can now appear without the need for an underlying frame
or button.
2017-08-28 16:49:40 +02:00
Norman Feske
4ca493b762 menu_view: use list_model_from_xml.h 2017-08-28 16:49:40 +02:00
Norman Feske
c601052c8c menu_view: generalized data-model-update utility
The utility simplifies the synchronization of a list-based data model
from an XML structure.
2017-08-28 16:49:40 +02:00
Norman Feske
13e9f6728d menu_view: split implementation into several files 2017-08-28 16:49:40 +02:00
Norman Feske
80324d9f54 menu_view: handle disppearing child widgets 2017-08-28 16:49:40 +02:00
Norman Feske
569741faf2 menu_view: add '<float>' widget
The new widget allows one to align a child widget within a larger parent
widget by specifying the boolean attributes 'north', 'south', 'east',
and 'west'. If none is specified, the child is centered. If opposite
attributes are specified, the child is stretched.
2017-08-28 16:49:40 +02:00
Norman Feske
29c6d9ee9d gems: reset 'Nitpicker_buffer' to gray, not black
This improves the output quality of antialiased lines onto a transparent
nitpicker buffer. For antialiased graphics operations, the initial color
leaks through. Leaking 50% gray is better than leaking black, in
particular when drawing white lines.
2017-08-28 16:49:39 +02:00
Norman Feske
c3d3815476 gems: define caps in nano3d.run 2017-08-28 16:49:39 +02:00
Norman Feske
97e4af36b8 gems/animator.h: use private 'List_element'
This patch makes the use of 'List' invisible at the 'Animator'
interface. This allows users of the utility to keep 'Animator::Items' in
a custom 'List' with no aliasing problems.
2017-08-28 16:49:39 +02:00
Norman Feske
e86758084c gems: painter for drawing sub-pixel accurate lines 2017-08-28 16:49:39 +02:00
Norman Feske
ade05e5a7e gems: utility for calculating bezier curves 2017-08-28 16:49:39 +02:00
Norman Feske
cb72784717 os: add template specialization for alpha pixel
The specialization is needed for applying anti-aliased drawing
operations on alpha channels.
2017-08-28 16:49:39 +02:00
Christian Prochaska
b0935ef9b2 VFS: nonblocking interface
The VFS library can be used in single-threaded or multi-threaded
environments and depending on that, signals are handled by the same thread
which uses the VFS library or possibly by a different thread. If a VFS
plugin needs to block to wait for a signal, there is currently no way
which works reliably in both environments.

For this reason, this commit makes the interface of the VFS library
nonblocking, similar to the File_system session interface.

The most important changes are:

- Directories are created and opened with the 'opendir()' function and the
  directory entries are read with the recently introduced 'queue_read()'
  and 'complete_read()' functions.

- Symbolic links are created and opened with the 'openlink()' function and
  the link target is read with the 'queue_read()' and 'complete_read()'
  functions and written with the 'write()' function.

- The 'write()' function does not wait for signals anymore. This can have
  the effect that data written by a VFS library user has not been
  processed by a file system server yet when the library user asks for the
  size of the file or closes it (both done with RPC functions at the file
  system server). For this reason, a user of the VFS library should
  request synchronization before calling 'stat()' or 'close()'. To make
  sure that a file system server has processed all write request packets
  which a client submitted before the synchronization request,
  synchronization is now requested at the file system server with a
  synchronization packet instead of an RPC function. Because of this
  change, the synchronization interface of the VFS library is now split
  into 'queue_sync()' and 'complete_sync()' functions.

Fixes #2399
2017-08-28 16:49:38 +02:00
Norman Feske
8312950e2f gems: app/depot_query 2017-08-28 16:49:38 +02:00
Norman Feske
c8b2222485 depot: add pkg/test-fs_report 2017-08-28 16:49:38 +02:00
Norman Feske
3e8c4ebde2 run: concatenate 'install_config' args
This patch enables one to supply a list of arguments to
'install_config'. The arguments appear concatenated in the resulting
config file. This is useful for embedding dynamically generated content
into an otherwise static configuration. For example, in the following
config, the 'pkg' attribute of the '<query>' config node is defined by
the return value of the 'query_pkg' function:

  install_config {
  <config>
    ...
    <start name="depot_query">
      ...
      <config>
        <query pkg="genodelabs/pkg/} [query_pkg] {"/>
      </config>
    </start>
  </config>}
2017-08-28 16:49:38 +02:00
Norman Feske
5f4ca67cf9 run: add create_tar_from_depot_binaries function
This function can be used to mirror parts of the depot to be used at
runtime.
2017-08-28 16:49:37 +02:00
Norman Feske
3e95a42fae depot: remove bin/<arch>/<api-version> subdir
Fixes #2459
2017-08-28 16:49:37 +02:00
Norman Feske
a4b543bc80 init: avoid repeated config XML parsing 2017-08-28 16:49:37 +02:00
Norman Feske
bfbe5128cd tar_rom: minor documentation fix 2017-08-28 16:49:37 +02:00
Norman Feske
6184a27619 init: defer forwarded session requests when needed
This patch changes init's service forwarding such that pending requests
are kept unanswered as long as the requested service is not present
(yet). In dynamic-init scenarios, this is needed in situtions where the
dynamic init is known to eventually provide the service but the internal
subsystem is not ready yet. Previously, a client that attempted to
request a session in this early phase would get a 'Service_denied'
exception. By deferring the forwarding in this situation, the behaviour
becomes deterministic.

If a matching '<service>' exists but there is no matching policy sub
node, the request is answered with 'Service_denied' - as expected.
2017-08-28 16:49:37 +02:00
Christian Prochaska
b3e039d0b1 base: name initial thread according to child policy
Fixes #2494
2017-08-28 16:49:37 +02:00
Martin Stein
27a608a20a core: ignore boot modules with size 0
A boot module with size 0 previously made Core crash with a page fault in
Region_map_component::attach. This patch prevents the creation of ROM-FS
entries for such modules.

Ref #2490
2017-08-28 16:49:36 +02:00
Martin Stein
23f35370a2 core: generic ROM module initialization
For most base platforms (except linux and sel4), the initialization of
boot modules is the same. Thus, merge this default implementation in the
new unit base/src/core/platform_rom_modules.cc.

Ref #2490
2017-08-28 16:49:36 +02:00
Martin Stein
abc80b7782 prepare_port sel4: check required python modules
This prevents undescriptive errors when building sel4.

Ref #2490
2017-08-28 16:49:36 +02:00
Martin Stein
64377f4b80 core, region map: handle failing metadata assign
In Region_map_component::attach, storing the metadata for a region may
throw an exception. Catch it and throw an Invalid_dataspace exception.

Ref #2490
2017-08-28 16:49:36 +02:00
Martin Stein
b2624be2ad allocator avl: exception if metadata assign fails
The Allocator_avl_tpl::metadata method (assigning variant) may fail
silently. Change this to make debugging easier.

Ref #2490
2017-08-28 16:49:36 +02:00
Martin Stein
0778a0f700 core, region map: more descriptive variable name
In the implementation of Region_map_component::attach
rename variable 'r' 'attach_at'.

Ref #2490
2017-08-28 16:49:36 +02:00
Martin Stein
c0c0d8c600 nic_router: error if uplink domain not configured
Ref #2490
2017-08-28 16:49:36 +02:00
Martin Stein
96c7f8d53f init: be aware of abandoned any-child routes
Previously, init did not test if a service is abandoned on a new
configuration if the service was routed via an any-child route.

Fixes #2483
2017-08-28 16:49:35 +02:00
Martin Stein
9476f3f645 run/init: test abandoned any-child routes
Currently, init does not test wether a service is abandoned on a new
configuration if the service was routed via an any-child route. Trigger
this behaviour in the init test.

Ref #2483
2017-08-28 16:49:35 +02:00
Christian Prochaska
60ae6721db hw_x86_64: read number of I/O redirection table entries from IOAPIC
Fixes #2475
2017-08-23 14:08:37 +02:00
Martin Stein
47dc708887 usb rpi: get rid of local hardware timer
We used a hardware timer locally in the RPI USB driver because a timer
connection was not precise enough to fullfill the host controllers
requirements.

With the modern timer connection interface, however, reading out time at
a connection is microseconds precise and we can remove the local timer.
But we cannot use the same timer connection for doing legacy-interface
stuff like usleep (currently used in LX kit) and modern-interface stuff
like curr_time. Thus, we open two connections for now.

Ref #2400
2017-08-23 14:08:37 +02:00
Martin Stein
b6efa7f6f9 timer connection: fast initial calibration
The calibration of the interpolation parameters was previously only done
periodically every 500 ms. Together with the fact that the parameters
had to be stable for at least 3 calibration steps to enable
interpolation, it took at least 1.5 seconds after establishing a
connection to get microseconds-precise time values.

This is a problem for some drivers that directly start to poll time.
Thus, the timer connection now does a calibration burst as soon as it
switches to the modern mode (the mode with microseconds precision).
During this phase it does several (currently 9) calibration steps
without a delay inbetween. It is assumed that this is fast enough to not
get interrupted by scheduling. Thus, despite being small, the measured
values should be very stable which is why the burst should in most cases
be sufficient to get the interpolation initialized.

Ref #2400
2017-08-23 14:08:37 +02:00
Martin Stein
adaad64fbb timer connection: relax factor shifting
When in modern mode (with local time interpolation), the timer
connection used to maximize the left shifting of its
timestamp-to-microseconds factor. The higher the shift the more precise
is the translation from timestamps to microseconds. If the timestamp
values used for determining the best shift were small - i.e.  the delay
between the calibration steps were small - we may got a pretty big
shift.  If we then used the shift with bigger timestamp values - i.e.
called curr_time seldom or raised calibration delays - the big shift
value became a problem. The framework had to scale down all measured
timestamps and time values temporarily to stay operative until the next
calibration step.

Thus, we now raise the shift only that much that the resulting factor
fullfills a given minimum. This keeps it as low as possible according
to the precision requirement. Currently, this requirement is set to 8
meaning that the shifted factor shall be at least 2^8 = 256.

Ref #2400
2017-08-23 14:08:37 +02:00
Martin Stein
31af206a8c hw rpi: fix bug that caused bad timer precision
The kernel timer on RPI is able to measure time microseconds-precise.
Howeer, due to a bug, we dropped precision during the ticks-to-time
translation and return only milliseconds-precise time.

Ref #2400
2017-08-23 14:08:37 +02:00
Martin Stein
6dfb903bd0 timer connection: always work with microseconds
As the timer session now provides a method 'elapsed_us', there is no more need
for doing any internal calculations with values of milliseconds.

Ref #2400
2017-08-23 14:08:36 +02:00
Martin Stein
8750e373a0 timer session: add elapsed_us method
As timer sessions are not expected to be microseconds precise (because
of RPC latency and scheduling), the session interface provided only a
method 'elapsed_ms' although the back end of this method in the timer
driver works with microseconds.

However, in some cases it makes sense to have a method 'elapsed_us'. The
values it returns might be milliseconds away from the "real" time but it
allows you to work with delays smaller than a millisecond without
getting a zero delta value.

This commit is motivated by the need for fast bursts of calibration
steps for the time interpolation in the new timer connection.

Ref #2400
2017-08-23 14:08:36 +02:00
Christian Prochaska
f7f2c86c41 libc_noux: increase stack size
Fixes #2492
2017-08-23 14:08:36 +02:00
Christian Prochaska
93371be750 noux_tool_chain.inc: increase capability quotas
Fixes #2491
2017-08-23 14:08:36 +02:00
Alexander Boettcher
9cac99172b noux_bash.run: increase 'fb_drv' capability quota
Fixes #2489
2017-08-23 14:08:36 +02:00
Christian Helmuth
8b073f46df depot: update recipe hashes 2017-08-18 10:25:28 +02:00
Alexander Boettcher
571232fd41 virtualbox.run: support network for multiple VMs 2017-08-18 10:24:48 +02:00
Alexander Senier
c1a46c29b0 run: use absolute path for symlinks in linux run dir
The relative path results in dangling symlinks if the run script
is located in a subdirectory below run/

Fixes #2478
2017-08-18 10:24:48 +02:00
Alexander Boettcher
6f8cc92ce0 run: disable some scripts in autopilot mode
because of the limit hardware features of our x86 32bit test hardware
2017-08-18 10:24:48 +02:00
Sebastian Sumpf
48134c2a0b ldso/cxx: show symbols names of undefined references
Fixes #2482
2017-08-18 10:24:48 +02:00
Alexander Senier
ee40d29b91 base-linux: Log error message for too long files
The filename buffer of a dataspace in base-linux is limited to
40 bytes. When using file names longer than this, the remainder
gets dropped silently. Add an error message to aid debugging this
case.
2017-08-18 10:24:48 +02:00
Alexander Senier
23db75deff global.mk: Make build messages configurable
This is helpful for disabling messages in etc/tools.conf by
setting it to e.g.

   MSG_LINK = @true ""

This results in much shorter and less cluttered logs in automatic
builds.
2017-08-18 10:24:47 +02:00
Alexander Boettcher
4020766105 sel4: adapt timeouts of run scripts
Issue #2451
2017-08-18 10:24:47 +02:00
Alexander Boettcher
5aab244ce3 sub_rm.run: use config rom for steering test
instead of compile time config enums.
2017-08-18 10:24:47 +02:00
Alexander Boettcher
fd0b256f7c sel4: support cpu utilization via TRACE service
using benchmark infrastructure of the seL4 kernel

Issue #2451
2017-08-18 10:24:47 +02:00
Alexander Boettcher
69e71147ef platform_drv: replace nova specific device_pd
by using generic Pd_session::map instead for eager memory mappings of DMA
memory.

Issue #2209
2017-08-18 10:24:47 +02:00
Alexander Boettcher
fe4bdde687 nova: implement Pd_session::map
- factor out Rm_client::pager lambda code into utility
  Region_map_component::create_map_item
- use utility to find/lookup physical addresses to be mapped eagerly

Issue #2209
2017-08-18 10:24:46 +02:00
Alexander Boettcher
58e4f6cf9d core: add map method to pd_session interface
The method can be used to trigger the eager insertion of page frames into
page tables. Intention: to be used for memory used for DMA.

Issue #2209
2017-08-18 10:24:46 +02:00
Emery Hemingway
5f35175644 app/sequence: execute components in sequence
Fix #2476
2017-08-18 10:24:46 +02:00
Alexander Boettcher
523b317fe6 vbox4: disable muen run targets due to issue #2399 2017-08-18 10:24:46 +02:00
Alexander Boettcher
8e798ab904 vbox5: disable muen
vbox5 is not supported on muen/hw
2017-08-18 10:24:46 +02:00
Norman Feske
bf04b0c3aa ports: update URL for downloading lynx 2017-08-18 10:24:46 +02:00
Alexander Boettcher
f825775e40 sel4: update to kernel 6.0
Issue #2451
2017-08-18 10:24:45 +02:00
Alexander Boettcher
0ddda79511 sel4: add priority support
Issue #2451
2017-08-17 11:04:24 +02:00
Alexander Boettcher
7a8e0e59af sel4: enable smp for x86
Issue #2451
2017-08-17 11:04:24 +02:00
Josef Söntgen
0dd9c6a018 run: add error checking to power on step 2017-08-17 11:04:24 +02:00
Emery Hemingway
2d8bfd8569 pthread: do not error from pthread_condattr_setclock dummy
Do not regard a fake condattr object produced by pthread_condattr_init
as invalid when passed to no-op dummies.

Fix #2471
2017-08-17 11:04:23 +02:00
Emery Hemingway
ad6c94bb09 input_filter character mapping rules for the Workman layout
http://workmanlayout.org/

Fix #2473
2017-08-17 11:04:23 +02:00
Norman Feske
a9eb25f07f gems: fix cap quotas of launcher.run scenario
The launcher.run scenario was last updated mid-may of the recently
developed cap-quota accounting (before all cap types were covered).
Hence, the quotas used in the scenario are too low. This patch adjusts
the values such that the scenario can be started on NOVA on Qemu. It
also fixes a warning about a deprecated way of configuring the
report_rom component.

Thanks to Jörg-Christian Böhme for reporting!
2017-08-17 11:04:23 +02:00
Alexander Boettcher
4cacc58cd2 tool: add bender with fixed multiboot2 end tag 2017-08-17 11:04:23 +02:00
Emery Hemingway
31caae4765 lib/vfs/fatfs: FAT file-system plugin using FatFS library
See repos/libports/src/lib/vfs/fatfs/README and
/home/user/repo/genode/repos/libports/run/libc_vfs_fat.run for
documentation.

Ref #2410
2017-08-17 11:04:23 +02:00
Emery Hemingway
6401d52e61 test/libc_vfs: interpret EPERM to indicate missing symlink support
Ref #2462
2017-08-17 11:04:23 +02:00
Emery Hemingway
cfa1bec00d run template for block-backed VFS plugins
Repurpose the libc plugin test template libc_filesystem_test.inc into
libc_vfs_filesystem_test.inc.

Ref #2410
2017-08-17 11:04:22 +02:00
Emery Hemingway
f09fc4a5a2 Update FatFS port to version 0.13
- Update FatFS port from 0.07e to 0.13
- Multi-device support
- Basic test at run/fatfs
- Adaption of existing components

Note, ffat is now consistently renamed to fatfs.

Ref #2410
2017-08-17 11:04:22 +02:00
Christian Helmuth
473aa3454d Move libc file-system test into test/libc_vfs
Preparation for removing ffat library.

Issue #2410
2017-08-17 11:04:22 +02:00
Alexander Boettcher
de06eefbac hw: evaluate write fault on RO page
rm_fault.run triggers write on read-only ROM provided by core, which
fails without this patch:

arm - "raised unhandled data abort"
x86 - (silent/invisible) busy loop because write fault gets never resolved
2017-08-17 11:04:22 +02:00
Sebastian Sumpf
5adda2d934 usb: add asynchronous interface release
This became necessary, since URBs may still be pending upon interface
release.

Fixes #2466
2017-08-17 11:04:22 +02:00
Christian Helmuth
132748a783 Fix location setting in affinity test
This fixes a regression introduced by me in
16914bddc8.
2017-08-17 11:04:22 +02:00
Christian Helmuth
e8c8776959 foc: propagate affinity location on thread creation 2017-08-17 11:04:21 +02:00
Emery Hemingway
2deddf1e6d Check for symlink target length errors
Check for symlink length errors at the VFS library and the ram_fs and
vfs servers.

Fix #2462
2017-08-17 11:04:21 +02:00
Emery Hemingway
cfdac3f4c3 ram_fs: check symlink writes for termination bytes
Ref #2461
2017-08-17 11:04:21 +02:00
Alexander Boettcher
0743ea87ed rm_fault.run: check for write faults on ROM
Issue #2451
2017-08-17 11:04:21 +02:00
Alexander Boettcher
da5441292a sel4: add Wandboard Quad (iMX6) support
Issue #2451
2017-08-17 11:04:21 +02:00
Alexander Boettcher
c22b60f0c4 base: add initial r0 register to crt0.s for arm
Issue #2451
2017-08-17 11:04:21 +02:00
Alexander Boettcher
782b457476 wand_quad: re-enable i.MX6 EPIT user level timer
Issue #2451
2017-08-17 11:04:21 +02:00
Alexander Boettcher
66c0c7b6f1 sel4: add x86_64 support
Issue #2451
2017-08-17 11:04:20 +02:00
Norman Feske
e31806d4e6 dde_rump: fix rump_iso test
The run script did not consider the routing for the environment ROM
sessions for the test-iso component. It routed all ROM sessions -
including the ones for the executable and the dynamic linker - to
fs_rom. The patch also adds the cap quota definitions required since
version 17.05 and fixes a whitespace inconsistency between the test
program and the run script.

Thanks to Steven Harp for reporting!
2017-08-17 11:04:20 +02:00
Norman Feske
1f679cdffe ports: assign caps in genode_org.run, lighttpd.run 2017-08-17 11:04:20 +02:00
Christian Helmuth
31cffe52a6 usb_terminal: remove obsolete vendor/product enums 2017-08-17 11:04:20 +02:00
Christian Helmuth
e5f0dae598 terminal_log: carriage-return on newline
This is expected by hardware terminals, ie., terminal programs connected
to null-modem serial connections. Otherwise, the next line starts at the
column right after the last line.
2017-08-17 11:04:20 +02:00
Christian Prochaska
178795f2ec virtualbox.run: increase capability quota for fb_drv
Fixes #2463
2017-08-17 11:04:20 +02:00
Emery Hemingway
e2c1ea04ea depot: recipes for src/ram_blk, src/vfs
Ref #2446
2017-08-17 11:04:19 +02:00
Emery Hemingway
c5c9d71df3 libc: track O_ACCMODE flags from open
Fix #2457
2017-08-17 11:04:19 +02:00
Alexander Senier
87c19cb11a libc: handle O_CREAT|O_NOFOLLOW in open correctly
We return ELOOP if the file already exists on
open(...,O_CREAT|O_NOFOLLOW).

Fixes #2458
2017-08-17 11:04:19 +02:00
Alexander Boettcher
51dcf5f7f8 core: destruct platform_pd before ram_ds_factory
Platform_pd "_pd" uses a allocator for, which relies on the mapped RAM
dataspace within core. Unfortunately the RAM dataspaces are already freed up
during _ram_ds_factory destruction, which may lead to trouble if accessed
afterwards.

Issue #2451
2017-08-17 11:04:19 +02:00
Alexander Boettcher
92db5d2c4e sel4: limit max relocation memory to 256M
relocation is required, to avoid overlapping phdr in the elf binaries, but
sel4 will fail to boot if bender relocates the images at the end of physical
memory. Limit the physical relocation address to a fixed 256M value, so that
sel4 will work.

Issue #2451
2017-08-17 11:04:19 +02:00
Alexander Boettcher
95329c82e2 sel4: update to 5.2.0
Issue #2451
2017-08-17 11:04:19 +02:00
Alexander Boettcher
a717e92186 base: set CPP to our custom genode-cpp
Issue #2451
2017-08-17 11:04:18 +02:00
Christian Helmuth
145011b420 sd_card_drv: prevent deprecated warnings 2017-08-17 11:04:18 +02:00
Norman Feske
18cea099f0 depot: recipes for ahci, fs_rom, ram_fs, usb_block 2017-08-17 10:59:44 +02:00
Norman Feske
50a1b84308 usb_drv: wait for first valid config
This patch defers the initialization of the USB driver until its
configuration is valid.
2017-08-17 10:59:44 +02:00
Alexander Boettcher
24875c0ea8 platform_drv: add report about available pci devices
Issue #1359
2017-08-17 10:59:44 +02:00
Norman Feske
7d12d7a78f fs_report.run: replace test with dedicated program
The new version of the test exercises the combination of fs_report with
ram_fs and fs_rom as a more flexible alternative to report_rom.

It covers two corner cases that remained unaddressed by fs_rom and
ram_fs so far: First, the late installation of a ROM-update signal
handler at fs_rom right before the content of the file is modified.
Second, the case where the requested file is not present on the file
system at the creation time of the ROM session. Here, the ram_fs missed
to inform listeners for the compound directory about the later created
file.
2017-08-17 10:59:43 +02:00
Norman Feske
d649451c3d fs_rom: trigger deferred ROM-update signal
This patch ensures that fs_rom delivers a ROM-update notification in the
case where the underlying file was changed in-between requesting the
initial ROM content and registering the signal handler.
2017-08-17 10:59:43 +02:00
Norman Feske
bfcdab6079 fs_rom: make read-packet handling more robust
With the introduction of the CONTENT_CHANGED notifications delivered via
the packet stream, the assumption that no more than one READ packet is
in flight at all times does no longer hold. If the fs server responds
to a CONTENT_CHANGED packet while the fs_rom expects the completion of a
read request, the '_update_dataspace' method would prematurely return,
leaving the dataspace unpopulated. This patch solves the problem by
specifically waiting for the completion of the read request.
2017-08-17 10:59:43 +02:00
Norman Feske
0b580628cf file system: track content via version counter
This makes the delivery of CONTENT_CHANGED responses more robust.
2017-08-17 10:59:43 +02:00
Christian Prochaska
6a43f3c11a file system: use Id_space instead of Node_handle_registry
Fixes #2436
2017-08-17 10:59:43 +02:00
Norman Feske
0d1be4abe2 depot: update recipe hashes 2017-06-29 12:00:04 +02:00
Christian Helmuth
78f1fd29f7 Translate buffer-exceeded exception in Session_requester
Session_requester inherits from Dynamic_rom_session::Content_producer
which specifies the Buffer_capacity_exceeded exception which is thrown
on insufficient buffer space.
2017-06-29 12:00:03 +02:00
Christian Helmuth
c18dffa9fa base: align metadata allocation in heap at 16 byte
Issue #754
2017-06-29 12:00:03 +02:00
Norman Feske
a9da97bc4a init.run: lower timing sensitivity
Instead of relying on init's delayed reporting, we explicitly force init
to produce a new report with the up-to-date child-RAM information.
2017-06-29 12:00:03 +02:00
Norman Feske
ce01fd5321 depot: update drivers_interactive-pbxa9 to 17.05
With this commit, the wm.run script works for the pbxa9 platform when
using the base-hw kernel.
2017-06-29 12:00:02 +02:00
Norman Feske
4b862cb047 depot: fix src/pbxa9_drivers recipe
This is a follow-up commit to "os: move private declarations to driver
target".
2017-06-29 12:00:02 +02:00
Norman Feske
19f7d11f1a tool/run: select 'arm_v7a' depot archives
The former use of 'arm_v7' as architecture was too unspecific. Depot
binary archives for Cortex-A8/A9 platforms should be generated for
the 'arm_v7a' architecture to define the required compile flags
(i.e., -march).
2017-06-29 12:00:02 +02:00
Norman Feske
d2b21d294e base/mk: streamline spec includes for ARM
This patch sets the -march complile flag in spec/arm_v7a.mk, which
enables us to build depot archives for the 'arm_v7a' architecture.

It also removes copy-pasted comments that offer no valuable insights but
contain grammar errors.
2017-06-29 12:00:01 +02:00
Alexander Boettcher
430c0f12e0 vbox: test VM test case with a lot of memory
Issue #2455
2017-06-29 12:00:01 +02:00
Alexander Boettcher
163fe6caaa vbox: make vm memory configurable for vbox*.run
Issue #2455
2017-06-29 12:00:01 +02:00
Alexander Boettcher
0469858f05 vbox5: add raw disk VM test case
Issue #2455
2017-06-29 12:00:01 +02:00
Alexander Boettcher
ad1f38a780 vbox5: recognized more than 4Gb in VMs
Fixes #2455
2017-06-29 12:00:00 +02:00
Martin Stein
67fc1ec42b timeout test: prioritize timer driver over test
Ref #2400
2017-06-29 12:00:00 +02:00
Martin Stein
8d2ee6d040 timer okl4: remove deprecated const_cast
Ref #2400
2017-06-29 12:00:00 +02:00
Martin Stein
61f59818d3 pit/fiasco timeout: raise time error tolerance
On platforms that use the PIT timer driver, 'elapsed_ms' is pretty
inprecise/unsteady (up to 3 ms deviation) for a reason that is not
clearly determined yet. On Fiasco and Fiasco.OC, that use kernel timing,
it is the same. So, on these platforms, our locally interpolated time
seems to be fine but the reference time is bad. Until this is fixed, we
raise the error tolerance for these platforms in the run script.

Ref #2400
2017-06-29 11:59:59 +02:00
Norman Feske
cd3f6aba37 depot: remove foc_native_pd from src/base-foc
This patch is a follow-up commit to "foc: remove obsolete features".
It fixes the extraction of the src/base-foc archive.

Issue #2405
2017-06-29 11:59:59 +02:00
Christian Helmuth
69215bc2fc hw: configure SDHC IRQ secure on imx53_qsb_tz 2017-06-29 11:59:59 +02:00
Alexander Boettcher
a9f263db16 vbox4: extended AMD SVM support
Issue #2454
2017-06-29 11:59:59 +02:00
Alexander Boettcher
9b93ebfa18 nova: extend SVM support
- Win7 32 bit VM on 32bit Genode/Nova runs fin runs fine
- tested on Phenom II X4

Issue #2454
2017-06-29 11:59:58 +02:00
Adrian-Ken Rueegsegger
c14149b4eb Update Muen port
- Use latest Muen version
- Sync VirtualBox Muen subject state
- Rework Muen download so contrib/muen-* remains untouched after port
  has been prepared
2017-06-29 11:59:58 +02:00
Christian Helmuth
82af06a42a sd_card: enable wand_quad/imx6 again 2017-06-29 11:59:58 +02:00
Christian Helmuth
ad824cea11 sd_card: cleanup driver library structure
Now both, the sd_card_drv and sd_card_bench use LIBS=sd_card_drv.
2017-06-29 11:59:58 +02:00
Christian Helmuth
4d11b7e5a8 sd_card: move defs from wand_quad to imx6 header 2017-06-29 11:59:57 +02:00
Norman Feske
f1bd097568 depot: fix src/demo recipe
Without this fix, the src/demo recipe can fail when using -j.
2017-06-29 11:59:57 +02:00
Alexander Boettcher
67a1cb92f2 nova: handle instable TSC calibration
Issue #2400
2017-06-29 11:59:57 +02:00
Alexander Boettcher
7673fed1f1 nova: avoid copying core.o to image file 2017-06-29 11:59:56 +02:00
Emery Hemingway
73eb7a52a0 server/fs_report: do not append '.report to file names
Appending a suffix to report filenames was behavior inherited from
fs_log, it prevents creating files where directories need to be created
later. But unlike logs, only a subset of the hierarchy will report and
those that do append a component-local label, so the risk of collision
is low.

By removing the suffix fs_rom can serve reports back as ROM just as
report_rom does.

Ref #2422
2017-06-29 11:59:56 +02:00
Norman Feske
2b569e37e1 depot: fix Makefile target build_bin_archive
When building with multiple jobs, the 'Makefile' rule may be executed
before any of its sibling rules, which implicitly create the target
directory. In this case, the attempt to create the symlink for
'Makefile' fails and the 'build_bin_archive' aborts. Analogously to the
sibling rules, this fix creates the target directory as a side effect of
the 'Makefile' rule.
2017-06-29 11:59:55 +02:00
Norman Feske
4c8bfceec4 depot/create: build only if binaries are specified
This patch makes the build step of the create tool conditional. If
merely creating api, src, pkg, or raw archives, the invocation of the
'build' tool can be skipped. Otherwise, the heap message for the 'build'
tool is displayed (because it is called w/o any arguments), which is
misleading to the user.
2017-06-29 11:59:55 +02:00
Christian Prochaska
04f82721b1 fs_rom_update.run: add capability quota
Fixes #2453
2017-06-29 11:59:54 +02:00
Martin Stein
889db34cc3 hw cortex_a9: fix bug in kernel timer
A bug in the timer-ticks-to-microseconds translation of the kernel timer
caused the user time to periodically get stuck for about 32 milliseconds
and then jump forward to the normal level again.

Ref #2400
2017-06-29 11:59:54 +02:00
Martin Stein
9b1c26ab7f timeout lib: dynamic interpolation-factor shift
In the timeout framework, we maintain a translation factor value to
translate between time and timestamps. To raise precision we scale-up
the factor when we calculate it and scale-down the result of its
appliance later again. This up and down scaling is achieved through
left and right shifting. Until now, the shift width was statically
choosen. However, some platforms need a big shift width and others a
smaller one. The one static shift width couldn't cover all platforms
which caused overflows or precision problems.

Now, the shift width is choosen optimally for the actual translation
factor each time it gets re-calculated. This way, we can take care that
the shift always renders the best precision level without the risk for
overflows.

Ref #2400
2017-06-29 11:59:54 +02:00
Martin Stein
99d971f348 timeout test: result buffer as struct
The result-buffer related members of the fast polling test are
the same for each buffered result type. Thus, we can make the
code easier by providing them through a struct.

Ref #2400
2017-06-29 11:59:53 +02:00
Norman Feske
c7b739cc61 bomb.run: define resource preservation for init
This patch increases init's preserved RAM and capability quota to
account for a current limitation of init with respect to the creation of
sessions to parent services:

In contrast to regular routed services, sessions to parent services are
created via 'Env::session'. The implementation of 'Env::session'
automatically upgrades session quotas on demand, which is the desired
behavior for regular 'Connection' objects. However, for sessions
established on the behalf of init's children, we would need to reflect
the error condition to the child instead of resolving it locally within
init (by subsidizing the session with init's quota). This patch leaves
this issue unresolved but fixes the symptom for the bomb test. It is
meant as an interim solution until the handling of parent sessions is
revised.
2017-06-29 11:59:53 +02:00
Norman Feske
f95bfddc09 base: simplify handling of session-creation errors
This patch decouples the error handling of the quota transfers
and the actual session creation. In the previous version, an error in
the 'initiate_request' phase would leave the local scope via an
exception without disarming the transfer guard objects. This way,
the guard destructors would attempt the returning of session quota in
addition to the explicit call of '_revert_quota_and_destroy' as done in
the error handling of the 'initiate_request' operation.

In the presence of a session-creation error in the 'initiate_request'
phase, session quota would eventually be returned twice. This patch
removes the intertwined error handling of both phases in a way that the
guards of the first phase (quota transfer) are no longer present in the
second phase (initiate_request).
2017-06-29 11:59:52 +02:00
Norman Feske
5566aa0f94 bomb test: consider preserved PD session quota
This is an adaptation to the commit "core: prevent transfer of static PD
session quota".
2017-06-29 11:59:52 +02:00
Norman Feske
f278024e44 core: prevent transfer of static PD session quota
This patch makes sure that the initial PD session limit (as defined by
the client-provided session quota) is preserved over the entire lifetime
of the PD session. That means, it cannot be transferred to other PD
sessions. Otherwise, it may be impossive to hand back all the static
session quota to the PD-session client at session-destruction time
because parts of the initial quota would no longer belong to the
session.

Note that the initial limit can still be used for allocations within the
PD session as those allocations are automatically reverted at
session-destruction time.
2017-06-29 11:59:52 +02:00
Alexander Boettcher
238df4dd58 core: add information about infos provided by core
Issue #2242
2017-06-29 11:59:52 +02:00
Alexander Boettcher
9f9c5a3166 tool: qemu support for UEFI boot
- add UEFI firmware for Qemu

Issue #2242
2017-06-29 11:59:51 +02:00
Alexander Boettcher
3aca3256c6 tool: support image/uefi for grub2/uefi boot
- add x86_32/64 GRUB2 UEFI boot loader
- enable support for nova

Issue #2242
2017-06-29 11:59:51 +02:00
Johannes Kliemann
1205607e78 os: add framebuffer based on platform_info of core
Issue #2242
2017-06-29 11:59:51 +02:00
Johannes Kliemann
615f2ba2da nova: support mbi2 framebuffer
- export framebuffer information as platform_info ROM by core

Issue #2242
2017-06-29 11:59:50 +02:00
Alexander Boettcher
f48e71e070 acpica: use platform_info for rsdt/xsdt lookup
Issue #2242
2017-06-29 11:59:50 +02:00
Alexander Boettcher
04b2919a1a acpi_drv: use platform_info for rsdt/xsdt lookup
Issue #2242
2017-06-29 11:59:50 +02:00
Alexander Boettcher
f30f0a81e0 nova: uefi boot support using multiboot2
- kernel provides ACPI RSDT/XSDT pointer
- core exports it via a ROM called "platform_info"

Issue #2242
2017-06-29 11:59:50 +02:00
Christian Helmuth
019528ee6a Disable lock tests on platforms without priorities
The implementations of the lock and C++ guards tests depend on
thread-execution priorities, which produces false negatives of the whole
thread test on platforms without priority support.
2017-06-29 11:59:49 +02:00
Martin Stein
5fec4a2166 timeout test: raise error tolerance on nova + qemu
On QEMU, NOVA uses the pretty unstable TSC emulation as primary time
source. Thus, timeouts do not trigger with the common precision (< 50
ms). Use an error tolerance of 200 ms for this platform constellation.

Ref #2400
2017-06-29 11:59:49 +02:00
Alexander Boettcher
94095a27ac nova: adjust calibration time
Extend the calibration time of CPUs with Local-APIC that does not support the
TSC-Deadline mode. Improves the accuracy of timeouts.

Issue #2400
2017-06-19 12:35:57 +02:00
Christian Helmuth
6f2afb9b44 hw: prevent warning about conversion narrowing 2017-06-19 12:35:57 +02:00
Josef Söntgen
8f577e9d25 usb: use if-else in packet_handler
Apparently this construct leads to a compiler errors like

  error: second operand to the conditional operator is of type ‘void’, but
  the third operand is neither a throw-expression nor of type ‘void’
2017-06-19 12:35:57 +02:00
Christian Helmuth
c9db94313c libc: improve VFS error handling 2017-06-19 12:35:57 +02:00
Christian Helmuth
d5b85da8de Prevent warning about tiny stack in weak_ptr test 2017-06-19 12:35:57 +02:00
Christian Helmuth
c223f74ce5 libc: support getsockopt(SO_TYPE) 2017-06-19 12:35:57 +02:00
Martin Stein
745fa4fd67 timeout test: improve documentation
Ref #2400
2017-06-19 12:35:56 +02:00
Martin Stein
71fd2b4cde timeout test: consider time shift between sessions
The fast polling test uses one timer session for raw 'elapsed_ms' calls
and another one for potentially interpolated 'curr_time' calls. It then
compares the two results against each other. However, until now, the
test did not consider that the duration of the session construction may
create a remarkable shift between the local times of the two sessions.
This shift is now determined and compensated before doing any
comparison.

Ref #2400
2017-06-19 12:35:56 +02:00
Martin Stein
9ded7e0295 nic_dump test: raise nic_router cap quota
Did not suffice at least at hw + x86_64.

Ref #2398
2017-06-19 12:35:56 +02:00
Christian Prochaska
3aa0a772b9 fuse_fs: add test run scripts
Fixes #2448
2017-06-19 12:35:56 +02:00
Christian Prochaska
a6db86b4dc fuse_fs: handle errors on mkdir correctly
Fixes #2449
2017-06-19 12:35:56 +02:00
Christian Helmuth
ba9ef7fdee foc: use slab for meta-data in RPC cap factory 2017-06-19 12:35:56 +02:00
Christian Helmuth
d6e41ae7e3 foc: do not accidentally delete boot directory
This partially reverts commit 7f7f8063dd
and adds the eager creation of the expected ARM boot directory.
2017-06-19 12:35:56 +02:00
Christian Helmuth
c16288bcde timer/foc: use current KIP-clock API
This prevents L4_DEPRECATED warnings.
2017-06-19 12:35:55 +02:00
Martin Stein
1ea745ca2e signal test: do not test multiple handlers
The multiple-handlers test was checking if handlers at one signal were
activated in a fair manner. But on Qemu, the error tolerance of one was
too small in rare cases (2 of 100 runs). However, having multiple
handlers for the same signal context can be considered deprecated
anyway. With the recommended Signal_handler wrapper for signal sessions,
you can't use this feature. Thus, we removed the multiple-handlers test.

Fixes #2450
2017-06-19 12:35:55 +02:00
Stefan Kalkowski
a004462096 hw: fix capability accounting of kernel/core
The recently implemented capability resource trading scheme unfortunately
broke the automated capability memory upgrade mechanism needed by base-hw
kernel/core. This commit splits the capability memory upgrade mechanism
from the PD session ram_quota upgrade, and moves that functionality
into a separate Pd_session::Native_pd interface.

Ref #2398
2017-06-19 12:35:55 +02:00
Stefan Kalkowski
6f8dc9054a base: setup parent upgrade mechanism eagerly
Fix #2447
2017-06-19 12:35:55 +02:00
Christian Helmuth
06b25a9082 Adjust GPIO cap quota in nic run scripts 2017-06-19 12:35:55 +02:00
Christian Prochaska
a1b1525ec1 lx_fs: handle errors on mkdir correctly
Fixes #2444
2017-06-19 12:35:55 +02:00
Norman Feske
c8e4d2715b depot: fix binary-archive handling for libs
The depot tool did not consistently distinct libraries from regular
targets when handling binary archives. The binary archive of a regular
target is located at <user>/<bin>/<arch>/<name> whereas a library is
located at <user>/<bin>/<arch>/<api>/<name>.

Fixes #2438
2017-06-19 12:35:54 +02:00
Christian Helmuth
4c0792dc90 depot: public key for chelmuth 2017-06-19 12:35:54 +02:00
Emery Hemingway
47c616ab94 server/fs_report: write reports to file-systems
Fix #2422
2017-06-19 12:35:54 +02:00
Emery Hemingway
1eb37fbe22 VFS: move 'sync' from 'File_system' to 'Directory_service'
The the parent 'Directory_service' interface is reachable from
'Vfs_handle', whereas the 'File_system' interface is not.

Fix #2437
Ref #2422
2017-06-12 14:32:07 +02:00
Emery Hemingway
231a7e92fc depot: public key and download location for ehmry
Fix #2441
2017-06-12 12:44:45 +02:00
Emery Hemingway
1838fb4773 vfs/ram: check parent directory on file creation
Fix #2443
2017-06-12 12:44:23 +02:00
Ben Larson
bed7b9cf1c depot: add blarson to depot sources 2017-06-12 11:57:04 +02:00
Alexander Boettcher
0f227d5d24 run: adjust virtualbox cap quotas to fit native hw 2017-06-08 11:33:31 +02:00
Alexander Boettcher
77fe0c882b base: check ownership of thread in cpu_session
Fixes #1431
2017-06-08 11:33:06 +02:00
Alexander Boettcher
0523736ce4 acpi: limit device scope paths
Fixes #2371
2017-06-08 11:32:39 +02:00
Alexander Boettcher
4062c63afe tool: fix module overlap checks of bender
Issue #2242
2017-06-08 11:32:15 +02:00
Josef Söntgen
7c9861cc07 netperf: change download URL
Apparently the original netperf host has gone down. For the time
being switch to a stable host like the Ubuntu archive mirror.
2017-06-06 17:26:10 +02:00
Alexander Boettcher
158dbcc7ae vbox5: enable unrestricted guest support
Issue #2338
2017-06-06 13:06:33 +02:00
Martin Stein
b8e2253e5f timeout: fix bug in interpolation
We incorrectly used 'unsigned long' (which is 32 or 64 bit depending on
the CPU architecture) for a timestamp (which is always 64 bit) in the
timer-connection implementation.

Ref #2435
2017-06-06 13:01:43 +02:00
Christian Helmuth
5e1fb42b54 Fix warnings in ADA example 2017-06-02 15:58:22 +02:00
Christian Helmuth
2a35d375fa Fix documentation for extracting the tool chain 2017-06-02 14:36:01 +02:00
Emery Hemingway
32d16c1792 app/launcher: <configfile name="..."/> support
Fix #2404
2017-05-31 17:50:28 +02:00
Martin Stein
23337eb6e7 run/timeout: run also on arm w/o hw and qemu
On platforms were we do not have local time interpolation we can simply
skip the first test stage in the timeout test. This way, we can at least
test the rest.

Fixes #2435
2017-05-31 17:50:28 +02:00
Martin Stein
685f509a43 timer connection: no interpolation on arm w/o hw
On ARM, we do not have a component-local hardware time-source. The ARM
performance counter has no reliable frequency as the ARM idle command
halts the counter. Thus, we do not do local time interpolation on ARM.
Except we're on the HW kernel. In this case we can read out the kernel
time instead.

Ref #2435
2017-05-31 17:50:28 +02:00
Norman Feske
0d79611c03 doc: update commands in depot.txt 2017-05-31 16:29:01 +02:00
Christian Helmuth
5e3e807346 version: 17.05 2017-05-31 16:18:01 +02:00
Christian Helmuth
717985611f depot: public key for genodelabs 2017-05-31 16:18:01 +02:00
Christian Helmuth
892ede515f depot: update recipe hashes 2017-05-31 16:18:01 +02:00
Christian Helmuth
67e33d3948 depot: adjust cap quotas in drivers_interactive_pc (64-bit) 2017-05-31 16:18:01 +02:00
Norman Feske
859762404a News item for version 17.05 2017-05-31 15:45:04 +02:00
Norman Feske
b7140da265 Release notes for version 17.05 2017-05-31 15:45:04 +02:00
Norman Feske
bc2cf29cfe doc: depot documentation 2017-05-31 15:45:04 +02:00
Norman Feske
1e8689bafe depot: adjust cap quotas in drivers_interactive_pc 2017-05-31 13:16:25 +02:00
Norman Feske
7bb8e332a9 depot: adjust base recipe to removed headers
This patch updates the recipes for the base-<kernel> archives to the
recently removed os/config.h and os/timeout.h headers.
2017-05-31 13:16:25 +02:00
Sebastian Sumpf
c3cf7f3c3a riscv: ISA-1.9.1 and GCC-6.3.0 adaptions
Adds 1.9.1 support to base-hw

Note:
* the kernel timer is not working
* dynamic linking is currently not supported
2017-05-31 13:16:24 +02:00
Sebastian Sumpf
6c95eb9aff base-hw: RISC-V BBL
The Berkley Boot Loader handles kernel loading and machine mode
2017-05-31 13:16:24 +02:00
Norman Feske
4cbfed11ee depot: public key for nfeske 2017-05-31 13:16:24 +02:00
Norman Feske
d4975235c2 tool/depot: download archives from web server
This patch replaces the toy downloader (that merely copied files
locally, for testing) with the mechanics needed to download files from a
www server.

It also changes the use of GPG to use detached signatures.

Issue #2339
2017-05-31 13:16:24 +02:00
Emery Hemingway
b814188d7a Remove references to global heap in SDL audio
Ref #1987
2017-05-31 13:16:24 +02:00
Christian Prochaska
697f179e21 ram_fs: acknowledge packet in error case
Fixes #2434
2017-05-31 13:16:24 +02:00
Alexander Boettcher
c232886e0f vbox5: disable support of unrestricted-guest mode
Currently, Ubuntu does not work in unrestricted-guest mode, so, disable
it until this is fixed.

Issue #2338
2017-05-31 13:16:23 +02:00
Christian Prochaska
710947e0a3 gdb_monitor: adapt run scripts to current staging branch
Fixes #2432
2017-05-31 13:16:23 +02:00
Christian Prochaska
428131fd28 noux_tool_chain_auto: adapt to current staging branch
Fixes #2433
2017-05-31 13:16:23 +02:00
Christian Helmuth
854b70fd7d Prevent warning about "narrowing conversion" 2017-05-31 13:16:23 +02:00
Christian Prochaska
99937a6267 qt5: update to version 5.8.0
Fixes #2424
2017-05-31 13:16:23 +02:00
Christian Helmuth
8bd0efced6 Remove obsolete RAM/CAP services from run scripts
Adapted launchpad and also the rm_fault and resource_request tests.

Issue #2407
2017-05-31 13:16:22 +02:00
Stefan Kalkowski
632ef28463 os: removal of deprecated os/config.h (fix #2431) 2017-05-31 13:16:22 +02:00
Stefan Kalkowski
dd214a8b15 foc: suppress gcc warnings of L4Re components
Ref #2405
2017-05-31 13:16:22 +02:00
Emery Hemingway
16be05e530 Optional session label for Rtc connection constructor
Ref #2410
2017-05-31 13:16:22 +02:00
Adrian-Ken Rueegsegger
923fbc9e86 Update Muen port
- Adjust Muen RUN_OPTs
- Update documentation
- Checkout required submodule
2017-05-31 13:16:22 +02:00
Adrian-Ken Rueegsegger
d1b4fb1dff vbox: Simplify Muen guest interupt handling
Drop lock prefix since there is no concurrent access from other CPUs.
2017-05-31 13:16:22 +02:00
Adrian-Ken Rueegsegger
1db8694fd0 vbox: Sync hw_x86_64_muen subject state with Muen SK
VM-exit interruption info was dropped and Vbox only needs guest CR3
value for guest-physical memory translation but does not actually change
it since the VM is running in unrestricted guest mode.
2017-05-31 13:16:21 +02:00
Christian Helmuth
a431657851 lxip: correct msghdr initialization 2017-05-31 13:16:21 +02:00
Josef Söntgen
6d941ede1c noux_tool_chain: remove now unsed libraries
Zlib as well as readline were originally pulled in as a dependency of
pcre. They are now removed because pcre itself does not need them.
2017-05-31 13:16:21 +02:00
Christian Helmuth
febfb3bfe6 Fix source file location in RPi GPIO driver
The explicit relative location of the file instructed both target builds
to generate ../main.o which gloriously fails with parallel builds. The
produced range of error messages was astonishing ranging from "file
truncated" to "TLS reference in ../main.o mismatches non-TLS reference
in ../main.o".
2017-05-31 13:16:21 +02:00
Norman Feske
adb26b5216 API documentation refinements 2017-05-31 13:16:21 +02:00
Christian Helmuth
3c785a4ffb init: use service name from session class
Fixes issue with RAM constrains no longer effective.
2017-05-31 13:16:21 +02:00
Christian Helmuth
e00bd3e45b core: remove PD capability from thread object 2017-05-31 13:16:20 +02:00
Sebastian Sumpf
496671e523 gcc: RISC-V 6.3.0
issue #2423
2017-05-31 13:16:20 +02:00
Christian Helmuth
664702d8b5 Increase timeout of libc_ffat test to 90 seconds 2017-05-31 13:16:20 +02:00
Christian Helmuth
ea48f1f1cc core: remove warning about possibly leaking resources
Too many false positives...

Issue #2398
2017-05-31 13:16:20 +02:00
Christian Prochaska
e7b1cb4a27 qt5: update to version 5.7.1
Issue #2424
2017-05-31 13:16:20 +02:00
Christian Helmuth
b37f411c3f ahci: optionally report discovered devices
Issue #2417
2017-05-31 13:16:20 +02:00
Christian Prochaska
250fd42368 SDL: use libc time functions
Fixes #2415
2017-05-31 13:16:19 +02:00
Christian Prochaska
16deaa9a72 timed_semaphore: fix deprecated warning
Fixes #2429
2017-05-31 13:16:19 +02:00
Christian Prochaska
a507928cde qt5: fix deprecated warnings
Fixes #2427
2017-05-31 13:16:19 +02:00
Stefan Kalkowski
0fb672b493 run: use default Qemu memory size for x86
Fix #2428
2017-05-31 13:16:19 +02:00
Alexander Boettcher
b7da62cd55 vbox4/5: remove printf 2017-05-31 13:16:19 +02:00
Alexander Boettcher
7df58930e2 vbox4/5: add ubuntu VMs of some LTS versions
Issue #2338
2017-05-31 13:16:19 +02:00
Emery Hemingway
25ec021fee server/vfs: ignore invalid handles at close()
Ref #2410
2017-05-31 13:16:18 +02:00
Christian Prochaska
71c5afc3db libc_pipe: fix deprecated warnings
Fixes #2426
2017-05-31 13:16:18 +02:00
Christian Prochaska
040d0c9e42 arora: fix Nitpicker plugin demo
Fixes #2425
2017-05-31 13:16:18 +02:00
Christian Helmuth
923b3ec54d part_blk: prevent deprecated warning 2017-05-31 13:16:18 +02:00
Christian Prochaska
85919d29e2 qt5: update to version 5.6.2
Issue #2424
2017-05-31 13:16:18 +02:00
Alexander Boettcher
f865b71f27 libc: fix expired-timer calculation 2017-05-31 13:16:17 +02:00
Emery Hemingway
c1edfa5d46 lib/vfs/lxip: return READ_QUEUED from read_queued and complete_read
Ref #2406
2017-05-31 13:16:17 +02:00
Christian Prochaska
a304cfca9d ffat_fs: call 'exec_static_constructors()'
Fixes #2421
2017-05-31 13:16:17 +02:00
Christian Prochaska
0909256f97 qt5_qpluginwidget.run: fix symlink
Fixes #2420
2017-05-31 13:16:17 +02:00
Christian Prochaska
104baeeefc qt5_previewer.run: increase Qemu RAM
Fixes #2419
2017-05-31 13:16:17 +02:00
Martin Stein
87c7b0f777 noux_net_lighttpd.run: heavily outdated, remove
E.g., the script manually tried to configure lighttpd and used the old
porting directory structure that was integrated in the repos. For the
same reason it produced compile errors with noux packages.

Ref #2398
2017-05-31 13:16:17 +02:00
Martin Stein
228dbdd527 run + noux_gdb: fix source archiving
We do not have debug symbols in the bin/ binaries anymore. Thus, use the
debug/ binaries instead.  We now have kernel specific binary names for
ld.lib.so and some others. Adapt, to this fact as well.  For doing so
without unnecessary output, provide a new parameter "silent" at the
"kernel_specific_binary" procedure.

Ref #2398
2017-05-31 13:16:16 +02:00
Boris Mulder
d094ff995f part_blk: added optional partitions report 2017-05-31 13:16:16 +02:00
Norman Feske
6299f4a7df base-sel4: print boot-module names 2017-05-31 13:16:16 +02:00
Emery Hemingway
419da32ee3 lib/ldso: coalesce RPC calls for ROM dataspaces
A dataspace capability request to a ROM service may invalidate any
previously issued dataspace. Therefor no requests should be made while a
session dataspace is mapped. Reducing calls to the session also improves
performance where servicing a ROM request has a significant cost.

Fix #2418
2017-05-31 13:16:16 +02:00
Emery Hemingway
5f27c7b9eb initial Nim compiler and standard library support
https://nim-lang.org/

Fix #1879
2017-05-31 13:16:16 +02:00
Christian Helmuth
d0bc389e93 vfs_lxip: correctly initialize iov on remote-file read 2017-05-31 13:16:16 +02:00
Josef Söntgen
f66b828a97 curl: use select instead of poll
The way curl interacts with our poll() emulation on top of
select() leads to problems while establishing a connection.
2017-05-31 13:16:16 +02:00
Josef Söntgen
b361de8379 libc: return true on writefd checks in select on sockets
Instead of files we have to check this condition on sockets but
technically our sockets are regular files as well...
2017-05-31 13:16:15 +02:00
Josef Söntgen
dbec8d7710 libc: pretend to support SO_ERROR
There are programs, e.g. curl, that check if a connection was
established successfully by looking at SO_ERROR. Pretend that
the getsockopt() call was executed to keep them happy. If they
try to use a broken connection, the other socket functions will
bail.
2017-05-31 13:16:15 +02:00
Josef Söntgen
5b6735e1c9 lxip: fix iovec iter operations 2017-05-31 13:16:15 +02:00
Josef Söntgen
028aeafabe libc: only return requested events in poll()
Even if the underlying select() reports events, only report those
to the caller that were initially requested.
2017-05-31 13:16:15 +02:00
Norman Feske
22687bb10b Recipes for noux API, bash, posix 2017-05-31 13:16:15 +02:00
Norman Feske
c4002e6e23 noux: install tar archive as build result
This patch changes the noux build rules to produce a tar archive in
'bin/', alleviating the need for this step from the run scripts.
This way, the visible result of a built noux package is a single (tar)
file in '<build-dir>bin/', which is suited for the use as a ROM module.
2017-05-31 13:16:15 +02:00
Norman Feske
ae3664f4a0 noux: include noux.mk via select_from_repositories
This enables noux packages to be built via the depot tools.
2017-05-31 13:16:14 +02:00
Norman Feske
601e0a8950 noux: avoid using deprecated APIs 2017-05-31 13:16:14 +02:00
Norman Feske
53253ba422 base: add reinit functionality to 'Env'
The 'reinit' and 'reinit_main_thread' methods are needed to implement
fork in Noux. Until now, they were provided by the 'Deprecated_env'
only.
2017-05-31 13:16:14 +02:00
Norman Feske
ecf73e5b17 ports: ABI for libc_noux 2017-05-31 13:16:14 +02:00
Norman Feske
0167d5af50 Integrate core's RAM service into the PD service
Fixes #2407
2017-05-31 13:16:14 +02:00
Norman Feske
5a3a1c704b base: use 'Ram_allocator' as stack-area back end
The 'Stack_area_ram_session' is now a 'Stack_area_ram_allocator', which
simplifies the code and remove a dependency from the 'Ram_session'
interface, which we want to remove after all.

Issue #2407
2017-05-31 13:16:13 +02:00
Norman Feske
d31642e8be core: equip RPC-cap-factory slab with static block
This patch applies the approach of the "core: equip signal-context slab
with initial block" patch to the RPC-capability slab allocator.

Issue #2407
2017-05-31 13:16:13 +02:00
Norman Feske
963a6c37a0 core: equip signal-context slab with initial block
By supplying a statically allocated initial block to the slab allocator
for signal contexts, we become able to construct a 'Signal_broker' (the
back end for the PD's signalling API) without any dynamic memory
allocation. This is a precondition for using the PD as meta-data
allocator for its contained signal broker (meta data allocations must
not happen before the PD construction is complete).

Issue #2407
2017-05-31 13:16:13 +02:00
Norman Feske
a96919632e core: unify Pd_session_component across kernels
Issue #2407
2017-05-31 13:16:13 +02:00
Norman Feske
3fc2a798b2 init: heuristics for DMA buffer allocations
If a child is allowed to constrain physical memory allocations but left
the 'phys_start' and 'phys_size' session arguments blank, init applies
builtin constraints for allocating DMA buffers.

The only component that makes use of the physical-memory constraint
feature is the platform driver. Since the built-in heuristics are
applied to the platform driver's environment RAM session, all
allocations performed by the platform driver satisfy the DMA
constraints.

To justify building-in these heuristics into init as opposed to
supplying the values as configuration arguments, the values differ
between 32 and 64 bit. The configuration approach would raise the need
to differentiate init configurations for both cases, which are
completely identical otherwise.

Issue #2407
2017-05-31 13:16:13 +02:00
Alexander Boettcher
420b66a1f0 platform_drv: remove usage of ram_connection
This commit removes support for limitation of RAM allocations from the
platform_drv. A subsequent commit adds this feature to init.

Issue #2398
Issue #2407
2017-05-31 13:16:13 +02:00
Norman Feske
4773707495 core: split RAM dataspace factory from RAM service
By separating the session-interface concerns from the mechanics of the
dataspace creation, the code becomes simpler to follow, and the RAM
session can be more easily merged with the PD session in a subsequent
step.

Issue #2407
2017-05-31 13:16:12 +02:00
Norman Feske
65225a94b1 core: simplify initialization
This patch removes the 'Core_parent' and 'Core_pd_session', and reduces
the 'Core_env'.
2017-05-31 13:16:12 +02:00
Norman Feske
a1df4fee44 base: restructure signal-submit initialization
This patch allows core's 'Signal_transmitter' implementation to sidestep
the 'Env::Pd' interface and thereby adhere to a stricter layering within
core. The 'Signal_transmitter' now uses - on kernels that depend on it -
a dedicated (and fairly freestanding) RPC proxy mechanism for signal
deliver, instead of channeling signals through the 'Pd_session::submit'
RPC function.
2017-05-31 13:16:12 +02:00
Norman Feske
71efb59873 terminal: add Cell_array destructor
With the capability-quota mechanism, the terminal-session won't always
be constructed completely on the first try (we may run out of caps in
the middle of the construction). Therefore, all members of the object
must be properly destructable. Furthermore, the patch replaces the
sliced heap by a heap to avoid allocating a new dataspace for each line
of the cell array.
2017-05-31 13:16:12 +02:00
Christian Prochaska
a731131c09 arora: fix route in run script
Fixes #2416
2017-05-31 13:16:12 +02:00
Christian Prochaska
6a5da8684f qt5: fix 'qt5_jscore' compile error on ARM
Fixes #2414
2017-05-31 13:16:12 +02:00
Martin Stein
c70fed29f7 os/timer: interpolate time via timestamps
Previously, the Genode::Timer::curr_time always used the
Timer_session::elapsed_ms RPC as back end.  Now, Genode::Timer reads
this remote time only in a periodic fashion independently from the calls
to Genode::Timer::curr_time. If now one calls Genode::Timer::curr_time,
the function takes the last read remote time value and adapts it using
the timestamp difference since the remote-time read. The conversion
factor from timestamps to time is estimated on every remote-time read
using the last read remote-time value and the timestamp difference since
the last remote time read.

This commit also re-works the timeout test. The test now has two stages.
In the first stage, it tests fast polling of the
Genode::Timer::curr_time. This stage checks the error between locally
interpolated and timer-driver time as well as wether the locally
interpolated time is monotone and sufficiently homogeneous. In the
second stage several periodic and one-shot timeouts are scheduled at
once. This stage checks if the timeouts trigger sufficiently precise.

This commit adds the new Kernel::time syscall to base-hw. The syscall is
solely used by the Genode::Timer on base-hw as substitute for the
timestamp. This is because on ARM, the timestamp function uses the ARM
performance counter that stops counting when the WFI (wait for
interrupt) instruction is active. This instruction, however is used by
the base-hw idle contexts that get active when no user thread needs to
be scheduled.  Thus, the ARM performance counter is not a good choice for
time interpolation and we use the kernel internal time instead.

With this commit, the timeout library becomes a basic library. That means
that it is linked against the LDSO which then provides it to the program it
serves. Furthermore, you can't use the timeout library anymore without the
LDSO because through the kernel-dependent LDSO make-files we can achieve a
kernel-dependent timeout implementation.

This commit introduces a structured Duration type that shall successively
replace the use of Microseconds, Milliseconds, and integer types for duration
values.

Open issues:

* The timeout test fails on Raspberry PI because of precision errors in the
  first stage. However, this does not render the framework unusable in general
  on the RPI but merely is an issue when speaking of microseconds precision.

* If we run on ARM with another Kernel than HW the timestamp speed may
  continuously vary from almost 0 up to CPU speed. The Timer, however,
  only uses interpolation if the timestamp speed remained stable (12.5%
  tolerance) for at least 3 observation periods. Currently, one period is
  100ms, so its 300ms. As long as this is not the case,
  Timer_session::elapsed_ms is called instead.

  Anyway, it might happen that the CPU load was stable for some time so
  interpolation becomes active and now the timestamp speed drops. In the
  worst case, we would now have 100ms of slowed down time. The bad thing
  about it would be, that this also affects the timeout of the period.
  Thus, it might "freeze" the local time for more than 100ms.

  On the other hand, if the timestamp speed suddenly raises after some
  stable time, interpolated time can get too fast. This would shorten the
  period but nonetheless may result in drifting away into the far future.
  Now we would have the problem that we can't deliver the real time
  anymore until it has caught up because the output of Timer::curr_time
  shall be monotone. So, effectively local time might "freeze" again for
  more than 100ms.

  It would be a solution to not use the Trace::timestamp on ARM w/o HW but
  a function whose return value causes the Timer to never use
  interpolation because of its stability policy.

Fixes #2400
2017-05-31 13:16:11 +02:00
Alexander Boettcher
dc566b7d52 vbox5: allocate memory in larger pieces
to avoid lot of capabilities created for each 2M allocation otherwise

Issue #2398
2017-05-31 13:16:11 +02:00
Christian Helmuth
88b6c085ce libc: extend test for malloc
Issue #754
2017-05-31 13:16:11 +02:00
Christian Helmuth
bf96c4a4da libc: align malloc() allocations at 16-byte
Fixes #754
2017-05-31 13:16:11 +02:00
Alexander Boettcher
6d79d03380 heap: align allocations to 16 byte addresses
Issue #754
2017-05-31 13:16:11 +02:00
Christian Helmuth
307dd5768c Test for part_blk with GPT
Issue #1576
2017-05-31 13:16:11 +02:00
Christian Helmuth
03a1008f2e Use parted in part_blk test
Fixes #1576
2017-05-31 13:16:10 +02:00
Christian Helmuth
fd893a4f9b part_blk: support CHS and LBA extended partitions
Issue #1576
2017-05-31 13:16:10 +02:00
Norman Feske
7c8ed37bd7 fiasco: print addresses in error messages as hex 2017-05-31 13:16:10 +02:00
Norman Feske
2c6729768d base: consider exception during child construction
This patch make sure that a once managed parent RPC object will always be
dissolved if an exception during the remaining child construction
occurs. The original version would miss the dissolve call if one of the
subsequent members throws an exception at construction time.
2017-05-31 13:16:10 +02:00
Martin Stein
4d3d4ecca0 hw core: merge Kernel::Clock and Kernel::Timer
With this, we get rid of platform specific timer interfaces. The new
Timer class does the same as the old Clock class and has a generic
interface. The old Timer class was merely used by the old Clock class.
Also, we get rid of having only one timer instance which we tell with
each method call for which CPU it shall be done. Instead now each Cpu
object has its own Timer member that knows the CPU it works for.

Also, rename all "tics" to "ticks".

Fixes #2347
2017-05-31 13:16:10 +02:00
Stefan Kalkowski
b58b69515c Remove UART specific SPEC identifiers (Ref #2403) 2017-05-31 13:16:10 +02:00
Stefan Kalkowski
9b350e7706 os: move private declarations to driver target
Ref #2403
2017-05-31 13:16:09 +02:00
Emery Hemingway
eaeb77a867 drivers/nic/linux: replace Thread_deprecated
Ref #1987
2017-05-31 13:16:09 +02:00
Christian Helmuth
6d25c614d3 libc: remove deprecated API from malloc() 2017-05-31 13:16:09 +02:00
Christian Prochaska
90b5679332 mixer_gui_qt_test: fix window management routes 2017-05-31 13:16:09 +02:00
Christian Prochaska
e7c2c790de avplay: fix audio_drv route 2017-05-31 13:16:09 +02:00
Christian Prochaska
3f6e0738d1 Qt5: adapt to current staging branch (cap quota, ram quota, slave) 2017-05-31 13:16:09 +02:00
Stefan Kalkowski
10e2e223cd foc: remove obsolete features (ref #2405)
Removes the following Fiasco.OC specific features:
* GDB extensions for Fiasco.OC
* i.MX53 support for Fiasco.OC
* Kernel debugger terminal driver
* Obsolete interface Native_pd
* Obsolete function of interface Native_cpu
2017-05-31 13:16:08 +02:00
Stefan Kalkowski
9e3fc9414f foc: update to recent revision r72 (fix #2405) 2017-05-31 13:16:08 +02:00
Christian Helmuth
24a0810cbc trace: disable out-of-metadata test step 2017-05-31 13:16:08 +02:00
Alexander Boettcher
6d8bfb677e vbox5: support more memory for VMs (4GB++)
Issue #2338
2017-05-31 13:16:08 +02:00
Alexander Boettcher
b1419d7566 vbox4/5: add ubuntu vm as testcase 2017-05-31 13:16:08 +02:00
Martin Stein
60a7fe5586 hw & arm: write whole SPSR in mode transition
Previously we did write the SPSR via an MSR instruction without
additional flags. Unfortunately, this tells the CPU to write the
register only partially. This often isn't a problem as the users PSR
reset value normally is conform to our expectations but in some cases
(e.g. PSR endianess bit on WandBoard core #4) the reset value is bad.
Thus, we have to add the CXSF flags (access Control + eXtension + Status
+ Flags) so the CPU overwrites the entire register.

Fixes #2254
2017-05-31 13:16:08 +02:00
Martin Stein
91a8c8975d run: provide core image with path information
Previously, the debugging version of the core image
(<build_dir>/var/run/<run_name>.core) was created by the run tool from
the common core object file
(<build_dir>/var/run/<run_name>/core-<kernel>.o). This object file,
however, was already stripped by the build system and thus didn't
contain debug info anymore. The build system also creates an unstripped
version in <build_dir>/debug/core-<kernel>.o, so we now use this one
for <build_dir>/var/run/<run_name>.core.

Ref #2254
2017-05-31 13:16:07 +02:00
Christian Helmuth
274b7983c1 pistachio: fix compilation with GCC 6
Issue #2372
2017-05-31 13:16:07 +02:00
Norman Feske
433fc6a7f1 base: let 'Local_service' catch all exceptions
This patch eases the debugging of situations where a session-object
constructor wrongly throws an exception type not specified in the
'Local_service::Factory' interface.
2017-05-31 13:16:07 +02:00
Christian Prochaska
7df4497e72 wm: use 'Expanding_ram_session_client'
Use 'env().ram()' instead of a non-expanding 'Ram_session_client'
for 'env().ram_session_cap()'.

Fixes #2408
2017-05-31 13:16:07 +02:00
Norman Feske
4d442bca30 Streamline exception types
This patch reduces the number of exception types by facilitating
globally defined exceptions for common usage patterns shared by most
services. In particular, RPC functions that demand a session-resource
upgrade not longer reflect this condition via a session-specific
exception but via the 'Out_of_ram' or 'Out_of_caps' types.

Furthermore, the 'Parent::Service_denied', 'Parent::Unavailable',
'Root::Invalid_args', 'Root::Unavailable', 'Service::Invalid_args',
'Service::Unavailable', and 'Local_service::Factory::Denied' types have
been replaced by the single 'Service_denied' exception type defined in
'session/session.h'.

This consolidation eases the error handling (there are fewer exceptions
to handle), alleviates the need to convert exceptions along the
session-creation call chain, and avoids possible aliasing problems
(catching the wrong type with the same name but living in a different
scope).
2017-05-31 13:16:07 +02:00
Norman Feske
1f4f119b1e Capability quota accounting and trading
This patch mirrors the accounting and trading scheme that Genode employs
for physical memory to the accounting of capability allocations.

Capability quotas must now be explicitly assigned to subsystems by
specifying a 'caps=<amount>' attribute to init's start nodes.
Analogously to RAM quotas, cap quotas can be traded between clients and
servers as part of the session protocol. The capability budget of each
component is maintained by the component's corresponding PD session at
core.

At the current stage, the accounting is applied to RPC capabilities,
signal-context capabilities, and dataspace capabilities. Capabilities
that are dynamically allocated via core's CPU and TRACE service are not
yet covered. Also, the capabilities allocated by resource multiplexers
outside of core (like nitpicker) must be accounted by the respective
servers, which is not covered yet.

If a component runs out of capabilities, core's PD service prints a
warning to the log. To observe the consumption of capabilities per
component in detail, the PD service is equipped with a diagnostic
mode, which can be enabled via the 'diag' attribute in the target
node of init's routing rules. E.g., the following route enables the
diagnostic mode for the PD session of the "timer" component:

  <default-route>
    <service name="PD" unscoped_label="timer">
      <parent diag="yes"/>
    </service>
    ...
  </default-route>

For subsystems based on a sub-init instance, init can be configured
to report the capability-quota information of its subsystems by
adding the attribute 'child_caps="yes"' to init's '<report>'
config node. Init's own capability quota can be reported by adding
the attribute 'init_caps="yes"'.

Fixes #2398
2017-05-31 13:16:06 +02:00
Norman Feske
773e08976d Assign cap quotas in run scripts and recipes
Issue #2398
2017-05-31 13:16:06 +02:00
Norman Feske
e44f65f3b2 core: RAM service based on 'Session_object'
This patch reworks the implementation of core's RAM service to make use
of the 'Session_object' and to remove the distinction between the
"metadata" quota and the managed RAM quota. With the new implementation,
the session implicitly allocates its metadata from its own account. So
there is not need to handle 'Out_of_metadata' and 'Quota_exceeded' via
different exceptions. Instead, the new version solely uses the
'Out_of_ram' exception.

Furthermore, the 'Allocator::Out_of_memory' exception has become an alias
for 'Out_of_ram', which simplifies the error handling.

Issue #2398
2017-05-31 13:16:06 +02:00
Norman Feske
028e633af4 base: add 'Session_object' class
The 'Session_object' unifies several aspects of server-component
implementations:

* It keeps track of session quotas and is equipped with standardized
  interfaces (Quota_guard) to upgrade (and in the future potentially
  downgrade) session quotas in a uniform way.

* It follows the pattern of modern RPC objects / signal handlers that
  manage/dissolve themselves at the entrypoint given as constructor
  argument. Thereby, the relationship with its entrypoint is always
  coupled with the lifetime of the session-component object.

* It stores the session label, which was previously done manually by
  most but not all server-component implementations.

* It stores the session 'diag' flag.

* It is equipped with output methods 'diag', 'error', and 'warning'.
  All messages printed from the context of a session component is
  automatically prefixed with the session type and client label.
  Messages passed via 'diag' are only printed if the 'diag' flag of
  the session is set.

Issue #2398
2017-05-31 13:16:06 +02:00
Norman Feske
aea5d03691 base: add Child_policy::Route::Diag flag
The 'diag' flag can be defined by a target node of a route in init's
configuration. It is propagated as session argument to the server, which
may evaluate the flag to enable diagnostic output for the corresponding
session.

Issue #2398
2017-05-31 13:16:06 +02:00
Norman Feske
3670f7735d base: use 'Quota_transfer::Account' for 'Service'
This patch makes use of the new 'Quota_transfer::Account' by the service
types in base/service.h and uses 'Quota_transfer' objects in
base/child.cc and init/server.cc.

Furthermore, it decouples the notion of an 'Async_service' from
'Child_service'. Init's 'Routed_service' is no longer a 'Child_service'
but is based on the new 'Async_service' instead.

With this patch in place, quota transfers do no longer implicitly use
'Ram_session_client' objects. So transfers can in principle originate
from component-local 'Ram_session_component' objects, e.g., as used by
noux. Therefore, this patch removes a strumbling block for turning noux
into a single threaded component in the future.

Issue #2398
2017-05-31 13:16:06 +02:00
Norman Feske
5c43074bc6 core: simplify core_env.h
Issue #2398
2017-05-31 13:16:05 +02:00
Norman Feske
f69937deb1 base: new base/quota_transfer.h helper
The 'Quota_transfer' helper facilitated the implementation of quota
transfers between components in a transactional manner. It is designated
for framework-internal use (replacing the 'Transfer' class in child.h).
However, since it is also useful for init, we make it publicly
available.

The 'Quota_transfer::Account' class serves as an interface representing
the donor or receiver of quotas (parent, service, client).

Issue #2398
2017-05-31 13:16:05 +02:00
Norman Feske
f02c8328db init: access Ram_session as const
This is now possible because the new 'used_ram' and 'ram_quota' RPC
functions are declared as const.

Issue #2398
2017-05-31 13:16:05 +02:00
Norman Feske
6609aafb05 Replace Quota_exceeded by Insufficient_ram_quota
This patch replaces the 'Parent::Quota_exceeded',
'Service::Quota_exceeded', and 'Root::Quota_exceeded' exceptions
by the single 'Insufficient_ram_quota' exception type.

Furthermore, the 'Parent' interface distinguished now between
'Out_of_ram' (the child's RAM is exhausted) from
'Insufficient_ram_quota' (the child's RAM donation does not suffice to
establish the session).

This eliminates ambiguities and removes the need to convert exception
types along the path of the session creation.

Issue #2398
2017-05-31 13:16:05 +02:00
Norman Feske
eea493a8ca base: safeguard entrypoint against double manage
This patch adds sanity checks to the RPC entrypoint that detect attempts
to manage or dissolve the same RPC object twice. This is not always a
bug. I.e., if RPC objects are implemented in the modern way where the
object manages/dissolves itself. As the generic framework code (in
particular root/component.h) cannot rely on this pattern, it has to
call manage/dissolve for session objects anyway. For modern session
objects, this double attempt would result in a serious error (double
insertion into the object pool's AVL tree).

Issue #2398
2017-05-31 13:16:05 +02:00
Norman Feske
843dd179d7 base: remove int return types from 'Ram_session'
This patch replaces the existing C-style error codes with C++
exceptions.

Fixes #895
2017-05-31 13:16:04 +02:00
Norman Feske
58f44d39c5 base: use 'Ram_quota' in 'Ram_session' args
This patch replaces the former use of size_t with the use of the
'Ram_quota' type to improve type safety (in particular to avoid
accidentally mixing up RAM quotas with cap quotas).

Issue #2398
2017-05-31 13:16:04 +02:00
Norman Feske
ff68d77c7d base: new 'Ram_allocator' interface
The 'Ram_allocator' interface contains the subset of the RAM session
interface that is needed to satisfy the needs of the 'Heap' and
'Sliced_heap'. Its small size makes it ideal for intercepting memory
allocations as done by the new 'Constrained_ram_allocator' wrapper
class, which is meant to replace the existing 'base/allocator_guard.h'
and 'os/ram_session_guard.h'.

Issue #2398
2017-05-31 13:16:04 +02:00
Norman Feske
5a468919bb base: new session-creation helper types
This patch augments the existing session/session.h with useful types for
the session creation:

* The new 'Insufficient_ram_quota' and 'Insufficient_cap_quota'
  exceptions are meant to supersede the old 'Quota_exceeded' exception
  of the 'Parent' and 'Root' interfaces.

* The 'Session::Resources' struct subsumes the information about the
  session quota provided by the client.

* The boolean 'Session::Diag' type will allow sessions to operate in a
  diagnostic mode.

* The existing 'Session_label' is not also available under the alias
  'Session::Label'.

* A few helper functions ease the extraction of typed session arguments
  from the session-argument string.

Issue #2398
2017-05-31 13:16:04 +02:00
Norman Feske
220890534a base: 'Quota_guard' utility for tracking quotas
* Introduces 'Cap_quota' and 'Ram_quota' types
* Introduces 'Out_of_caps' and 'Out_of_ram' exceptions

Issue #2398
2017-05-31 13:16:04 +02:00
Norman Feske
c1b981ede4 Annotate session interfaces with CAP_QUOTA
The new 'CAP_QUOTA' enum value denotes the capability quota to be
transferred from the client to the server at session-creation time.

Issue #2398
2017-05-31 13:16:04 +02:00
Norman Feske
bc82cce72b core: add Platform::max_caps()
This method returns the kernel-specific system-global limit of the total
number of capabilities.

Issue #2398
2017-05-31 13:16:03 +02:00
Norman Feske
82a98065a0 base-hw: upgrade cap-space slab less eagerly
This patch upgrades the cap-space slab only if the kernel runs out of
entries, instead of consuming as much PD-session quota as possible.
Until now, the behavior worked well because the cap-space slab was the
only consumer of PD-session quota. However, once we start accounting all
PD session meta data - and eventually merging the PD and RAM services -
the aggressive scheme stands in the way.

Issue #2398
2017-05-31 13:16:03 +02:00
Norman Feske
5b1e3466be base: construct 'Tslab' with allocator reference
The new constructor avoids the use of a pointer.
2017-05-31 13:16:03 +02:00
Norman Feske
f5bdab4518 base: add Slab::avail_entries accessor
This accessor is useful to eagerly expand the slab with new slab blocks,
side stepping the slab's built-in policy for the allocation of new slab
blocks.

This is particularly important when using the slab for allocating the
cap space meta-data for the base-hw kernel. To guarantee that the slab
gets never exhausted in the kernel, it is expanded before entering the
kernel.
2017-05-31 13:16:03 +02:00
Norman Feske
67481fdfc3 base: support exceptions during _new_slab_block
With the introduction of the 'Out_of_caps' exception type, the slab
needs to consider exceptions during the call of '_new_slab_block' by
reverting the 'nested' state.
2017-05-31 13:16:03 +02:00
Christian Helmuth
c79155fd7b libc_ffat: zero-init 'struct tm' on stack
This prevents the following runtime error.

  Error: mktime() returned -1, the file modification time reported by stat() will be incorrect
2017-05-31 13:16:03 +02:00
Christian Helmuth
e9b42a127b dde_linux: download libnl from github.com/thom311
The old download location is very shaky resp. currently unavailable and
also other projects (e.g., Gentoo and Linux From Scratch) use this
location. Note, the archive hash does _not_ change.
2017-05-31 13:16:02 +02:00
Alexander Boettcher
106a0db664 vbox5: update to 5.1.22
Issue #2338
2017-05-31 13:16:02 +02:00
Emery Hemingway
f7d80a9bf9 drivers/ahci: clean exit when no controllers are found
Fix #2402
2017-05-31 13:16:02 +02:00
Johannes Kliemann
aac0ac7c63 dde_linux: kernel-version independent file lists
Replace the version dependent file lists with generic ones to simplify
kernel version changes.

Fixes #2368
2017-05-31 13:16:02 +02:00
Norman Feske
03d7208386 Turn posix lib into shared library
By building the posix library as shared object with an ABI, we
effectively decouple posix-using programs from the library
implementation (which happens to depend on several os-level APIs such as
the VFS).
2017-05-31 13:16:02 +02:00
Christian Helmuth
1828f70037 Fix deprecated warnings in servers
Issue #1987
2017-05-31 13:16:02 +02:00
Christian Helmuth
f41d8d6b14 core: fix compiler warnings 2017-05-31 13:16:01 +02:00
Emery Hemingway
01e8f7ea3d libc: do not open stdio descriptors unless configured to do so
Fix #2396
2017-05-31 13:16:01 +02:00
Emery Hemingway
24a9537a27 File_system: replace per-handle signals with notification packets
Replace registration and signaling of per-handle signal capabilities
with CONTENT_CHANGED notification packets.

Fix #2397
2017-05-31 13:16:01 +02:00
Emery Hemingway
29b3fff5eb app/rom_to_file: catch Node_already_exists and overwrite files
Ref #1934
2017-05-31 13:16:01 +02:00
Stefan Kalkowski
6106e64aac base: remove include/spec/* other than ISA
This commit moves the headers residing in `repos/base/include/spec/*/drivers`
to `repos/base/include/drivers/defs` or repos/base/include/drivers/uart`
respectively. The first one contains definitions about board-specific MMIO
iand RAM addresses, or IRQ lines. While the latter contains device driver
code for UART devices. Those definitions are used by driver implementations
in `repos/base-hw`, `repos/os`, and `repos/dde-linux`, which now need to
include them more explicitely.

This work is a step in the direction of reducing 'SPEC' identifiers overall.

Ref #2403
2017-05-31 13:16:01 +02:00
Alexander Boettcher
80eddd8731 usb: add OHCI support
Fixes #2357
2017-05-31 13:16:00 +02:00
Alexander Boettcher
74b790f70b vbox5: add multiple VM test case 2017-05-31 13:16:00 +02:00
Alexander Boettcher
b403bd9d3e vbox5: fix memory allocation by VMM
This is a fixup of c782966 "vbox5: track memory allocation by VMM".

Issue #2338
2017-05-31 13:16:00 +02:00
Alexander Boettcher
0cf18081f9 virtualbox.run: extension to run multiple VMs
set use_gui to get 2 VMs

Issue #2338
2017-05-31 13:16:00 +02:00
Alexander Boettcher
33ab53e42a vbox5: update to 5.1.20
Issue #2338
2017-05-31 13:16:00 +02:00
Alexander Boettcher
1a18c6b727 vbox4/5: enable key/value store for guest addition
required for enable vbox 5 guest additions, which otherwise deny to work

Issue #2338
2017-05-31 13:16:00 +02:00
Alexander Boettcher
b1d35570df vbox5: add shared folder test
Issue #2338
2017-05-31 13:15:59 +02:00
Alexander Boettcher
0d4f4f70d2 vbox5: enable audio support
Issue #2338
2017-05-31 13:15:59 +02:00
Alexander Boettcher
d7f0cb5463 vbox5: use gip thread also for timer watchdog
causes the rem timer callback pending check to run more often (every 1 ms
instead 10 ms). This is essential to met the timeout requirements of the
audio backend, which must be checked&run every 5ms.
2017-05-31 13:15:59 +02:00
Alexander Boettcher
800f9d1e44 vbox5: enable xhci model
Issue #2338
2017-05-31 13:15:59 +02:00
Alexander Boettcher
ecc98c293e qemu-usb: avoid operating on stale memory
during for loop in garbage_collect

Issue #2362
2017-05-31 13:15:59 +02:00
Alexander Boettcher
760c04c53a qemu-usb: respect size of assignment
fixes vbox4 and vbox5 xhci support

Issue #2362
2017-05-31 13:15:59 +02:00
Christian Helmuth
e3d8b6098f netty: do UDP and TCP tests
This commit replaces echo_udp with the netty_udp test. TCP can be tested
via netty_tcp.
2017-05-31 13:15:58 +02:00
Christian Helmuth
4ab2b85437 lxip: support large sendmsg (like recvmsg)
Add missing socket wait-queue head on demand.
2017-05-31 13:15:58 +02:00
Christian Helmuth
9802ae83e0 libc: rework socket fs for O_NONBLOCK 2017-05-31 13:15:58 +02:00
Christian Helmuth
3b5c16e307 lxip: poll/read_ready for all socket fs files 2017-05-31 13:15:58 +02:00
Christian Helmuth
1d99e7ede9 base: classify signals as I/O and application level
Fixes #2363
2017-05-31 13:15:58 +02:00
Christian Helmuth
e33d65aea0 libc: test nested signal handling and RPC
Issue #2363
2017-05-31 13:15:58 +02:00
Christian Helmuth
a65a4c8621 netty: non-blocking server test 2017-05-31 13:15:57 +02:00
Christian Helmuth
b3819f30dc libc: support for O_NONBLOCK in read() 2017-05-31 13:15:57 +02:00
Christian Helmuth
f7313e841d vfs_lxip: always allow broadcast packets for UDP 2017-05-31 13:15:57 +02:00
Alexander Boettcher
3f5c1b3626 top: fix replacement strategy
Issue #2307
2017-05-31 13:15:57 +02:00
Christian Prochaska
623e0be0e1 fiasco: fix compilation with GCC 6
Issue #2372
2017-05-31 13:15:57 +02:00
Norman Feske
9a6c194432 init: fix constness-related warnings by gcc 6.3
Fixes #2374
2017-05-31 13:15:57 +02:00
Norman Feske
4f19e4b6af gems: import run-script ingredients from depot
This patch adjusts the interactive scenarios of the gems repository to
use the depot. This has three immediate benefits. First, once the depot
is populated with binary archives, the start time of the scenarios
becomes very quick because most dependency checks and build steps are
side-stepped. Second, the run scripts become more versatile. In
particular, run scripts that were formerly supported on base-linux only
(nit_fader, decorator, menu_view) have become usable on all base
platforms that have a 'drivers_interactive' package defined. Finally,
the run scripts have become much shorter.

Issue #2339
2017-05-31 13:15:57 +02:00
Norman Feske
015d319fa7 run: link all files in [run_dir]/genode to core
This way, files copied from the depot are incorporated in addition to
the files explicitly specified as boot modules.

The patch also adds an automatic check for the validity of the XML
syntax of boot modules ending with '.config'.

Issue #2339
2017-05-31 13:15:56 +02:00
Norman Feske
a196fc171a run: support for accessing depot content
Run scripts can use the new 'import_from_depot' function to incorporate
archive content from the depot into a scenario. The function must be
called after the 'create_boot_directory' function and takes any number
of pkg, src, or raw archives as arguments. An archive is specified as
depot-relative path of the form <user>/<type>/name. Run scripts may
call 'import_from_depot' repeatedly.

An argument can refer to a specific version of an archive or just the
version-less archive name. In the latter case, the current version (as
defined by a corresponding archive recipe in the source tree) is used.

If a 'src' archive is specified, the run tool integrates the content of
the corrsponding binary archive into the scenario. The binary archives
are selected according the spec values as defined for the build directory.
As of now, only x86_32 and x86_64 are supported by the 'depot_spec'
function.

Issue #2339
2017-05-31 13:15:56 +02:00
Norman Feske
b58fbe5ba5 Depot-archive recipes
Issue #2339
2017-05-31 13:15:56 +02:00
Norman Feske
39eff7f249 Tool for assembling API/source/binary archives
Issue #2339
2017-05-31 13:15:56 +02:00
Norman Feske
1ed5110d55 wm.run: host window-manager components in sub init 2017-05-31 13:15:56 +02:00
Norman Feske
962c853e67 hw: rename bootstrap.o to bootstrap-hw.o
In order to deliver base-hw as a binary archive, we need to install the
bootstap.o file to bin/. Since bin/ is a global name space shared by all
kernels, this patch renames the object file to bootstap-hw.o and thereby
clarifies the association of the file with base-hw.
2017-05-31 13:15:56 +02:00
Christian Helmuth
f59a5ef258 foc, fiasco: ensure build fails if port build fails 2017-05-31 13:15:55 +02:00
Norman Feske
cd5a03758f base: fix bool retval check in heap
Thanks to gcc 6.3 for reporting!
2017-05-31 13:15:55 +02:00
Norman Feske
11aadd4ce8 base: fix gcc-6.3 warning (check null ref)
The check that triggers the warning was solely in place for diagnostic
purposes. We can remove it.
2017-05-31 13:15:55 +02:00
Alexander Boettcher
1220a06c3b platform_drv: avoid gcc 6 warnings 2017-05-31 13:15:55 +02:00
Alexander Boettcher
d8f60a8ea1 vbox: increase initial static memory buffer
due to changes in #1987 pthread/malloc the initial allocations are done
via malloc
2017-05-31 13:15:55 +02:00
Alexander Boettcher
f52eec5af7 intel_fb: avoid deprecated warnings
Issue #1987
2017-05-31 13:15:55 +02:00
Alexander Boettcher
de20d9010b liquid_framebuffer: avoid narrow warning
Issue #1987
2017-05-31 13:15:54 +02:00
Alexander Boettcher
480c42d424 pthread: fix deprecated warnings
Issue #1987
2017-05-31 13:15:54 +02:00
Norman Feske
7729398105 ps2_drv: reset mouse at startup
This patch replaces the set-defaults command by a reset command, which
is needed to use the Lenovo x250 trackpoint. (original patch by
Christian Prochaska)
2017-05-31 13:15:54 +02:00
Norman Feske
61551e4d76 pistachio,fiasco: don't rely on BASE_DIR for vpath
This patch corresponds to the patch "okl4: don't rely on BASE_DIR for
vpath", addressing the L4/Fiasco and L4ka::Pistachio kernels.
2017-05-31 13:15:54 +02:00
Norman Feske
50c53a23eb foc,fiasco: symlink kernel files to bin/ 2017-05-31 13:15:54 +02:00
Christian Helmuth
7680d20686 Re-enable usb_block test 2017-05-31 13:15:54 +02:00
Christian Helmuth
df81d7a374 demo: adapt to GCC 6
Issue #2372
2017-05-31 13:15:54 +02:00
Christian Helmuth
6b2d8a740d dde_linux: explicitly build C89 with GNU extensions
Issue #2372
2017-05-31 13:15:53 +02:00
Alexander Boettcher
6513d0ce0f nova: build fixes with GCC 6 of kernel
Fixes #2379
Fixes #2380
2017-05-31 13:15:53 +02:00
Christian Helmuth
9af8e27d31 foc: fix port build with GCC 6
Fixes #2390
2017-05-31 13:15:53 +02:00
Stefan Kalkowski
b9549e58d0 hw: cleanup core code (Ref #2394) 2017-05-31 13:15:53 +02:00
Alexander Boettcher
bc2ef2b1b2 seoul: avoid gcc6 warnings 2017-05-31 13:15:53 +02:00
Alexander Boettcher
7005e54de2 nova: fix syscall bindings with GCC 6
Fixes #2377
2017-05-31 13:15:52 +02:00
Norman Feske
8e7aa54493 base: drop session states of vanished clients
For asynchronously provided sessions, the parent has to maintain the
session state as long as the server hasn't explicitly responded to a
close request. For this reason, the lifetime of such session states is
bound to the server, not the client.

When the server responds to a close request, the session state gets
freed. The 'session_response' implementation does not immediately
destroy the session state but delegates the destruction to a client-side
callback, which thereby also notifies the client. However, the code did
not consider the case where the client has completely vanished at
session-response time. In this case, we need to drop the session state
immediately.

Fixes #2391
2017-05-31 13:15:52 +02:00
Stefan Kalkowski
76bc2b9e89 hw: remove core internal header directories
Fix #2393
2017-05-31 13:15:52 +02:00
Christian Helmuth
117a533828 rom_filter: fix compilation with GCC 6
Issue #2372
2017-05-31 13:15:52 +02:00
Stefan Kalkowski
67ba7b89a7 hw: separate bootstrap and core strictly
* Introduce Hw namespace and library files under src/lib/hw
* Introduce Bootstrap namespace
* Move all initialization logic into Bootstrap namespace

Ref #2388
2017-05-31 13:15:52 +02:00
Christian Prochaska
52411c9017 terminal: add support for 'ESC[m' sequence
Fixes #2392
2017-05-31 13:15:51 +02:00
Christian Prochaska
739acd8b41 qt5: fix build errors with GCC 6
Fixes #2389
2017-05-31 13:15:51 +02:00
Christian Prochaska
d0a53781b9 gdb: fix compile error with GCC 6
Fixes #2387
2017-05-31 13:15:51 +02:00
Christian Prochaska
d1bd39cebb openssh: add '--without-stackprotect' configure option
The configure ckeck for the stack protection feature succeeds with GCC 6,
even though the required runtime functions are missing.

Issue #2386
2017-05-31 13:15:51 +02:00
Christian Prochaska
e317eca9a5 fuse_ext2: build with '-std=gnu89'
GCC 6 defaults to '-std=gnu11' for the C language, which has different
semantics for inline functions and triggers build errors.

Fixes #2385
2017-05-31 13:15:51 +02:00
Martin Stein
64fb2865b0 nic_router: fix compile error "flexible array ..."
Fixes #2384
2017-05-31 13:15:51 +02:00
Christian Prochaska
742293ab87 Genode::Fifo_element: workaround for compiling with GCC 6
Issue #2383
2017-05-31 13:15:51 +02:00
Christian Prochaska
767d86e6dc base-hw: workaround for compiling with GCC 6
Issue #2382
2017-05-31 13:15:50 +02:00
Christian Prochaska
f90a4a85e0 base-nova: workaround for compiling with GCC 6
Issue #2378
2017-05-31 13:15:50 +02:00
Christian Prochaska
bf83c07923 Genode::retry(): fix compile error with GCC 6
Fixes #2376
2017-05-31 13:15:50 +02:00
Christian Prochaska
d23dd0cdb4 init: workaround for GCC 6 compile errors
Issue #2374
2017-05-31 13:15:50 +02:00
Christian Prochaska
78a9cbf82d Trace::Logger: workaround for compiling with GCC 6
Issue #2375
2017-05-31 13:15:50 +02:00
Christian Prochaska
661a3100b1 stdcxx: update to version 6.3.0
Issue #2372
2017-05-31 13:15:50 +02:00
Christian Prochaska
58f2088d3e gcc: update to version 6.3.0
Issue #2372
2017-05-31 13:15:49 +02:00
Christian Prochaska
9f9271783e binutils: update to version 2.28
Fixes #2401
Issue #2372
2017-05-31 13:15:49 +02:00
Norman Feske
0e06042f81 base/mk: include sub specs from BASE_DIR
Originally, the spec files for less specific SPEC values were include
via the 'select_from_repositories' function. This implies that BASE_DIR
must always be present in the list of 'REPOSITORIES'. Otherwise the
spec files won't be found. By explicitly including sub specs from
'$(BASE_DIR)/mk', we lift this restriction.
2017-05-02 15:29:04 +02:00
Norman Feske
8aebfd9b26 libc: enhance quirk for building libc-gen on ARM
This patch enables the building of the libc from a source archive
for ARM.
2017-05-02 15:29:04 +02:00
Norman Feske
ed64a9233e okl4: don't rely on BASE_DIR for vpath
This patch is required to build the OKL4 version of core from a source
archive. It avoids fetching source codes from BASE_DIR, and moves the
vpath wildcard for %.cc after all specific vpath definitins, in
particular those that are x86-specific. Without the latter change, core
would always end up using the generic version of 'platform_services.cc',
omitting the IO_PORT service from core.
2017-05-02 15:29:03 +02:00
Norman Feske
e2fb49ae39 core: avoid using BASE_DIR in vpath
When building core from a source archive, we don't want to incorporate
any source codes from BASE_DIR.
2017-05-02 15:29:03 +02:00
Norman Feske
ece67ca174 pistachio: symlink kernel files to bin/
This enables us to pick all relevant parts for assembling a binary
archive for the kernel from bin/.
2017-05-02 15:29:03 +02:00
Alexander Boettcher
e3e41e5ca0 ahci: avoid deprecated warnings
Issue #1987
2017-05-02 15:29:03 +02:00
Christian Helmuth
c475edccfc dde_linux: use internal setjmp/longjmp only 2017-05-02 15:29:03 +02:00
Norman Feske
8f27babf16 mk: strip binaries at <build-dir>/bin/
The <build-dir>/bin/ directory used to contain symbolic links to the
unstripped build results. However, since the upcoming depot tool
extracts the content of binary archives from bin/, the resulting
archives would contain overly large unstripped binaries, which is
undesired. On the other hand, always stripping the build results is not
a good option either because we rely of symbol information during
debugging.

This patch changes the installation of build results such that a new
'debug/' directory is populated besides the existing 'bin/' directory.
The debug directory contains symbolic links to the unstripped build
results whereas the bin directory contains stripped binaries that are
palatable for packaging (depot tool) and for assembling boot images (run
tool).
2017-05-02 15:29:03 +02:00
Christian Helmuth
f9bb88cd2e Disable scan-code translation in PS/2 on ARM PL050
This enables to run the driver on recent Qemu versions.
2017-05-02 15:29:02 +02:00
Christian Helmuth
67f22a6c90 Fix key count in input test 2017-05-02 15:29:02 +02:00
Norman Feske
8c4a2a48ca core: install core-<kernel>.o at bin/
By installing the core object to bin/, we follow the same convention as
for regular binaries. This, in turn, enables us to ship core in a
regular binary archive. The patch also adjusts the run tool to pick up
the core object from bin/ for the final linking stage.
2017-05-02 15:29:02 +02:00
Norman Feske
60cda87b5c init.run: add missing build of report_rom 2017-05-02 15:29:02 +02:00
Norman Feske
7200ab2935 usb_drv: disambiguate header scan locations
When creating a source archive for the USB driver, both the contrib and
Genode-specific source codes are merged into a single directory
structure. In this case, the original way of determining the Linux
source code to scan for #include directives would apply the scanning to
Genode-specific source codes too. This patch tightens the search
criterion such that only Linux source codes are processed.
2017-05-02 15:29:02 +02:00
Norman Feske
075c32409a usb_drv: Add missing definition of __aligned macro
This macro is implicitly pulled in by libc-setjmp (via the libc's
cdefs.h). However, apparently not all sources include <setjmp.h>.
Unfortunately, for sources that do, this change produces a
double-definition warning. We should fix it by removing the dependency
from the libc's setjmp.
2017-05-02 15:29:02 +02:00
Christian Helmuth
e49bb4943e Deprecate policy constructor with implicit config
because it uses the deprecated config library.

Issue #1987
2017-05-02 15:29:02 +02:00
Emery Hemingway
dde11de008 Unify client policy across File_system servers
File_system servers shall deny clients not matching a defined policy.
Servers shall also apply session root offset policy followed by a client
offset.

Fix #2365
2017-05-02 15:28:57 +02:00
Alexander Boettcher
2668a55688 usb_drv: fix various nullpointer in raw binding
during reset of a VM, usb device ejected before hand:

ded! amount=27941, size=4096, consumed=24576
Warning: could not allocate metadata
[init -> nit_fb1] using xywh=(0,0,2560,1440)
[init -> usb_drv] dev_info: new SuperSpeed USB device number 2 using xhci_hcd
[init -> vbox1] Attach USB device 0002:0002 (vendor=951, product=16a5)
Warning: Quota exceeded! amount=36133, size=4096, consumed=32768
Warning: could not allocate metadata
[init -> nit_fb1] using xywh=(0,0,2560,1440)
[init -> vbox1] EMT-0    VMMDev: Guest Additions capability report: (0x5 -> 0x5) seamless: yes, hostWindowMapping: no, graphics: yes
[init -> vbox1] EMT-0    VMMDev: Guest Additions capability report: (0x5 -> 0x0) seamless: no, hostWindowMapping: no, graphics: no
[init -> vbox1] EMT-0    VMMDev: Guest Additions capability report: (0x0 -> 0x0) seamless: no, hostWindowMapping: no, graphics: no
[init -> vbox1] EMT-1    VMMDev: Guest Additions capability report: (0x0 -> 0x0) seamless: no, hostWindowMapping: no, graphics: no
Warning: Quota exceeded! amount=44325, size=4096, consumed=40960
Warning: could not allocate metadata
[init -> vbox1] fb resize : [0] 2560x1440 -> 1024x768
no RM attachment (READ pf_addr=0x4 pf_ip=0x105367e from pager_object: pd='init -> usb_drv' thread='ep')
page fault, pd='init -> usb_drv' thread='ep' cpu=0 ip=0x105367e address=0x4 stack pointer=0xa07fef18 qualifiers=0x4 irUwp reason=1

Seen during #2338
2017-05-02 15:28:55 +02:00
Christian Helmuth
f96b5b89f2 Fix more deprecated warnings
Issue #1987
2017-05-02 15:28:55 +02:00
Norman Feske
44e5f1c2d4 ABIs for libm, libpng, zlib 2017-05-02 15:28:54 +02:00
Norman Feske
539d976a9a init: fix routing to child with multiple services
Init's service forwarding functionality did not take the service type
into account when forwarding a session request. If a server provides
multiple services, e.g. fb_sdl that provides both "Input" and
"Framebuffer", the type of the forwarded session request did not always
correspond to the actually requested type.
2017-05-02 15:28:54 +02:00
Norman Feske
da294cb02a mk: obtain 'genode.ld' always form BASE_DIR
This way, the base repository does not need to be present in the
'REPOSITORIES' list when building static executables.
2017-05-02 15:28:54 +02:00
Alexander Boettcher
1c79ba4182 slab: detect corrupted slab and invalid frees
and report about that.

Fixes #2350
2017-05-02 15:28:54 +02:00
Stefan Kalkowski
62c59a56d1 tool: enable PXE loading of muen boot images
Fix #2358
2017-05-02 15:28:54 +02:00
Stefan Kalkowski
79143f6782 tool/boot: add chain_loader 'unzip'
'unzip' can uncompress and load raw multiboot images and ELF files.

Usage together with the PXE bootloader ease life running the muen hypervisor
together with a Genode/x86_64 VM, where the raw boot image is typically quite
large.

Ref #2358
2017-05-02 15:28:54 +02:00
Adrian-Ken Rueegsegger
80f704ae0e muen: Update Muen build target.mk 2017-05-02 15:28:54 +02:00
Adrian-Ken Rueegsegger
c600484d68 hw/doc: Update Muen tutorial 2017-05-02 15:28:53 +02:00
Adrian-Ken Rueegsegger
36acacea7e tool: Adjust Muen RUN_OPTs
The Muen component build has been reworked and so Tau0 does no longer
need to be specified.
2017-05-02 15:28:53 +02:00
Adrian-Ken Rueegsegger
1e090f1f6b Update Muen port
Fixes #2356
2017-05-02 15:28:53 +02:00
Josef Söntgen
2b7587ceca autopilot: add information log file
The information log file contains a list of all log files that are
expected to exist after the autopilot has finished its execution.
By using the '-i' option the default filename of 'autopilot.log'
can be overriden.
2017-05-02 15:28:53 +02:00
Josef Söntgen
adf39c4cc8 autopilot: remove unused default_log_file proc 2017-05-02 15:28:53 +02:00
Norman Feske
93b78573bd Remove superfluous 'cxx' from LIBS in target.mk 2017-05-02 15:28:53 +02:00
Alexander Senier
7ac46dd621 tool/create_iso: Make ISO creation tool configurable
Debian has dropped mkisofs long time ago, hence hardcoding it prevents
Genode from being built on Debian easily. This patch makes the tool
configurable (defaulting to mkisofs). Building on Debian can then be
done by something like:

ISOTOOL=genisoimage make run/foobar

Fixes #2234
Fixes #2235
2017-05-02 15:28:53 +02:00
Edgard Schmidt
e933c7b4d8 Cleanup Call_return encapsulation in call()
~emove the second Call_return encapsulation from the already
encapsulated return type of Capability::call.

Fixes #2180
2017-05-02 15:28:52 +02:00
Alexander Senier
e61a5b0d05 base-hw: Fix PML4 size and constants
The size of the whole table and table entries were exchanged for PML4,
leading to out-of-bound accesses for addesses >= 2^39. Some constants
were lacking type suffixes causing integer overflows.

Added assertions to catch out-of-bound accesses early on.

Fixes #2210
Fixes #2211
2017-05-02 15:28:52 +02:00
Christian Prochaska
a62f09e87e libc: add 'Libc::Component::stack_size()' to the ABI symbol file
Fixes #2354
2017-05-02 15:28:52 +02:00
Prashanth Mundkur
f3c8233e7f Fix a socket leak when it is closed remotely
Fixes #2346
2017-05-02 15:28:52 +02:00
Emery Hemingway
0d488925ee server/rom_filter: generate top-level attributes
Conditionally inject attributes on the output XML node with
``<attribute name="..." value="..."``

Fix #2348
2017-05-02 15:28:48 +02:00
Martin Stein
05655a9d88 hw cortex-a9 timer: raise translation precision
If we do the tics-to-us translation with one division and multiplication
over the whole argument, like before, we loose microseconds granularity
although the timer frequency allows for such granularity. Thus, we treat
the most significant half and the least significant half of the tics
value separate. Each half is shifted to the best bit position for the
translation, then translated, and then shifted back.

Ref #2347
2017-04-11 15:34:16 +02:00
Norman Feske
0b30cf0ab6 mk: omit the creation of .lib.so files for ABIs
Furthermore, the patch alleviates the need for providing a library
description file if the library is present in the form of an ABI-symbols
file only.
2017-04-11 15:34:16 +02:00
Norman Feske
6d82dd14d6 mk: access linker scripts via BASE_DIR
The use of 'select_from_repositories' for locating the linker script for
dynamically-linked executables only works if 'BASE_DIR' appears in the
list of 'REPOSITORIES'. This is the case when using the build system in
the traditional way but it is not desired when building binary archives
of individual components.
2017-04-11 15:34:16 +02:00
Alexander Boettcher
35adce3955 run: adjust vbox multiple VM run test
Wrongly renamed during "vbox5: enable SMP setups"

Related to #2338
2017-04-11 15:34:15 +02:00
Christian Helmuth
d18f976b15 nitpicker: strictly type command processing 2017-03-27 12:35:23 +02:00
Christian Prochaska
8903179537 tool_chain: use port mechanism
Fixes #2340
2017-03-27 12:35:10 +02:00
Christian Prochaska
6b3c79f674 qt5: fix 'qt5_qpluginwidget' test
Fixes #2349
2017-03-27 12:35:10 +02:00
Norman Feske
9bceec4394 Fix backdrop handing in wm.run and nano3d.run
This patch adjusts the run script in two ways:

It removes the reliance on init's formerly built-in resource-request
handling by increasing the RAM quota for the backdrop instances. Since
commit "init: explicit response to resource requests", init no longer
hands out slack memory automatically.

Second, it makes sure that the backdrop appears under the precise label
"backdrop" at nitpicker by facilitating init's label-rewriting feature.
Without explicitly setting the label to "backdrop", nitpicker observes
the label "backdrop -> backdrop" (the first part comes from init, the
second part comes from the nitpicker-session argument specified by
backdrop itself). However, the client is only considered as default
background if labeled as "backdrop" (see nitpicker's '_create_session')
implementation.

Issue #2352
2017-03-24 17:54:01 +01:00
Norman Feske
f6386c6ce1 Add missing parent routes to hello tutorial
Thanks Martijn Verschoor for reporting!
2017-03-24 16:20:05 +01:00
Christian Helmuth
92a339befd rump_fs: handle errors on mkdir correctly 2017-03-24 16:20:05 +01:00
Sebastian Sumpf
7ff2927edb rump: sync every 2s not every 10s
fixes issue #2345
2017-03-24 16:20:04 +01:00
Sebastian Sumpf
2cb767de2d rump: implement BIO_SYNC correctly
Send to storage and sync caches

issue #2345
2017-03-24 16:20:04 +01:00
Christian Helmuth
c60edb5636 libc: use flex explicitly for port preparation 2017-03-24 16:20:04 +01:00
Christian Helmuth
b35df4578b Check Registered base class provides virtual destructor
The base class of Registered must provide a virtual destructor to enable
safe deletion with just a base class pointer. This requirement can be
lifted by using Registered_no_delete in places where the deletion
property is not needed.

Fixes #2331
2017-03-24 16:20:04 +01:00
Christian Helmuth
139525b6c9 cpu_sampler: support -fno-omit-frame-poiner builds 2017-03-24 16:20:04 +01:00
Christian Helmuth
cb43e04691 ldso: defer execution of static constructors
Ldso now does not automatically execute static constructors of the
binary and shared libraries the binary depends on. If static
construction is required (e.g., if a shared library with constructor is
used or a compilation unit contains global statics) the component needs
to execute the constructors explicitly in Component::construct() via
Genode::Env::exec_static_constructors().

In the case of libc components this is done by the libc startup code
(i.e., the Component::construct() implementation in the libc).

The loading of shared objects at runtime is not affected by this change
and constructors of those objects are executed immediately.

Fixes #2332
2017-03-24 16:20:04 +01:00
Christian Helmuth
67ac0dde6e libc: checks for initialization and user context
We check if the libc (kernel singleton, config) was initialized and also
if suspend() is called from the valid user context.

Issue #2332
2017-03-24 16:20:03 +01:00
Christian Helmuth
88db3c0df7 Fix some deprecated warnings
Issue #1987
2017-03-24 16:20:03 +01:00
Christian Helmuth
707f66e9a5 ahci: remove disk image after test 2017-03-24 16:20:02 +01:00
Christian Helmuth
a2ad5c06ab Adjust run-script RAM quotas to actual demands
With the current implementation resource requests are not automically
satisfied with slack quota by init. Therefore, this commit adapts RAM
quotas of autopilot scenarios to the actual demands.
2017-03-24 16:20:02 +01:00
Christian Helmuth
09e535b238 netperf: replace FORCE_QEMU by check for autopilot
Now, the script prevents the execution of the test if its started by the
autopilot on Qemu but permits manual runs without taking further
precautions.
2017-03-24 16:20:01 +01:00
Christian Helmuth
19703e6617 Remove deprecated Attached_mmio constructor 2017-03-24 16:20:01 +01:00
Christian Helmuth
d3884c67ad sd_card: remove disk image after test 2017-03-24 16:20:01 +01:00
Alexander Boettcher
3758cb056d acpica: increase memory quota for platform session
Fixes #2343
2017-03-24 16:20:01 +01:00
Alexander Boettcher
d8a151ef7d acpica: fix iomem handling code
Issue already encountered during #2242.

Fixes #2344
2017-03-24 16:20:01 +01:00
Philipp Kerling
15a607f307 Fix toolchain gcc compilation with newer host gcc
An inline attribute mismatch in the gcc-4.9.2 source causes its
compilation to fail on modern gcc versions (verified with gcc 6.3.1,
but probably since gcc 5)
The patch is courtesy of the gcc-patches mailing list:
https://gcc.gnu.org/ml/gcc-patches/2015-08/msg00375.html

Fixes #2341
2017-03-24 16:20:01 +01:00
Christian Helmuth
770c7548d8 acpica: fix service routing in run scenario 2017-03-24 16:20:00 +01:00
Christian Helmuth
e65802eb68 vbox: adjust RAM quota of vbox_pointer 2017-03-24 16:20:00 +01:00
Christian Helmuth
9fb175e236 fb_bench: adjust RAM quota for large frame buffers 2017-03-24 16:20:00 +01:00
Norman Feske
8d68d3d8ac Adapt resource-request test to changes of init
The test used to rely on init's formerly built-in policy of answering
resource requests with slack memory, if available. Since init no longer
responds to resource requests in an autonomous way, we use a dynamically
configured sub-init instance as runtime for the test. This instance, in
turn, is monitored and controlled such that resource requests are
result in quota upgrades. The monitoring component is implemented in
the same test-resource_request program as the test. Both roles are
distinguished by the "role" config attribute.

This is a follow-up to "init: explicit response to resource requests".
2017-03-24 16:20:00 +01:00
Norman Feske
8ab8e65fb5 input_filter.run: avoid runtime resource request
This is a follow-up to "init: explicit response to resource requests".
2017-03-24 16:20:00 +01:00
Alexander Boettcher
a19662abc7 vbox5: update to 5.1.18
Issue #2338
2017-03-24 16:20:00 +01:00
Alexander Boettcher
e4aea2efeb vbox5: enable SMP setups
We use the use old IOAPIC implementation, which works for us much better than
the new one.

Issue #2338
2017-03-24 16:19:59 +01:00
Alexander Boettcher
c782966aea vbox5: track memory allocation by VMM
- avoids memory leakage, especially during VM re-starts

Issue #2338
2017-03-24 16:19:59 +01:00
Alexander Boettcher
4f8a497bbf vbox5: update to 5.1.14
- use more upstream hm code
- add call to memory check as done in vbox4
- add in principle all vbox devices and drivers
- avoid null pointer during VM startup (patch reported to vbox-devel list)
- avoid endless loop in usb root hub

Issue #2338
2017-03-24 16:19:59 +01:00
Alexander Boettcher
572609b30a vbox5: add win10 run scenario
Issue #2338
2017-03-24 16:19:58 +01:00
Alexander Boettcher
5ebd8ae02e vbox5: unified build dir adjustments
Issue #2338
2017-03-24 16:19:58 +01:00
Norman Feske
48d1141917 core: improve formatting of allocator dumps
This patch uses the 'Hex_range' and 'Number_of_bytes' utilities to make
the formatted output of 'Allocator_avl_base' better readable.
2017-03-24 16:19:58 +01:00
Norman Feske
d56374e4b9 base: handle 0 in Number_of_bytes::print
This patch avoids printing the number 0 as "0G".
2017-03-24 16:19:58 +01:00
Norman Feske
7813c3be8f init.run: tweak timings for Qemu 2017-03-24 16:19:58 +01:00
Norman Feske
892043ed76 init: trigger report update on version change
If the version attribute of init's <config> is changes, trigger the
generation of a new state report that includes the information of the
new version.
2017-03-24 16:19:58 +01:00
Alexander Boettcher
a5c70244bf vbox4/5: fix tr TSS_BUSY_FLAG handling
Fixes #2337
2017-03-24 16:19:58 +01:00
Norman Feske
f6c494497b os: remove stale xev_track.h header
This is a follow-up commit to "Remove app/xvfb and lib/xev_track".

Issue #1987
2017-03-24 16:19:57 +01:00
Norman Feske
1fde4d638c init: service forwarding
This patch equips init with the ability to act as a server that forwards
session requests to its children. Session requests can be routed
depending of the requested service type and the session label
originating from init's parent.

The feature is configured by one or multiple <service> nodes hosted in
init's <config> node. The routing policy is selected by via the regular
server-side policy-selection mechanism, for example:

<config>
  ...
  <service name="LOG">
    <policy label="noux">
      <child name="terminal_log" label="important"/>
    </policy>
    <default-policy> <child name="nitlog"/> </default-policy>
  </service>
  ...
</config>

Each policy node must have a <child> sub node, which denotes name of the
server with the 'name' attribute. The optional 'label' attribute defines
the session label presented to the server, analogous to how the
rewriting of session labels works in session routes. If not specified,
the client-provided label is presented to the server as is.

Fixes #2247
2017-03-24 16:19:57 +01:00
Norman Feske
1489791d5e init: explicit response to resource requests
This patch removes the formerly built-in policy of responding to
resource requests with handing out slack quota. Instead, resource
requests have to be answered by an update of the init configuration with
adjusted quota values.

Note that this patch may break run scripts that depend on init's
original policy. Those run scripts may be adjusted by increasing the
quota for the components that use to inflate their RAM usage during
runtime such that the specified quota suffices for the entire lifetime
of the component.
2017-03-24 16:19:57 +01:00
Norman Feske
d227db4574 base: destruction order of binary/linker ROMs
This patch destructs the environment sessions for the binary and the
dynamic linker along with the other environment sessions to avoid a
warning about reverting quota that occurs when attempting to close
these sessions too late.
2017-03-24 16:19:57 +01:00
Norman Feske
29c4ed45cc init: use Prio_levels type instead of basic type 2017-03-24 16:19:57 +01:00
Norman Feske
06943f413d init: respond to RAM-quota changes in config
This patch improves init's dynamic reconfigurability with respect to
adjustments of the RAM quota assigned to the children.

If the RAM quota is decreased, init withdraws as much quota from the
child's RAM session as possible. If the child's RAM session does not
have enough available quota, a resource-yield request is issued to
the child. Cooparative children may respond to such a request by
releasing memory.

If the RAM quota is increased, the child's RAM session is upgraded.
If the configuration exceeds init's available RAM, init re-attempts
the upgrade whenever new slack memory becomes available (e.g., by
disappearing other children).
2017-03-24 16:19:57 +01:00
Norman Feske
b3e5357cf1 Adaptation to init refactoring
Since init no longer provides public headers, we have to adjust the
existing users of this headers. The 'init/child_config.h' is used only
by GDB monitor. So the patch moves the header there as an interim fix.
The 'init/child_policy.h' is still used by a few components, so we have
to keep a trimmed-down version of it for now.
2017-03-24 16:19:56 +01:00
Norman Feske
1cf830497a init: refactoring into multiple files
This patch splits the implementation of init into several headers to
make the implementation easier to digest and to maintain.
2017-03-24 16:19:56 +01:00
Norman Feske
9dca1503a8 init: apply changes of <provides> nodes
This patch enables init to apply changes of any server's <provides>
declarations in a differential way. Servers can in principle be extended
by new services without re-starting them. Of course, changes of the
<provides> declarations may affect clients or would-be clients as this
information is taken into account for the session routing.
2017-03-24 16:19:56 +01:00
Norman Feske
0202048eb6 base: gracefully handle invalid env session routes
This patch addresses the corner cases where an environment session
could not be routed, i.e., if an environment LOG log session is
routed to a non-existing child.
2017-03-24 16:19:56 +01:00
Norman Feske
8d4fb288d9 init: add version attribute to start nodes
The optional 'version' attribute allows for the forced restart of a
child with an otherwise unmodified start node. The specified value is
also reflected in the state report.
2017-03-24 16:19:56 +01:00
Norman Feske
fcf25c22d1 init: respond to binary-name changes
This patch covers the resolution of the ROM route for child binaries
via the generic label-rewriting mechanics. Now, the <binary> node has
become merely sytactic sugar for a route like the following:

<start name="test"/>
  <route>
    <service name="ROM" unscoped_label="test">
      <parent label="test-binary-name"/> </service>
      ...
  </route>
  ...
</start>

A change of the binary name has an effect on the child's ROM route to
the binary and thereby implicitly triggers a child restart due to the
existing re-validation of the routing.
2017-03-24 16:19:55 +01:00
Norman Feske
48174ab974 base: pass separate label to Local_connection
This patch extends the constructor of 'Local_connection' with an
optional 'label' argument, which was previously passed implicitly as
part of the 'args' argument. Keeping the label separate from 'args'
enables us to distinguish the client-specified label from a label that
resulted from a server-side label as it is used when rewriting a label
of an environment session (i.e., the binary name) in init's routing
policy. In principle, this patch eliminates the need for init's
explicite handling of the binary name via the '<binary>' node, or
at least allows us to simplity the binary-node handling.
2017-03-24 16:19:55 +01:00
Norman Feske
39e409f756 os: sanity check in Reporter::Xml_generator
With this check in place, one can safely construct an 'Xml_generator'
even if the report is disabled. This relieves the user of the reporter
from the need to distinguish enabled from disabled reports.
2017-03-24 16:19:55 +01:00
Emery Hemingway
50ee91e738 libc: poll listening sockets during select
Open the accept file at the listen call and poll for read henceforce.

Fix #2319
2017-03-24 16:19:55 +01:00
Emery Hemingway
7ef8c81607 libc: socket fcntl flags inheritence
Set O_NONBLOCK on sockets from the fcntl syscall and propagate this flag
to socket_fs control files and sockets returned from accept.

Fix #2318
2017-03-24 16:19:55 +01:00
Josef Söntgen
031337f039 trace_fs: remove os/server.h usage
Issue #2310.
2017-03-24 16:19:55 +01:00
Josef Söntgen
806e0a8029 udp_client: remove os/config.h usage
Issue #2310.
2017-03-24 16:19:54 +01:00
Josef Söntgen
46463562f6 udp_echo: remove os/config.h usage
Issue #2310.
2017-03-24 16:19:54 +01:00
Josef Söntgen
3d0bde2147 test/iso: remove env deprecated warning
Issue #2310.
2017-03-24 16:19:54 +01:00
Josef Söntgen
f48baa1cf7 test/audio_in: remove env deprecated warning
Issue #2310.
2017-03-24 16:19:54 +01:00
Josef Söntgen
fcd39f9bb2 usb_terminal: remove env deprecated warning
Issue #2310.
2017-03-24 16:19:54 +01:00
Josef Söntgen
a26b4e6bd4 nic_bridge: remove os/server.h usage
Issue #2310.
2017-03-24 16:19:54 +01:00
Josef Söntgen
a1b24a0a72 libports: remove deprecated from libc_block
Issue #2310.
2017-03-24 16:19:54 +01:00
Josef Söntgen
a34fb617a7 ffat: remove deprecated env usage
Issue #2310.
2017-03-24 16:19:53 +01:00
Martin Stein
078f28238f os: fix some more deprecated warnings
Ref #1987
2017-03-15 14:04:56 +01:00
Christian Prochaska
3ac3236a28 Noux: 'empty' ROM service for initial ROMs
The initial ROMs (program and linker) are already attached to the region
map of a forked process and don't need to be obtained again from an
external ROM service when the 'Child' class asks for them. For the program
image, the local Noux ROM service already returned an invalid dataspace
capability, but not for the linker.

Instead of adding another 'magic' ROM name for the local ROM service,
this commit implements an 'empty' ROM service, which returns an
invalid dataspace for the initial ROMs.

Fixes #2272
2017-03-15 13:20:12 +01:00
Christian Prochaska
2ac845281d virtualbox: require x86 platform
Fixes #2326
2017-03-15 13:13:24 +01:00
Christian Prochaska
a1f195f7c0 dosbox: require x86 platform
Fixes #2327
2017-03-15 13:13:23 +01:00
Alexander Boettcher
3b977d4cf3 acpi: avoid warning about dangling allocations
like

Warning: XX dangling allocations at allocator destruction time

Fixes #2330
2017-03-15 13:12:48 +01:00
Christian Prochaska
137305d58a libc: add 'max_align_t' type
Fixes #2334
2017-03-15 13:12:26 +01:00
Alexander Boettcher
637a54aeb5 nova: fix irq handling for qemu 2.7 and newer
Fixes #2336
2017-03-15 12:33:49 +01:00
Roman Iten
3f29e7c675 run/qt5: move to '<config> <vfs/>'
Fixes #2328
2017-03-15 12:32:28 +01:00
Alexander Boettcher
391339a4bb base: handle race in Genode::Registry class
The race may happen when element objects get destructed by another thread then
the thread handling the for_each loop. In this case it may happen that the
object is already destructed (left the ~Element destructor) but the thread
handling the loop touches the invalid memory afterwards (the Element lock).

detected during issue #2299

Fixes #2320
2017-03-15 12:32:28 +01:00
Christian Prochaska
6d6474ba0e qt5: improve port check
Fixes #2324
2017-03-15 12:32:28 +01:00
Christian Prochaska
637c418c96 virtualbox: improve port check
Fixes #2325
2017-03-15 12:32:28 +01:00
Christian Prochaska
25bda02981 lighttpd: improve port check
Fixes #2323
2017-03-15 12:32:28 +01:00
Christian Prochaska
01e9bec5b0 Arora: fix port check
Fixes #2321
2017-03-15 12:32:28 +01:00
Christian Prochaska
79fc33aca8 libav: improve port check
Fixes #2322
2017-03-15 12:32:27 +01:00
Alexander Boettcher
517c098632 dde_rump: rumpuser_cv_timedwait: fix timeout calc
Code orginated from pthread implementation, so adjust it also for dde_rump.

Related to #2311
2017-03-15 12:32:27 +01:00
Christian Helmuth
8ca6009c09 fb_bench: disable autopilot run on linux 2017-03-15 12:32:27 +01:00
Emery Hemingway
10ed7b38d4 libc: initialize the environ pointer before Libc::construct
Setting the global environ pointer to NULL prevents getenv surprises
when using libc without the POSIX wrapper.

Fix #2312
2017-03-15 12:32:27 +01:00
Norman Feske
ec007c0f27 input_filter.run: stabilize key-repeat test
Under certain timing conditions, the test would end up flushing the
input from the input filter in a nested way, which ultimately resulted
in lost input events of the outer nesting level. This patch eliminates
this corner case and thereby stabilizes the key-repeat test.
2017-03-15 12:32:27 +01:00
Christian Helmuth
b9834bc388 Rename Linux audio driver to linux_audio_drv
Related to #2190
Fixes #2278
2017-03-15 12:32:27 +01:00
Christian Helmuth
43e7cc56a3 Rename Linux NIC driver to linux_nic_drv
Related to #2190
Issue #2278
2017-03-15 12:32:27 +01:00
Josef Söntgen
bf96c7f16e platform/x86: fix quota for local ram session
Transfer quota to the session local RAM session to react to the
Quota_exceeded exception properly.

The platform driver keeps a session local RAM session for each of its
clients that is used to allocate DMA memory. A client needs to transfer
some of its quota to the platform driver, which in return transfers this
quota to the session local RAM session. As it happens allocating memory
from a RAM session involves book keeping and in this case, where the
available quota in the session did not suffice and the request was only
a few KiB, the platform driver handled the exception wrongly and did not
transfer the quota.

This problem did not surface up to now because all drivers allocate DMA
memory in larger chunks and the book keeping overhead was of no
consequence as the initial quota transfer probably covered the overhead.

Fixes #2316.
2017-03-15 12:32:27 +01:00
Christian Helmuth
62e605325e run: support variable arguments in append_if
This enables to use append_if like the append command in the following
situation.

  proc optional_binary {} {...}

  append_if $optional config {
    <start name="} [optional_binary] {">
    ...
  }
2017-03-15 12:32:26 +01:00
Martin Stein
9cd3637035 autopilot.list: add nic_dump
Fixes #2314
2017-03-15 12:32:26 +01:00
Martin Stein
35cc020e9c os/server: nic_dump
A tiny bump-in-the-wire tool for dumping NIC packet information.

Ref #2314
2017-03-15 12:32:26 +01:00
Sebastian Sumpf
995017b60c base-foc: update hash for panda timer update
Changed timer frequence to PandaBoard A6 in Fiasco.OC

issue #2308
2017-03-15 12:32:26 +01:00
Sebastian Sumpf
c1f4dad811 base-pistachio: use PIT in Genode timer
on x86_32

issue #2308
2017-03-15 12:32:26 +01:00
Alexander Boettcher
261edf59a9 pthread_cond_timedwait: fix timeout calculation
Due to rounding in the timeout calculation it may happen that the timeout
stored in ms becomes 0, but actually some time (us or ns) are left to wait.
With threads on various priorities (vbox) this may end up in endless loops.

Fixes #2311
2017-03-15 12:32:26 +01:00
Stefan Kalkowski
7a4f4f1adc noux_tool_chain: increase ram_fs quota
The file space demand for the object files when compiling core has grown.
Therefore, the ram_fs component runs out of memory and requests additional
memory from init. On OKL4, where the physical memory is limited by the
elfweaver bootstrap tool, there is no more slack memory after the donation
of 1G to noux.
2017-03-15 12:32:26 +01:00
Stefan Kalkowski
45cab8fed6 hw: destroy active scheduling context (fix #1537)
* In addition fixes routes of the cpu_scheduler.run test
2017-03-15 12:32:25 +01:00
Stefan Kalkowski
4a30c13c2d os: synchronize thread destruction of trace test
* Increase test-thread count to trigger quota exceeding on all platforms
* Synchronize test-thread destruction, otherwise an half-destructed thread
  object can lead to an error message of the thread to be destructed,
  which causes a deadlock, when the destructed thread still holds the log lock
* Limit SMP settings for QEMU to x86 (Ref #2307)
2017-03-15 12:32:25 +01:00
Alexander Boettcher
beb5169ee9 signal test: fix destruction of nested test
The signal_1/2/3 objects (which are threads) are in destruction, but still
signals are send to them. When the signal arrive and the memory for the
signal_1/2/3 object is already invalid we operate on stale memory and all
the locking infrastructure of the Thread don't work anymore.

Be more robust, explicitly wait for the termination of the thread.

Issue #2284
2017-03-15 12:32:25 +01:00
Stefan Kalkowski
f1b632af68 affinity.run: do not test non-SMP platforms 2017-03-15 12:32:25 +01:00
Martin Stein
9834f0cf1e cpu_quota.run: raise test timeout
Previously it worked on Panda only because the timer driver was too
fast.

Ref #2308
2017-03-15 12:32:25 +01:00
Alexander Boettcher
451c08ac01 os: app showing top style CPU utilization via LOG
Fixes #2307
2017-03-15 12:32:25 +01:00
Alexander Boettcher
0a1839e3e2 vbox: ever set hint about host graphic resolution
Otherwise it may happend that the Guest tries to set the last stored
resolution from another run, which maybe is too large.

Up to now, everthing is fine, beside the fact that output changes are not
visible - which is odd and one things the VM came not up.

Issue #2306
2017-03-15 12:32:25 +01:00
Alexander Boettcher
e99eed3c8e vbox: show guest additions version
to detect easiler that something may be wrong. The guest addition version
should match the version we have ported.

Issue #2306
2017-03-15 12:32:24 +01:00
Alexander Boettcher
af3c238ce1 vbox: avoid null access in input handling
that happened during early bootup.

The signal about input events may arrive before keyboard and mouse is set
(due wait_and_dispatch_one_signal called from a started pthread and ep still
 not done with the initialisation)

Issue #2306
2017-03-15 12:32:24 +01:00
Martin Stein
34d1b60f52 bootstrap hw: add missing base/registry.cc
Ref #2196
2017-03-15 12:32:24 +01:00
Martin Stein
0bb752674f panda: fix timer speed
Previously we had configured the timer for the Panda ES with 700 MHz
CPU clock. But the Panda A6 that we use as reference now runs with
800 MHz.

Fixes #2308
2017-03-15 12:32:24 +01:00
Norman Feske
245cfd8571 input_filter.run: omit char-repeat test on Qemu
Apparently, the character-repeat test is too timing-sensitive to run
reliably on Qemu.
2017-03-15 12:32:24 +01:00
Martin Stein
e744c76bf2 mmio: make base address member private
Ref #2196
2017-03-15 12:32:24 +01:00
Martin Stein
c5cb6cb410 base-hw mbi: do not copy Mmap MMIO objects 2017-03-15 12:32:24 +01:00
Martin Stein
5366c8cf7e ahci: do not copy port MMIO objects
Ref #2196
2017-03-15 12:32:23 +01:00
Martin Stein
ecbb7534b9 register set: make noncopyable
If a register set gets copied, the '_plain_access' of the copy references
the plain access object of the original object.

Ref #2196
2017-03-15 12:32:23 +01:00
Alexander Boettcher
bed28dfe49 base: extend cxa guards to support threads on various priorities
Fixes #2299
2017-03-15 12:32:23 +01:00
Alexander Boettcher
16e6533a0a base: extend thread test to test cxa guards
with various priorities.

Showcases issue #2299
2017-03-15 12:24:45 +01:00
Alexander Boettcher
1d36ecc13f libc: fix config parsing in vfs_plugin
The Xml_node contains already only the libc sub_node.

Issue #2306

Broken due to commit:

 libc: remove global config accessor

 Issue #2280.
2017-03-15 12:24:44 +01:00
Martin Stein
b05b5616c8 x86 cpu_quota: lower error tolerance
Previously, on X86, the timer driver used the PIT with a maximum timeout
of 54 ms.  Thus, the driver frequently interrupted the counters with
highest priority to update the timer. This is why we needed a higher
error tolerance as for ARM where the driver, once configured, can sleep
for the whole test timeout. Now, we use the kernel timer and the problem
seems to be exits no longer.

Ref #2304
2017-03-15 12:24:44 +01:00
Martin Stein
574a1bd198 test/cpu_quota: tolerate errors in session quota
Previously we pre-calculated the translation errors for the session
quota to make a discret check in the test. But since the order, in which
init childs get their CPU quota isn't always the same anymore (we should
have never made assumptions about that) the translation errors differ
from trial to trial. However, the errors are below 0.01% of the super
period. We now tolerate them in the run script.

Ref #2304
2017-03-15 12:24:44 +01:00
Christian Prochaska
f79bcbd72a base-foc: add string separators in assertion messages
Fixes #2305
2017-03-15 12:24:44 +01:00
Christian Helmuth
cc78f0b20c tool: second try on failing check of file-based port
We call curl a second time if the first check fails. This gives download
sites time to reconsider their response and helps, for example, to check
the qemu-usb port.
2017-03-15 12:24:44 +01:00
Christian Helmuth
6bc3bc5881 libc: use proper fd sets in select-handler select 2017-03-15 12:24:44 +01:00
Christian Helmuth
ca57afd67e terminal_crosslink: prevent deprecated warning 2017-03-15 12:24:43 +01:00
Martin Stein
a558afbed5 rpi sd_card: move to new Mmio::wait_for
Ref #2196
2017-03-15 12:24:43 +01:00
Martin Stein
31f4c0640a omap4 sd_card: move to new Mmio::wait_for
Ref #2196
2017-03-15 12:24:43 +01:00
Martin Stein
a42e53728d imx sd_card: move to new Mmio::wait_for 2017-03-15 12:24:43 +01:00
Martin Stein
acf762ec9f exynos5 fb_driver: use new Mmio::wait_for
Ref #2196
2017-03-15 12:24:43 +01:00
Martin Stein
7d4674b728 rpi platform driver: use new Mmio::wait_for
Ref #2196
2017-03-15 12:24:43 +01:00
Martin Stein
442c24420d mmio: separate MMIO access and register logic
By separating the plain MMIO access implementation from the generic bit
and offset logic of registers, we can now use the latter also with other
types of register access like I2C. The register and MMIO front-ends have
not changed due to the separation.

Ref #2196
2017-03-15 12:24:42 +01:00
Alexander Boettcher
25ac3cdd86 base: handle twice Lock::lock calls correctly
to avoid loosing threads in the applicants list if lock owner calls 'twice'
Lock::lock().

Fixes #2300
2017-03-15 12:24:42 +01:00
Alexander Boettcher
8102b78d22 base: extend thread test to test locks
Showcase issue #2300
2017-03-15 12:24:42 +01:00
Christian Prochaska
ca2871e2e4 nova: use 'Native_cpu' component for thread initialization
Pass the thread type and exception base to core with a 'Native_cpu'
component instead of enhancing the 'Thread_state' class.

Fixes #2298
2017-03-15 12:24:42 +01:00
Stefan Kalkowski
fbdfbc2476 bomb: remove redundant Rpc_entrypoint in Child
Fixes #2302
2017-03-15 12:24:41 +01:00
Stefan Kalkowski
96eb82574a hw: fix race in core's pager code (fix #2301)
* Acknowledge receive of page-fault signal with ack_signal,
  but restart thread execution separately
* use kill_signal_context when disolving a pager_object to prevent race
* Remove bureaucracy in form of Thread_event and Signal_ack_handler
* remove dead code in riscv, namely Thread_base definition
* translation_table_insertions function for ARM drops out,
  which was overcautious
2017-03-15 12:24:41 +01:00
Christian Helmuth
40f319e9e9 Terminate if pure virtual function is called
Fixes #2229
2017-03-15 12:24:41 +01:00
Norman Feske
d82bd3ca77 News item about Google Summer of Code 2017-03-15 12:24:41 +01:00
Alexander Boettcher
1ee32ac4f4 tool/log/amt: use wsman if matches --amt-tool
Fixes #2277
2017-03-15 12:24:41 +01:00
Martin Stein
dc415669aa signal test: add stressful nested test
Ref #2284
2017-03-15 12:24:40 +01:00
Christian Helmuth
6712b071fc version: 17.02 2017-02-28 14:19:27 +01:00
Norman Feske
a1de3e468a News item for version 17.02 2017-02-28 14:15:06 +01:00
Norman Feske
f63e0e1c87 Release notes for version 17.02 2017-02-28 14:01:24 +01:00
Christian Helmuth
8adaeeb8da Remove port of the DASH shell
It seems the download site vanished. Also, the utility remained unused
since years now.
2017-02-28 13:00:44 +01:00
Sebastian Sumpf
c707713be8 usb/rpi: fix inconsistency between C and C++
Change fiq_enable from 'int' to 'char' (is bool/_BOOL in C) so data does
not get overwritten accidentally.
2017-02-28 13:00:44 +01:00
Josef Söntgen
27cc20049e wifi: fix off-by-one in min PSK length handling
The MIN_PSK_LENGTH constant was not adjusted to accommodate for the
semcantic change when switching from using the raw char array to using
the Genode::String class. The Genode::String::length() method includes
the terminating NUL byte while strlen() does not.

Fixes #2296.
2017-02-28 13:00:44 +01:00
Josef Söntgen
5ad4da4b1b os: force Out_of_metadata exception in TRACE test
We have to create additional threads to trigger the Out_of_metadata
exception on certain platforms.

Fixes #2297.
2017-02-28 13:00:44 +01:00
Norman Feske
226ff08304 core: increase stack size of init-child entrypoint
With the commit "init: session-label rewriting", the stack usage
increased due to the handling of session-label strings as local
variables. The stack overrun occurred in the vmm scenario on
base-hw.
2017-02-28 13:00:44 +01:00
Adrian-Ken Rueegsegger
60dfddbe5a Increase fb_drv RAM quota in vbox auto scenarios
Otherwise the component runs out of memory with large screen
resolutions, e.g. 1920x1440@16.
2017-02-28 13:00:43 +01:00
Adrian-Ken Rueegsegger
bdfe3e1a8c Update Muen port
- Upgrade to Muen v0.8+
- Switch to https
- Download contrib when building kernel
- Append Muen compilation output to build log
- Explicitly init required submodule
2017-02-28 13:00:43 +01:00
Adrian-Ken Rueegsegger
6b66c819ef hw/doc: Update Muen tutorial 2017-02-28 13:00:43 +01:00
Adrian-Ken Rueegsegger
c7454dfb08 hw_x86_64_muen: Use scheduling info region
Return scheduling start and end values from scheduling info page.
2017-02-28 13:00:43 +01:00
Adrian-Ken Rueegsegger
86a3e0b8b3 hw_x86_64_muen: Add support for subject name to sinfo 2017-02-28 13:00:43 +01:00
Adrian-Ken Rueegsegger
712213af24 hw_x86_64_muen: Assert subject_info_type size 2017-02-28 13:00:43 +01:00
Reto Buerki
c16aa05f19 hw_x86_64_muen: Add support for mem content to sinfo 2017-02-28 13:00:42 +01:00
Adrian-Ken Rueegsegger
98ac87caf4 Fix Muen RUN_OPTs
Re-add necessary library components for Muen system build which were
dropped in commit (2530973...).
2017-02-28 13:00:42 +01:00
Christian Prochaska
4498137bd2 cpu_sampler: drop sub-init from run scripts
Now that environment sessions can be routed directly, the sub-init is not
needed anymore.

Fixes #2294
2017-02-28 13:00:42 +01:00
Christian Prochaska
a77e509283 cpu_sampler: kernel-agnostic build support
Fixes #2293
2017-02-28 13:00:42 +01:00
Christian Prochaska
e7958d999d gdb_monitor: kernel-agnostic build support
Fixes #2292
2017-02-28 13:00:42 +01:00
Martin Stein
daaddbd584 base*, os: get rid of all env() calls
Issue #1987
2017-02-28 13:00:42 +01:00
Martin Stein
9b8fcb5fd0 nano3d: get rid of env() calls
Issue #1987
2017-02-28 13:00:42 +01:00
Norman Feske
128faadc31 hw: suppress deprecated warning in signal.cc
The code will be revisited in the release cycle for version 17.05. As
there is nothing a user can do to fix the warning, let's remove it.
2017-02-28 13:00:41 +01:00
Martin Stein
56cafb3b57 hw: fix race in signal dispatching
There was a race when the component entrypoint wanted to do
'wait_and_dispatch_one_signal'. In this function it raises a flag for
the signal proxy thread to notice that the entrypoint also wants to
block for signals. When the flag is set and the signal proxy wakes up
with a new signal, it tried to cancel the blocking of the entrypoint.
However, if the entrypoint had not reached the signal blocking at this
point, the cancel blocking failed without a solution. Now, the new
Kernel::cancel_next_signal_blocking call solves the problem by storing a
request to cancel the next signal blocking of a thread immediately
without blocking itself.

Ref #2284
2017-02-28 13:00:41 +01:00
Sebastian Sumpf
2000b7c0e6 noux: add generic construction function
This function ('noux_construct') is called from each back-end's
construct method (libc or Genode component).

fixes #2291
2017-02-28 12:59:32 +01:00
Christian Prochaska
9067768d25 gdb_monitor: use 'with_libc()' 2017-02-28 12:59:32 +01:00
Alexander Boettcher
51515a598c tcp_terminal: avoid env deprecated warnings
Issue #2280
2017-02-28 12:59:31 +01:00
Christian Prochaska
e446fd5f7c Qt5: keyboard layout support
To select a different keyboard layout than the default 'en_us', override the
'language_chargen' function in your run script (after including
qt5_common.inc):

  proc language_chargen { } { return "de" }

where "de" refers to the character map file

  'repos/os/src/server/input_filter/de.chargen'

Issue #2264
2017-02-28 12:59:31 +01:00
Josef Söntgen
1f447c1460 mupdf: remove env deprecated warnings
Issue #2280.
2017-02-28 12:59:31 +01:00
Josef Söntgen
06f5ee21c0 file_terminal: remove env deprecated warnings
Issue #2280.
2017-02-28 12:59:31 +01:00
Josef Söntgen
567ec255f1 vbox_pointer: remove env deprecated warning
Issue #2280.
2017-02-28 12:59:31 +01:00
Josef Söntgen
552bb13f99 rom_logger: remove env deprecated warning
Issue #2280.
2017-02-28 12:59:31 +01:00
Norman Feske
23ad546a88 init: make RAM preservation configurable
This patch improves the accuracy of init's quota-saturation feature
(handing out all slack quota to a child by specifying an overly high RAM
quota for the child) and makes the RAM preserved by init configurable.
The preservation is specified as follows:

! <config>
!   ...
!   <resource name="RAM" preserve="1M"/>
!   ...
! </config>

If not specified, init has a reasonable default of 160K (on 32 bit) and
320K (on 64 bit).
2017-02-28 12:59:30 +01:00
Alexander Boettcher
28b359703d ram_fs: avoid Deref_unconstructed_object exception
if ROM is invalid. With the patch one gets a name of the ROM and the
server continues.
2017-02-28 12:59:30 +01:00
Alexander Boettcher
6c723fb1e8 vbox: test shared folder with overlay in ram_fs
avoids corrupted ext2fs in rump_fs
2017-02-28 12:59:30 +01:00
Alexander Boettcher
7c0542d4bc qemu-usb: avoid env deprecated warnings
Issue #2280
2017-02-28 12:59:30 +01:00
Josef Söntgen
ecd5bef7cb rom_to_file: remove Server library
Issue #2280.
2017-02-28 12:59:30 +01:00
Josef Söntgen
0c7200a0fe gpio: remove env deprecated warnings
And while there, remove usage of Server library.

Issue #2280.
2017-02-28 12:59:30 +01:00
Josef Söntgen
4f8804c334 input/imx53: remove env deprecated warnings
Issue #2280.
2017-02-28 12:59:30 +01:00
Norman Feske
29b8d609c9 Adjust file headers to refer to the AGPLv3 2017-02-28 12:59:29 +01:00
Norman Feske
ff1b13fa7d License update to AGPLv3 2017-02-28 12:59:28 +01:00
Martin Stein
8ab0a5c795 nic_router.run: avoid use of 'string cat'
It seems that our buildbot has a problem with the TCL command 'string
cat'. In most cases it is not necessary anyway as we can use the ""
enclosure instead. It unfolds inline procedure calls and variables
automatically. We don't want to use "" only in cases where the literal
shall contain many " characters itself as it is the case for XML
configs. Then we use the 'append' command and a helper variable instead.

Ref #2193
2017-02-28 12:59:28 +01:00
Norman Feske
70548959b7 os: fix session routes in rom_to_file.run 2017-02-28 12:59:28 +01:00
Sebastian Sumpf
d1fa549628 libports: adjust lwip and ldso scripts to new API 2017-02-28 12:59:28 +01:00
Sebastian Sumpf
35d2d582a4 base: free 'Cpu_free_component' from EP construction fails
It can happen that when Cpu_free_component is constructed the insertion
of the object through 'manage' succeeds for the EP put not for the pager
EP, which in turn raises an Out_of_meta_data exception. Because we are
within the constructor, the descstructor is not called, leading to a
dangling object pool entry for the EP.

issue #2289
2017-02-28 12:59:28 +01:00
Alexander Boettcher
f272637655 tool: deny to run on qemu version with SVM broken 2017-02-28 12:59:27 +01:00
Josef Söntgen
9ec553474e libc: remove global config accessor
Issue #2280.
2017-02-28 12:59:27 +01:00
Josef Söntgen
b3af297058 libc: remove global env from sysctl
Issue #2280.
2017-02-28 12:59:27 +01:00
Josef Söntgen
b2dd0ab436 libc: remove global env from socket_fs_plugin
Issue #2280.
2017-02-28 12:59:27 +01:00
Josef Söntgen
5ec7a0e2f8 libc: remove global env from mmap registry
Issue #2280.
2017-02-28 12:59:27 +01:00
Josef Söntgen
a79f7d234b libc: remove global env from fd_alloc
Issue #2280.
2017-02-28 12:59:27 +01:00
Norman Feske
d6a92e956a Add init.run to autopilot.list 2017-02-28 12:59:26 +01:00
Norman Feske
150c286f0e init: dynamic configuration
This patch lets init apply configuration changes to a running scenario
in a differential way. Children are restarted if any of their session
routes change, new children can be added to a running scenario, or
children can deliberately be removed.

Furthermore, the new version of init is able to propagate configuration
changes (modifications of <config> nodes) to its children without
restarting them.
2017-02-28 12:59:26 +01:00
Norman Feske
bc236bbcde launchpad: remove superfluous include 2017-02-28 12:59:26 +01:00
Norman Feske
fcb861689a base: support for re-validating session routes
This patch supplements 'Session_state' with the methods needed to test
the validity of a session with a changed routing policy.
2017-02-28 12:59:26 +01:00
Norman Feske
a9795c93f9 init: use buffered XML for config 2017-02-28 12:59:26 +01:00
Norman Feske
e4fba26a85 init: Genode::String for unique and binary name
This patch removes the use of C-style string functions from init.
2017-02-28 12:59:26 +01:00
Sebastian Sumpf
9d67633b8b base-foc: remove obsolete mk files
* remove everything under base-foc/mk/spec
* add correct SPECS for x86 in base-foc/etc/specs.conf

issue #2288
2017-02-28 12:59:25 +01:00
Christian Prochaska
c4eea920a4 libc: fix resume mechanism
Fixes #2287
2017-02-28 12:59:25 +01:00
Josef Söntgen
76cb06794a libports: Libc::with_libc nested
Fixes #2286.
2017-02-28 12:59:25 +01:00
Martin Stein
c20bfd4414 echo_udp: do often create, bind, and close socket
Ref #2285
2017-02-28 12:59:25 +01:00
Martin Stein
d61cb2714c libc/socket_fs: unlink during close
If 'close' does not call 'unlink' like 'shutdown', the Lxip_socket_dir
never gets destroyed and thus the socket server leaks resources like
RAM and ports.

Ref #2285
2017-02-28 12:59:25 +01:00
Martin Stein
d5b1f4fa5f echo_udp.run: remove unnecessary stdcxx
Ref #2285
2017-02-28 12:59:25 +01:00
Martin Stein
43fcdc43e6 libc/socket_fs: warn on unexpected arg in shutdown
Our 'shutdown' implementation handles only the case that 'how' is 'RDWR'.
Thus, print an error and continue if a user calls it with another value.

Fixes #2285
2017-02-28 12:59:24 +01:00
Alexander Boettcher
1a6963813c libc: avoid race using Libc::suspend with pthreads
TOCTTOU bug, in our case time of check to time of sleep bug
2017-02-28 12:59:24 +01:00
Sebastian Sumpf
553a4222f4 base: entrypoint dissolve signal proxy
If not dissolved in ~Entrypoint, the signal proxy is found within NOVA's
and FOC's object pool upon Rpc_entrypoint destruction. This leads to a
deadlock because the signal proxy is destructed before the RPC EP.

issue #2284
2017-02-28 12:59:24 +01:00
Norman Feske
dfc4c58782 root/component.h: POLICY::release on exception
This patch ensures that the POLICY::release is called whenever the
session creation aborted with an exception. In the original version, an
exception like 'Quota_exceeded' caused a single-session root interface
to deny subsequent session requests.
2017-02-28 12:59:24 +01:00
Norman Feske
8b4afe95c1 News item about the license update to AGPLv3 2017-02-28 12:59:24 +01:00
Christian Prochaska
db0dc0d97c libc: unblock main thread in 'Kernel::resume_all()'
If 'Libc::Kernel::resume:all()' is called from a non-main thread, send a
signal to unblock the main thread from 'wait_and_dispatch_one_signal()'.

Fixes #2283
2017-02-28 12:59:24 +01:00
Alexander Boettcher
3226dd0649 vbox: remove signal receiver usage for fb & input
avoids deadlocks due to new libc and vfs usage
2017-02-28 12:59:23 +01:00
Alexander Boettcher
328da2975f vfs: fix races in fs_file_system with pthreads
Change metadata before submitting a packet. If the submitting thread is a
pthread, the metadata may be immediately change by the signal handler running
in the context of the entrypoint thread.
2017-02-28 12:59:23 +01:00
Josef Söntgen
69c48a3626 os: refactor Global_file_system_factory
The global file system factory is now created explicitly and the
global singleton accessor function was removed.

Fixes #2281.
2017-02-28 12:59:23 +01:00
Norman Feske
7d9f68493a base: support for multi-staged child startup
This patch enhances the 'Child' and 'Child_policy' with the ability to
separate the different steps of bootstrapping children. If the
'Child_policy::initiate_env_sessions()' returns false, the child's
environment sessions remain unrouted at construction time. This way,
child objects for many children can be initialized to a state that
allows the children to represent services for other children. Therefore,
session routing can be applied before any child executes.

At this stage, the environment RAM sessions of all children can be
created. Note that this step still has the limitation that RAM sessions
are generally expected to be provided by either the parent or a local
service.

Once all children are equipped with RAM, they can in principle receive
session-quota donations. Hence, all other environment sessions can now
be arbitrarily routed and initiated.

Once the environment of a child is complete, the child's process and
initial thread is created.
2017-02-28 12:59:23 +01:00
Norman Feske
9cba459958 base: remove Child::heap
This patch improves the accounting for the backing store of
session-state meta data. Originally, the session state used to be
allocated by a child-local heap partition fed from the child's RAM
session. However, whereas this approach was somehow practical from a
runtime's (parent's) point of view, the child component could not count
on the quota in its own RAM session. I.e., if the Child::heap grew at
the parent side, the child's RAM session would magically diminish. This
caused two problems. First, it violates assumptions of components like
init that carefully manage their RAM resources (and giving most of them
away their children). Second, if a child transfers most of its RAM
session quota to another RAM session (like init does), the child's RAM
session may actually not allow the parent's heap to grow, which is a
very difficult error condition to deal with.

In the new version, there is no Child::heap anymore. Instead, session
states are allocated from the runtime's RAM session. In order to let
children pay for these costs, the parent withdraws the local session
costs from the session quota donated from the child when the child
initiates a new session. Hence, in principle, all components on the
route of the session request take a small bite from the session quota to
pay for their local book keeping

Consequently, the session quota that ends up at the server may become
depleted more or less, depending on the route. In the case where the
remaining quota is insufficient for the server, the server responds with
'QUOTA_EXCEEDED'. Since this behavior must generally be expected, this
patch equips the client-side 'Env::session' implementation with the
ability to re-issue session requests with successively growing quota
donations.

For several of core's services (ROM, IO_MEM, IRQ), the default session
quota has now increased by 2 KiB, which should suffice for session
requests to up to 3 hops as is the common case for most run scripts. For
longer routes, the retry mechanism as described above comes into effect.
For the time being, we give a warning whenever the server-side quota
check triggers the retry mechanism. The warning may eventually be
removed at a later stage.
2017-02-28 12:59:23 +01:00
Norman Feske
641fb08b5f Automated test for init 2017-02-28 12:59:23 +01:00
Norman Feske
84fddafda7 init: enable init to report its internal state
This patch equips init with the ability to report its internal state in
the form of a "state" report. This feature can be enabled by placing a
'<report>' node in init's configuration.

The report node accepts the following arguments (with their default
values):

'delay_ms="100"': specifies the number of milliseconds to wait before
  producing a new report. This way, many consecutive state changes -
  like they occur during the startup - do not result in an overly
  large number of reports but are merged into one final report.

'buffer="4K"': the maximum size of the report in bytes. The attribute
  accepts the use of K/M/G as units.

'init_ram="no"': if enabled, the report will contain a '<ram>' node
  with the memory stats of init.

'ids="no"': supplement the children in the report with unique IDs, which
  may be used to infer the lifetime of children accross configuration
  updates in the future;

'requested="no"': if enabled, the report will contain information about
  all session requests initiated by the children.

'provided="no"': if enabled, the report will contain information about
  all sessions provided by all servers.

'session_args="no"': level of detail of the session information
  generated via 'requested' or 'provided'.

'child_ram="no"': if enabled, the report will contain a '<ram>' node
  for each child based on the information obtained from the child's RAM
  session.

Issue #2246
2017-02-28 12:59:22 +01:00
Norman Feske
9d683a56a0 base: add Child_policy::session_state_changed()
This method is a hook to enable a runtime to respond to state changes.
In particular, in init this hook is used to trigger the generation of a
new state report, if configured.

Furthermore, the patch introduces the 'generate_client_side_info' and
'generate_server_side_info' methods to the 'Session_state', which
generates an XML representation of the session states to appear in
reports produced by init.

Issue #2246
2017-02-28 12:59:22 +01:00
Martin Stein
a74a0092b3 nic_router.run: raise Qemu RAM size
Ref #2193
2017-02-28 12:59:22 +01:00
Martin Stein
d301022fe7 nic_router.run: do not append but concatenate
Makes the script more readable and saves 100 LOC.

Ref #2193
2017-02-28 12:59:22 +01:00
Martin Stein
412c5e5be4 run/platform_drv: add append-free interface
Normally, the platform driver helpers adapt the global run variables directly
via append. But the introduction of a more elegant run script style, that
incorporates dependent strings inline may be a good idea. Thus, we need the
backends of the helpers available as functions that return their string rather
than appending it.

The old interface still exists and uses the new interface as backend.

Ref #2193
2017-02-28 12:59:22 +01:00
Martin Stein
d2832c3e4d lwip/http_clnt: remove unused variable
Ref #2193
2017-02-28 12:59:22 +01:00
Martin Stein
a88954394a nic_bridge tests: simplify test names
Ref #2193
2017-02-28 12:59:21 +01:00
Martin Stein
dc4e2325d0 nic_router.run: use static IP config in general
Dynamic IP configuration is a problem when testing on real machines
in a network that behaves differently than the DHCP in QEMU.

Ref #2193
2017-02-28 12:59:21 +01:00
Martin Stein
a4d110aa60 nic_router: fix indentation in verbose log
Ref #2193
2017-02-28 12:59:21 +01:00
Martin Stein
959b80bab1 lxip/lwip tests: non-libc attributes to config tag
The 'server_ip' and 'server_port' attributes for 'lxip/udp_client' and
'lwip/http_clnt' as well as the 'port' attribute for 'lxip/udp_echo' and
'lwip/http_srv_static' are not directly libc-related so they should not
live in the libc tag but in the config tag of the component.

Ref #2193
2017-02-28 12:59:21 +01:00
Martin Stein
a9535d5311 nic_router.run: update to new usage of the VFS tag
Use <config><vfs/></config> instead of <config><libc><vfs/></libc></config>.

Ref #2193
2017-02-28 12:59:21 +01:00
Josef Söntgen
e266e3cf1d floating_window_layouter: remove deprecated env()
Issue #2280.
2017-02-28 12:59:21 +01:00
Norman Feske
e951425c59 nit_fader: fix "deprecated" warning
Issue #1987
2017-02-28 12:59:20 +01:00
Norman Feske
e17811fb7a cli_monitor: API transition
Issue #1987
2017-02-28 12:59:20 +01:00
Norman Feske
bfdadc55b2 base: Add Number_of_bytes::print method
This method attempts to print the number with a K/M/G unit if possible
and thereby increases the human readability of generated output.
2017-02-28 12:59:20 +01:00
Norman Feske
8cb0dc9c16 init: session-label rewriting
This patch enhances init with the support for rewriting session labels
in the target node of a matching session route. For example, a Noux
instance may have the following session route for the "home" file
system:

<route>
  <service name="File_system" label="home">
    <child name="rump_fs"/>
  </service>
  ...
</route>

At the rump_fs file-system server, the label of the file-system session
will appear as "noux -> home". This information may be evaluated by
rump_fs's server-side policy. However, when renaming the noux instance,
we'd need to update this server-side policy.

With the new mechanism, the client's identity can be hidden from the
server. The label could instead represent the role of the client, or a
name of a physical resource. For example, the Noux route could be
changed to this:

<route>
  <service name="File_system" label="home">
    <child name="rump_fs" label="primary_user"/>
  </service>
  ...
</route>

When the rump_fs receives the session request, it is presented with the
label "primary_user". The fact that the client is "noux" is not taken
into account for the server-side policy selection.

Issue #2248
2017-02-28 12:59:20 +01:00
Norman Feske
c0af463b81 base: Add Child_policy::Route
The new return value of 'resolve_session_request' allows the child
policy to define the label used as the policy selector at the server.

Because this patch introduces the distinction of the child-provided
label from the label as presented to the server along with the session
request, the latter is now handled as a dedicated 'Session_state'
argument.

Issue #2248
2017-02-28 12:59:20 +01:00
Sebastian Sumpf
2d199982eb os: add 'wait_and_dispatch_one_signal' test 2017-02-28 12:59:20 +01:00
Martin Stein
06e605defa LibC VFS: Warn on possible FD path leaks 2017-02-28 12:59:19 +01:00
Martin Stein
222a789fef LibC socket FS: Fix leak of remote and local files 2017-02-28 12:59:19 +01:00
Christian Prochaska
1df4e53cba Qt5: use 'Libc::with_libc()' where needed
Fixes #2282
2017-02-28 12:59:19 +01:00
Norman Feske
b1a9addeb6 os/child_policy_dynamic_rom.h: API transition
Issue #1987
2017-02-28 12:59:19 +01:00
Alexander Boettcher
9ba24c0722 vbox: use with_libc 2017-02-28 12:59:19 +01:00
Christian Helmuth
4eb04119a5 test: TCP echo server and client 2017-02-28 12:59:19 +01:00
Josef Söntgen
b1dca8e047 os: pass env to connections in uart test
Issue #2280.
2017-02-28 12:59:18 +01:00
Martin Stein
335685b7fe usb: get rid of combined specs
Issue #2280.
2017-02-28 12:59:18 +01:00
Josef Söntgen
15821e32ec nic: remove usage of deprecated env()
This commit includes changes to the Nic::Session_component interface.
We now pass the entire env to the component instead of only ram, rm and
the ep because we need the env to open connections from within the
Session_component implemenation. So far only the cadence_gem driver
needs this, though.

Issue #2280.
2017-02-28 12:59:18 +01:00
Josef Söntgen
e6e1d8c144 platform/arm: remove usage of deprecated env()
Issue #2280.
2017-02-28 12:59:18 +01:00
Josef Söntgen
0b9272bd9c timer: remove usage of deprecated env()
Issue #2280.
2017-02-28 12:59:18 +01:00
Josef Söntgen
de401f37fb uart/x86: remove usage of deprecated env()
Issue #2280.
2017-02-28 12:59:18 +01:00
Josef Söntgen
493d3e58cf ps2: remove usage of deprecated env()
Issue #2280.
2017-02-28 12:59:17 +01:00
Josef Söntgen
3c57a8b3c2 usb_session: pass Region_map explicitly
Issue #2280.
2017-02-28 12:59:17 +01:00
Josef Söntgen
a2cff03539 dde_linux: remove usage of deprecated env()
Fixes #2280.
2017-02-28 12:59:17 +01:00
Josef Söntgen
7d91b1d949 dde_bsd: remove usage of deprecated env()
Issue #2280.
2017-02-28 12:59:17 +01:00
Josef Söntgen
69925ee126 ahci: remove usage of deprecated env()
The remaining warnings are false-positives because os/attached_mmio.h
contains both constructor variants.

Issue #2280.
2017-02-28 12:59:17 +01:00
Christian Helmuth
eab477370f libc: select support for components
Libc components cannot use regular calls to select() as this may suspend
their execution. In this case incoming RPCs will be deferred until
select() returns and the component returns to the entrypoint dispatch
loop. The Libc::Signal_handler solves this problem with a its select()
that either returns the currently ready file descriptors immediately or
calls the registered handler function during libc resume.
2017-02-28 12:59:17 +01:00
Christian Helmuth
f7f18710de libc: tests for components using RPC and select() 2017-02-28 12:59:16 +01:00
Christian Helmuth
0aac473229 libc: component-compatible execution semantics
Now, the libc kernel supports to execute application code from all RPC
functions not only Component::construct(). This is enabled by the
Libc::with_libc() scope function.
2017-02-28 12:59:16 +01:00
Norman Feske
3a65f0bba3 libc: 'with_libc' mechanism to enter libc runtime
This commit extends an easy-to-use mechanism to allow Genode component
code to enter/leave the libc application context. This is needed
whenever low-level component code (like signal handlers or RPC
functions) need to interact with potentially blocking libc I/O
functions.

Please note that this commit contains the API-level design only. The
actual context switching code 'execute_in_application_context' is
missing.
2017-02-28 12:59:16 +01:00
Christian Helmuth
fdad5116dd libc: support for socket file system
The socket file system can be configured in the "socket" attribute of
the libc config node like follows.

  <vfs> <dir name="socket"> <fs/> </dir> </vfs>
  <libc ... socket="/socket"/>

This configures the socket file system libc backend to access files in
"/socket" for socket operations.
2017-02-28 12:59:16 +01:00
Christian Helmuth
ad185fe1fe vfs: improve read-ready handling in VFS server 2017-02-28 12:59:16 +01:00
Emery Hemingway
9d7cda04fa test: RFC862 UDP echo server 2017-02-28 12:59:15 +01:00
Sebastian Sumpf
304f2eaf38 lxip: VFS plugin
Provides file-system compatible to libc socket-fs requirements. This
includes pseudo file for network configuration.
2017-02-28 12:59:15 +01:00
Christian Helmuth
1f29e1854a lxip: poll_does_not_wait() for non-blocking API 2017-02-27 15:37:50 +01:00
Norman Feske
8e6306e8e3 base: tolerate nested signal handling (but warn) 2017-02-27 15:37:50 +01:00
Sebastian Sumpf
b66716d278 base: entrypoint 'wait_and_dispatch_one_signal'
There existed a race when 'wait_and_dispatch_one_signal' is called form
a RPC context, because the 'signal_proxy' or 'main' will block and the
signal semaphore, when the EP then calls 'wait_and_dispatch_one_signal',
the signal proxy is woken up ands sends an RPC to the EP, leading to a
dead lock if no further signal arrive, because the EP will then remain
blocked in the signal semaphore.

Therefore, for this case, the signal proxy will now perform a semaphore
up operation and does not perform an RPC if the EP is within
'wait_and_dispatch_one_signal'.
2017-02-27 15:37:50 +01:00
Norman Feske
652f92c9c9 init: 'unscoped_label' session-routing attribute
This patch enhances init with the ability to route individual
environment sessions. Prior this patch, environment sessions could be
routed only by an all-encompassing '<service>' node that would match
both child-initiated and environment sessions.

In contrast to the existing 'label', 'label_prefix', and 'label_suffix'
attributes of '<service>' nodes, which are always scoped with ther name
of the corresponding child, the 'unscoped_label' allows the definition
of routing rules for all session requests, including init's requests for
the child's environment sessions. For example, to route the ROM session
requests for a child's dynamic linker, the following route would match:

<route>
  <service name="ROM" unscoped_label="ld.lib.so"> ... </service>
</route>

Issue #2215
2017-02-27 15:37:49 +01:00
Martin Stein
0b5db07948 vfs fs: ignore dead handle IDs on handle_ack
When a directory gets destructed it dissolves the handles of each contained file
but the acknowledgement might be still in-flight. If we finally receive it,
it leads to an Unknown_id exception on the Handles ID Space in 'handle_ack'.
Now we catch it, print a warning, and go on.
2017-02-27 15:37:49 +01:00
Norman Feske
19868de69a launcher: API transition (deprecated warnings)
Issue #1987
2017-02-27 15:37:49 +01:00
Norman Feske
c6c79acf8e gems/wm: API transition (deprecated warnings)
Issue #1987
2017-02-27 15:37:49 +01:00
Norman Feske
aee90ed453 Adapt components to new Event::CHARACTER type
Issue #2264
2017-02-27 15:37:49 +01:00
Norman Feske
455bd9396e gems/terminal: support 'CHARACTER' events
This patch adds the handling of 'CHARACTER' events as emitted by the
input-filter's character generator (<chargen>). To avoid interpreting
press/release events twice (at the input filter and by the terminal's
built-in scancode tracker), the terminal's scancode tracker can be
explicitly disabled via <config> <keyboard layout="none"/> </config>.
In the future, the terminal's built-in scancode tracker will be
removed.

The use of the terminal with the input filter is illustrated by the
'terminal_echo.run' script.

Issue #2264
2017-02-27 15:37:49 +01:00
Norman Feske
2ce87216bc os: input_filter implementation and test
The input_filter is the successor of the input_merger. In addition to
merging input streams, the component applies several forms of input
transformations such as the application of keyboard layouts.

Issue #2264
2017-02-27 15:37:49 +01:00
Norman Feske
859d23d92b os: introduce Input::Event::CHARACTER type
Character events are created via a dedicated 'Event' constructor that
takes an 'Event:Utf8' object as argument. Internally, the character is
kept in the '_code' member. The 'Utf8' value can by retrieved by the
recipient via the new 'utf8' method.

Issue #2264
2017-02-23 15:03:29 +01:00
Johannes Schlatow
762728fee0 base: remove superfluous line feeds in print_lines
Fixes #2279
2017-02-23 15:03:29 +01:00
Christian Helmuth
eda0828ca0 Skip binary files in GEN_INCLUDES
A binary file may be a temporary Vim .swp file when examining contrib
sources. The commit prevents build errors like

  .../repos/dde_linux/lib/mk/lxip_include.mk:29:
  target '.../x86_64/var/libcache/lxip_include/include/include/include/Binary'
  given more than once in the same rule
  .../repos/dde_linux/lib/mk/lxip_include.mk:29:
  target '.../x86_64/var/libcache/lxip_include/include/include/include/file'
  given more than once in the same rule
  ...
2017-02-23 15:03:28 +01:00
Christian Helmuth
61b6dccf13 Queued read/write/read_ready in VFS and servers 2017-02-23 15:03:28 +01:00
Christian Helmuth
01daf19947 Extend libc counter tests 2017-02-23 14:54:51 +01:00
Christian Helmuth
6e5f3d432e Post signal-handler hook in entrypoint
A Signal_handler may schedule a hook function that is executed after the
signal handler returned. This can be used if the hook function may
trigger a (nested) signal handler by means of
wait_and_dispatch_one_signal(). Otherwise, an occurrence of the same
signal that triggered the original signal handler results in a dead lock
just before calling the nested handler (due to the Signal_context
destruction lock).
2017-02-23 14:54:51 +01:00
Christian Helmuth
b805e001db Add READ_READY support to file-system session
The read-ready packet informs the server that the client wants to be
notified if a handle becomes readable. When becoming readable, the
server acknowledges packet and the client may queue a read requests
accordingly.
2017-02-23 14:54:51 +01:00
Christian Helmuth
8185a49b4c libc: replace Timed_semaphore by suspend with timeout 2017-02-23 14:54:50 +01:00
Sebastian Sumpf
3048017d90 lxip: schedule timeout + poll wait
* poll_wait + schedule_timeout +  block on wait_and_dispatch_one_signal
2017-02-23 14:54:50 +01:00
Martin Stein
ed370a8f5c Introduce gpio_drv function in run scripts
Do not use automatic alias in the run tool for the name of the
gpio-driver binary.

Ref #2268
2017-02-23 14:54:50 +01:00
Christian Helmuth
957653d4b9 libc: separate unit for freeaddrinfo/getaddrinfo
Preperation for merge of libc_resolv into libc.
2017-02-23 14:54:50 +01:00
Christian Prochaska
2d700d0b2d lxip: return zero-initialized memory in '__alloc_percpu()' 2017-02-23 14:54:49 +01:00
Christian Prochaska
59f38fe38c lxip: implement 'rt_genid_ipv4()' and "rt_genid_bump_ipv4()' 2017-02-23 14:54:49 +01:00
Christian Prochaska
7b3a6e6347 lxip: delete default gateway route before reconfiguration 2017-02-23 14:54:49 +01:00
Sebastian Sumpf
b8b34efef9 lxip: dhcp update on link state change 2017-02-23 14:54:49 +01:00
Christian Prochaska
a1453d83ff lxip: network reconfiguration support 2017-02-23 14:54:48 +01:00
Sebastian Sumpf
aa602032dd vfs: dynamic configuration support 2017-02-23 14:54:48 +01:00
Christian Prochaska
8025f5f570 lxip: allow network reconfiguration
This commit adds the public functions 'lxip_configure_static()' and
'lxip_configure_dhcp()' for reconfiguring the network.
2017-02-23 14:54:48 +01:00
Christian Prochaska
8a6930ef5d lxip: enable configuration readout and reconfiguration 2017-02-23 14:54:48 +01:00
Christian Prochaska
c5b58a2df4 lxip: implement more needed functions
- rtnl_notify()
- round_jiffies()
- round_jiffies_relative()
- round_jiffies_up()
- schedule_delayed_work()

Fixes #2261
2017-02-23 14:54:47 +01:00
Christian Prochaska
8fcfcbce0e lxip: implement 'mod_delayed_work()'
Fixes #2258
2017-02-23 14:54:47 +01:00
Christian Prochaska
bdb3bc0299 dde_linux: initialize 'delayed_work' in DECLARE_DELAYED_WORK()
Fixes #2257
2017-02-23 14:54:47 +01:00
Sebastian Sumpf
6f5c839df7 lxip/libc_lxip: adjust to new Genode API 2017-02-23 14:54:46 +01:00
Sebastian Sumpf
93d8b4487f lx_kit: Let 'construct_env' return Lx_kit::Env 2017-02-23 14:54:46 +01:00
Sebastian Sumpf
643a09b518 libc: late intialization of plugins
- for-each plugin iterator
* Call 'init(Genode::env &)' for each plugin bofore 'Libc::construct' or
'main' is called
2017-02-23 14:54:46 +01:00
Sebastian Sumpf
549c6db064 lxip: restore entrypoints + remove sig_rec 2017-02-23 14:54:46 +01:00
Martin Stein
c2e6fd9392 fb_bench: do not test on i.MX53 + Fiasco.OC
The i.MX53 Framebuffer driver doesn't come up on on Fiasco.OC because the Platform
driver isn't allowed to access essential devises like the SRC or the Fuses. This is
most likely due to the kernel not configuring the CSU appropriately.

Ref #2268
2017-02-23 14:54:45 +01:00
Josef Söntgen
1e1ce43170 lan9118: use env in Timer connection
Issue #2275.
2017-02-23 14:54:45 +01:00
Josef Söntgen
e6e85fce74 os: remove Server from nic/component
Issue #2275.
2017-02-23 14:54:44 +01:00
Josef Söntgen
251aa95d96 dde_ipxe: remove usage of deprecated env()
Fixes #2275.
2017-02-23 14:54:44 +01:00
Alexander Boettcher
54865fdd0f Provide copy of config file of a run scenario
Fixes #2213
2017-02-23 14:54:44 +01:00
Alexander Boettcher
eea00ab8b0 vbox: provide initial memory buffer
broken due to changes of

libc: API transition
Issue #1987

For now provide a initial memory buffer for allocation of static
constructors and of malloc calls out of the libc during early
libc initialization until actual vbox code is executed having the Env
pointer.
2017-02-23 14:54:44 +01:00
Josef Söntgen
c407fb80fa jitterentropy: remove deprecated env() usage
This change introduces a Genode specific init function, which sets the
backend allocator used by jent_zalloc/zfree(). As consequence the
library can solely be used by native Genode components, direct libc
usage is not supported.

Fixes #2274.
2017-02-23 14:54:43 +01:00
Alexander Boettcher
22f02396c0 qt5: avoid cryptic messages if not prepared
Fixes #2276
2017-02-23 14:54:43 +01:00
Christian Helmuth
15957a2d3d Adapt nitpicker config to xray_trigger changes 2017-02-23 14:54:43 +01:00
Norman Feske
5b2e909062 doc: update of challenges.txt 2017-02-23 14:54:42 +01:00
Alexander Boettcher
a58b2a1e9f Extend bender to be MBI2 and add overlap checks
Issue #2242
2017-02-23 14:54:42 +01:00
Stefan Kalkowski
cf943dac65 hw: bootstrap into kernel
Put the initialization of the cpu cores, setup of page-tables, enabling of
MMU and caches into a separate component that is only used to bootstrap
the kernel resp. core.

Ref #2092
2017-02-23 14:54:42 +01:00
Stefan Kalkowski
8aa8423cfd hw: rework mapping and page-flags
Ref #2092
2017-02-07 19:20:30 +01:00
Stefan Kalkowski
b6490e913f hw_x86_64: assemble TSS and IDT statically
* remove alignment restrictions of code64 entrypoint

Ref #2092
2017-02-07 19:20:30 +01:00
Stefan Kalkowski
bb10afa266 tool/run: define core link address explicitly
Instead of implicitly asking for core's link address when linking
core within the run tool, deliver it explicitly to the build_core
routine. Thereby we gain the freedom to use the build_core tool for
different targets like core, and bootstrap.

Ref #2092
2017-02-07 19:20:30 +01:00
Stefan Kalkowski
d549921bc8 hw: introduce memory regions and array
* replace Native_regions and inline code for iteration

Ref #2092
2017-02-07 19:20:30 +01:00
Stefan Kalkowski
a97e92c7ec base: make Allocator_avl::_avl_tree accessable
This hook allows the export of the allocator's state by a derrived
class. I.e., the final state of the allocator used for bootstrapping
core.

Ref #2092
2017-02-07 19:20:30 +01:00
Stefan Kalkowski
7c8281f2d6 util: turn max, min, and abs into const_expr
Ref #2092
2017-02-07 19:20:29 +01:00
Stefan Kalkowski
746f51393b hw: fix raw output functions for kernel
Ref #2092
2017-02-07 19:20:29 +01:00
Stefan Kalkowski
786a81c846 core: unify log() initialization between kernels
* initialize the log environment implicitly for core
* removing the redundant lock
* unify between base-hw and all others

Ref #2092
2017-02-07 19:20:29 +01:00
Emery Hemingway
48150a706b update Reporter constructors
The Reporter utility needs a reference to the environment at
construction to establish Report connections.

Ref #1987
Fix #2232
2017-02-07 19:20:29 +01:00
Norman Feske
a4e2999e7d libc: warn but don't stop on too early allocations 2017-02-07 19:20:29 +01:00
Christian Helmuth
eb0d5671b5 tool: fix kernel-specific QEMU_OPT handling 2017-02-07 11:12:31 +01:00
Norman Feske
26373814ef wm.run: adjust routes to env-session routing
Issue #2250
2017-02-07 11:12:31 +01:00
Norman Feske
10bb3fbe38 qt5: add missing routes to run scripts
Issue #2250
2017-02-07 11:12:31 +01:00
Christian Prochaska
a423ae67a4 Noux: destroy 'Rom_dataspace_info' objects
Fixes #2271
2017-02-07 11:12:30 +01:00
Martin Stein
fb5f464a01 create_builddir: do more elaborate sanity checks
Ref #2268
2017-02-07 11:12:30 +01:00
Martin Stein
b26988feeb gpio_drv: get rid of specs foc_rpi and hw_rpi
Ref #2268
2017-02-07 11:12:29 +01:00
Martin Stein
102676b1c1 fb_bench: do not test on zynq
There is currently no FB driver for zynq.

Ref #2268
2017-02-07 11:12:29 +01:00
Christian Helmuth
f9389109bf Support select in libc VFS plugin by read_ready() 2017-02-07 11:12:29 +01:00
Christian Helmuth
ba1bd071df libc counter test 2017-02-07 11:12:28 +01:00
Norman Feske
f8349b5bc7 os/slave.h: Remove use of global allocator
This patch eliminates the need for a global allocator by passing the
parent-service registry as argument to the 'Slave::Policy' constructor.

Fixes #2269
2017-02-07 11:12:28 +01:00
Christian Helmuth
c0d61858c3 Support for suspendable read in VFS and libC
The support has two parts. First, a VFS plugin now gets passed an
I/O-response handler callback on construction, which informs users of the
VFS that an I/O event occurred. This enables, for example, the libC to
check if blocking read can be completed. Further, the VFS file I/O
interface provides now functions for suspendable reads, i.e.,
queue_read() and complete_read().
2017-02-07 11:12:27 +01:00
Josef Söntgen
e5d6c06f58 Rework trace test and add to autopilot
Issue #2260
2017-02-07 11:12:26 +01:00
Josef Söntgen
f26532803f core: use proper size in Trace-Policies Tslab
Issue #2260.
2017-02-07 11:12:26 +01:00
Martin Stein
223cc06341 fb_bench: start QEMU with -nographic
Enables us to test on our machines without SDL and X.

Ref #2268
2017-02-07 11:12:26 +01:00
Martin Stein
066a5e9670 fb_bench: mark wand_quad as not supported
We do not have a framebuffer driver on Wandboard yet.

Ref #2268
2017-02-07 11:12:26 +01:00
Martin Stein
ae91ca012e fb_bench: correct "platform not supported" message
Ref #2268
2017-02-07 11:12:25 +01:00
Martin Stein
77e266d1ff fb_bench: add gpio driver when supported
Ref #2268
2017-02-07 11:12:25 +01:00
Alexander Boettcher
d5d4befab3 nova: avoid !zero assertion in kernel
Fixes #2266
2017-02-07 11:12:25 +01:00
Emery Hemingway
92978933c7 root/component: log error on Out_of_memory
Servers should account and handle this condition locally.
2017-02-07 11:12:24 +01:00
Norman Feske
d1df1dbd87 libc: API transition (fix deprecated warnings)
Issue #1987
2017-02-07 11:12:24 +01:00
Norman Feske
25bcc2dfa6 libc: add Libc::Allocator that uses malloc/free 2017-02-07 11:12:23 +01:00
Norman Feske
aa29ebe751 base/shared_object.h: add missing includes 2017-02-07 11:12:23 +01:00
Christian Prochaska
a1b4e905ab Signal_receiver::wait_for_signal(): check for pending signal before blocking
Fixes #2267
2017-02-07 11:12:23 +01:00
Christian Helmuth
0f6800b20f libc: use task switch in select() 2017-02-07 11:12:23 +01:00
Christian Helmuth
59c0796820 libc: test for select()
Issue #2237
2017-02-07 11:12:21 +01:00
Emery Hemingway
3e6646fd9a server/vfs: API transition
* Use an attached ROM rather than the global config()
* Use a Ram_session_guard to track session metadata allocation

Ref #1987
2017-02-07 11:12:21 +01:00
Emery Hemingway
ded2f7e2d4 server/vfs: use Id_space to manage open nodes
Replacing the node lookup table with an Id_space removes the
limit on open handles per session and allows mutal associativity
between File_system handles and local VFS handles.

Fix #2221
2017-02-07 11:12:21 +01:00
Christian Helmuth
531e35ec42 Define Microseconds max value in timeout framework 2017-01-31 14:58:37 +01:00
Christian Helmuth
a52543acd2 Improve noux fork test (grand child, waitpid)
The test now forks twice - the parent forks a child and the child itself
forks a grand child. Both, parent and child, wait for termination of
their forked process with waitpid(). Additionally, the run script now
checks for exit of the parent (not any noux process).
2017-01-31 14:58:37 +01:00
Christian Helmuth
aaa079c360 terminal_mux: fix comment 2017-01-31 14:58:37 +01:00
Christian Helmuth
ce3d10465e Mark warnings from the signal dispatcher as such 2017-01-31 14:58:36 +01:00
Christian Helmuth
e93fe55e54 libc: clear frame pointer on user-context entry
If built with frame-pointer support the backtrace now stops at the user
entry code. Before, the libc kernel stack was trced back too.
2017-01-31 14:58:36 +01:00
Christian Helmuth
7386c4e1d1 More robust handling of suspend in entrypoint
First, calls to manage and dissolve signal contexts now check if the
signal receiver was constructed. There is a small window during suspend
where it is destructed before reconstructed again.

Last, we ensure that processing of incoming signal was deblocked by the
suspend signal before entering the suspend operation. This way we ensure
already queued signal are handled.
2017-01-31 14:58:36 +01:00
Norman Feske
9fffb004b2 os/timer.h: disambiguate Timer::curr_time 2017-01-31 14:58:36 +01:00
Alexander Boettcher
c58444af80 netperf: adjust netperf.inc instructions
and avoid some deprecated config warnings
2017-01-31 14:13:28 +01:00
Alexander Boettcher
dd5592cc50 Fix String(Hex()) usage
- additional add test casye to log.run

Fixes #2265
2017-01-31 12:02:21 +01:00
Norman Feske
818795ab90 vfs/block: fix seek-offset handling during write
The block file system wrongly modified the seek offset during a
read-modify-write operation that is required for sub-block-size
requests. This led to problems whenever such write requests spanned
multiple blocks and thereby were handled in multiple iterations.

Fixes #2262
2017-01-31 12:01:19 +01:00
Norman Feske
c65f78671f VFS block test
This test reproduces an issue of the VFS block file system when the
underlying block device has a coarser granularity than the block
requests issued by the VFS client. I.e., if the underlying block device
has a block size of 4K, writing a sequence of (non-4K-aligned) 512 blocks
that crosss a 4K boundary corrupts the data on the block device.

Issue #2262
2017-01-31 12:01:19 +01:00
Norman Feske
9adc6f1228 os: compile-time-defined parent-service registry
The new utility at 'os/static_parent_services.h' allows the creation of
a registry of parent services at compile time and thereby eliminates the need
for dynamic memory allocations whenever the set of services is known at
compile time as is the case for most uses of 'Slave::Policy'. The commit
showcases the utility in the bomb test.
2017-01-31 12:01:19 +01:00
Norman Feske
cd3a5852d6 Warn about the use of deprecated headers
This commit enables compile-time warnings displayed whenever a deprecated
API header is included, and adjusts the existing #include directives
accordingly.

Issue #1987
2017-01-31 12:01:18 +01:00
Martin Stein
b4600bfc99 sd_card_bench: exclude foc+imx_53 and odroid_xu
On Odroid XU the SD card driver comes up and finds a card but for card
access it seems that we would need a platform driver like on Arndale.

On imx_53, the first SDHCI MMIO access faults. This is likely due to the
AIPSTZ memory bridge. On HW, we initialize the AIPSTZ in the kernel, but
when I tried doing that in the platform driver instead, the first AIPSTZ
MMIO access faults ^^ So I gave up for now and removed support.

Fixes #2259
2017-01-31 12:01:17 +01:00
Martin Stein
e36368735b input.run: add missing routing rules
Ref #1987
2017-01-31 12:01:17 +01:00
Martin Stein
7184f0febe init: handle Service_denied during child creation
Ref #1987
2017-01-31 12:01:17 +01:00
Emery Hemingway
9b3ecb114d lib/posix: populate environment variables from config
Parse ``<env key="..." value=".."/>`` nodes from the config ROM and
populate a list at the 'genode_envp' and 'environ' symbols.

Test script at run/libc_getenv.

Fix #2236
2017-01-31 12:01:16 +01:00
Martin Stein
7f7f8063dd run/boot_dir/foc: avoid error on link creation
In combination with run/image/uboot, run/boot_dir/foc expected a file link it
created itself to be a directory by trying to create another file link inside
it.

Ref #1987
2017-01-31 12:01:16 +01:00
Stefan Kalkowski
c76c199f8d hw: enable SMP for Wandboard (fix #2253) 2017-01-31 12:01:16 +01:00
Martin Stein
b14e6fd724 autopilot.list: add some missing tests of 'os'
Added tests:
timer_accuracy
synced_interface
reconstructible
rom_blk
fb_bench
ram_fs_chunk

Ref #1987
2017-01-31 12:01:16 +01:00
Martin Stein
ed62199957 test/reconstructible: move to base
The test uses only stuff from the base repo.

Ref #1987
2017-01-31 12:01:15 +01:00
Martin Stein
d1134644cc test/synced_interface: move to base
The test uses only stuff from the base repo.

Ref #1987
2017-01-31 12:01:15 +01:00
Martin Stein
ad2d1fe586 os/test: transition to new base API
For all tests
* use Component::construct instead of main
* use new connection constructors with env argument
* use log instead of printf

For some tests
* replace signal receivers with signal handlers
* replace global static variables with Main class members
* remove unnecessary multithreading
* model test steps as classes that are independent from each other and managed
  by Main as constructibles
* use references instead of pointers and exceptions instead of error codes
* use Attached_* helpers intead of doing attach/detach manually
* use helpers like String, Id_space, Registry instead of arrays and lists
* make the run script suitable for automated execution and conclusion

Ref #1987
2017-01-31 12:01:15 +01:00
Martin Stein
e0fef69cb3 test/ram_fs_chunk: fix bug in allocation tracking
In the past, the Genode::destroy, that is called by the RAM-FS-chunk destructors,
issued Allocator::free instead of the C++ delete. Therefore it was possible to
use the size argument of Allocator::free for the allocation tracker in the
RAM-FS-chunk test. Nowadays, we have to keep track of the allocation sizes
ourselves because delete doesn't hand over the size.

Ref #1987
2017-01-31 12:01:15 +01:00
Martin Stein
71525443c5 timer_accuracy: generalize, automate, new base API
The old version was running with base-linux only and there was no
run script that provided automated execution and evaluation.

Ref #1987
2017-01-31 12:01:15 +01:00
Martin Stein
9e8366b47c test/nic_raw: remove
Ref #1987
2017-01-31 12:01:14 +01:00
Martin Stein
7285f82f79 test/packet_stream: remove
The rationales behind this test are also covered by test/nic_loopback
or they are outdated (e.g. blocking).

Ref #1987
2017-01-31 12:01:14 +01:00
Martin Stein
a9f4baf674 test/config_args: remove
The main function with string arguments is deprecated and so is this test.

Ref #1987
2017-01-31 12:01:14 +01:00
Martin Stein
ca38375107 test/fb_block_adapter: remove
The FB Block Adapter in os/src/test visualizes a block session via a
Framebuffer session. As far as I can see, it is not a test but rather
the base for a bump-in-the-wire component. However, for this role it
currently lacks a Block back-end. As it also would have to be updated to
use the new base API I removed it instead, leaving only its git
history as inspiration if someone needs such a component in the future.

Fixes #2245
Ref #1987
2017-01-31 12:01:14 +01:00
Christian Helmuth
d5e57d15c8 Remove debugging artifacts from lxip and usb libs 2017-01-31 12:01:14 +01:00
Christian Helmuth
eccc539651 noux-pkg/less: use LIBS when building tools
lesskey and lessecho missed the declaration of ${LIBS} on the compiler
command line, which ended up in unusable programs.

  > file noux-pkg/less/lesskey.broken
  noux-pkg/less/lesskey.broken: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter *empty*, not stripped
  > file noux-pkg/less/lesskey
  noux-pkg/less/lesskey: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter ld.lib.so, not stripped

The issue was identified because -O0 builds broke with

  ld: lesskey: The first section in the PT_DYNAMIC segment is not the .dynamic section

Unfortunately, this simple fix renders both tools also dependent to libm
and ncurses which they don't use.
2017-01-31 12:01:14 +01:00
Christian Helmuth
60c9192335 Enforce building jitterentropy library with -O0
Fixes #2256
2017-01-31 12:01:13 +01:00
Christian Helmuth
f1c877f205 Use Genode::size_t in rumpuser_getrandom_backend()
This streamlines the Genode-specific interface for both 32-bit and
64-bit architectures and fixes dynamic-linking issue with the rump
VFS due to differing size_t types.
2017-01-31 12:01:13 +01:00
Norman Feske
eb869ab2dc backdrop: API transition (fix deprecated warnings)
Issue #1987
2017-01-31 12:01:13 +01:00
Norman Feske
cf81c787e1 cli_monitor: remove unused gdb_command_config file
This file is unused since the commit "CLI monitor: remove unused GDB
command".

Issue #1832
2017-01-31 12:01:12 +01:00
Christian Prochaska
d2a2893959 noux_fork: fix run script
Fixes #2251
2017-01-31 12:01:12 +01:00
Norman Feske
47a129c6af run/platform_drv.inc: add 'need_usb_hid' function
This function returns the information whether the used platform relies
on USB HID for interactive scenarios by default as is the case for most
ARM platforms. In contrast, for x86 the USB driver can be omitted because
we can use the PS/2 driver (that is readily available in repos/os/).
2017-01-31 12:01:12 +01:00
Norman Feske
582e4aec02 ports-foc: remove L4Linux
Fixes #2216
2017-01-31 12:01:12 +01:00
Alexander Boettcher
f52c44647f core: replace misleading avl warning in detach
If the detach address is not the beginning of the region, one gets:

"virtual void Genode::Allocator_avl_base::free(void*): given
 address (0x180e0) is not the block start address (0x18000)"

Instead, print an explicit warning in front of the detach call.
2017-01-31 12:01:12 +01:00
Martin Stein
b57834f26b lwip/http_clnt: circumvent LWIP cleanup exceptions
Cleaning up LWIP when returning from the main function sporadically
leads to endless errors "Error: sys_arch_mbox_fetch: unknown exception
occured!". We let the client sleep forever at the end of its main function
to prevent tests from failing due to a flooded log.

Reg #2193
2017-01-31 12:01:12 +01:00
Martin Stein
c9f7e9dbb2 tz_vmm: update to new API and clean up
* get rid of printf
* use exceptions instead of error codes
* use Id_space instead of the individual block device registry
* use Cstring instead of char const*
* move method definitions > 1 line to .cc files
* rename Block Block_driver and Serial Serial_driver to avoid name clashes
  with the Genode namespace and thereby simplify the code
* use lambdas for Block device lookup and apply
* switch to the Component framework
* don't use env(), config(), ... and hand over env to each connection
* use Attached_mmio and Attached_rom/ram_dataspace instead of manual
  solutions

Fixes #2223
2017-01-31 12:01:11 +01:00
Martin Stein
0590e00e66 tz_vmm: use library instead of REQUIRES
Ref #2223
2017-01-31 12:01:11 +01:00
Martin Stein
9c14c1bb71 create_uboot: update to new build-directory naming
Ref #2223
2017-01-31 12:01:11 +01:00
Norman Feske
02d5efcf3f init: apply routing to environment sessions
The init component used to create the CPU/RAM/PD/ROM sessions (the child
environment) for its children by issuing session requests to its parent,
which is typically core. This policy was hard-wired. This patch enables
the routing of the environment sessions of the children of init
according to the configured routing policy.

Because there is no hard-wired policy regarding the environment sessions
anymore, routes to respective services must be explicitly declared in
the init configuration. For this reason, the patch adjusts several run
scripts in this respect.

This patch removes the outdated '<if-args>' special handling of session
labels. The '<if-args>' feature will eventually be removed completely
(ref #2250)

Issue #2197
Issue #2215
Issue #2233
Issue #2250
2017-01-31 12:01:11 +01:00
Norman Feske
c1e399025e os: let empty label prefix/suffix match
This patch changes the 'Xml_node_label_score' to regard an empty
label_prefix or label_suffix as a match instead of a conflict. Until
now, there was no use case for an empty label_prefix. But with init's
new ability to route environment sessions, an empty prefix denotes any
child-initiated session (as oposed to an parent-initiated environment
session).

Issue #2215
Issue #2233
2017-01-23 16:46:05 +01:00
Christian Prochaska
9006b7ea6a cpu_sampler: fix 'Native_cpu_component' for Fiasco.OC
Fixes #2244
2017-01-23 16:46:04 +01:00
Alexander Boettcher
dfe351a02c Link device_pd statically.
Reduces the likelihood of issue reported by #2209. Commit is meant as stop
gap until #2209 gets fixed.
2017-01-23 16:46:04 +01:00
Norman Feske
645cd88a8b gems/menu_view: adaptation to new libc/vfs config
Issue #2217
2017-01-23 16:46:04 +01:00
Norman Feske
ddcc1cf6aa gems/png_image.h: fix context pointer handling
This patch fixes a problem that unsurfaced by the commit "menu_view: API
transition", which changed the class layout of the 'Png_image' so that
the 'Read_struct' pointer is no longer equal to the 'Png_image' pointer.
2017-01-23 16:46:04 +01:00
Norman Feske
e43da51bd6 base: handle dangling env sessions in ~Child
This commit addresses the situation where an environment session
outlives the session-providing service. In this case, the env session
got already invaidated at the destruction time of the server. However,
the underlying session-state structure continues to exist until the
client is destructed. During the eventual destruction of such a dangling
environment session, we have to be careful not to interact with the
no-longer existing service.

Ref #2197
2017-01-20 16:47:01 +01:00
Norman Feske
21458e6efa base: destruction of env-session-providing child
This patch addresses the corner case of destructing a child that
provides an enviroment session to another child. Before this patch,
this situation could result in an infinite loop.

The problem was introduced as a side effect of issue #2197 "base: apply
routing policy to environment sessions".
2017-01-20 16:47:00 +01:00
Norman Feske
94d991277f launchpad: distinguish unique name from elf name
This patch re-enables the launchpad to start multiple instances of the
same program. Without it, launchpad wrongly requests the binary ROM with
the child's unique name as label. The lookup of the first instance
solely succeeds because the unique name equals the binary name.
2017-01-20 16:47:00 +01:00
Norman Feske
3a6d5b9d1a News item for road map 2017 2017-01-20 16:47:00 +01:00
Norman Feske
6c87c5dbdc Road map for 2017 2017-01-20 16:47:00 +01:00
Reto Buerki
0938d69192 muen: Build sinfo code as static sinfo-muen library
And link it with core and virtualbox.
2017-01-20 16:47:00 +01:00
Reto Buerki
eec2cb34f8 Replace have_spec hw_x86_64_muen with have_spec muen 2017-01-20 16:46:59 +01:00
Christian Prochaska
1e2fb9432f terminal_crosslink: API transition
Fixes #2241
2017-01-20 16:46:59 +01:00
Christian Prochaska
dbb641d44a terminal session: return number of bytes written
To better support non-blocking terminal components, let the
'Terminal::Session::write()' function return the number of bytes
actually written.

Fixes #2240
2017-01-20 16:46:59 +01:00
Christian Prochaska
9f7a4feab4 test/terminal_crosslink: API transition
Issue #1987
2017-01-20 16:46:59 +01:00
Martin Stein
3e8cd442a3 test/cpu_quota: API transition
Fixes #2239
2017-01-20 16:46:58 +01:00
Christian Prochaska
ec5dbe66db trace_fs: API transition (fix 'deprecated' warnings)
Issue #1987
2017-01-20 16:46:58 +01:00
Christian Prochaska
5cc036e6ca rom_prefetcher: API transition (fix 'deprecated' warnings)
Issue #1987
2017-01-20 16:46:58 +01:00
Christian Prochaska
14ed670916 ram_fs: API transition (fix 'deprecated' warnings)
Issue #1987
2017-01-20 16:46:58 +01:00
Christian Prochaska
201bfabdac os/include/file_system_session: API transition (fix 'deprecated' warnings)
...and adaptation of the users of 'File_system::Session_rpc_object' to the
modified interface.

Issue #1987
2017-01-20 16:46:58 +01:00
Christian Prochaska
344f6f9e53 os/include/block: API transition (fix 'deprecated' warnings)
...and adaptation of the users of 'Block::Driver', 'Block::Root' and
'Block::Session_component' to the modified interface.

Issue #1987
2017-01-20 16:46:57 +01:00
Christian Prochaska
fb744e7423 loader: API transition (fix 'deprecated' warnings)
Issue #1987
2017-01-20 16:46:57 +01:00
Christian Prochaska
c1246c4c95 gdb_monitor: fix build error
Fixes #2227
2017-01-20 16:46:57 +01:00
Emery Hemingway
2351aef744 server/terminal_log: API transition
Ref #1987
2017-01-20 16:46:57 +01:00
Christian Helmuth
212cf856a5 Wifi driver libraries require x86 2017-01-20 16:46:57 +01:00
Christian Helmuth
c9460ba423 Remove foc_odroid_x2 spec from build directory 2017-01-20 16:46:57 +01:00
Christian Helmuth
f58a046003 Add x86 driver repositories to muen build.conf 2017-01-20 16:46:56 +01:00
Christian Helmuth
dfc7c4b60b qt_launchpad: remove PWRN() 2017-01-20 16:46:56 +01:00
Christian Prochaska
4e07f612cf part_blk: API transition (fix 'deprecated' warnings)
Issue #1987
2017-01-20 16:46:56 +01:00
Christian Prochaska
dbb56a8068 nit_fb: API transition (fix 'deprecated' warnings)
Issue #1987
2017-01-20 16:46:56 +01:00
Christian Prochaska
cdcfc120cb nic_router: API transition (fix 'deprecated' warnings)
Issue #1987
2017-01-20 16:46:56 +01:00
Christian Prochaska
9be07d2244 os/include/nic: API transition (fix 'deprecated' warnings)
...and adaptation of the users of 'Nic::Root' and 'Nic::Session_component'
to the modified interface.

Issue #1987
2017-01-20 16:46:56 +01:00
Christian Prochaska
a63217b216 nic_bridge: API transition (remove 'deprecated' warnings)
Issue #1987
2017-01-20 16:46:56 +01:00
Christian Prochaska
33eefc4404 mixer: API transition (fix 'deprecated' warning)
Issue #1987
2017-01-20 16:46:55 +01:00
Christian Prochaska
cf4b663b38 log_terminal: API transition
Issue #1987
2017-01-20 16:46:55 +01:00
Emery Hemingway
18504b4801 merge lib/config_args with lib/posix
Merging the config_args library with the POSIX library supplies
'argc' and 'argv' arguments to components using a 'main' entry.

Fix #2218
Ref #1987
2017-01-20 16:46:55 +01:00
Christian Prochaska
7948a7261b ldso: constrain second linker symbol relocation pass on x86_64
Handle only GLOB_DAT relocations in the second relocation pass, like it is
done on x86_32 and ARM.

Fixes #2219
2017-01-20 16:46:55 +01:00
Christian Prochaska
e89cab4433 dynamic_rom: API transition (fix 'deprecated' warnings)
Issue #1987
2017-01-20 16:46:54 +01:00
Christian Prochaska
12c5982e2b test/rtc: API transition
Issue #1987
2017-01-20 16:46:54 +01:00
Christian Prochaska
101d0fee7c log_report: API transition
Issue #1987
2017-01-20 16:46:54 +01:00
Christian Prochaska
60aebe3005 rtc_drv: API transition (fix 'deprecated' warnings)
Issue #1987
2017-01-20 16:46:54 +01:00
Martin Stein
c16ee836cf test/timer: update to new API
Fixes #2231
2017-01-13 13:07:17 +01:00
Alexander Boettcher
6b2dcffdac acpica: API transition
Issue #1987
2017-01-13 13:07:16 +01:00
Norman Feske
703d68c7c1 themed_decorator: API transition
Issue #1987
2017-01-13 13:07:16 +01:00
Norman Feske
7180851b2f menu_view: API transition
Issue #1987
2017-01-13 13:07:16 +01:00
Norman Feske
81862a41e1 decorator: API transition
Issue #1987
2017-01-13 13:07:16 +01:00
Norman Feske
99bfc3c0e2 test/decorator_stress: API transition
Issue #1987
2017-01-13 13:07:15 +01:00
Norman Feske
36db1866a2 scout/launchpad/liquid_fb/nitlog: API transition
Issue #1987
2017-01-13 13:07:15 +01:00
Norman Feske
7790c7cb67 News item for FOSDEM 2017 2017-01-13 13:07:15 +01:00
Alexander Boettcher
188cab7d3a vbox: distinguish muen, nova and generic binaries 2017-01-13 13:07:14 +01:00
Norman Feske
4bfdfbb42a lx_hybrid: API transition
Issue #1987
2017-01-13 13:07:14 +01:00
Norman Feske
6f6f68f216 nitpicker/wm: fix session_control mechanism
The session-control mechanism is based on the way how sessions are
labeled. In #2171, we changed the labeling to be more strict. In
particular, label-less sessions do no longer exist.

Unfortunately, nitpicker and the window manager still handled the former
weaker labeling, which ultimately led to a situation where any
session-control argument would mismatch. The behavior could be observed
in the launcher.run script where a click on the subsystem button would
not focus the clicked-on subsystem. With the patch, the scenario works
again as expected.
2017-01-13 13:07:14 +01:00
Norman Feske
28d497549c report_rom/clipboard: API transition
Issue #1987
2017-01-13 13:07:14 +01:00
Alexander Boettcher
1cfeb41f14 acpi_drv: Genode API transition
Issue #1987
2017-01-13 13:07:13 +01:00
Norman Feske
5f25718e8c test/xml_node: API transition
Issue #1987
2017-01-13 13:07:13 +01:00
Sebastian Sumpf
6fa6d72c0b rump_fs: Transition to new API
The rump libraries and the rump_fs component are now conform to the new base
API. Also the I/O back end should be running stable now.

issue #2224
2017-01-13 13:07:13 +01:00
Norman Feske
a7f40b24ca Warn about the use of deprecated env() function
This patch enables warnings if one of the deprecate functions that rely
in the implicit use of the global Genode::env() accessor are called.

For the time being, some places within the base framework continue
to rely on the global function while omitting the warning by calling
'env_deprecated' instead of 'env'.

Issue #1987
2017-01-13 13:07:13 +01:00
Emery Hemingway
4c7ab07480 Rump kernel VFS plugin
Tests at libc_vfs_ext2, libc_vfs_fs_ext2.

Fix #1752
Ref #2224
2017-01-13 13:07:12 +01:00
Emery Hemingway
ec6cff7ba8 label timer session requests
Ref #1752
Ref #2224
2017-01-13 13:07:12 +01:00
Emery Hemingway
07cb4b2a4e server/terminal: API transition
The key repeat and flush handling was added by Norman Feske.

Ref #1987
2017-01-13 13:07:12 +01:00
Norman Feske
5e75ac4f87 timeout: change timer resolution from 100 to 5 ms
Issue #2225
2017-01-13 13:07:12 +01:00
Alexander Boettcher
5034acc109 tool/tftp: make bender/pulsar readable by default 2017-01-13 13:07:11 +01:00
Norman Feske
7646737833 test/resource_request: API transition
Ref #1987
2017-01-13 13:07:11 +01:00
Norman Feske
82e6d7cf52 noux: API transition
This patch removes the dependency of the deprecated Genode API,
fixes the coding style, and removes the "random" file system
(superseded by the VFS plugin mechanism).

Ref #1987
2017-01-13 13:07:11 +01:00
Emery Hemingway
f957fcdd98 use Attached_dataspace at audio streams
Ref #1987
2017-01-13 13:07:10 +01:00
Emery Hemingway
1f019d65d3 app/openvpn: update to new APIs
Replace Thread_deprecated, env()->heap().

Ref #1987
2017-01-13 13:07:10 +01:00
Josef Söntgen
a9a8bb0d8f iso9660: use new component APIs
Issue #1987.
2017-01-13 13:07:10 +01:00
Josef Söntgen
b87a82784c dynamic_rom: use local env for Timer connection
Issue #1987.
2017-01-13 13:07:10 +01:00
Josef Söntgen
7cc754191a blk_cache: remove global env accessor usage
Issue #1987.
2017-01-13 13:07:09 +01:00
Stefan Kalkowski
e960b06214 os: transition to new API for audio and blk tests
* removes the outdated, unused alarm test

Ref #1987
2017-01-13 13:07:09 +01:00
Stefan Kalkowski
15171eaac6 os: transition to new API for vmm (ref #1987) 2017-01-13 13:07:09 +01:00
Stefan Kalkowski
128cd852b7 intel_fb: only build library on x86 (ref #2222) 2017-01-13 13:07:08 +01:00
Alexander Boettcher
0a32fcf4e0 vbox: avoid using deprecated env()
Issue #1987
2017-01-13 13:07:08 +01:00
Norman Feske
73837ef56a init: print error for denied environment sessions
Fixes #2214
2017-01-13 13:07:08 +01:00
Josef Söntgen
06a4411196 omap4_fb: use new base APIs
Issue #1987.
2017-01-13 13:07:08 +01:00
Josef Söntgen
1946f558c9 rpi_fb: use new base APIs
Issue #1987.
2017-01-13 13:07:07 +01:00
Josef Söntgen
55cfa22ac9 pl11x_fb: use new base APIs
Issue #1987.
2017-01-13 13:07:07 +01:00
Stefan Kalkowski
aa004cf211 base: transition to new API for tests (ref #1987) 2017-01-13 13:07:07 +01:00
Martin Stein
d07cd0e88e sd_card: re-factorizea and clean up
Merge the platform-specific files and classes (they merely aggregated
themselves) so that each platform provides merely one class
Sd_card::Driver. Also, the Sd_card::Driver_base class is introduced for
the generic parts of Sd_card::Driver.

Ref #2206
2017-01-13 13:07:07 +01:00
Martin Stein
b33c35a003 sd_card: get rid of wait_for_irq
Most implementations use a Signal_handler now to acknowledge the packet
instead of waiting for the transfer completion. The exceptions to that are
the non-DMA implementations for RPI and PL180

Ref #2206
2017-01-13 13:07:06 +01:00
Martin Stein
9e1f3259c5 sd_card: make main.cc generic
The previous platform-specific implementations differed only in minor aspects.

Ref #2206
2017-01-13 13:07:06 +01:00
Martin Stein
613f4171f3 sd_card: i.MX6 support
The i.MX6 driver shares most of its code with the i.MX53 driver.

Ref #2206
2017-01-13 13:07:06 +01:00
Martin Stein
4ae4f7f605 autopilot.list: add sd_card_bench
Ref #2206
2017-01-13 13:07:05 +01:00
Martin Stein
7bebb9cfb7 sd_card_bench: make generic + move to os/src/test
The test was previously implemented platform specific in sub-dirs of
drivers/sd_card.

Ref #2206
2017-01-13 13:07:05 +01:00
Martin Stein
5aad63c6e8 sd_card: use library instead of REQUIRES
Ref #2206
2017-01-13 13:07:05 +01:00
Martin Stein
8c1e2f0555 regulator: add missing inline and static constexpr
The exynos5/consts header defined global symbols. If included by
multiple compilation units, this lead to multiple-definition errors.

Ref #2206
2017-01-13 13:07:05 +01:00
Norman Feske
a9eecc1a2d nic_loopback: API transition
Ref #1987
2017-01-13 13:07:04 +01:00
Christian Prochaska
7a0bcbbccb gdb_monitor: API transition
Issue #1987
2017-01-13 13:07:04 +01:00
Alexander Boettcher
537dde1f40 seoul: remove deprecated env and config usage
Issue #1987
2017-01-13 13:07:04 +01:00
Stefan Kalkowski
7eb6ef226f python: do not use libc internal symbol in test 2017-01-13 13:07:03 +01:00
Stefan Kalkowski
6775b4077d os: platform_drv (arm) API transition (ref #1987) 2017-01-13 13:07:03 +01:00
Norman Feske
3ae19a9eb7 loader: API transition
Ref #1987
2017-01-13 13:07:03 +01:00
Norman Feske
b7474bceff test/xml_generator: API transition 2017-01-13 13:07:03 +01:00
Norman Feske
fa1a105d64 init: API transition
Ref #1987
2017-01-13 13:07:02 +01:00
Emery Hemingway
9bae4823a0 os/packet_stream: avoid global env
Pass an explicit Region_map reference to stream constructors.

Issue #1987
Issue #2034
2017-01-13 13:07:02 +01:00
Josef Söntgen
ce3170f3f7 exynos_fb: use new base APIs
In addition to that we now busy wait, i.e. poll, for interrupts
instead of using the IRQ session. That is fine because interrupts
were only used while configuring the HDMI over I2C and are not used
while normal operation.

Issue #1987.
2017-01-13 13:07:02 +01:00
Josef Söntgen
834e47d2cf fb_sdl: remove deprecated APIs
Issue #1987.
2017-01-13 13:07:02 +01:00
Emery Hemingway
745eb89237 lib/component: pass extended Libc::Env
Libc::Env is the Genode::Env interface extended to cover access
to the XML content of the 'config' ROM and a VFS instance. This
deduplicates the burden of components to attain and manage
these resources.

Fix #2217
Ref #1987
2017-01-13 13:07:01 +01:00
Stefan Kalkowski
fc273f3840 run: remove vanished kernel/platform specifier 2017-01-13 13:07:01 +01:00
Alexander Boettcher
fa834e34eb acpica: remove deprecated env() usage
Issue #1987
2017-01-13 13:07:01 +01:00
Christian Helmuth
bfbfa86cd4 Adapt USB terminal to component API
Issue #1987
2017-01-13 13:07:01 +01:00
Norman Feske
48f216f481 vbox_pointer: API transition
Ref #1987
2017-01-13 13:07:00 +01:00
Norman Feske
e91170a49c app/cli_monitor: API transition
Besides updating CLI monitor to the new API, the patch removes
Fiasco.OC-specific extensions that remained unused for a long time.

Ref #1987
2017-01-13 13:07:00 +01:00
Norman Feske
7f5e2c2eb2 Remove app/xvfb and lib/xev_track
The xvfb support remained unused for years. So let's remove it.
2017-01-13 13:07:00 +01:00
Emery Hemingway
3268a16d13 server/nit_fader: API transition
Ref #1987
2017-01-13 13:06:59 +01:00
Emery Hemingway
98ff4e3ce2 app/xray_trigger: API transition
Ref #1987
2017-01-13 13:06:59 +01:00
Emery Hemingway
f22deb3714 app/status_bar: API transition
Ref #1987
2017-01-13 13:06:59 +01:00
Emery Hemingway
d8e36bb808 test/nitpicker: API transition
Ref #1987
2017-01-13 13:06:59 +01:00
Emery Hemingway
3e2e2ee2fe app/pointer: API transition
Ref #1987
2017-01-13 13:06:58 +01:00
Emery Hemingway
811bd1561b server/nitpicker: API transition
Ref #1987
2017-01-13 13:06:58 +01:00
Emery Hemingway
5f4ead01bb server/wm: API transition
Ref #1987
2017-01-13 13:06:58 +01:00
Emery Hemingway
2b7fcf5cae app/floating_window_layouter: API transition
Ref #1987
2017-01-13 13:06:58 +01:00
Emery Hemingway
8ab932a8d0 app/backdrop: API transition
Ref #1987
2017-01-13 13:06:57 +01:00
Alexander Boettcher
dd8e13d6fa platform_drv: remove deprecated env() usage
Issue #1987
2017-01-13 13:06:57 +01:00
Stefan Kalkowski
658547d058 hw: remove core/ARM specific aspect perf_counter
This aspect was always enabled when creating a build directory for hw,
but is not enabled anymore due to recent build directory unifications.
On the other hand it is needed for jitter entropy anyway.

Ref #2190
2017-01-13 13:06:56 +01:00
Stefan Kalkowski
3886686b83 hw: get rid of global makefiles specific to hw
This commit mostly removes the globally visible NR_OF_CPUS define
from the global makefile specifiers defined in the base-hw repository.
Whereever necessary it adds platform specific makefiles to the base
repository when they were missing.

Ref #2190
2017-01-13 13:06:55 +01:00
Christian Helmuth
e2a23a0ab3 Adapt VESA framebuffer driver to component API
Issue #1987
2017-01-13 13:06:55 +01:00
Josef Söntgen
d10a69c7bc os: pass Env on in Attached_mmio constructor
Issue #1987.
2017-01-13 13:06:55 +01:00
Josef Söntgen
b9d02cd96a imx53_fb: use new base APIs
Issue #1987.
2017-01-13 13:06:54 +01:00
Norman Feske
3315294f2d Deprecate Genode::config()
Issue #1959
2017-01-13 13:06:54 +01:00
Norman Feske
3d7b92ea50 Generalize ABI mechanism to shared objects
This patch make the ABI mechanism available to shared libraries other
than Genode's dynamic linker. It thereby allows us to introduce
intermediate ABIs at the granularity of shared libraries. This is useful
for slow-moving ABIs such as the libc's interface but it will also
become handy for the package management.

To implement the feature, the build system had to be streamlined a bit.
In particular, archive dependencies and shared-lib dependencies are now
handled separately, and the global list of 'SHARED_LIBS' is no more.
Now, the variable with the same name holds the per-target list of shared
libraries used by the target.
2017-01-13 13:06:54 +01:00
Norman Feske
eb6f7e74cc libports: add libc symbols 2017-01-13 13:06:54 +01:00
Norman Feske
39e2bbc0d4 tool/abi_symbols: normalize symbol order 2017-01-13 13:06:53 +01:00
Norman Feske
9745effc53 mk: remove obsolete PRG_LIBS variable 2017-01-13 13:06:53 +01:00
Norman Feske
a360452a10 base: remove platform.mk and syscall.mk
The purpose of those libraries is now covered by the kernel-specific
syscall-<kernel> libraries.
2017-01-13 13:06:53 +01:00
Sebastian Sumpf
dfae61c76d intel_fb: Fix dynamic linking issues
Fixes #2208
2017-01-13 13:06:52 +01:00
Dr. Florian M. Grätz
b2934c7aec Fix build on Ubuntu 16.10 for x86_64
Ubuntu provides position independent shared objects for libraries, e.g.,
libsdl1.2-dev. To appropriatly link it to Genode, the linker flag
'-no-pie' has to be added to the make file.
2017-01-13 13:06:52 +01:00
Norman Feske
4da52517c1 Simpify startup of dynamically linked binaries
This patch removes the component_entry_point library, which used to
proved a hook for the libc to intercept the call of the
'Component::construct' function. The mechansim has several shortcomings
(see the discussion in the associated issue) and was complex. So we
eventually discarded the approach in favor of the explicit handling of
the startup.

A regular Genode component provides a 'Component::construct' function,
which is determined by the dynamic linker via a symbol lookup.
For the time being, the dynamic linker falls back to looking up a 'main'
function if no 'Component::construct' function could be found.

The libc provides an implementation of 'Component::construct', which
sets up the libc's task handling and finally call the function
'Libc::Component::construct' from the context of the appllication task.
This function is expected to be provided by the libc-using application.
Consequently, Genode components that use the libc have to implement the
'Libc::Component::construct' function.

The new 'posix' library provides an implementation of
'Libc::Component::construct' that calls a main function. Hence, POSIX
programs that merely use the POSIX API merely have to add 'posix' to the
'LIBS' declaration in their 'target.mk' file. Their execution starts at
'main'.

Issue #2199
2017-01-13 13:06:52 +01:00
Martin Stein
8d521036fb IPv4: fix buggy ascii_to implementations
Ref #2193
2017-01-13 13:05:47 +01:00
Martin Stein
045a30865a NIC router: read Strings also with attribute_value
Ref #2193
2017-01-13 13:05:46 +01:00
Martin Stein
83040d7d86 OpenSSL x86_64: enable NIST 64-bit optimization
On a 64-bit system, enabling the OpenSSL NIST 64-bit optimization should
result in considerable speed improvements when using curves: NIST-P224,
NIST-P256, and NIST-P521. Additionally it avoids that Tor complains
about having an OpenSSL that lacks this feature.

Ref #2193
2017-01-13 13:05:46 +01:00
Martin Stein
cd708b24db IPv4: treat 0.0.0.0/0 as valid IPv4 prefix
0.0.0.0/x is now only seen as invalid if x > 0.

Ref #2193
2017-01-13 13:05:46 +01:00
Alexander Boettcher
604a8860de nova: avoid assertion during cross-cpu IPC
Fixes #2198
2017-01-13 13:05:46 +01:00
Alexander Boettcher
e3ca4de4d8 os: add testcase for bomb/init on several CPUs
Test case to trigger assertion as reported in #2198.
2017-01-13 13:05:45 +01:00
Sebastian Sumpf
6e14aa4364 ldso: mark functions used during self relocation
These functions are marked as always inline through the 'SELF_RELOC' macro. This
became necessary because on riscv functions calls are performed through the
global offset table, which is not initialized at this point.

Fixes #2203
2017-01-13 13:05:45 +01:00
Christian Helmuth
f2568856dd Hide implementation details in timeout framework
Fixes #2205
2017-01-13 13:05:45 +01:00
Norman Feske
a2a51985f2 tool: add -k (kernel) argument to autopilot
This commit adds support for testing multiple kernels within the same
build directory. In addition to the existing -p arguments, the new
version expects one or more -k arguments that denote the kernels to be
used for executing the specified run scripts.

Consequently, the autopilot executes the 3-dimensional matrix of
platforms x kernels x run scripts, e.g.,

  autopilot --force -p x86_32 -k nova -k okl4 -k sel4 -k linux -r log

Issue #2190
2017-01-13 13:05:44 +01:00
Norman Feske
253097314c Add unified build directories to create_builddir
This patch makes the benefit of the recently introduced unified Genode
ABI available to developers by enabling the use of multiple kernels from
within a single build directory. The create_builddir tool has gained a
new set of kernel-agnostic platform arguments such as x86_32, or panda.
Most build targets within directories are in principle compatible with
all kernels that support the selected hardware platform. To execute a
scenario via the run tool, one has to select the kernel to use by
setting the 'KERNEL' argument in the build configuration
(etc/build.conf). Alternatively, the 'KERNEL' can be specified as
command-line argument of the Genode build system, e.g.:

  make run/log KERNEL=nova

This allows us to easily switch from one kernel to another without
rebuilding any Genode component except for the very few kernel-specific
ones.

The new version of the 'create_builddir' tool is still compatible with
the old version. The old kernel-specific build directories can still be
created. However, those variants will eventually be removed.

Note that the commit removes the 'ports-foc' repository from the
generated 'build.conf' files. As this is only meaningful for 'foc',
I did not want to include it in the list of regular repositories (as
visible in a 'x86_32' build directory). Hence, the repository must
now be manually added in order to use L4Linux.

Issue #2190
2017-01-13 13:05:44 +01:00
Norman Feske
9ea4a491d6 ld: generate symbol map from base/lib/symbols/ld
This patch removes the manually maintained symbol map from the dynamic
linker. This way, the symbol map stays in sync with the ABI and - more
importantly - no longer uses wildcards. So the symbols exported by the
dynamic linker are strictly limited by the ABI.

Issue #2190
2016-12-23 16:53:17 +01:00
Christian Prochaska
5c186cdc1d qt5: fix download link
Fixes #2202
2016-12-23 16:52:10 +01:00
Martin Stein
346ce9ae0b nic_router.run: consider usb_drv and gpio_drv
Ref #2193
2016-12-23 16:52:10 +01:00
Martin Stein
591ed80dcf NIC router: hand-over XML nodes by value
Ref #2193
2016-12-23 16:52:10 +01:00
Martin Stein
eef18e1ecd net: introduce and apply Net::Port type
Thereby fix bug in the NIC router that previously used uint8_t values for ports in
some places.

Ref #2193
2016-12-23 16:52:10 +01:00
Martin Stein
27cc0a402a NIC router: descriptive error on missing interface
Previously, if a packet should be routed to a domain that had no interface
connected, the NIC router only printed "Unroutable packet". Technically,
this was wrong as an unavailable interface doesn't mean that the routing
failed. Now it gives an error "no interface connected to domain".

Ref #2193
2016-12-23 16:52:10 +01:00
Martin Stein
524f330218 nic_router.run: do not require FOC
Because the LWIP HTTP client doesn't require FOC anymore.

Ref #2193
2016-12-23 16:52:10 +01:00
Martin Stein
28153ad8ef LWIP HTTP client: do not require FOC
We don't know why this component requires FOC anymore and it seems to be fine with other
platforms at well.

Ref #2193
2016-12-23 16:52:09 +01:00
Sebastian Sumpf
ff0f1ebafc os: adapt pci test to component API
* also add pci.run

Fixes #2201
2016-12-23 16:52:09 +01:00
Alexander Boettcher
be5ae4dffa mention PIT in x86 platform_driver README
Issue #1578
2016-12-23 16:52:09 +01:00
Christian Prochaska
31e0ee2c88 gdb_monitor: increase RAM quota in run scripts
Fixes #2186
2016-12-23 16:52:09 +01:00
Alexander Boettcher
3e0aeab89e intel_fb: avoid heap warning
Fixes #2168
2016-12-23 16:52:09 +01:00
Norman Feske
1e41c2dbe9 Remove redundant boot modules from boot image
Fixes #2185
2016-12-23 16:52:09 +01:00
Christian Prochaska
f89b63ef87 qt5: qt5_drivers.inc fixes
- make start of the 'nic_drv' component depend on driver specs
- make start of the 'input_merger' component depend on the 'Input' feature

Fixes #2174
2016-12-23 16:52:09 +01:00
Christian Prochaska
2c3009b2ed qt5_avplay: show the main window earlier
The main window must be visible before avplay or a framebuffer filter
requests the framebuffer session which goes to Nitpicker, because the
parent view of the new Nitpicker view is part of the
QNitpickerPlatformWindow object, which is created when the main window
becomes visible. If this object does not exist yet, a page fault occurs.

Fixes #2187
2016-12-23 16:52:08 +01:00
Christian Prochaska
0d9e566b18 wm: fix possible deadlock
Fixes #2183
2016-12-23 16:52:08 +01:00
Emery Hemingway
088bf52be1 drivers/framebuffer/sdl: emulate a 60Hz sampling rate
Set timer signaling only if a valid signal context is registered.

Ref #2192
2016-12-23 16:52:08 +01:00
Emery Hemingway
98cb37b9e4 drivers/timer: do not submit signals for invalid contexts
Setting a timer signal handler with an invalid capability cancels
signaling and any periodic timeout.

Fix #2192
2016-12-23 16:52:08 +01:00
Norman Feske
0d295f75a1 base: apply routing policy to environment sessions
This patch changes the child-construction procedure to allow the routing
of environment sessions to arbitrary servers, not only to the parent.
In particular, it restores the ability to route the LOG session of the
child to a LOG service provided by a child of init. In principle, it
becomes possible to also route the immediate child's PD, CPU, and RAM
environment sessions in arbitrary ways, which simplifies scenarios that
intercept those sessions, e.g., the CPU sampler.

Note that the latter ability should be used with great caution because
init needs to interact with these sessions to create/destruct the child.
Normally, the sessions are provided by the parent. So init is safe at
all times. If they are routed to a child however, init will naturally
become dependent on this particular child. For the LOG session, this is
actually not a problem because even though the parent creates the LOG
session as part of the child's environment, it never interacts with the
session directly.

Fixes #2197
2016-12-23 16:52:08 +01:00
Norman Feske
c450ddcb3d Disambiguate kernel-specific file names
This patch removes possible ambiguities with respect to the naming of
kernel-dependent binaries and libraries. It also removes the use of
kernel-specific global side effects from the build system. The reach of
kernel-specific peculiarities has thereby become limited to the actual
users of the respective 'syscall-<kernel>' libraries.

Kernel-specific build artifacts are no longer generated at magic places
within the build directory (like okl4's includes, or the L4 build
directories of L4/Fiasco and Fiasco.OC, or the build directories of
various kernels). Instead, such artifacts have been largely moved to the
libcache. E.g., the former '<build-dir>/l4/' build directory for the L4
build system resides at '<build-dir>/var/libcache/syscall-foc/build/'.
This way, the location is unique to the kernel. Note that various tools
are still generated somewhat arbitrarily under '<build-dir>/tool/' as
there is no proper formalism for building host tools yet.

As the result of this work, it has become possible to use a joint Genode
build directory that is usable with all kernels of a given hardware
platform. E.g., on x86_32, one can now seamlessly switch between linux,
nova, sel4, okl4, fiasco, foc, and pistachio without rebuilding any
components except for core, the kernel, the dynamic linker, and the timer
driver. At the current stage, such a build directory must still be
created manually. A change of the 'create_builddir' tool will follow to
make this feature easily available.

This patch also simplifies various 'run/boot_dir' plugins by removing
the option for an externally hosted kernel. This option remained unused
for many years now.

Issue #2190
2016-12-23 16:51:32 +01:00
Norman Feske
3865ee7ccc foc: move base/thread_state.h to include/foc/
The header is foc-specific. It used to shadow the generic one provided
by the base repository, which contradicts with the kernel-agnostic
Genode API. Hence, it had to be moved to a foc-specific location.
2016-12-23 16:51:12 +01:00
Norman Feske
44df8db771 Disambiguate names of timer drivers
Issue #2190
2016-12-23 16:50:33 +01:00
Norman Feske
f54c85e045 Genode application binary interface (ABI)
This patch decouples the kernel-specific implementation of the dynamic
linker from its kernel-agnostic binary interface. The name of the
kernel-specific dynamic linker binary now corresponds to the kernel,
e.g., 'ld-linux.lib.so' or 'ld-nova.lib.so'. Applications are no longer
linked directly against a concrete instance of the dynamic linker but
against a shallow stub called 'ld.lib.so'. This stub contains nothing
but the symbols provided by the dynamic linker. It thereby represents
the Genode ABI.

At system-integration time, the kernel-specific run/boot_dir back ends
integrate the matching the kernel-specific variant of the dynamic linker
as 'ld.lib.so' into the boot image.

The ABI symbol file for the dynamic linker is located at
'base/lib/symbols/ld'. It contains the joint ABI of all supported
architectures. The new utility 'tool/abi_symbols' eases the creation of
such an ABI symbol file for a given shared library. Its result should be
manually inspected and edited as needed.

The patch removes the 'syscall' library from 'base_libs.mk' to avoid
polluting the kernel-agnostic ABI with kernel-specific interfaces.

Issue #2190
Issue #2195
2016-12-23 16:50:28 +01:00
Alexander Boettcher
9b397b0321 vbox: adjust vbox_pointer policy to be working
vbox_pointer parses for 'label' and has no understanding of 'label_prefix'
2016-12-14 11:22:30 +01:00
Alexander Boettcher
e4a1904456 core: fix deadlock in region_map destruction
Introduced by:

commit 99fbb23ec5
Author: Alexander Boettcher <alexander.boettcher@genode-labs.com>
Date:   Fri Sep 9 17:49:34 2016 +0200

    core: use weak_ptr for Rm_faulter and Region_map

    Issue #2086
2016-12-14 11:22:30 +01:00
Alexander Boettcher
d8f2610e9c bomb: drop sleep_forever and signal_receiver 2016-12-14 11:22:29 +01:00
Alexander Boettcher
f613cd2aa9 nova: remove native_cpu interface
Issue #2173
2016-12-14 11:22:29 +01:00
Alexander Boettcher
e93ef168a1 nova: use async. map for thread/pd bootstrap
Fixes #2173
2016-12-14 11:22:29 +01:00
Christian Prochaska
5a72738def qoost: call 'select_from_ports' in qoost.mk
'select_from_ports' must be called to detect a missing port.

Fixes #2189
2016-12-14 11:22:28 +01:00
Norman Feske
dda054aa27 os: fix null termination in fb connection 2016-12-14 11:22:28 +01:00
Norman Feske
4475ac10d6 noux: reduce stack usage
By not placing the sysio buffer (16 KiB) on the stack, we can call
'noux_syscall' from the initial thread. This is needed to issue fork
from the suspend callback, which is executed by the initial thread.
2016-12-14 11:22:28 +01:00
Alexander Boettcher
10ba9c8f20 nova: fix kernel assertion during revoke
Fixes #2191
2016-12-14 11:22:28 +01:00
Josef Söntgen
400198013b alarm: limit sleep timeout to 60s
Instead of using an unreasonable value for the sleep time, limit it to
60s.

Fixes #2188.
2016-12-14 11:22:27 +01:00
Martin Stein
71d30297ff hw: clean up scheduling-readiness syscalls
This cleans up the syscalls that are mainly used to control the
scheduling readiness of a thread. The different use cases and
requirements were somehow mixed together in the previous interface. The
new syscall set is:

1) pause_thread and resume_thread

They don't affect the state of the thread (IPC, signalling, etc.) but
merely decide wether the thread is allowed for scheduling or not, the
so-called pause state. The pause state is orthogonal to the thread state
and masks it when it comes to scheduling. In contrast to the stopped
state, which is described in "stop_thread and restart_thread", the
thread state and the UTCB content of a thread may change while in the
paused state. However, the register state of a thread doesn't change
while paused. The "pause" and "resume" syscalls are both core-restricted
and may target any thread. They are used as back end for the CPU session
calls "pause" and "resume". The "pause/resume" feature is made for
applications like the GDB monitor that transparently want to stop and
continue the execution of a thread no matter what state the thread is
in.

2) stop_thread and restart_thread

The stop syscall can only be used on a thread in the non-blocking
("active") thread state. The thread then switches to the "stopped"
thread state in wich it explicitely waits for a restart. The restart
syscall can only be used on a thread in the "stopped" or the "active"
thread state. The thread then switches back to the "active" thread state
and the syscall returns whether the thread was stopped. Both syscalls
are not core-restricted. "Stop" always targets the calling thread while
"restart" may target any thread in the same PD as the caller. Thread
state and UTCB content of a thread don't change while in the stopped
state. The "stop/restart" feature is used when an active thread wants to
wait for an event that is not known to the kernel. Actually the syscalls
are used when waiting for locks and on thread exit.

3) cancel_thread_blocking

Does cleanly cancel a cancelable blocking thread state (IPC, signalling,
stopped). The thread whose blocking was cancelled goes back to the
"active" thread state. It may receive a syscall return value that
reflects the cancellation. This syscall doesn't affect the pause state
of the thread which means that it may still not get scheduled. The
syscall is core-restricted and may target any thread.

4) yield_thread

Does its best that a thread is scheduled as few as possible in the
current scheduling super-period without touching the thread or pause
state. In the next superperiod, however, the thread is scheduled
"normal" again. The syscall is not core-restricted and always targets
the caller.

Fixes #2104
2016-12-14 11:22:27 +01:00
Norman Feske
ccffbb0dfc Build dynamically linked executables by default
Fixes #2184
2016-12-14 11:22:27 +01:00
Norman Feske
d882277ce3 base: let ldso use the default stack size 2016-12-14 11:19:38 +01:00
Norman Feske
4e4cdacab3 base: trim main-thread size to 4/8 KiB
The main thread does no longer execute application code. It is solely
responsible for the initialization of the component's entrypoint and for
retrieving asynchronous notifications. Since the stack usage is no
longer dependent on application-specific code, we can significantly
shrink it to reduce the memory footprint of components. In the worst
case - should the stack overrun - we would observe a page fault because
the stack is placed in the stack area, surrounded by guard pages.
2016-12-14 11:19:38 +01:00
Norman Feske
cc98cef770 genode_rel.ld: add .gcc_except_table to RO segment
By moving .gcc_except_table section to the read-only ELF segment, this
patch reduces the size of the dynamically allocated data/bss segment.
2016-12-14 11:19:37 +01:00
Norman Feske
a387d68c2c base: use a default stack size of 64 KiB
This patch replaces the former machine-word-dependent default stack size
by the fixed value of 64 KiB which should suffice for components on both
32 and 64 bit. Previously, the default stack size on 64 bit was 128 KiB,
which is wasteful. If a component needs more stack than 64 KiB, it can
specify a custon stack size by implementing 'Component::stack_size'.
2016-12-14 11:19:37 +01:00
Norman Feske
28f5688dcf base: reduce size of initial stack from 32K to 4K
The initial stack is solely used to initialize the Genode environment
along with the application stack located in the stack area. It never
executes application code. Hence, we can make it small. To check that it
is not dimensioned too small, the patch introduces a sanity check right
before switching to the application stack.
2016-12-02 15:20:31 +01:00
Norman Feske
92460cdab7 base: remove initial heap chunk from heap
This change reduces the BSS segment by 32 KiB (on 64 bit).
2016-12-02 15:20:31 +01:00
Josef Söntgen
ecff6f7375 Minor corrections in the 16.11 release notes 2016-12-02 15:18:51 +01:00
Norman Feske
25a7ea3d40 base: rename 'Volatile_object' to 'Reconstructible'
Fixes #2151
2016-12-01 17:46:50 +01:00
Alexander Boettcher
6fa87e62dd run: adjust noux_bash to run for arm
Issue #2137
Fixes #1469
2016-12-01 16:39:47 +01:00
Alexander Boettcher
8bb2641020 noux-pkg: support less for arm
Fix #2137
2016-12-01 16:39:47 +01:00
Christian Helmuth
31631c8303 foc: remove unused function 2016-12-01 16:39:47 +01:00
Christian Helmuth
831c8d8e2d noux: fix warning in execve 2016-12-01 16:39:47 +01:00
Christian Helmuth
4bc34f73f3 lxip: provide strncpy and strstr (for ipconfig) 2016-12-01 16:39:47 +01:00
Martin Stein
2f0d90e0e1 Minor correction of the release notes 2016-12-01 16:27:00 +01:00
Christian Helmuth
94849da80e version: 16.11 2016-11-30 15:29:42 +01:00
Norman Feske
c6d80f926e Release notes for version 16.11 2016-11-30 15:13:58 +01:00
Norman Feske
8f53fcc0c7 Use https in news items 2016-11-30 15:13:58 +01:00
Norman Feske
59e2f9c47a News item for Genode 16.11 2016-11-30 15:13:57 +01:00
Christian Helmuth
77da6ce1a0 doc: precisely differentiate framework and tool chain
Issue #2132
2016-11-30 13:38:07 +01:00
Christian Helmuth
85fa4d340b Support running netperf test on qemu
Set environment variable FORCE_QEMU to run the test on qemu.
2016-11-30 13:38:07 +01:00
Christian Helmuth
262259cd09 Increase qemu RAM in moon test
On sel4, the available RAM (beside the boot modules) is significantly
reduced by the initial pools in core.
2016-11-30 13:38:06 +01:00
Alexander Boettcher
b8485b6ca1 vbox4: avoid iommio assertion
if the mmio region is not available anymore

Fixes #2182
2016-11-30 13:38:06 +01:00
Stefan Kalkowski
4b09e357e0 intel_fb_drv: dummy implementation of lrc irqs
Ref #2179
2016-11-30 13:38:06 +01:00
Christian Helmuth
53271d8c5f Use default component stack size where appropriate 2016-11-30 13:38:06 +01:00
Martin Stein
7eabe482b6 Increase RAM quota for Nic::Connection
At least on foc_x86_64, nic_router refused to create sessions for the
test clients as the session object's size exceeds the old quota
donation.

Ref #2139
2016-11-30 13:38:06 +01:00
Alexander Boettcher
a090c9047d vfs: handle alloc failed in block_file_system
Fixes #2154
2016-11-30 13:38:06 +01:00
Alexander Boettcher
d3d4381128 nova: support to run VBox vCPUs within same PD
Issue #2173
2016-11-30 13:38:06 +01:00
Alexander Boettcher
1bea312ba2 vmm: compatible vcpu same_pd/other_pd constructors
Issue #2173
2016-11-30 13:38:05 +01:00
Alexander Boettcher
c732aef227 nova: handle oom during assign_pci 2016-11-30 13:38:05 +01:00
Martin Stein
89085096d2 nic_router: new user interface and optimizations
Fixes #2139
2016-11-30 13:38:05 +01:00
Martin Stein
f90964fdcc udp_client/http_clnt: print success message
Ref #2139
2016-11-30 13:38:05 +01:00
Martin Stein
4eea2a058d net: let Net_address and Ipv4_address be packed
Ref #2139
2016-11-30 13:38:05 +01:00
Martin Stein
4281471a34 net: replace dump.h by modern print methods
Ref #2139
2016-11-30 13:38:05 +01:00
Martin Stein
da925b9cd7 net/ipv4: Ipv4_address_prefix::prefix_matches
The new method checks whether a given IPv4 address matches the IPv4
address prefix.

Ref #2139
2016-11-30 13:38:04 +01:00
Martin Stein
6276daecab net/ipv4: convenience methods valid() and print()
Both methods are now available for Ipv4_address as well as for
Ipv4_address_prefix. An IPv4 address is invalid if it contains zeros only.
An IPv4 address prefix is invalid if its address is invalid and its
prefix is 32.

Ref #2139
2016-11-30 13:38:04 +01:00
Martin Stein
9dddc905e2 lwip/http_clnt: fix ambiguous size_t
Ref #2139
2016-11-30 13:38:04 +01:00
Martin Stein
3a7ae03f79 lxip/udp_client: create new socket on every run
Instead of creating one socket and re-using it each test run because the
client shall also test the termination of pseudo-connections at components that
implement hole punching for UDP.

Ref #2139
2016-11-30 13:38:04 +01:00
Martin Stein
cdd05ad71b lxip/udp_client: use dynamic port as source port
Instead of a registered port as this leads to conflicts with common IP stacks.

Ref #2139
2016-11-30 13:38:04 +01:00
Martin Stein
b85fa1d069 timer: move to the new timeout framework
Ref #2170
2016-11-30 13:38:04 +01:00
Martin Stein
791138ee63 os: introduce and test timeout framework
Ref #2170
2016-11-30 13:38:04 +01:00
Edgard Schmidt
f97e0f3fa0 Allow RPC arguments w/o default constructor
Fixes #2150
2016-11-30 13:38:03 +01:00
Norman Feske
6a24d70120 Fix clang compile errors
Thanks Keiko Nakata for reporting!

Fixes #2164
2016-11-30 13:37:07 +01:00
Norman Feske
5a1cef6381 Make label prefixing more strict
This patch unconditionally applies the labeling of sessions and thereby
removes the most common use case of 'Child_policy::filter_session_args'.
Furthermore, the patch removes an ambiguity of the session labels of
sessions created by the parent of behalf of its child, e.g., the PD
session created as part of 'Child' now has the label "<child-name>"
whereas an unlabeled PD-session request originating from the child
has the label "<child-name> -> ". This way, the routing-policy of
'Child_policy::resolve_session_request' can differentiate both cases.

As a consequence, the stricter labeling must now be considered wherever
a precise label was specified as a key for a session route or a server-
side policy selection. The simplest way to adapt those cases is to use a
'label_prefix' instead of the 'label' attribute. Alternatively, the
'label' attribute may used by appending " -> " (note the whitespace).

Fixes #2171
2016-11-30 13:37:07 +01:00
Christian Helmuth
f184118930 vfs: support label attribute in log file system
The log plugin can now be configured to request a log session with the
specified label like follows.

  <log label="..."/>

Per default, no new log session is requested but the existing log
session of the component's environment is used.
2016-11-30 13:37:07 +01:00
Christian Prochaska
9e86621b07 cpu_sampler_noux.run: increase auto test timeout
Fixes #2178
2016-11-30 13:37:07 +01:00
Christian Helmuth
1216839bec vesa: handle platform session memory requests
Issue #1039
2016-11-30 13:37:07 +01:00
Alexander Boettcher
7dcfc8bd49 dde_bsd: handle platform session memory requests
Issue #1039
2016-11-30 13:37:07 +01:00
Alexander Boettcher
ac2061abfe ps2: handle platform session memory requests
Issue #1039
2016-11-30 13:37:07 +01:00
Alexander Boettcher
c83eb515f9 base: sanity check for slab element allocation
Issue #1039
2016-11-30 13:37:06 +01:00
Alexander Boettcher
b8f9f92731 base: remove allocation warning in heap
The heap typically first tries to allocate larger chunks than necessary, and
if it fails the actual minimal one. The first attempt already triggers warnings
which are not critical at all. If the second (critical) allocation fails,
then there are additionally checks and warnings already in place.

Issue #1039
2016-11-30 13:37:06 +01:00
Alexander Boettcher
1018dbc89a dde_ipxe: handle platform session memory requests
Issue #1039
2016-11-30 13:37:06 +01:00
Alexander Boettcher
6e66e51088 platform_drv: use ram_session_guard
Issue #1039
2016-11-30 13:37:06 +01:00
Alexander Boettcher
e32b78d95d os: extend ram_session_guard for platform_driver
Issue #1039
2016-11-30 13:37:06 +01:00
Alexander Boettcher
dffc1b0497 os: move ram_session_guard from nic_bridge to os
Issue #1039
2016-11-30 13:37:06 +01:00
Norman Feske
5ba245f476 base: minor style fixes 2016-11-30 13:37:06 +01:00
Alexander Boettcher
33b40ec5d9 base: free memory of object throwing exception
in constructor.

Extend test case to verify it and run it by autopilot.
2016-11-30 13:37:05 +01:00
Norman Feske
7f78d182f8 test/stdcxx: spelling fix 2016-11-30 13:37:05 +01:00
Alexander Boettcher
5f0008cbc9 vbox: update to 5.1.10
Issue #2059
2016-11-30 13:37:05 +01:00
Alexander Boettcher
11b2f30318 noux: avoid tons of "no attachment" messages
Trace_control dataspace gets destroyed implicitly when the cpu session is
closed. Remove the trace control dataspace from the internal noux dataspace
registry before cpu session destruction.
2016-11-30 13:37:05 +01:00
Alexander Boettcher
03f0f38567 cxx: avoid warnings about cxx exception memory
Avoids warnings like

Warning: 2 dangling allocations at allocator destruction time

during noux process destruction.
2016-11-30 13:37:05 +01:00
Christian Helmuth
79dd99e521 terminal_mux: adapt to component API 2016-11-30 13:37:05 +01:00
Josef Söntgen
383a3c6f54 wifi_drv: call kfree in case of kfree_rcu
Fixes #2175.
2016-11-30 13:37:05 +01:00
Emery Hemingway
f1fc94cfbd app/rom_logger: base API transition, hexdump output
Ref #1987
2016-11-30 13:37:04 +01:00
Norman Feske
c0f1d99d7a Adapt decorator to component API
Issue #1987
2016-11-30 13:37:04 +01:00
Norman Feske
eb90d92009 Adapt themed decorator to component API
Issue #1987
2016-11-30 13:37:04 +01:00
Alexander Boettcher
3c4372210e core: remove redundant datastructure
Avl allocator provides a method to lookup any element, which is sufficient
to find all regions to destruct.

Issue #2173
2016-11-30 13:37:04 +01:00
Martin Stein
82443ddee6 thread test: handle capability ref-count overflow
Triggered by the create-as-many-threads test as it tries to
create as many threads as possible.

Ref #2120
2016-11-30 13:37:04 +01:00
Martin Stein
99f18a2fe6 core: handle cap-ref-cnt overflow in create_thread
The code in Core's Cpu_session_component::create_thread might throw a
capability refernce-count overflow if one creates many threads, which would
kill core if not handled.

Ref #2120
2016-11-30 13:37:04 +01:00
Martin Stein
288c2c50ba base: throw exception on cap-ref-count overflow
Ref #2120
2016-11-30 13:37:04 +01:00
Christian Helmuth
00adca8c47 lx_fs: use component API
Issue #1987
2016-11-30 13:37:03 +01:00
Norman Feske
b44f0554bd Adapt high-level components to new parent API
This patch adjusts the various users of the 'Child' API to the changes
on the account of the new non-blocking parent interface. It also removes
the use of the no-longer-available 'Connection::KEEP_OPEN' feature.

With the adjustment, we took the opportunity to redesign several
components to fit the non-blocking execution model much better, in
particular the demo applications.

Issue #2120
2016-11-30 13:37:03 +01:00
Norman Feske
8bafb9d41b Adapt low-level components to new parent interface
This patch adjusts the components of the os repository as well as device
drivers to the new parent interface.

Issue #2120
2016-11-25 16:06:42 +01:00
Norman Feske
cfdbccc5c2 Remove blocking calls from root and parent RPCs
This is a redesign of the root and parent interfaces to eliminate
blocking RPC calls.

- New session representation at the parent (base/session_state.h)
- base-internal root proxy mechanism as migration path
- Redesign of base/service.h
- Removes ancient 'Connection::KEEP_OPEN' feature
- Interface change of 'Child', 'Child_policy', 'Slave', 'Slave_policy'
- New 'Slave::Connection'
- Changed child-construction procedure to be compatible with the
  non-blocking parent interface and to be easier to use
- The child's initial LOG session, its binary ROM session, and the
  linker ROM session have become part of the child's envirenment.
- Session upgrading must now be performed via 'env.upgrade' instead
  of performing a sole RPC call the parent. To make RAM upgrades
  easier, the 'Connection' provides a new 'upgrade_ram' method.

Issue #2120
2016-11-25 16:06:42 +01:00
Norman Feske
3cc2a3f085 terminal: increase stack size 2016-11-25 15:30:58 +01:00
Norman Feske
baf61df0fd base: new 'Registry' data structure
This data structure is meant as a safe alternative for a list wherever
the list is solely used to remember objects and iterate through them in
an unspecified order. One use case is the 'Service_registry'.
2016-11-25 15:30:58 +01:00
Norman Feske
513a3f1d37 base: new 'Id_space' data structure
This data structure allows the association of objects with IDs. IDs are
kept in an AVL tree. So in contrast to a bit allocator, the ID space can be
sparsely populated and does not need to be dimensioned. The lifetime of
an ID is bound to an 'Element' object, which relieves the programmer
from manually allocating/deallocating IDs for objects.

Issue #2120
2016-11-25 15:30:58 +01:00
Alexander Boettcher
58eabc756b pistachio: exclude phys ram which is unaccessible
because of 1:1 mappings, phys memory above 3G (user/kernel virtual boundary)
can't be accessed ...
2016-11-25 15:30:58 +01:00
Alexander Boettcher
a72f81472b platform_drv: use label of client for ram session 2016-11-25 15:30:58 +01:00
Alexander Boettcher
81f0cacf66 core: prefer RAM allocation in high memory
We preserve lower RAM for device drivers with physical memory
constraints. If no physical RAM constraint exists, the allocations above
3G (32-bit) or 4G (64-bit) are preferred.
2016-11-25 15:30:57 +01:00
Alexander Boettcher
57949c2bbb nova: support asynchronous delegate
Issue #2173
2016-11-25 15:30:57 +01:00
Christian Helmuth
ff5d28822c bomb: limit generations on Linux
Limit the number of generations to 4 to prevent hitting the
socket-descriptor limit on Linux. Also, all possible configuration
parameters for bomb our now customizable in the run script and the
current config is logged by bomb master.
2016-11-25 15:27:29 +01:00
Alexander Boettcher
f4a7223bbf vbox: update to 5.1.8
Issue #2059
2016-11-25 15:27:29 +01:00
Josef Söntgen
ca3be471a9 lxip: get_random_once must be called once 2016-11-25 15:27:28 +01:00
Josef Söntgen
d647b6c797 lxip: use xoroshiro128+ as random backend 2016-11-25 15:27:28 +01:00
Christian Helmuth
104775aa56 wifi: support for scans in connected state
The 'connected_scan_interval' config attribute specifies the scan
interval in seconds. The commit also removes the deprecated ram_fs
component from the test run script.
2016-11-25 15:27:28 +01:00
Josef Söntgen
9ba7b2edde vbox: improve network backend
VirtualBox mainly derives the initial link-state for its device models
from checking the <Adapter ... cable="true"/> attribute. Our backend
only propagates the current state of the Nic session if it receives a
link-state signal. This may lead to problems if a guest detects a link
up state when it is actually down and wants to use the interface. The
backend now queries the Nic session and sets the link-state accordingly
when it is constructed.

In case there is no link do not attempt to submit a packet to the packet
stream but return with an error so that upper layers can handle it.

Enable signals for network on poweron and not already during
construction. The network model may be not yet ready to process incoming
signals and data.

Fixes #2117.
2016-11-25 15:27:28 +01:00
Christian Helmuth
f75f199947 ldso: initialize ELF object before relocating
This fixes a regression on Ubuntu 16.04 (resp. Linux systems with recent
kernel versions) and address-space randomization originating from an
uninitialized relocation base of 0.
2016-11-25 15:27:28 +01:00
Norman Feske
82107bef9b base: buffer session args in 'Connection'
This patch is a preparation of the forthcoming async parent interface.
Note that this patch increases the size of connection objects.
Furthermore it adds a diagnostic message whenever a connection fails.

Issue #2166
2016-11-25 15:27:28 +01:00
Norman Feske
7fba39831a platform_drv/x86: remove device slab
Because of the session-argument buffering added to 'Connection' objects
when changing the parent interface to be non-blocking, the
'Device_component' has grown in size from 1.5 KiB to 5 KiB. The slab
allocator was configured with a block size of 4 KiB. So it does not work
with the grown 'Device_component' size.

Once the transition to the new API is completed (when we can remove the
buffering of session arguments from the 'Connection' objects), we may
revert this change.

Issue #2120
2016-11-25 15:27:27 +01:00
Norman Feske
ac1794ed7d base: add const operator * to 'Volatile_object' 2016-11-25 15:27:27 +01:00
Norman Feske
0e0f830a14 base: make Volatile_object noncopyable
Unfortunately, the volatile object does not inherit the noncopyable
attribute of the enclosed object. By making all volatile objects
noncopyable, we prevent the accidental copying of a noncopyable object
wrapped in a volatile object.
2016-11-25 15:27:27 +01:00
Norman Feske
b8e98f2355 base: forward args in Output::print
The original version copied the arguments, which does not work for the
output of complex types, in particular non-copyable objects.
2016-11-25 15:27:27 +01:00
Norman Feske
35fa67768f base: add 'Volatile_object::print' method
The method prints the message "<unconstructed>" if the object is not
available. Otherwise, it prints the encapsulated object.
2016-11-25 15:27:26 +01:00
Norman Feske
a27cbfd371 os: make report_rom/rom_module.h better reusable 2016-11-25 15:27:26 +01:00
Christian Prochaska
c0e0f2874a qt5: remove launchpad-based 'QProcess' implementation
Fixes #1631
2016-11-25 15:27:26 +01:00
Norman Feske
d477a3e76d Avoid use of Connection::KEEP_OPEN feature
This feature is not compatible with the forthcoming nonblocking parent
interface. The patch removes the use of feature in all places except for
the components of the demo repository, which will under go a redesign
anyway.

Issue #2120
Issue #2165
2016-11-25 14:06:14 +01:00
Alexander Boettcher
a085b4f536 nova: remap kernel cpu ids to genode cpu ids
to have a predictable order. First all CPU ids with hyper-thread id 0 are taken,
next the hyper-threads with 1 of all cores and so on.

Fixes #2163
2016-11-25 14:06:14 +01:00
Alexander Boettcher
8f4fbce2d6 nova: remove unused debug utility
Issue #2163
2016-11-09 17:14:53 +01:00
Stefan Kalkowski
f60cf697d2 core: simplify Rom_module and Rom_fs
* replace print_fs with Output::print equivalent
* use Avl_tree::for_each instead of own implementation
* extend constness

Ref #2159
2016-11-08 15:45:21 +01:00
Stefan Kalkowski
e1ec39e476 base: replace dump utilities in Allocator_avl
Replace 'dump()' debug utilities within Allocator_avl with Output::print
equivalents, and use the new Avl_tree::for_each utility to simplify
the implementation.

Ref #2159
2016-11-08 15:44:55 +01:00
Stefan Kalkowski
1542d92165 base: iterator for AVL tree (fix #2159) 2016-11-08 15:43:53 +01:00
Alexander Boettcher
800de566e2 intel_fb: update mode list for different displays
Fixes #2152
2016-11-08 15:35:42 +01:00
Alexander Boettcher
30780a1127 sel4: adjust nic_drv quota in noux_net_netcat 2016-11-08 15:26:34 +01:00
Josef Söntgen
a3e11a60c0 dde_linux: cleanup module param handling
Instead of using a somewhat incomplete module_param_named() macro,
which will influence other drivers, patch the driver that requires
this treatment.

Fixes #2169
Fixes #2155
2016-11-08 15:26:34 +01:00
Emery Hemingway
da68dcc63d drivers/audio: log sessions requests
Fix #2156
2016-11-08 15:26:34 +01:00
Alexander Boettcher
94fd5ad3b0 nova: make kernel memory configurable
via the Genode build system. Avoids the need to maintain contrib patches on
nova.

Fixes #2162
2016-11-08 15:26:34 +01:00
Alexander Boettcher
74c0b22066 nova: fix sc kernel assertions
Fixes #2161
2016-11-08 15:26:33 +01:00
Emery Hemingway
eff90d759f remove global namespacing from internal base headers
Making the Genode namespace global can cause name collisions on
base-linux.

Fix #2158
2016-11-08 15:26:33 +01:00
Norman Feske
6dd695f788 update report_rom configs to fix warning
Several run scripts still used the outdated '<rom>' sub node in the
report_rom configuration.
2016-11-08 15:26:33 +01:00
Norman Feske
f577c451ef increase stack size of signal-proxy thread
This fixes the warning "small stack of 3996 bytes [...] may break Linux
signal handling" on 32-bit base-linux.
2016-11-08 15:26:33 +01:00
Norman Feske
f014c2fac6 clean up .gitignore
Since we moved to the new ports mechanism, the source tree is clean from
downloaded 3rd-party code.
2016-11-08 15:26:33 +01:00
Emery Hemingway
eee0489a05 server/mixer: transition to new base API
Ref #1987
2016-11-08 15:26:33 +01:00
Norman Feske
02233b64fb device_pd: use component API
Issue #1987
2016-11-08 15:26:32 +01:00
Norman Feske
784e728727 Clean ldso from using deprecated APIs
Issue #1987
2016-11-08 15:26:32 +01:00
Norman Feske
20faa8b84e base: 'String' constructor overload for literals
This overload covers the common case for initializing a string from a
literal without employing the 'Output' mechanism. This way, such
strings can by constructed without calling virtual functions, which in
turn makes the 'String' usable for the 'init_rtld' phase of the dynamic
linker.
2016-11-08 15:26:31 +01:00
Christian Helmuth
23c2c7c5a8 Use plain http for preparing e2fsprogs port
The gnutls version in Ubuntu 14.04 does not support the current settings
of the git.kernel.org TLS/HTTPS access.
2016-11-08 15:26:31 +01:00
Emery Hemingway
bae4ce5360 lib/vfs: deduplicate symlink and single_file
Issue #1891
2016-11-08 15:26:31 +01:00
Emery Hemingway
ddf3716cff vfs: pass Env and allocator when creating file-systems
Fix #1891
2016-11-08 15:26:31 +01:00
Emery Hemingway
beebd394fc lib/vfs: seperate implemention and API headers
Issue #1891
2016-11-08 15:26:30 +01:00
Alexander Boettcher
33ce649e85 audio: dissolve signal of Audio_in/out destruction
Fixes #2149
2016-11-08 15:26:30 +01:00
Norman Feske
b9280678fb base-linux: fix race in region_map_mmap
This patch fixes a race condition triggered by the thread test running
on Linux inside VirtualBox. The 'test_stack_alloc' sporadically produced
one of two errors: A segfault in the 'Thread::deinit_platform_thread' on
the attempt to access the 'native_thread' of the to-be-destructed thread
(this data structure is located on the thread's stack). Or, an error
message about a region conflict within the stack area.

The problem was that two instances of 'Region_map_mmap' issued a
sequence of munmap and mmap each. Even though each instance locked the
attach/detach operations, the lock was held per instance. In a situation
where two instances performed attach/detach operations in parallel, the
syscall sequences could interfere with each other.

In the test scenario, the two region-map instances are the test's
address space and the stack area. When creating a thread, the thread's
trace-control dataspace is attached at an arbitrary place (picked by
the Linux kernel) within the address space whereas the stack is attached
at the stack area. The problem is the following sequence:

Thread A wants to destruct a thread:
1. Remove stack from stack area
   (issue unmap syscall)
2. Preserve virtual address range that was occupied from the stack
   so that Linux won't use it
   (issue mmap syscall)

Thread B wants to construct a thread:
1. Request trace-control dataspace from CPU session
2. Attach trace-control dataspace to address space at a location
   picked by the Linux kernel
   (issue mmap syscall)

The problem occurs when thread B's second step is executed in between
the steps 1 and 2 of thread A and the Linux kernel picks the
just-unmapped address as the location for the new trace-control mapping.
Now, the trace control dataspace is mapped at the virtual address that
was designated for the stack of the to-be-created thread, and the
attempt to map the real stack fails.

The patch fixes the problem by replacing the former region-map-local
locks by a component-global lock.

Furthermore, it cleans up core's implementation of the support function
for the region-map-mmap implementation, eliminating the temporary
unlocking of the region-map lock during RPC.
2016-11-08 15:26:30 +01:00
Alexander Boettcher
466bec038f part_blk: free memory on session close
the dataspace used for the packetstream

Fixes #2148
2016-11-08 15:26:30 +01:00
Norman Feske
afed9cfd95 base: let string accept multiple arguments
Issue #2064
2016-11-08 15:26:30 +01:00
Alexander Boettcher
0d4f48ca0b vbox: add auto run script booting multiple VMs
Prepared for internal test machine, which has 8 logical cores.

6 Win7 64bit VMs are started, each having 2 vCPUs, using the same image and
different overlays. Changes to the VM are written to the overlays of ram_fs
and dropped after the test.

lCPU 0  : Genode base system and drivers
lCPU 1-2: VM1 2 vCPUs
lCPU 2-3: VM2 "
lCPU 3-4: VM3 "
lCPU 4-5: VM4 "
lCPU 5-6: VM5 "
lCPU 6-7: VM6 "

Fixes #2143
2016-11-08 15:26:29 +01:00
Alexander Boettcher
878abc7edb run: support multiple VMs in vbox* run scripts
Issue #2143
2016-11-08 15:26:29 +01:00
Alexander Boettcher
844174918b nit_fb: get to front if nit_fb got input focus
Issue #2143
2016-11-08 15:26:29 +01:00
Alexander Boettcher
61e1cf76c2 intel_fb: fix framebuffer freeup
drm_framebuffer_remove takes care of references to CRTC pointers before
freeing up framebuffer object. Directly calling the destroy function may cause
dangling CRTC pointers pointing inside the framebuffer object.

Fixes #2140
2016-11-08 15:26:29 +01:00
Christian Prochaska
9d84541e6f libports: add pcsc-lite library
Fixes #2145
2016-11-08 15:26:29 +01:00
Christian Prochaska
9ed69d8b47 libports: add CCID library
Fixes #2144
2016-11-08 15:26:28 +01:00
Christian Prochaska
55d709a175 libports: add libusb
Fixes #2142
2016-11-08 15:26:28 +01:00
Stefan Kalkowski
7e1692d997 core: unify handling of boot modules
Instead of solving the problem to deliver ROM modules to core while booting
differently for the several kernels (multi-boot, elfweaver, core re-linking),
this commit unifies the approaches. It always builds core as a library, and
after all binaries are built from a run-script, the run-tool will link an
ELF image out of the core-library and all boot modules. Thereby, core can
access its ROM modules directly.

This approach now works for all kernels except Linux.

With this solution, there is no [build_dir]/bin/core binary available anymore.
For debugging purposes you will find a core binary without boot modules, but
with debug symbols under [run_dir].core.

Fix #2095
2016-11-08 15:26:27 +01:00
Christian Prochaska
340a18007c pthread: implement pthread_mutex_trylock()
Fixes #2141
2016-11-08 15:26:27 +01:00
Norman Feske
9572ff9413 base: remove original PDBG from base/printf.h
This macro is superseded by base/debug.h.

Issue #2125
2016-11-08 15:26:27 +01:00
Emery Hemingway
ef5f36bf4e Redefine PDBG to use new log output function
PDBG is redefined in base/debug.h, an aide to development which is not
to be included in release code.

Fix #2125
2016-10-21 12:45:44 +02:00
Josef Söntgen
dee56aeafa usb_drv: add missing device pointer checks
The usb_drv must always check the device pointer in all session facing.
methods. A errorneous client can otherwise trigger a page-fault in the
driver.

Fixes #2133.
2016-10-21 12:39:37 +02:00
Christian Prochaska
82e228a715 usb_drv: raw session fixes
- use the correct memory free functions on errors
- report packet submit errors
- rename 'Usb::Packet_descriptor::transfer.timeout' as
 'Usb::Packet_descriptor::transfer.polling_interval'

Fixes #2135
2016-10-21 12:39:37 +02:00
Christian Prochaska
44d4bf7a1b libc_pipe: ignore some flags in 'fcntl()'
Ignore file access mode and file creation flags for the F_SETFL command.

Fixes #2136
2016-10-21 12:39:37 +02:00
Stefan Kalkowski
964239aa7a audio_mixer: use bool for mute XML report parsing
Fix #2123
2016-10-21 12:39:36 +02:00
Stefan Kalkowski
2a2e5c2df4 base-*: remove usage of printf
base generic code:
  * Remove unused verbosity code from mmio framework
  * Remove escape sequence end heuristic from LOG
  * replace Core_console with Core_log (no format specifiers)
  * move test/printf to test/log
  * remove `printf()` tests from the log test
  * check for exact match of the log test output
base-fiasco:
  * remove unused Fiasco::print_l4_threadid function
base-nova:
  * remove unused hexdump utility from core
base-hw:
  * remove unused Kernel::Thread::_print_* debug utilities
  * always print resource summary of core during startup
  * remove Kernel::Ipc_node::pd_label (not used anymore)
base*:
  * Turn `printf`,`PWRN`, etc. calls into their log equivalents

Ref #1987
Fix #2119
2016-10-21 12:39:36 +02:00
Alexander Boettcher
e864e84c5a run: add vm running directly from block partition
Fixes #2130
2016-10-21 12:39:36 +02:00
Christian Prochaska
d9c6f46fe5 vbox: automated USB device pass-through test
Fixes #2129
2016-10-21 12:39:35 +02:00
Christian Prochaska
b41b001003 qemu-usb: handle null pointer in 'free()'
Fixes #2128
2016-10-21 12:39:35 +02:00
Sebastian Sumpf
c2e7727f46 usb: add range check to UTF-16 string copy 2016-10-21 12:39:35 +02:00
Alexander Boettcher
4b148d896a nova: fix oom handling in kernel
Fixes #2126
2016-10-21 12:39:35 +02:00
Stefan Kalkowski
891bad8d54 dde_linux: use SSL secured, unified downloads
Fix #2127
2016-10-21 12:39:35 +02:00
Josef Söntgen
44bcf6bbf0 wifi_drv: add config knob to disable 11n mode
The 11n mode can forcefully be disabled by setting the 'disable_11n'
attribute to 'true'. This is workaround for certain 6200 ABG cards
that apparently do not support this mode.

Fixes #2124.
2016-10-21 12:39:35 +02:00
Josef Söntgen
620d5e3ba4 dde_linux: provide module_param_named macro
Implementing this macro provides easy access to module parameters from
outside the contrib code, i.e. the driver frontend. For now it will be
solely used by the wifi_drv.

Issue #2124.
2016-10-21 12:39:34 +02:00
Alexander Boettcher
9d49749a49 vbox: poke timer emt thread from time to time
Fixes #2110
2016-10-21 12:39:34 +02:00
Alexander Boettcher
14049d87da nova: disable kernel vga output
Issue #2110
2016-10-21 12:39:34 +02:00
Alexander Boettcher
c99729093a base: fix race in multiple lock.unlock() calls
Fixes #2122
2016-10-21 12:39:34 +02:00
Josef Söntgen
9013ca5364 libports: remove old lwIP foc_panda tracing tests
These tests were used for examine lwIP on foc_panda a few years back
but serve no particular purpose as of now.

Issue #2121.
2016-10-21 12:39:34 +02:00
Josef Söntgen
6be193cf80 Increase nic_drv RAM quantum
This change is needed to satisfy the increased memory usage of the
dde_ipxe nic_drv.

Issue #2121.
2016-10-21 12:39:34 +02:00
Josef Söntgen
3f0dfe7956 dde_ipxe: increase Slab backend alloc to 2 MiB
Fixes #2121.
2016-10-21 12:39:34 +02:00
Alexander Boettcher
4076472844 tool: kill all children of rump tool
Issue #2110
2016-10-21 12:39:33 +02:00
Alexander Boettcher
a0c9915cee vbox: remove debug messages
stay more silent

Issue #2110
2016-10-21 12:39:33 +02:00
Alexander Boettcher
a5ff866ef7 vbox: map SUPSemEvent* to RTSemEvent*
and drop usage of Genode::Semaphore.

Issue #2110
2016-10-21 12:39:33 +02:00
Alexander Boettcher
07b994c8bd vbox: alloc memory of RTMem*Alloc within 2G window
Fixes #2116
2016-10-21 12:39:33 +02:00
Norman Feske
aeb76b9c3c create_iso: remove outdated help message
Fixes #2093
2016-10-21 12:39:33 +02:00
Alexander Boettcher
3449985fdf base: avoid deadlock in region_map destruction
Fixes #2115
2016-10-21 12:39:33 +02:00
Christian Prochaska
e2ae01f870 usb_drv: fix policy parsing
Fixes #2112
2016-10-21 12:39:32 +02:00
Christian Prochaska
3a1f852318 base: don't use the 'size' argument in 'Heap::free()'
The Heap reports that 'free()' does not rely on a valid 'size' argument,
so it should not use it.

Fixes #2113
2016-10-21 12:39:32 +02:00
Alexander Boettcher
ce2139a533 vbox: add tm 4s patch
Issue #2110
2016-10-21 12:39:31 +02:00
Alexander Boettcher
08185e962f vbox: better lapic tpr support
Fixes #2110
2016-10-21 12:39:31 +02:00
Alexander Boettcher
a8495a0dfe vbox: use emt thread names
- eases debugging on smp setups

Issue #2110
2016-10-21 12:39:31 +02:00
Alexander Boettcher
14ef7a5312 vbox: support timeouts for GVMM_SCHED_HALT
Issue #2110
2016-10-21 12:39:31 +02:00
Roman Iten
dfce939ac8 dde_linux: fix log output of screen resolution
Fixes #2114
2016-10-21 12:39:31 +02:00
Stefan Kalkowski
7841058320 hw: only use x86_64 specifier instead of x86
Fix #2109
2016-10-21 12:39:31 +02:00
Stefan Kalkowski
3f6e148621 base: remove obsolete _prog_img_data symbol
Fix #2099
2016-10-21 12:39:31 +02:00
Josef Söntgen
3c8d31f8fb net: fix mac_from_string
The MAC tokens are given in hex so treat them as such.

Fixes #2107.
2016-10-21 12:39:30 +02:00
Stefan Kalkowski
0cbfef7bf1 os: increase init's slack RAM quota (fix #2103) 2016-10-21 12:39:30 +02:00
Alexander Boettcher
3bd361dfa5 nova: setup exception portals correctly
Fixes #2111
2016-10-21 12:39:30 +02:00
Alexander Boettcher
d989046604 vbox4: bring up all vCPUs
broken since latest upgrade to virtualbox 4.3.*

Issue #2090
2016-10-21 12:39:30 +02:00
Alexander Boettcher
a7d04eefab vbox5: fix build for vbox
Issue #2081
2016-10-21 12:39:30 +02:00
Josef Söntgen
27491fe7b4 dde_ipxe: increase RXD and TXD for Intel NICs
The default iPXE settings of 8 (RXD) and 16 (TXD) lead to issues when
AMT is enabled. In most other OS drivers those descriptors are set
to 256, let us do the same. This should fix all observed issues wrt.
AMT.

Fixes #2108.
2016-10-21 12:39:30 +02:00
Alexander Boettcher
b8b278458b run: vbox_auto_win81_64 write overlay to ram
to decrease failure rate because of corrupted filesystem via rump_fs
2016-10-21 12:39:29 +02:00
Emery Hemingway
71f0757a30 transition Input infrastructure to new base API
* Supply Env to Input::Session_component
* Attach input event dataspace at Input::Client
* Process input events by lambda rather than pointer
* Supply Env and a label to Input::Connection

* Wm serves valid input_session to decorator
* Per-source signal handling at input_merger
* Base API update for dummy_input_drv, test_input
* Input API update for launcher, menu_view, terminal,
  mupdf, sdl, seoul, virtualbox

Ref #1987
2016-10-21 12:39:29 +02:00
Emery Hemingway
80558374f5 base: print support for Xml_node
Ref #1987
2016-10-21 12:39:29 +02:00
Norman Feske
e370e08e01 Define Genode::size_t as unsigned long
Fixes #2105
2016-10-21 12:39:29 +02:00
Norman Feske
7bed3967ae ports: GNU build-system support for non-noux pkgs
This patch makes the build-system integration of noux packages usable
for non-Noux targets. It moves the GNU build system wrapper to
ports/mk/gnu_build.mk, which is now included by noux.mk. This way,
non-noux applications can use the same build-system wrapper. So the
porting of individual applications becomes easier.

This change removes the 'NOUX_' prefix use the various build variables
used by the noux-pkg's target.mk files to steer the behaviour of the GNU
build system. E.g., NOUX_CONFIGURE_ARGS is now called CONFIGURE_ARGS.
Note that there is a single exception to this pattern: The formerly
named NOUX_LIBS is now called LDLIBS because the plain LIBS variable is
used by the Genode build system.

Fixes #2094
2016-10-21 12:39:29 +02:00
Stefan Kalkowski
4bd5634bd5 hw: remove kernel unit test framework (fix #2096)
* Remove 'test' routine from kernel/core
* Move 'cpu_scheduler' and 'double_list' test to user-land
* Remove 'hw_info' target at all (can be recycled in a topic branch)
2016-09-30 14:15:22 +02:00
Alexander Boettcher
4d7d4dd2fc nova: fix capability issues in PCID/SMP setups
Kernel fails to lookup a capability it just got delegated, if
the backing store for the destination capability was before backed by a
zero-page. Triggers if PCID (64bit) is in use or in SMP setups.

Fixes #2101
2016-09-30 14:15:22 +02:00
Alexander Boettcher
86e690b7f3 nova: avoid kernel assertion in mdb code
Fixes #2100
2016-09-15 07:17:07 +02:00
Alexander Boettcher
66e9ca12b5 nova: platform test to stress SMP revoke/delegate
Issue #2100
2016-09-15 07:17:05 +02:00
Stefan Kalkowski
4be8c2daa4 build: remove STARTUP_LIB variable (fix #2098) 2016-09-14 12:21:46 +02:00
Christian Prochaska
9d67f74bd2 Automated 'usb_hid' test
When run with the '--autopilot' run option, the 'usb_hid.run' script tests
the input events generated by a 'Pro Micro' microcontroller board. Setup
instructions for the Pro Micro can be found in the run script.

Fixes #2087
2016-09-14 11:53:05 +02:00
Christian Helmuth
d3fcb38545 sel4: fix UART access (patch)
See https://github.com/seL4/seL4/issues/36.
2016-09-14 11:53:04 +02:00
Menno Valkema
ff06361c71 libc: memset valid allocations only in calloc()
Fixes #2097
2016-09-14 11:53:04 +02:00
Alexander Boettcher
99fbb23ec5 core: use weak_ptr for Rm_faulter and Region_map
Fixes #2086
2016-09-14 11:53:04 +02:00
Alexander Boettcher
e822a36c4e nova: transform platform test to component
and avoid use of deprecated interfaces

Issue #2086
2016-09-14 11:53:04 +02:00
Martin Stein
00c518b55e hw_rpi: remove debug code from USB IRQ handling
Fixes #2088
2016-09-14 11:53:03 +02:00
Martin Stein
9e6189ea11 hw: solve time overflow problem in clock
Ref #2088
2016-09-14 11:53:03 +02:00
Martin Stein
ee0566dcb1 timer/spec/hw: fix bug in curr_time
Ref #2088
2016-09-14 11:53:03 +02:00
Alexander Boettcher
10ec9806d3 vbox: update to 4.3.40
Fixes #2090
2016-09-14 11:53:03 +02:00
Alexander Boettcher
06f1ac4025 vbox: update to 4.3.30
Issue #2090
2016-09-14 11:53:03 +02:00
Alexander Boettcher
95a9ceed4a vbox: update to 4.3.28
Issue #2090
2016-09-14 11:53:03 +02:00
Alexander Boettcher
aabdb77697 vbox: update to 4.3.26
Issue #2090
2016-09-14 11:53:02 +02:00
Alexander Boettcher
8e7a0a80fd vbox: update to 4.3.24
Issue #2090
2016-09-14 11:53:02 +02:00
Alexander Boettcher
ef0efdfcea vbox: update to 4.3.22
Issue #2090
2016-09-14 11:53:02 +02:00
Alexander Boettcher
8a3429ef16 vbox: update to 4.3.20
Issue #2090
2016-09-14 11:53:02 +02:00
Alexander Boettcher
e90cfe1268 vbox: update to 4.3.18
Issue #2090
2016-09-14 11:53:02 +02:00
Alexander Boettcher
8fb6f032d4 vbox: update tpr register before requesting irq
- required by win7 64bit guest single vCPU

Fixes #2089
2016-09-14 11:53:02 +02:00
Stefan Kalkowski
2147c42ec6 base: unify page-fault notification for kernels
* Enable page-fault messages for regions not directly managed by core
* Unify output given when a page-fault occurs related to those regions

Fix #2082
2016-09-09 11:49:34 +02:00
Christian Helmuth
97201e6778 Remove tar archives after cpu_sampler_noux and noux_bash
This fixes our nightly error on cleanall with "unexpected:
./bin/diffutils.tar".
2016-09-09 11:48:43 +02:00
Christian Helmuth
5a92c9b6eb Increase stack size of mp_server test 2016-09-09 11:48:43 +02:00
Christian Helmuth
fcf5bc9187 base: start signal-proxy thread on construction
Thanks @ssumpf for the investigation.
2016-09-09 11:48:43 +02:00
Stefan Kalkowski
e7d5b34fc5 base: String constructor for different lengths
Let the copy constructor compile for different CAPACITYs of
the String<CAPACITY> class.

Fix #2085
2016-09-09 11:48:43 +02:00
Emery Hemingway
929ca5c163 virtualbox5: apply nic slot label patch
Fixes #2081
2016-08-31 17:11:05 +02:00
Christian Prochaska
9c88891baf autopilot: always add '--autopilot' run option
...not just in case RUN_OPT_AUTOPILOT was set.

Issue #2076
2016-08-31 17:08:14 +02:00
Christian Helmuth
8723d764f9 version: 16.08 2016-08-31 14:15:03 +02:00
Norman Feske
c54b5faa36 News item for Genode 16.08 2016-08-31 14:15:03 +02:00
Norman Feske
1135846dc4 Release notes for version 16.08 2016-08-31 14:15:03 +02:00
Norman Feske
a0e1e2f36a Update doc/components.txt 2016-08-31 14:15:03 +02:00
Stefan Kalkowski
6caceeeea8 ps2_drv: increase stack size (fix #2083) 2016-08-31 14:15:03 +02:00
Norman Feske
52c23239bc README update 2016-08-30 17:24:00 +02:00
Martin Stein
3c25d989f3 os: NIC router
The nic_router component can be used to individually route IPv4 packets
between multiple NIC sessions. Thereby, it can translate between
different IP subnets. The component supports port forwarding, as well as
the partitioning of the TCP and UDP port spaces.

Fixes #114
2016-08-30 17:17:20 +02:00
Christian Helmuth
ada334705c run/ipxe: cleanup creation of config file
This removes strange log messages like "file8".
2016-08-30 17:17:20 +02:00
Alexander Boettcher
236b1465d0 sel4: add pci SPEC
enables audio driver
2016-08-30 17:17:20 +02:00
Christian Helmuth
6f2f242e42 Adapt ports that moved away from googlecode 2016-08-30 17:17:19 +02:00
Alexander Boettcher
34311a64d8 audio: add missing config in audio_out.run
complains/aborts otherwise
2016-08-30 17:17:19 +02:00
Alexander Boettcher
d511b09aef sel4: adjust syscall patch to fPIC define
Use same patch as the one going upstream on seL4 soon.
2016-08-30 17:17:19 +02:00
Christian Prochaska
f8ba49f816 cpu_sampler_noux.run script
A run script to demonstrate the combination of the cpu_sampler, fs_log,
ram_fs and noux components for saving the sampled data in files and
accessing these in a Noux environment. When the script is run by the
autopilot, it will check if one of the generated sample data files
contains the correct instruction pointer. When the script is run
interactively, the generated files can be accessed from a Noux Bash shell.

Fixes #2078
2016-08-30 17:17:19 +02:00
Christian Prochaska
8a93e3e20a pthread: alternative for dynamic_cast in 'pthread_self()'
Fixes #2077
2016-08-29 17:29:39 +02:00
Martin Stein
b3c877a8bf net: tcp packet class 2016-08-29 17:29:39 +02:00
Martin Stein
0ac37dfc6e net: address operator != and some UDP accessors 2016-08-29 17:29:39 +02:00
Martin Stein
53524be285 net/mac_address: mac_from_string function 2016-08-29 17:29:39 +02:00
Martin Stein
b50fe705d9 net/eth: sized-eth-frame class for creating frames 2016-08-29 17:29:38 +02:00
Martin Stein
47bc5c9a8d net/arp: further write accessors and protocol type 2016-08-29 17:29:38 +02:00
Martin Stein
79bc0ab789 dde_linux/src/lib/lxip/: fix warning with Cstring 2016-08-29 17:29:38 +02:00
Martin Stein
136b80b7b8 net/dump.h: dump header info of network packets
Ref #114
2016-08-29 17:29:38 +02:00
Martin Stein
0ce79f3a8a udp: rename method calc_checksum update_checksum
In other contexts (IPv4) 'calc_checksum' merely returns a new checksum that is
then installed via 'checksum'. Thus, the UDP 'calc_checksum' that calculates AND
installs a new checksum is misleading.

Ref #114
2016-08-29 17:29:38 +02:00
Martin Stein
ee9c4679df net/ipv4: address prefix and print support 2016-08-29 17:29:38 +02:00
Martin Stein
0f8a39e5ac net: move MAC and IPV4 address to NET namespace
Ref #114
2016-08-29 17:29:38 +02:00
Martin Stein
a8640f56d1 lxip: simple udp client for testing
Ref #114
2016-08-29 17:29:37 +02:00
Martin Stein
40d7902ade lxip/udp_echo: read port from config
Ref #114
2016-08-29 17:29:37 +02:00
Martin Stein
dbbda9839b lwip: enhance http_srv_static and http_clnt
Both, client and server now read their IP config from their Genode config.
Furthermore, the client now waits 4 instead of 2 seconds before sending the
first request to prevent connection fails in tests with a slow startup. The
client truncates its packet dump for better readability.

Ref #114
2016-08-29 17:29:37 +02:00
Martin Stein
6a40c5c13d libports: remove deprecated network_* tests
Ref #114
2016-08-29 17:29:37 +02:00
Norman Feske
fac69eff48 core: handle out-of-memory in RM service
This patch adds the missing exception handling for depleted RM session
quotas. If core runs out of session quota while creating a new region
map, it now reflects this condition as a Region_map::Out_of_metadata
exception to the RM client. Thanks to Denis Huber for reporting the
issue!
2016-08-29 17:29:37 +02:00
Christian Prochaska
dc26910fc3 cpu_sampler component for statistical profiling
Fixes #2075
2016-08-29 17:29:37 +02:00
Stefan Kalkowski
901b39259c lwip: use symbol.map to avoid clash with dns_init
Ref #2026
2016-08-29 17:29:37 +02:00
Christian Prochaska
16f0a69a8b autopilot: add '--autopilot' run option
The '--autopilot' option makes it possible for a run script to detect if
it is being executed by the autopilot by

  if { [get_cmd_switch --autopilot] } { ... }

In that case, the run script could do an automated test, whereas the
test could be interactive when run without this option.

Fixes #2076
2016-08-29 17:29:36 +02:00
Adrian-Ken Rueegsegger
a08846edf0 amt: Introduce --log-amt-timeout run parameter
The new parameter specifies the additional timeout duration in seconds
which is incurred by AMT log processing, e.g. time spent waiting for the
system to boot.
2016-08-29 17:29:36 +02:00
Christian Prochaska
d2e246d916 base: allow to set label in Log_connection
Fixes #2074
2016-08-29 17:29:36 +02:00
Alexander Boettcher
e53ba5ee3e nova: avoid SC kernel warnings in core
Fixes #2073
2016-08-29 17:29:36 +02:00
Stefan Kalkowski
dea4123053 os: remove Irq_activation and Irq_handler
Fix #2072
2016-08-29 17:29:36 +02:00
Stefan Kalkowski
f56be97215 gem_cadence nic_drv: remove Irq_activation
* btw. move gem_cadence specific files to spec/ subdirectory

Ref #2072
2016-08-29 17:29:36 +02:00
Stefan Kalkowski
855e2c4b17 lan9118 nic_drv: transition to new base API
* get rid of the Irq_handler and Irq_activation usage

Ref #1987
Ref #2072
2016-08-29 17:29:36 +02:00
Stefan Kalkowski
5aee80ee32 pl180: remove irrelevant usage of Irq_handler
Although the driver makes no use of interrupts it references Irq_handler
for unknown reasons. Moreover, this commit eliminates the lock that is
not necessary anymore, because the driver now runs single-threaded.

Ref #2072
2016-08-29 17:29:35 +02:00
Sebastian Sumpf
35fe716bff dde_linux: fix README
Move 'RAW' section back to USB driver description
2016-08-29 17:29:35 +02:00
Stefan Kalkowski
f1535b2481 uart_drv: transition to new base API
* Unify uart drivers of different hardware drivers
* Remove deprecated IRQ activations
* Remove additional timer thread in Fiasco* KDB driver
* Move more generic UART definitions to specific supported
  platforms (e.g.: pl011 -> pbxa9)
* Move internal definitions from global to local headers

Ref #1987
Fix #2071
2016-08-29 17:29:35 +02:00
Josef Söntgen
a75684d217 tool: remove old ports tool remains
Fixes #2070.
2016-08-29 17:29:35 +02:00
Josef Söntgen
fbe127cdf4 vbox: fix ACPI dsl for newer iASL versions
The patch reflects the changes done in VirtualBox 5 and is at least
needed on Ubuntu 16.04.

Fixes #2068.
2016-08-29 17:29:35 +02:00
Alexander Boettcher
a1d9ed1d8a vbox: remove win8 auto test 2016-08-29 17:29:34 +02:00
Alexander Boettcher
f75bb77756 vbox: add win7_64 auto test 2016-08-29 17:29:34 +02:00
Josef Söntgen
2eda37e187 noux-pkg/noux-etc: serialize building targets
Issue #2069.
2016-08-29 17:29:34 +02:00
Emery Hemingway
482576fabb server/fs_log: improve client isolation
Use a seperate handle at each session.
Use SEEK_TAIL to append messages to files.
Increase packet buffer.
Refactor to component framework.

Fixes #1777
Issue #2060
2016-08-29 17:29:34 +02:00
Emery Hemingway
6018f594cf include/os/path.h: new path_from_label utility
Converts a session label hierarchy to a path hierarchy.

Issue #1777
Issue #2060
2016-08-29 17:29:33 +02:00
Alexander Boettcher
e39dc445b1 vbox: re-enable chunk-wise memory allocation
disabled by "vbox: Implement hwaccl support for Muen" for nova
2016-08-29 17:29:33 +02:00
Stefan Kalkowski
7760aa1bf0 Increase stack-size for block test client
Ref #1987
Ref #2051
2016-08-29 17:29:33 +02:00
Norman Feske
a845bdafeb core: fix regression in sig context ownership test
This patch fixes a problem similar to issue #2065 but for the freeing of
signal contexts.
2016-08-29 17:29:33 +02:00
Norman Feske
8d1cf08b1a core: fix regression in dataspace ownership test
This patch revives our ds_ownership test from 2012, which just revealed
a regression in core where the dataspace-free operation of the RAM
service would unconditionally destroy dataspace objects from foreign
sessions. The patch fixes the bug and adds an updated version of the
test to the autopilot.

Fixes #2065
2016-08-29 17:29:33 +02:00
Alexander Boettcher
fdf41cd08c nova: set max memory mapping supported by nova ABI
Related #2063
2016-08-29 17:29:32 +02:00
Alexander Boettcher
9c098752b0 core: fix memory mapping calc. for big regions
Fixes #2063
2016-08-29 17:29:32 +02:00
Alexander Boettcher
57b90e8d75 vmm: experimental virtualbox 5 support
The main feature for this version upgrade is the use of the instruction
emulator (IEM) to speed up execution and less often the slow recompiler.

issue #2059
2016-08-29 17:29:32 +02:00
Alexander Boettcher
4dbfbdb7c4 vbox: factor out/extend common parts of vbox 4 & 5
Issue #2059
2016-08-29 17:29:32 +02:00
Alexander Boettcher
32bb0e131c gems: extend dither_painter to be used with vbox5
Issue #2059
2016-08-29 17:29:32 +02:00
Norman Feske
17c79a9e23 base: avoid use of deprecated base/printf.h
Besides adapting the components to the use of base/log.h, the patch
cleans up a few base headers, i.e., it removes unused includes from
root/component.h, specifically base/heap.h and
ram_session/ram_session.h. Hence, components that relied on the implicit
inclusion of those headers have to manually include those headers now.

While adjusting the log messages, I repeatedly stumbled over the problem
that printing char * arguments is ambiguous. It is unclear whether to
print the argument as pointer or null-terminated string. To overcome
this problem, the patch introduces a new type 'Cstring' that allows the
caller to express that the argument should be handled as null-terminated
string. As a nice side effect, with this type in place, the optional len
argument of the 'String' class could be removed. Instead of supplying a
pair of (char const *, size_t), the constructor accepts a 'Cstring'.
This, in turn, clears the way let the 'String' constructor use the new
output mechanism to assemble a string from multiple arguments (and
thereby getting rid of snprintf within Genode in the near future).

To enforce the explicit resolution of the char * ambiguity, the 'char *'
overload of the 'print' function is marked as deleted.

Issue #1987
2016-08-29 17:27:10 +02:00
Christian Prochaska
a5d3aa8373 base: increase label length limit of core LOG session
Fixes #2061
2016-08-29 17:27:10 +02:00
Norman Feske
892f21fd54 base: document error-message style conventions 2016-08-29 17:27:10 +02:00
Norman Feske
26a4534a37 base: helper for hex-formatted output of ranges 2016-08-29 17:27:09 +02:00
Norman Feske
9c2f229246 base: helper for printing individual characters 2016-08-29 17:27:09 +02:00
Norman Feske
9b3ae0ed2d Add repos/world to .gitignore 2016-08-29 17:27:09 +02:00
Emery Hemingway
d741508330 test/vfs_stress: ugrade logging, reduce to single thread
Issue #1987
2016-08-29 17:23:21 +02:00
Emery Hemingway
d354f7a8b9 server/vfs: upgrade logging to new API
Issue #1987
2016-08-29 17:23:21 +02:00
Christian Helmuth
3b9f022f1c libc: some symbol cleanups 2016-08-29 17:23:20 +02:00
Alexander Boettcher
d409b0e98b usb: fix for unconfigured usb devices
Avoids null pointer in usb raw.
2016-08-29 17:23:20 +02:00
Christian Prochaska
c72d1655f4 vbox: read 'force_ioapic' config option only once
Fixes #2049
2016-08-29 17:23:20 +02:00
Stefan Kalkowski
7f8f0f50ea block layer: transition to new API
Ref #1987
Fix #2058
2016-08-29 17:23:20 +02:00
Johannes Schlatow
acd2a40076 base: print() functions for floating point types
Fixes #2055
2016-08-29 17:23:19 +02:00
Josef Söntgen
f81d4cfbbb wifi_drv: add 7265D-19.ucode to fw list
Needed for x250.

Fixes #2057.
2016-08-29 17:23:19 +02:00
Christian Prochaska
4949f3abba dde_linux: '__wait_event()' fix
Fixes #2054
2016-08-29 17:23:19 +02:00
Christian Helmuth
1776babbd1 Revert "arm: prevent 64K default alignment of text segment"
This reverts commit 2127c8acf2 because the
alignment is already sanitized by commit 11c31c4432.

(discussed here 2127c8acf2)
2016-08-10 11:07:57 +02:00
Alexander Boettcher
5aabfa9dd0 sel4: disable noux_tool_chain_auto.run
Currently leaking to many capability selectors, so that the tool chain test
can't succeed.

Issue #2044
2016-08-10 11:07:57 +02:00
Alexander Boettcher
1b895484d9 sel4: adjust qemu memory in same basic run scripts
Core on seL4 is configured to run on native hardware, so some static
allocators are bit over dimensioned. Some run scripts fail on qemu because
solely 64M are available in the system - adjust the affected scripts.

Issue #2044
2016-08-10 11:07:57 +02:00
Christian Helmuth
7038825522 qt5: initial support for multi-touch input
The initial support reports TouchPointPressed, TouchPointMoved, and
TouchPointReleased for multiple touch points, but is currently only
tested with widgets not leveraging multi-touch events. In other words, I
made sure synthetic mouse events are generated properly when using touch
screens.
2016-08-10 11:07:56 +02:00
Christian Helmuth
b0f7717711 Enable USB and PS/2 in qt5 tests on x86
We now always run the input_merger as Input service provider and
configure backends suitable for the used platform. On x86 hardware, we
enable both, PS/2 and USB HID.
2016-08-10 11:07:56 +02:00
Christian Helmuth
9839e833f2 Enable linux in input run script 2016-08-10 11:07:56 +02:00
Alexander Boettcher
9988089862 sel4: workaround deadlock in core
Issue #2044
2016-08-10 11:07:56 +02:00
Alexander Boettcher
b57c33159f sel4: improve allocation in initial_untyped_pool
Required to boot on hardware. The fragmentation is such unfortunate with the
old allocator that alloc() will throw an exception during very early core boot
phase.

Issue #2044
2016-08-10 11:07:56 +02:00
Alexander Boettcher
356e6498b6 sel4: update to 3.2.0
- disable iommu
- increase root_cnode further for native boot
- support vesa driver on native hardware
- don't mask edge triggered ioapic irqs
- increase various allocators to get noux_tool_chain_* booting natively

Issue #2044
2016-08-10 11:07:56 +02:00
Alexander Boettcher
b2a8cfde85 sel4: avoid corruption during ipc marshalling
Issue #2044
2016-08-10 11:07:55 +02:00
Alexander Boettcher
bee0e11049 sel4: use notification objects for Genode::Lock
Fixes #1717
Issue #2044
2016-08-10 11:07:55 +02:00
Alexander Boettcher
1472c0629b sel4: allocate thread selectors during bind_thread
That seems nowadays the right place in order to tell the caller that the
thread couldn't be completely constructed. The return value false of
bind_thread causes in Cpu_thread_component the throwing of
Thread_creation_failed.

thread.run now passes
pthread.run now passes

Issue #2044
2016-08-10 11:07:55 +02:00
Alexander Boettcher
997f5e8e27 sel4: implement thread suspend/pause/resume
Issue #2044
2016-08-10 11:07:55 +02:00
Alexander Boettcher
155621767a sel4: limit mp_server.run to 1 cpu for sel4
Issue #2044
2016-08-10 11:07:55 +02:00
Alexander Boettcher
198475b6b3 sel4: startup lib reinit support
required for noux

Issue #2044
2016-08-10 11:07:54 +02:00
Alexander Boettcher
c4c7979163 sel4: quirk for vanishing page table
Issue #2044
2016-08-10 11:07:54 +02:00
Alexander Boettcher
9c8676b2ae sel4: add revoke option to destruct cnode
Issue #2044
2016-08-10 11:07:54 +02:00
Alexander Boettcher
c4ed38cfbc sel4: fix vm_space has_page_table_at
Issue #2044
2016-08-10 11:07:54 +02:00
Alexander Boettcher
b0c3427ed4 sel4: handle platform_pd destruction
Issue #2044
2016-08-10 11:07:54 +02:00
Alexander Boettcher
ad7748592a sel4: keep boot info in core's virt address space
Issue #2044
2016-08-10 11:07:54 +02:00
Alexander Boettcher
4d10a28411 sel4: disable large mappings for device memory
Issue #2044
2016-08-10 11:07:54 +02:00
Alexander Boettcher
657dd5faad sel4: support region fault manager outside core
rm_fault.run works

Issue #2044
2016-08-10 11:07:53 +02:00
Alexander Boettcher
738ca74166 sel4: clear dataspace page wise
Creating mappings inside core may exhaust the internal allocators
if very large dataspaces must be cleared.

Issue #2044
2016-08-10 11:07:53 +02:00
Alexander Boettcher
253f2aef0f sel4: show pd name if flushing page table
Issue #2044
2016-08-10 11:07:53 +02:00
Alexander Boettcher
998dfa6c5e sel4: flush page table allocator if full
Issue #2044
2016-08-10 11:07:53 +02:00
Alexander Boettcher
90390fe053 sel4: increase root cnode size in kernel
required to boot setups like noux*

Issue #2044
2016-08-10 11:07:53 +02:00
Alexander Boettcher
3a9c6eab17 sel4: use first free cap index reported by kernel
required to bootstrap scenarios with more rom binaries, e.g. noux

Issue #2044
2016-08-10 11:07:53 +02:00
Alexander Boettcher
99b8fc4408 sel4: enable vesa driver
kernel : add required and reserved boot regions to device memory

Issue #2044
2016-08-10 11:07:52 +02:00
Alexander Boettcher
821afd0199 sel4: support device memory for drivers
Additionally, exclude boot-module from page_table_registry. Core does not use
the boot-modules inside core.

Adding it otherwise to the registry will use up the meta data allocator of
the page_table_registry in core in scenarios with lot of boot modules,
e.g. noux and friends.

Issue #2044
2016-08-10 11:07:52 +02:00
Alexander Boettcher
5b9a61fcb9 sel4: properly detach core local regions
Issue #2044
2016-08-10 11:07:52 +02:00
Alexander Boettcher
a396fa9563 sel4: support up to 16K capabilities per pd
before we had 256 capabilities

Issue #2044
2016-08-10 11:07:52 +02:00
Alexander Boettcher
73e35cdf6a sel4: handle threads in destruction
- revoke utcb
- suspend thread before destruction, less noise during destruction

Issue #2044
2016-08-10 11:07:52 +02:00
Alexander Boettcher
2aaeb8db1b sel4: convert frame pages back to untyped memory
to implement _revoke_ram_ds and to fix _unmap_local

Issue #2044
2016-08-10 11:07:52 +02:00
Alexander Boettcher
b5ff552460 base: extend core_mem_alloc free by phys_addr
required by base-sel4 to turn used page frames back to untyped memory

Issue #2044
2016-08-10 11:07:52 +02:00
Alexander Boettcher
7501910c99 sel4: implement ipc_reply
Issue #2044
2016-08-10 11:07:51 +02:00
Alexander Boettcher
43f2784564 sel4: initialize rcv_sel for ep threads
Issue #2044
2016-08-10 11:07:51 +02:00
Alexander Boettcher
c68bca1f89 sel4: enable PIT timer and PS/2 input
Issue #2044
2016-08-10 11:07:51 +02:00
Alexander Boettcher
e89b28ca1b sel4: add signal support
Fixes #1716
Issue #2044
2016-08-10 11:07:51 +02:00
Alexander Boettcher
93e2eecc52 sel4: add irq support
Fixes #1718
Issue #2044
2016-08-10 11:07:51 +02:00
Alexander Boettcher
46cb20e2c0 sel4: add io_port service to core
Fixes #1718
Issue #2044
2016-08-10 11:07:51 +02:00
Alexander Boettcher
0ccb07f008 sel4: add "norelocate" option to bender
Issue #2044
2016-08-10 11:07:50 +02:00
Alexander Boettcher
af93f8d01b sel4: update to 3.1.0
- adjust syscall bindings to support -fPIC
- read serial i/o ports from BIOS data area
- use autoconf.h provided by sel4
-- to avoid ambiguity between sel4 kernel and user libraries
-- remove manual set defines
- remove debug messages
- increase user virtual area to 3GB

Issue #1720
Issue #2044
2016-08-10 11:07:50 +02:00
Alexander Boettcher
8b505306ed core: name initial threads not just "name"
to make debugging more comfortable

Issue #2044
2016-08-10 11:07:50 +02:00
Alexander Boettcher
cb675a12d8 base: factor out irq parsing into helper header
to be used by sel4 in the next commit

Issue #2044
2016-08-10 11:07:50 +02:00
Alexander Boettcher
464181b01d base: refactor io_port session implementation
Split port API implementation into separate io_port_session_support.cc file,
so that base-sel4 may implement this part alternatively.

Issue #2044
2016-08-10 11:07:50 +02:00
Alexander Boettcher
027e89f91a base: catch uncaught exceptions of threads
and show some message about. On sel4 sometimes exceptions are thrown and no
message is shown, it just seems to hang. With this patch at least you get
an idea that something bad happened.

Issue #2044
2016-08-10 11:07:50 +02:00
Alexander Boettcher
5a0bc07d30 demo: make cancel_blocking working
- remove special handling from base-nova
- add to rpc_server where it actually should be applied to
- required to work for sel4 cancel_blocking

Issue #2044
2016-08-10 11:07:50 +02:00
Alexander Boettcher
7b35927147 x86: support PIT via platform driver
Issue #1578
2016-08-10 11:07:49 +02:00
Stefan Kalkowski
ef7c51548d part_blk: transition to the new base API
Ref #1987
Ref #2051
2016-08-10 11:07:49 +02:00
Christian Helmuth
d4879f04a6 usb: multi-touch and absolute-pointer devices
Now, we support multi-touch devices generating multi-touch events and
absolute-pointer devices simultaneously with multitouch="yes". Still,
multitouch="no" generates emulated absolute-pointer events for
multi-touch devices.
2016-08-10 11:07:49 +02:00
Christian Helmuth
b2eb42feb1 Use USB multi touch and keyboard for Win8 test 2016-08-10 11:07:49 +02:00
Alexander Boettcher
4783043b5d nova: free up mdb entry if no sub node exists
Issue #1950

Fixes #2048
2016-08-10 11:07:49 +02:00
Alexander Boettcher
a876e655c0 vbox: support readonly overlay from disk
Add option to load the initial overlay*.vdi from disk, but keep the changes
in a ram_fs.

Used with AHCI model for vbox_auto_win7. Currently we have no way to tell
rump_fs to unmount and write back data to disk before resetting the machine.
2016-08-10 11:07:48 +02:00
Christian Helmuth
6726e6d7fe Increase quota of ACPI driver
Platforms with more complex ACPI configurations require more RAM in the
driver, e.g., ~160K for the test notebook on my desk.
2016-08-10 11:07:48 +02:00
Adrian-Ken Rueegsegger
dd22c961c9 Update Muen port
- Adjust list of Muen components
- vbox: Sync hw_x86_64_muen subject state with Muen SK
2016-08-10 11:07:48 +02:00
Emery Hemingway
1ae0357171 base/sesson_label.h: do not prefix empty strings
Session_label prefix(a, b) shall not return ' -> b' or 'a -> '.

Issue #1787
2016-08-10 11:07:48 +02:00
Christian Helmuth
0b247f81f8 wifi: disable scheduled scanning on Intel MVM cards
On MVM only the initial scanning of APs works. If wpa_supplicant changes
from triggered scans to the scheduled-scanning hardware feature no
further scan results are reported. Therefore, we disable the
scheduled-scanning hardware feature until the issue is fixed.

Issue #2046
2016-08-10 11:07:48 +02:00
Emery Hemingway
06102665fb drivers/ahci: use session policy utility
- Lookup policies using the standard Session_policy utility.
- Check for adequate session donation.
- Improved diagnostic messages.

Fixes #1844
2016-08-10 11:07:48 +02:00
Christian Prochaska
84ee970e9b run: look for platform boot string at beginning of line
When running the same kernel in a VM as on the host system and the
kernel boot message from the VM appears on the log output, the run tool
assumes that the host machine has rebooted unexpectedly. With this
commit, an unexpected reboot is assumed only if the kernel boot message
appears at the beginning of a line. On base-hw, we enforce a line feed
at the beginning of the boot message as the SPIKE emulator log starts
with the first message of the kernel lacking a line feed.

Fixes #2041
2016-08-10 11:07:48 +02:00
Christian Helmuth
747137c201 Increase stack size of alarm schedulers 2016-08-10 11:07:47 +02:00
Christian Helmuth
f14024eb52 linux: print warning for unusually small stacks
Thread stacks with less than 4K usable space are insufficient for our
implementation of Linux exception signal handling. If such a unusually
small stack overflows the SIGSEGV handler will not be able to print the
diagnostic message leaving no hint of the cause of the stuck process.
2016-08-10 11:07:47 +02:00
Christian Helmuth
887b6233b1 lwip: remove unused alarm-scheduler implementation 2016-08-10 11:07:47 +02:00
Christian Helmuth
4eb58730c0 linux: fix raw-string output in PRAW() 2016-08-10 11:07:47 +02:00
Emery Hemingway
e410be69a7 server/fs_rom: adjust to component API
- Use component API.
- Use signal handlers.
- Log ROM file path at error.
- Add Output printing support to os/path.h utility.

Fixes #2042
2016-08-10 11:07:47 +02:00
Emery Hemingway
7547820af6 server/rump_fs: local symlink target termination
Clients may write symlink targets with or without null-termination.

Fixes #2043
2016-08-10 11:07:46 +02:00
Emery Hemingway
f92be575ae nit_fb: change to component API
Issue #1987
2016-08-10 11:07:46 +02:00
Christian Helmuth
e95d7a8fa2 report_rom: fix warning message
Fix #2036
2016-07-20 13:51:27 +02:00
Norman Feske
11c5bf28c9 nitpicker: change to component API
Issue #1987
2016-07-15 11:38:28 +02:00
Norman Feske
b85fdd828a dynamic_rom: change to component API
Issue #1987
2016-07-15 11:38:28 +02:00
Norman Feske
38a1e95979 base: add 'String::print' method
This way, we can conveniently output strings without calling the
string() method.
2016-07-15 11:38:27 +02:00
Norman Feske
2127c8acf2 arm: prevent 64K default alignment of text segment 2016-07-15 11:38:27 +02:00
Norman Feske
2cbef82b61 ldso-startup: support build from non-base repos
By always fetching the source relative to BASE_DIR, we can
include the ldso-startup.mk file from other repositories, i.e.,
API packages.
2016-07-15 11:38:27 +02:00
Norman Feske
c090bf7fce mk: always consider spec files in repos/base 2016-07-15 11:38:27 +02:00
Norman Feske
345f22a5e7 mk: shortcircuit select_from_ports for pkg tool 2016-07-15 11:38:26 +02:00
Norman Feske
b2fddf4b99 mk: always use linker scripts from base
The linker scripts are known to reside in BASE_DIR. By using them
directly from this location instead of searching them in the
REPOSITORIES, we don't need to specify the repos/base as a repository in
order to link.
2016-07-15 11:38:26 +02:00
Norman Feske
a025ff9237 build.mk: don't search target.mk files w/o src dir
Let the build system skip the search for target.mk files in repositories
that don't have a src/ directory.
2016-07-15 11:38:26 +02:00
Norman Feske
a804802bcd Let default tools.conf cover each architecture
This patch handles x86_32 and x86_64 separately since this is the SPEC
value directly supplied to the package build tool. This way, we achieve
that a CROSS_DEV_PREFIX is defined for each supported argument.
2016-07-15 11:38:26 +02:00
Norman Feske
a15a86b024 Build-system support for building a single library
This patch equips the build system with the feature of building an
individual library with its dependencies by specifying the library
as 'LIB' argument. E.g., 'make LIB=libc' builds the libc.
2016-07-15 11:38:25 +02:00
Norman Feske
a9e9d9e499 libc: clean up import-libc.mk
This patch changes the import-libc.mk file to make it reusable for the
packaged API of the libc.
2016-07-15 11:38:25 +02:00
Ben Larson
a4f73ab1ad os: let fs clients install custom signal handlers
This patch adds the methods 'sigh_ack_avail()' and
'sigh_ready_to_submit()', which are needed to build asynchronously
operating file-system clients.

Fixes #2023
2016-07-15 11:38:25 +02:00
Norman Feske
62d65d00e0 Remove signal-source headers from public API
Those headers implement a platform-specific mechanism. They are never
used by components directly.

This patch also cleans up a few other remaining platform-specific
artifact such as the Fiasco.OC-specific assert.h.

Issue #1993
2016-07-15 11:38:25 +02:00
Emery Hemingway
0efd5a3078 server/report_rom: componentize
* Check report RAM donation and buffer size.
* Use explicit config ROM attachment.
* Pass Env to session connections.
* Replace logging macros.

Issue #2036
2016-07-15 11:38:24 +02:00
Norman Feske
02e50ce5d7 Pistachio: limit max threads per PD to 128
This change avoids cap ref-count overflows when creating many threads
as done by the thread test.
2016-07-12 15:44:43 +02:00
Norman Feske
57ec61fb4b base-linux: omit stack-area init for lx_hybrid
Fixes #2030
2016-07-11 13:31:37 +02:00
Emery Hemingway
d0e7cc35fa Adjust run scripts for loss of ROM filename argument
Issue #1787
2016-07-11 13:31:36 +02:00
Emery Hemingway
2b8c1af9e0 remove 'filename' from ROM sesion args
Conveying the ROM filename as the final label element simplifies
routing policy and session construction.

Annotations by nfeske:

This commit also changes the ROM session to use base/log.h instead of
base/printf.h, which produced build error of VirtualBox because the
vbox headers have a '#define Log', which collides with the content of
base/log.h. Hence, this commit has to take precautions to resolve this
conflict.

The commit alse refines the previous session-label change by adding a
new 'Session_label::prefix' method and removing the use of 'char const *'
from this part of the API.

Fixes #1787
2016-07-11 13:24:36 +02:00
Emery Hemingway
f8337b511b Move Session_label from os to base
Session_label constructor now takes a bare string rather than a
serialized argument buffer.
Replace all instances of previous constructor with 'label_from_args'
function.

Issue #1787
2016-07-11 13:09:24 +02:00
Norman Feske
88b358c5ef Unification of native_capability.h
This patch establishes the sole use of generic headers across all
kernels. The common 'native_capability.h' is based on the version of
base-sel4. All traditional L4 kernels and Linux use the same
implementation of the capability-lifetime management. On base-hw, NOVA,
Fiasco.OC, and seL4, custom implementations (based on their original
mechanisms) are used, with the potential to unify them further in the
future.

This change achieves binary compatibility of dynamically linked programs
across all kernels.

Furthermore, the patch introduces a Native_capability::print method,
which allows the easy output of the kernel-specific capability
representation using the base/log.h API.

Issue #1993
2016-07-11 13:07:37 +02:00
Norman Feske
d71f0a9606 Cleanup of parent-cap handling
This patch alleviates the need for a Native_capability::Dst at the API
level. The former use case of this type as argument to
Deprecated_env::reinit uses the opaque Native_capability::Raw type
instead. The 'Raw' type contains the portion of the capability that is
transferred as-is when delegating the capability (i.e., when installing
the parent capability into a new component, or when installing a new
parent capability into a new forked Noux process). This information can
be retrieved via the new Native_capability::raw method.

Furthermore, this patch moves the functions for retriving the parent
capability to base/internal/parent_cap.h, which is meant to be
implemented in platform-specific ways. It replaces the former set of
startup/internal/_main_parent_cap.h headers.

Issue #1993
2016-07-11 13:05:27 +02:00
Norman Feske
f7bdd383e2 Remove base/native_types.h headers
Issue #1993
2016-07-11 12:06:50 +02:00
Adrian-Ken Rueegsegger
d6ba00089b vbox: Increase stack size of periodic_gip thread
Otherwise a pagefault is triggered on hw_x86_64_muen.
2016-07-11 12:06:50 +02:00
Norman Feske
030301d046 gdb_monitor: remove superfluous check
The check for preparation of gdb is now done by the ports mechanism.
2016-07-11 12:06:50 +02:00
Christian Prochaska
29a12ab9a2 base: add 'Thread::mystack() function
The static 'Thread::mystack()' function returns the stack boundaries of
the calling thread. It is useful when a thread uses a diffent stack than
the primary one.

Fixes #2037
2016-07-11 12:06:05 +02:00
Christian Prochaska
bea48b636e lwip: avoid failed assertion on nonblocking connect()
When calling 'connect()' in nonblocking mode and the connection has been
established, don't call 'tcp_connect()' again, which would trigger an
assertion with the message 'tcp_connect: can only connect from state
CLOSED'.

Fixes #2039
2016-07-11 12:06:04 +02:00
Josef Söntgen
1d9f10e3b6 iso9660: fix reading of large directory entries
This commit makes it possible to read directory entries that span
more than one sector.

Fixes #2038.
2016-07-11 12:06:04 +02:00
Josef Söntgen
cad4d4f970 ahci: check DHRS bit during initialization
This is necessary for the AHCI device model in VirtualBox.

Fixes #2035.
2016-07-11 12:04:53 +02:00
Josef Söntgen
c25c4e3411 ram_blk: transition to the new base API
In addition to modernizing the component now also supports using
empty RAM dataspace as backing store.

For example to use an ISO file the component has to be configured
as follows:

! <config file="image.iso" block_size="2048"/>

To use a empty RAM dataspace that is 256MiB large and has a block
size of 4KiB the configuration looks like this:

! <config size="256M" block_size="4096"/>

Either 'size' or 'file' has to specified. If both are declared the
'file' attribute is soley evaluated.

Issue #1987.

Fixes #2031.
2016-07-11 12:04:52 +02:00
Josef Söntgen
a5dd3fa1e9 ahci: make policy checking more fail-safe
Handle cases where no policy is given and/or no policy matches.

Fixes #2033.
2016-07-11 12:04:52 +02:00
Norman Feske
11a4e7888d noux_net_netcat.run: increase usb_drv quota
Use quota large enough so that the USB driver does not attempt to
request further memory. On the Raspberry Pi, init has no slack memory
to respond to such a request.
2016-07-06 13:02:59 +02:00
Alexander Boettcher
0efd89f12b hw_zynq: disable noux_net_netcat test
because of missing uart_drv
2016-07-06 13:02:59 +02:00
Emery Hemingway
e09752a26f noux: pass correct paths for stdio to Vfs_io_channel
Pass both paths, absolute path to the mount point and the relative path
from the mount point to the file, along with an open handle rather than
just an absolute path. Otherwise, fstat fails if the addressed file is
implemented by another VFS plugin.

Fixes #1789
2016-07-06 13:02:59 +02:00
Alexander Boettcher
5f371c9a3d noux: increase stack size
not sufficient for 32bit noux_tool_chain_auto anymore

Issue #2025
2016-07-06 13:02:58 +02:00
Reto Buerki
f241b6e496 Update Muen port to revision c73734d
Issue #2016
2016-07-06 13:02:58 +02:00
Adrian-Ken Rueegsegger
4c5694184c Enable 32-bit Virtualbox scenarios for hw_x86_64_muen
* Announce VM service
 * Disable USB uhci and ehci as only xhci is supported on hw_x86_64_muen

Issue #2016
2016-07-06 13:02:58 +02:00
Reto Buerki
63591160df vbox: Factor out memory config check
Move Genode/vbox memory configuration check to separate
genode_check_memory_config() function and call it in platform-specific
setup machine hook of accloff/nova.

The rationale for this change is to omit the check on Muen since the
guest memory is separate and not allocated from base-hw memory.

Issue #2016
2016-07-06 13:02:57 +02:00
Reto Buerki
68bab6a411 hw_x86_64_muen: Use timed events for guest preemption
Write tick count of next kernel timer to the guest timed events page if
present. This causes the guest VM to be preempted at the requested tick
count and ensures that the guest VM can not monopolize the CPU if no
traps occur.

The base-hw kernel expects a configured switch-event from the guest VM
to base-hw with ID 30 and target vector 32 to be present in the system
policy.

Issue #2016
2016-07-06 13:02:57 +02:00
Reto Buerki
7d00763861 hw_x86_64_muen: Use timed events to implement timer
Switch kernel timer driver to timed event interface. The base-hw kernel
expects a configured self-event with ID 31 and target vector 32 to be
present in the system policy.

ssue #2016
2016-07-06 13:02:57 +02:00
Adrian-Ken Rueegsegger
6d28ea1c5c vbox: Add platform-specific setup machine hook
Add call to genode_setup_machine prior to machine registration in
frontend machine setup code. This enables platform-specific adjustments
to the machine instance.

The new function is used on hw_x86_64_muen to clamp the processor count
to 1 as multiple virtual CPUs are not supported on this platform.

Issue #2016
2016-07-06 13:02:56 +02:00
Adrian-Ken Rueegsegger
e3fbeeb25e vbox: Implement hwaccl support for Muen
* Implement VMMR0_DO_VMMR0_INIT operation for Muen

   - Indicate VT-x support
   - Enable unrestricted guest mode
   - Set CR[0|4] mask to enable masking of guest CR0.[NE,NW,CD] and
     CR4.VMXE bits.

 * Implement VMMR0_DO_GVMM_CREATE_VM on Muen

   Return error if trying to create SMP VM as VMs with multiple CPUs are
   currently not supported on hw_x86_64_muen.

 * Add Muen-specific Mem_region type

   On hw_x86_64_muen the guest memory layout is static, thus regions are
   handed out from an array of memory regions.

   Use sinfo API to calculate the base address of the VM RAM physical
   0x0 region. This allows to dynamically modify the VM RAM size by
   adjusting the Muen policy and Genode vbox files accordingly.

   Zeroize all memory regions apart from VM Ram since Virtualbox expects
   these regions to be cleared.

 * Add Muen subject state struct

   The subject state encompasses the guest VM machine state that is
   transfered between Virtualbox and hardware accelerated execution on
   Muen.

 * Add Muen-specific Vm_handler class
 * Use Vm_handler to run VM
 * Instruct recompiler to flush its code cache
 * Copy the Muen subject state to/from the Vbox PCPUMCTX.
 * Use the VM interruptibility state to inform the recompiler whether
   interrupts are currently inhibited.
 * Explicitly handle control register access

   If a VM-exit occurs due to a control register access, handle it and
   directly continue hardware accelerated execution of guest VM.

   Note: On NOVA control register accesses are handled by the kernel [1].

   [1] - https://github.com/alex-ab/NOVA/blob/master/src/ec_vmx.cpp#L106

 * Reset guest interruptibility state

   Assert that interrupts are not inhibited in the Virtualbox machine
   state and clear Blocking-by-[STI|MOV to SS] guest interruptibility
   flags prior to running a guest VM in hwaccel mode.

 * Set return code depending on exit reason

   Do not unconditionally emulate the next instruction on VM exit. This
   makes sharing the VM FPU state with Virtualbox unnecessary, as FPU
   instructions are not emulated by the recompiler any longer.
   Also, assert that the FPU has not been used by the recompiler

 * Inject pending guest VM interrupts on Muen

   Use mapped subject pending interrupts page of guest VM to perform
   interrupt injection. IRQs are transferred from the Virtualbox trap
   manager state to the pending interrupts region for injection. If an
   IRQ remains pending upon returning to the recompiler, it is copied
   back to the trap manager state and cleared in the subject interrupts
   region.

 * Inform recompiler about changed SYSENTER_[CS|EIP|ESP] values,
   otherwise values set while running the guest VM hardware accelerated
   may get lost.

 * Implement genode_cpu_hz() on Muen

   Determine the CPU frequency dynamically using the sinfo API.

Issue #2016
2016-07-06 13:02:56 +02:00
Adrian-Ken Rueegsegger
738b01d37a vbox: Move pgm to virtualbox-hwaccl library
Issue #2016
2016-07-06 13:02:56 +02:00
Adrian-Ken Rueegsegger
89a6d16d81 vbox: Extract Vmm_memory::Region to separate header
This enables platform-specific implementations of the struct Mem_region
type.

Issue #2016
2016-07-06 13:02:55 +02:00
Adrian-Ken Rueegsegger
cd6b3b1222 hw_x86_64_muen: Implement Muen Vm_session
* The Vm thread is always paused and on exception to make sure that guest VM
  execution is suspended whenever we handle an interrupt. Also signal the Vm
  session to poke waiting threads (e.g. Virtualbox EMT).

* Implement Vm::proceed
  Switch to the mode transition assembly code declared at the _vt_vm_entry
  label.

Issue #2016
2016-07-06 13:02:55 +02:00
Reto Buerki
082b141e66 hw_x86_64: Add _vt_vm_entry to x86_64 mode transition
The entry enables interrupts and initiates a handover to the guest VM by
invoking event number one. The sti instruction is placed at the start to
allow exits to Muen before handing off to the VM if window exiting is
requested.

Issue #2016
2016-07-06 13:02:55 +02:00
Stefan Kalkowski
e5e1f1261f hw_x86_64_muen: implement VM service skeleton
Issue #2016
2016-07-06 13:02:55 +02:00
Alexander Boettcher
8188e60954 hw_x86: enable building virtualbox
Issue #2016
2016-07-06 13:02:54 +02:00
Emery Hemingway
5dec689b6d remove server/tar_fs
Tar_fs is superseded by the vfs server.

Fixes #2024
2016-07-06 13:02:54 +02:00
Emery Hemingway
ef845edb6e lib/libc_noux: increase execve buffers
Fixes #2025
2016-06-28 11:20:11 +02:00
Sebastian Sumpf
d1eee98012 base-hw: fix data alignment error on RISC-V
Native UTCB data has to be at an machine word boundary.

fixes #2027
2016-06-28 11:17:27 +02:00
Christian Prochaska
22e908e801 vbox: add config option to enforce use of IOAPIC
The virtual PCI model delivers IRQs to the PIC by default and to the
IOAPIC only if the guest operating system selected the IOAPIC with the
'_PIC' ACPI method and if it called the '_PRT' ACPI method afterwards.
When running a guest operating system which uses the IOAPIC, but does
not call these ACPI methods (for example Genode/NOVA), the new
configuration option

<config force_ioapic="yes">

enforces the delivery of PCI IRQs to the IOAPIC.

Fixes #2029
2016-06-28 11:10:45 +02:00
Christian Prochaska
761db4bc73 vbox: config option for the virtual XHCI controller
This commit adds the VirtualBox configuration option

<config xhci="yes">

to enable the virtual XHCI controller.

Fixes #2028
2016-06-28 11:10:29 +02:00
Christian Helmuth
09d43c0708 Fix stack size in fs_rom 2016-06-28 11:09:29 +02:00
Christian Helmuth
7d2a75856f dde_linux: move Format_command class to Lx namespace
Otherwise the class symbols may clash with other global symbols (in base
console.cc).
2016-06-28 11:09:29 +02:00
Norman Feske
17beb9a463 qt_avplay: supply ldso to avplay slave 2016-06-28 11:09:28 +02:00
Josef Söntgen
edf90aec42 wifi_drv: transition to the new base API
Issue #1987.
2016-06-28 11:09:28 +02:00
Christian Helmuth
c8fe0df0ed Overloads for printing signed/unsigned/bool base types
Issue #1942
2016-06-28 11:09:28 +02:00
Christian Prochaska
71183783a2 NOVA: initialize segment and flag registers of local ECs
Make sure that the segment and flag registers of local ECs are initialized
after recall by initializing them at EC creation time.

Fixes #2000
2016-06-28 11:09:28 +02:00
Christian Helmuth
d7ddc83fa9 linux: place alternate signal stack in stack area
The alternate stack must use the stack area as, e.g., Thread::myself()
depends on this property. Hybrid components do not depend on this
property and, therefore, use a static stack buffer.

Fixes #1935
2016-06-28 11:09:28 +02:00
Christian Helmuth
d8c34237bf vfs: default constructor for Dirent and Stat
Fixes #1743
2016-06-28 11:09:27 +02:00
Emery Hemingway
0a01edded2 Path::strip_last_element removes path delimiter
Remove the trailing slash of a path where the path is not "/".
New Path::append_element convenience function.

Fixes #1744
2016-06-28 11:09:27 +02:00
Christian Helmuth
8b78001858 dde_ipxe: remove (non-working) pcnet driver
Also, adapted run scripts to use e1000 NIC model.

Fixes #1821
2016-06-28 11:09:27 +02:00
Stefan Kalkowski
101d052ddb intel_fb_drv: consider aligned pitch value
* Align pitch value to 64 byte (thanks to cnuke for investigation)
* Get rid of extra dataspace retrival and attachment, now that we always buffer
* Consistently name all lx_emul helpers: lx_* (get rid of dde*)
* Add missing file headers

Fix #1997
2016-06-28 11:09:27 +02:00
Stefan Kalkowski
558cc8e00c intel_fb_drv: make buffering mandatory
Instead of providing a buffer to the client and blitting from that
to the "real" framebuffer as an option, with this commit we always do so.
Thereby its possible to immediately destroy the old framebuffer used by
hardware when a configuration change is done, and a new framebuffer
is used. This also simplifies the modesetting.
Moreover, this commit fixes an issue when not using the connector reporting.
Until now the initial mode detection of connectors was only done when
the report was created. this is a regression that entered the driver
when upgrading to the recent Linux kernel version.

Ref #1997
2016-06-28 11:09:27 +02:00
Emery Hemingway
632444ae23 server/rump_fs: transition to the new base API
Use new env, component and logging frameworks.
Sync file system and block device on component entrypoint.
Support for 'root' session argument.
Increase Rump open file descriptor limit.

Issue #1987
Fixes #2011
2016-06-28 11:09:26 +02:00
Alexander Boettcher
f94c2d6aaf vbox: use ahci model in vbox_auto_win7.run
Issue #2006
2016-06-28 11:09:26 +02:00
Alexander Boettcher
e2f1ece0b1 vbox: try to cache RTMemPage* allocation
The ahci model frequently creates and release memory via RTMemPage* functions,
which frequently causes dataspace creation/destruction.

Issue #2006
2016-06-28 11:09:26 +02:00
Alexander Boettcher
4f23e78f10 vbox: add AHCI model
Fixes #2006
2016-06-28 11:09:26 +02:00
Emery Hemingway
ca4f956f21 lib/libc: remove builtin sysctl release information
Fixes #2003
2016-06-28 11:09:25 +02:00
Josef Söntgen
b80939cc0a Noux: add noux-pkg/less
Issue #2014
2016-06-28 11:09:25 +02:00
Alexander Boettcher
7556663e7e acpi_input: transform ACPI events to Genode input
Issue #1962
2016-06-28 11:09:25 +02:00
Sebastian Sumpf
d48219138c usb: transition to the new base API
* remove all 'Genode::env()' calls
* use attached roms to read configuration
* use compoenent framework
* remove all PDBG, PINF, PWRN macros

Issue #1987
Fixes #2019
2016-06-28 11:09:25 +02:00
Sebastian Sumpf
58ef6e3695 lx_kit: optional global env + internal allocator
* make Lx::Malloc a real Genode allocator, so it can be used with 'new' and
  'destroy;
* add optional Lx_kit::Env class

issue #2019
2016-06-28 11:09:23 +02:00
Stefan Kalkowski
a145e6ad70 nic_bridge: transition to the new base API
* use Component::* instead of Server::*
* do not use old printf format anymore
* do not use old Genode::env()->heap() anymore
* avoid pointers where possible, and use references instead
* throw away the thread-safe variants of list and AVL tree,
  nic_bridge became single-threaded in the past
* introduce Ram_session_guard instead of Allocator_guard

Issue #1987
2016-06-28 11:09:23 +02:00
Josef Söntgen
d9f33f7577 linux/audio: transition to the new base API
Issue #1987
2016-06-28 11:08:21 +02:00
Josef Söntgen
0d8d8de42c ahci: transition to the new base API
Issue #1987
2016-06-28 11:08:13 +02:00
Josef Söntgen
c77f146e72 acpi: transition to the new base API
Issue #1987
2016-06-28 11:08:01 +02:00
Josef Söntgen
833c9e01f5 usb_block: transition to the new base API
Issue #1987
2016-06-28 11:06:58 +02:00
Emery Hemingway
f772dfaccd lib/curl: adjust for new spec directories
Fixes #2021
2016-06-22 12:26:33 +02:00
Sebastian Sumpf
b6bc7e0486 usb: fix 'find_next_bit'
Return correct offset for sizes over machine word size.

Fixes #2013
2016-06-22 12:21:42 +02:00
Alexander Boettcher
4e9aeb45ea platform_drv: sync startup between acpica
- platform_drv announces a separate "Acpi" session
- platform_drv waits for ROM "system" to change state to "acpi_ready"
- acpica waits for "Acpi" announcement
- acpica uses the platform driver via "Acpi" to reconfigure PCI devices
- acpica changes "system" state to "acpi_ready" after it ready with initialization
- platform_drv reacts on "system" state change to "acpi_ready" by announcing "Platform" session
- drivers start to operate as usual

Issue #2009
2016-06-22 12:21:42 +02:00
Norman Feske
2030ae678e Supplement base/log.h with raw output function
This patch introduces the Genode::raw function that prints output
directly via a low-level kernel mechanism, if available.

On base-linux, it replaces the former 'raw_write_str' function.
On base-hw, it replaces the former kernel/log.h interface.

Fixes #2012
2016-06-22 12:21:42 +02:00
Norman Feske
ebdb1c6892 sel4: reduce initial memory demand of PD session
This is a follow-up commit to "slab: throw exception if initial
allocation fails". It is needed because on seL4, the PD session quota is
used as backing store for the meta data of the PD's virtual memory. For
this reason, PD sessions on seL4 require more session quota compared to
the other kernels. Apparently, the default quota is too scarce to
complete the PD-session construction. By shrinking the number of
supported page-table entries, we reduce the size of the PD session
component so that the creation succeeds.

Issue #1983
2016-06-22 12:21:42 +02:00
Alexander Boettcher
868bf6c9d0 noux-pkg: port of diffutils 3.3
Fixes #2005
2016-06-22 12:21:42 +02:00
Emery Hemingway
8ae2f65da8 uniform XML boolean attribute access
Replace 'attribute(...).has_value("yes")`
with 'attribute_value(..., false)'.

This allows for boolean configuration to be set with values such as
"true", "false", "yes", "no", or "1", "0".

Fixes #2002
2016-06-22 12:21:42 +02:00
Emery Hemingway
51e8f05fb6 Ajdust run scenarios for strict policy matching
Issue #1901
2016-06-22 12:21:41 +02:00
Emery Hemingway
877676c29f Make label-based policy selection more strict
A configuration policy must match against a policy node label,
label_prefix, or label_suffix atttribute. A fallback to
<default-policy/> is provided as a label wildcard.

Fixes #1901
2016-06-22 12:21:41 +02:00
Adrian-Ken Rueegsegger
c1bb82fb6b base-hw: make Muen sinfo API publicly available
The sinfo function declared in sinfo_instance.h creates a static sinfo
object instance and returns a pointer to the caller.

- kernel timer and platform support to use sinfo() function to
  instantiate sinfo object
- address and size of the base-hw RAM region via the sinfo API
- log_status() function in sinfo API
2016-06-22 12:19:21 +02:00
Adrian-Ken Rueegsegger
2f11caa8d6 vbox_win: Set priority of audio_drv to -1
Helps against choppy sound in Windows guest VMs.
2016-06-22 12:17:18 +02:00
Reto Buerki
963ca0e6b5 vbox: Provide implementation of RTErrCOMGet
The generated errmsgvboxcomdata.h is currently empty, but the
'main.e.l.f' log group seems to work for now.
2016-06-22 12:17:18 +02:00
Adrian-Ken Rueegsegger
8dbf449b91 Add fake usb_devices report ROM to virtualbox.run 2016-06-22 12:17:18 +02:00
Adrian-Ken Rueegsegger
dbb0978ea5 vbox: Fix name of 'rem_disas' log group 2016-06-22 12:17:18 +02:00
Alexander Boettcher
1b7b43c886 vbox: handle bogus statvfs values gracefully
Otherwise Windows guest additions may trigger divison by 0 in the kernel,
which causes BSOD.

Fixes #1873
2016-06-22 12:17:18 +02:00
Alexander Boettcher
db1d6568fb libc: vfs_plugin - initialize fstatfs members
Issue #1873
2016-06-22 12:17:17 +02:00
Alexander Boettcher
c26f91ea00 platform_drv/x86: avoid quota leaking
Fixes #1980
2016-06-22 12:17:17 +02:00
Christian Helmuth
470757cf15 lxip: implement ffz() with __ffs()
Unfortunately, ffs() returns bit positions starting at 1 while ffz()
needs the semantics of __ffs(), which starts bit positions at zero.
2016-06-22 12:17:17 +02:00
Stefan Kalkowski
0c13effaa8 intel_fb: enable polling for connector changes
To circumvent problems on platforms with shaky hotplug interrupt notification
introduce a "poll" configuration option to the driver, which enables
polling for connector changes.

Fix #2004
2016-06-22 12:17:17 +02:00
Stefan Kalkowski
11bead1811 intel_fb_drv: componentize
Issue #1987
2016-06-22 12:17:16 +02:00
Sebastian Sumpf
1cfa14b2f2 os: add stack based backtrace support
Fixes odyssey #2001
2016-06-22 12:17:16 +02:00
Christian Helmuth
49f7d02f80 lxip: add missing memmove() to emulation library 2016-06-10 14:46:01 +02:00
Emery Hemingway
d9c48847db lib/libc: set initial directory if VFS initialized
Fixes #1984
2016-06-07 08:06:59 +02:00
Emery Hemingway
930e2638b2 lib/libc: remove internal use of getcwd at fstatat
The implementation and behaviour of 'getcwd' is externally defined.

Add move operators to Genode::Path.

Issue: #1984
2016-06-07 08:06:35 +02:00
Sebastian Sumpf
597cdc846c usb: use hardware timer to update jiffies
This takes a lot of load away because we don't need to call the time server on
each IRQ.

Fixes #1999
2016-06-06 14:26:32 +02:00
Emery Hemingway
5e6c3a979e virtualbox: unique Nic session labels
Append the network adapter index to Nic session labels.

Fixes #1966
2016-06-06 12:30:05 +02:00
Emery Hemingway
f06087625f server/rump_fs: skip . and .. directory elements
Do not return elements for '.' and '..' during directory reads.

Fixes #1998
2016-06-06 12:12:54 +02:00
Alexander Boettcher
56890733af nova: handle cap count error if IPC dst invalid
Fixes #1995
2016-06-06 09:38:30 +02:00
Stefan Kalkowski
1e5c08bb1a base: invert hex value padding to correct meaning
Fix #1996
2016-06-06 09:38:29 +02:00
Christian Helmuth
cf771c10d6 Improve tokenizing to support XML comments
The whole XML comment has to be parsed as one XML tag to support strange
but valid combinations like

  <!---->
  <!--invisible-tag></invisible-tag-->

Fixes #1424
2016-06-06 09:37:47 +02:00
Josef Söntgen
941a71346a base: add print method for unsigned long long
Fixes #1991.
2016-06-04 13:45:27 +02:00
Stefan Kalkowski
7f0c3eee6d rump_fs: set inode in Directory::read accordingly
Fix #1989
2016-06-04 13:45:26 +02:00
Sebastian Sumpf
4994616346 os: packets without playload in packet stream
issue #1988
2016-06-04 13:45:26 +02:00
Josef Söntgen
37fb4309b3 wifi_drv: use relative timeout in poll function
The vanilla 'schedule_timeout()' Linux function expects a relative
timeout value. The first implementation of the wifi_drv, however, used
an absolute timeout value. This mismatch was overlooked when the
lx_kit, which adheres to the vanilla Linux semantics, was incoporated
in the driver.

Fixes #1990.
2016-06-01 12:28:35 +02:00
Josef Söntgen
f41a0aea38 lx_kit: handle multiple timer at once
Issue #1986.
2016-05-31 15:12:17 +02:00
Josef Söntgen
294c7e5076 lx_kit: handle truncation of hrtimer timeouts
Fixes #1986.
2016-05-31 15:11:55 +02:00
Stefan Kalkowski
964e9e91c7 base-hw: eliminate the need to $(BASE_HW_DIR)
Instead of introducing a $(BASE_HW_DIR) variable that has to be defined in each
core makefile for the different base-hw targets, this commit replaces the
$(REP_DIR) variable usage in core.inc files with $(BASE_DIR)/../base-hw.

Ref #1955
2016-05-31 15:09:53 +02:00
Alexander Boettcher
54b47535f8 run: adapt trace.run
Issue #1983
2016-05-31 12:02:05 +02:00
Alexander Boettcher
6289a2379d base: deny session creation if quota insufficient
Quota_exceeded message are of no use during session construction, since
the arguments of the ram_quota are used and no upgrade can take place (the
session construction failed and is so not available for upgrade)

Fixes #1983
2016-05-31 12:02:05 +02:00
Alexander Boettcher
5c10653d8a slab: throw exception if initial allocation fails
Issue #1983
2016-05-31 12:02:04 +02:00
Christian Helmuth
93845e1de5 version: 16.05 2016-05-27 11:36:56 +02:00
Norman Feske
5518b5f5f2 News item for Genode 16.05 2016-05-27 11:36:56 +02:00
Norman Feske
08d08716c2 Release notes for version 16.05 2016-05-27 10:53:31 +02:00
Alexander Boettcher
74030a2e38 nova: kernel fix for more than 4096 processes
Fixes #1951
2016-05-27 09:34:23 +02:00
Christian Helmuth
468ebebbda doc: update README, components.txt etc. 2016-05-26 15:54:17 +02:00
Josef Söntgen
ee804a84fa usb: do not allocate raw packets without size
Allocating a packet in the packet stream without a payload is not
allowed. Therefore we have to allocate CTRL message packets, that do
not have a payload, with a bogus length instead.
2016-05-26 15:54:17 +02:00
Emery Hemingway
b80428abf6 server/vfs: fix file leaf path pointer
Directory_service::leaf_path returns a pointer offset from its argument
so pass member data rather than a constructor argument to leaf_path.

Issue #1775
2016-05-26 15:54:17 +02:00
Stefan Kalkowski
c48e13e1c0 platform_drv: return quota when freeing dma memory
This is an interim fix for solving the quota leakage problem of
the platform driver on x86 platforms. To properly fix that problem
one has to track which dataspaces where created by the platform driver,
so that freeing the dataspace and reversing the quota transfer is done
on correct dataspaces only.

Refer #1980
2016-05-26 15:54:17 +02:00
Alexander Boettcher
46a7b2ea66 ahci: disable atapi support by default
If needed it has to be enabled explicitly as documented in the README.

Related to issue #1906
2016-05-26 15:54:17 +02:00
Alexander Boettcher
16adc852a5 dde_ipxe: enable Intel I219-LM PCI-ID 2016-05-26 15:54:16 +02:00
Christian Prochaska
1e4672db4a Noux: support PD session upgrade
Fixes #1979
2016-05-26 15:54:16 +02:00
Josef Söntgen
783da4ee1d tool: remove WSMAN URL parameters 2016-05-26 15:54:16 +02:00
Norman Feske
97a41394b4 Documentation changes on account of the book
This patch removes the outdates doc/architecture.txt since the
topics are covered by the book. We keep repos/os/doc/init.txt
because it contains a few details not present in the book (yet).
The patch streamlines the terminology a bit. Furthermore, it
slightly adjusts a few source-code comments to improve the book's
functional specification chapter.
2016-05-26 15:54:16 +02:00
Christian Helmuth
3e6308e83b doc: update tool-chain documentation 2016-05-26 15:54:16 +02:00
Christian Prochaska
957fe694c5 Noux: provide separate configuration for child processes
Instead of passing on the Noux 'config' ROM dataspace to child processes,
provide a separate configuration for each Noux child, which is either
'<config/>' or '<config ld_verbose="yes"/>', depending on the
configuration of this attribute for the Noux process. This is also a
workaround to prevent multiple insertion of the same 'config' ROM
dataspace capability into the dataspace registry.

Issue #1978
2016-05-26 15:54:16 +02:00
Norman Feske
92a10541aa Update of the hello tutorial 2016-05-26 15:54:16 +02:00
Norman Feske
357b84835a base: add modern Root_component constructor 2016-05-26 15:54:15 +02:00
Martin Stein
1208d14681 hw: use kernel timer for timer driver
* Adds public timeout syscalls to kernel API
  * Kernel::timeout installs a timeout and binds a signal context to it that
    shall trigger once the timeout expired
  * With Kernel::timeout_max_us, one can get the maximum installable timeout
  * Kernel::timeout_age_us returns the time that has passed since the
    calling threads last timeout installation

* Removes all device specific back-ends for the base-hw timer driver and
  implements a generic back-end taht uses the kernel timeout API

* Adds assertions about the kernel timer frequency that originate from the
  requirements of the the kernel timeout API and adjusts all timers
  accordingly by using the their internal dividers

* Introduces the Kernel::Clock class. As member of each Kernel::Cpu object
  it combines the management of the timer of the CPU with a timeout scheduler.
  Not only the timeout API uses the timeout scheduler but also the CPUs job
  scheduler for installing scheduling timeouts.

* Introduces the Kernel::time_t type for timer tic values and values inherited
  from timer tics (like microseconds).

Fixes #1972
2016-05-26 15:54:15 +02:00
Martin Stein
722fd85bc1 hw: higher names for core restricted syscalls
To avoid the need for adapting the names of the core restricted syscalls
each time we add a public syscall (restricted names must always be
greater than public names), let restricted syscall names simply start at
100 (we should never have more than 100 public syscalls).

Ref #1972
2016-05-26 15:54:15 +02:00
Martin Stein
608df38402 hw: add dummy config to kernel tests
Building a kernel test produced an error about a missing config
apparently because of recent changes in the run tool. So, we add
a dummy XML node as config.

Ref #1972
2016-05-26 15:54:15 +02:00
Alexander Boettcher
6b94e761f8 input/ps2: add volume up/down/mute, sysrq, screenlock
This commit renames KEY_COFFEE to KEY_SCREENLOCK, which is more
descriptive.

Issue #1962
2016-05-26 15:54:15 +02:00
Alexander Boettcher
66b7a01d58 nova: show pd info during unresolvable faults
Fixes #1977
2016-05-26 15:54:14 +02:00
Alexander Boettcher
57f47db823 platform_drv/x86: support ACPI reset
Evaluate fadt xml node in report from acpi_drv. If the io ports in the range
of 0xcf8+4 are necessary for the reset than the platform driver will
react on the 'system' state 'reset' and reboot.

Issue #1962
2016-05-26 15:54:14 +02:00
Alexander Boettcher
38c5abbaad libports: add acpica library
Fixes #1962
2016-05-26 15:54:14 +02:00
Alexander Boettcher
ee7f965061 platform_drv/x86: use new component and new env
Issue #1962
2016-05-26 15:54:13 +02:00
Alexander Boettcher
db20e1d87b acpi_drv: report ACPI reset configuration
Will be/can be used by the platform driver to reset the machine, iif the
platform driver owns the resources, e.g. the I/O ports of PCI config access.

Issue #1962
2016-05-26 15:54:13 +02:00
Alexander Boettcher
6b0022f032 platform_drv: drop deprecated config syntax
- policy entry without deprecated rom node
- skip if_arg and use label directly for routing

see Issue #1801

Issue #1962
2016-05-26 15:54:13 +02:00
Alexander Boettcher
b9b8114a4e nova: support fixed ACPI event delivery by kernel
Issue #1962
2016-05-26 15:54:13 +02:00
Stefan Kalkowski
e1c451f19a dde_linux: update intel_fb to 4.4.3
Issue #1974.
2016-05-26 15:54:13 +02:00
Stefan Kalkowski
5424628ebd intel_fb: add Framebuffer controller example
Issue #1974.
2016-05-26 15:54:12 +02:00
Stefan Kalkowski
63e6dc05cd os: add dynamic Framebuffer test
Issue #1974.
2016-05-26 15:54:12 +02:00
Sebastian Sumpf
369ff2a001 dde_linux: update usb to 4.4.3
Issue #1974.
2016-05-26 15:54:12 +02:00
Josef Söntgen
bcefc874d6 dde_linux: update lxip to 4.4.3
Issue #1974.
2016-05-26 15:54:11 +02:00
Josef Söntgen
b9e7fb1edf dde_linux: update wifi to 4.4.3
Issue #1974.
2016-05-26 15:54:11 +02:00
Josef Söntgen
0106045bad lx_kit: add modular lx_emul backend
The modular lx_kit seperates the required back end functionality of the
Linux emulation environment from the front end. Thereby each driver can
reuse specific parts or supply more suitable implementations by itself.
It is used to reduce the amount of redundant code in each driver.

The lx_kit is split into several layers whose structure is as follows:

The first layer in _repos/dde_linux/src/include/lx_emul_ contains those
header files that provide the structural definitions and function
declarations of the Linux API, e.g. _errno.h_ provides all error code
values. The second layer in _repos/dde_linux/src/include/lx_emul/impl_
contains the implementation of selected functions, e.g. _slab.h_
provides the implementation of 'kmalloc()'. The lx_kit back end API is
the third layer and provides the _Lx::Malloc_ interface
(_repos/dde_linux/src/include/lx_kit/malloc.h_) which is used to
implement 'kmalloc()'. There are several generic implementations of the
lx_kit interfaces that can be used by a driver.

A driver typically includes a 'lx_emul/impl/xyz.h' header once
directly in its lx_emul compilation unit. The lx_kit interface files
are only included in those compilation units that use or implement the
interface. If a driver wants to use a generic implementation it must
add the source file to its source file list. The generic
implementations are located in _repos/dde_linux/src/lx_kit/_.

The modular lx_kit still depends on the private _lx_emul.h_ header file
that is tailored to each driver. Since the lx_kit already contains much
of the declarations and definitions that were originally placed in
these private header files, those files can now ommit a large amount
of code.

Fixes #1974.
2016-05-26 15:54:10 +02:00
Sebastian Sumpf
ee05fb9259 base: Remove dynamic segment check from Elf_binary
Don't check for supported segment types of dynamic binaries, it is to
restrictive. If something goes wrong the dynamic linker will throw an error.
2016-05-23 15:52:51 +02:00
Josef Söntgen
47990f37d7 dde_bsd: update audio driver to OpenBSD 5.9
In addition to updating the contrib sources the driver now uses the
new Component API and will report the internal mixer state.

Reporting of the mixer state is enabled by adding the 'report_mixer'
attribute to the drivers configuration and setting its value to 'yes'.

The following snippets illustrates the format of the report:

!<mixer_state>
!  <mixer field="inputs.beep" value="108"/>
!  <mixer field="outputs.hp_sense" value="plugged"/>
!  <mixer field="outputs.master" value="128,128"/>
!  <mixer field="outputs.mic_sense" value="unplugged"/>
!  <mixer field="outputs.spkr_muters" value="hp,mic"/>
!</mixer_state>

The mixer state may expose other mixer fields as well, depending on the
used sound card. The naming scheme of the attributes intentionally
matches the naming scheme of OpenBSD's mixerctl(1) program.

Each 'mixer' node can be used to configure the audio driver by using it
in its configuration, e.g.:

!<config report_mixer="yes">
!  <mixer field="outputs.master" value="255,255"/>
!</config>

This configuration will set the output volume to the highest possible
value. Although it is now also possible to update the configuration
at run-time it should not be done while the driver is currently playing
or recording because it may provoke the generation of artefacts.

Fixes #1973.
2016-05-23 15:52:51 +02:00
Christian Prochaska
44648bb5c7 tool_chain/cxx: use '__cxa_demangle()' for exception names
Fixes #1976
2016-05-23 15:52:50 +02:00
Christian Prochaska
2a92f4bf55 tool_chain: use 'pkg-config' for library checks
Fixes #1975
2016-05-23 15:52:50 +02:00
Christian Helmuth
b65a50ed25 autopilot: add fpu test to list 2016-05-23 15:52:50 +02:00
Christian Helmuth
111d74744d hw_x86_64: remove aligment attribute from FPU context
We do not ensure that the Fpu::Context is 16-byte aligned and,
therefore, should not tell the compiler that we did. Otherwise, the GCC
may optimize operations regarding the addresses of members as it did for

  if ((addr_t)_fxsave_area & 0xf) ...

With the declared 16-byte alignment the condition will never become
true.
2016-05-23 15:52:50 +02:00
Christian Prochaska
638db70b94 GDB monitor: nova_x86_64 platform support
Fixes #1971
2016-05-23 15:52:49 +02:00
Christian Prochaska
ff76e69542 GDB monitor: x86_64 support
General support for the x86_64 architecture.

Fixes #1970
2016-05-23 15:52:49 +02:00
Christian Prochaska
5842b2065e GDB monitor: stability improvements
Fixes #1969
2016-05-23 15:52:49 +02:00
Christian Prochaska
2cde1d36c1 base: changes for GDB monitor
- add a new function 'binary_ready_hook_for_gdb()' in ldso. GDB can set a
  breakpoint at this function to know when ldso has loaded the binary
  into memory.
- get the thread state from the NOVA kernel immediately on 'pause()'

Fixes #1968
2016-05-23 15:52:49 +02:00
Sebastian Sumpf
30e57d4581 foc: update port revision and hash
Issue ssumpf/foc#15
2016-05-23 15:52:48 +02:00
Norman Feske
807be83b1b Remove inconsistent use of 'is_' prefix
Fixes #1963
2016-05-23 15:52:39 +02:00
Norman Feske
15141f3ca7 Remove hand-crafted Rpc_functions typedefs 2016-05-23 15:52:39 +02:00
Norman Feske
ef9a7d2230 base: remove length limit of Type_list 2016-05-23 15:52:39 +02:00
Norman Feske
a99989af40 Separation of thread operations from CPU session
This patch moves the thread operations from the 'Cpu_session'
to the 'Cpu_thread' interface.

A noteworthy semantic change is the meaning of the former
'exception_handler' function, which used to define both, the default
exception handler or a thread-specific signal handler. Now, the
'Cpu_session::exception_sigh' function defines the CPU-session-wide
default handler whereas the 'Cpu_thread::exception_sigh' function
defines the thread-specific one.

To retain the ability to create 'Child' objects without invoking a
capability, the child's initial thread must be created outside the
'Child::Process'. It is now represented by the 'Child::Initial_thread',
which is passed as argument to the 'Child' constructor.

Fixes #1939
2016-05-23 15:52:39 +02:00
Josef Söntgen
59aec6114b vfs_block: remove diagnostic warnings
These warnings are triggered by requests either using byte offsets or
reading a number of bytes that is not a multiple of the block size as
well as by components using the plugin with a different block size than
the backend block session provides.

Fixes #1964.
2016-05-23 15:52:38 +02:00
Christian Helmuth
3ba61a2ddf Move rust support to libports
Issue #1899
2016-05-23 15:52:38 +02:00
Alexander Boettcher
bb3e9300f6 nova: disable ACPI GPE events during kernel boot
Issue #1962
2016-05-23 15:52:38 +02:00
Adrian-Ken Rueegsegger
69e9929f71 hw_x86_64: Change IRTE_COUNT to designate number of IRTEs
Adjust IRTE_COUNT to specify the number of IRTEs and not the index of
the last IRTE entry. This fixes an off-by-one error in the toggle_mask()
function, where the range check for I/O APIC IRQs wrongly ignored IRQ
23.
2016-05-23 15:52:38 +02:00
Adrian-Ken Rueegsegger
61572263d7 hw_x86_64: Drop unneded Pic dummy functions 2016-05-23 15:52:38 +02:00
Norman Feske
0fae8fe9c3 hw: remove custom Cpu_connection
The custom version merely differs from the generic one with respect to
the session quota. Since we support the dynamic upgrading of sessions,
we don't need to provide the big amount (128KiB) defined by the custom
version.
2016-05-23 15:52:37 +02:00
Norman Feske
a7b3072cc2 Pass Env & as first argument to connection objects
This patch supplements each existing connection type with an new
constructor that is meant to replace the original one. The new
one takes a reference to the component's environment as argument and
thereby does not rely on the presence of the globally accessible
'env()' interface.

The original constructors are marked as deprecated. Once we have
completely abolished the use of the global 'env()', we will remove them.

Fixes #1960
2016-05-23 15:52:37 +02:00
Norman Feske
3361651e9e base: remove dependency from deprecated config lib
Issue #1959
2016-05-23 15:52:37 +02:00
Norman Feske
f19b269360 window layouter: use Attached_rom_dataspace::xml
Issue #1959
2016-05-23 15:52:37 +02:00
Norman Feske
8da737acfd base: add Attached_rom_dataspace::xml method
Issue #1959
2016-05-23 15:52:36 +02:00
Norman Feske
e0c0794f33 base: supplement comment of Xml_node constructor 2016-05-23 15:52:36 +02:00
Norman Feske
8d797105b3 Move Attach_*dataspace utils from os to base
Fixes #1958
2016-05-23 15:52:36 +02:00
Christian Helmuth
16914bddc8 Implement affinity test as component
This enables the use of the current Thread API to set thread affinity on
construction.
2016-05-23 15:52:36 +02:00
Norman Feske
cb232891bf Fix noux.run on base-linux
The recent move of the initial three region maps into the PD session
breaks the noux.run test on Linux because the address spaces are locally
managed on this platform but the generic code of Noux still tries to
execute the regular procedure of creating the virtualized PD session for
a new Noux process. This patch handles a corner case that occurs on
Linux but no other platform. It enables the successful creation of the
virtualized PD session so that the test runs to completion. Still noux
on Linux remains to be limited to non-forking programs.

Issue #1938
2016-05-23 15:52:36 +02:00
Alexander Boettcher
dccad4c526 nova: kernel support for more than 4096 processes
Fixes #1951
2016-05-23 15:52:36 +02:00
Alexander Boettcher
77c4510787 nova: support dropping caps just locally
without revocation of all subsequent delegations.

Fixes #1950
2016-05-23 15:52:36 +02:00
Emery Hemingway
0ac1d1774d lib/libc_noux: check for invalid system call buffers
Issue #1931
2016-05-23 15:52:35 +02:00
Christian Prochaska
ea726a1f48 libc: pipe plugin
A libc plugin which implements pipes using a ring buffer.

Fixes #1947
2016-05-23 15:52:35 +02:00
Johannes Schlatow
f81867f208 base-hw: refactor core.mk and core.inc files
All core.inc files now use $BASE_HW_DIR instead of $REP_DIR. The former
is defined by the core.mk file. This allows including core.inc files
from other repositories (e.g. genode-world) for additional platform
support.

Fixes #1955
2016-05-23 15:52:35 +02:00
Johannes Schlatow
27a73b89f0 net: write accessors for Ipv4_packet
Also adds header-checksum calculation function.

Fixes #1915
2016-05-23 15:52:34 +02:00
Johannes Schlatow
bed870ead4 net: fix header_length field in Ipv4_packet
Replace size_t by uint8_t in accessors for the IPv4 header fields
'version' and 'header_length' - uint8_t is the smallest integral type
for 4 bit of information. Note, as the _internet header length_ field is
defined to reflect the number of 32-bit words the header occupies, we
also stick to the specification with our accessor.

Issue #1915
2016-05-23 15:49:57 +02:00
Christian Helmuth
abed38e8ac net: transform packet data accessor into template
Supports stronger typing of raw accesses and const correctness.

Issue #1915
2016-05-23 15:49:56 +02:00
Johannes Schlatow
3df03fbc41 base-hw: fix SCU initialization for zynq-based boards
The old implementation cleared all other bits in the SCU control
register when enabling the SCU, which broke the kernel startup on zynq-
based boards.
By only raising the enable bit, we can keep the initial/default state
e.g. as set up by uboot.

Fixes #1953
2016-05-23 15:49:56 +02:00
Norman Feske
f6dec901bb base: remove Component::name from API
It turns out that the name function does not have much use in practice
except for naming the thread of the component's initial entrypoint. For
dynamically linked components, this thread is created by the dynamic
linker. It is named "ep" in these cases. Considering that we will
eventually turn all regular components into dynamically linked
executables, the additional information provided by the
Component::name() function remains unused. So it is better to not bother
the component developers with adding boilerplate code.
2016-05-23 15:49:56 +02:00
Waylon Cude
1e95af5bab Fixed linking and memory allocation for rust
Now rlibs are actually linked to programs. Target files have been
modified to not generate code that requires compiler-rt. Added a target
for libstd-rust, but it's very broken right now. Moved alloc_system to
the libports folder because either a memory allocator needs to be
written in rust or posix_memalign needs to be implemented. Changed
liblibc to use freebsd as the OS instead of netbsd. Added a library with
unwind dummy functions.

Rust relies on atomic builtins, which are not implemented in libgcc for
ARM. One was implemented in rust, which was sufficient to get the
current rust test to run. Rust libs were added into the group of libs
for the linker so order no longer matters. The raspberry pi now uses an
armv6 target.
2016-05-23 15:49:56 +02:00
Norman Feske
ab88599682 base: document the return value of String::length 2016-05-23 15:49:56 +02:00
Norman Feske
fd401bdf53 Thread API cleanup
This patch cleans up the thread API and comes with the following
noteworthy changes:

- Introduced Cpu_session::Weight type that replaces a formerly used
  plain integer value to prevent the accidental mix-up of
  arguments.
- The enum definition of Cpu_session::DEFAULT_WEIGHT moved to
  Cpu_session::Weight::DEFAULT_WEIGHT
- New Thread constructor that takes a 'Env &' as first argument.
  The original constructors are now marked as deprecated. For the
  common use case where the default 'Weight' and 'Affinity' are
  used, a shortcut is provided. In the long term, those two
  constructors should be the only ones to remain.
- The former 'Thread<>' class template has been renamed to
  'Thread_deprecated'.
- The former 'Thread_base' class is now called 'Thread'.
- The new 'name()' accessor returns the thread's name as 'Name'
  object as centrally defined via 'Cpu_session::Name'. It is meant to
  replace the old-fashioned 'name' method that takes a buffer and size
  as arguments.
- Adaptation of the thread test to the new API

Issue #1954
2016-05-23 15:49:55 +02:00
Norman Feske
7b73d1d823 heap: add new-fashioned constructor 2016-05-09 13:25:11 +02:00
Norman Feske
1f395ae780 base: new interface for textual output
Issue #1942
2016-05-09 13:25:01 +02:00
Norman Feske
3bceefc9cf Omit superfluous use of "CAP"/"SIGNAL" services
The functionality of the former "CAP" and "SIGNAL" services is now
provided by core's "PD" service.
2016-05-09 13:24:51 +02:00
Norman Feske
dc8690ae37 Modularize base-internal headers
Issue #1952
2016-05-09 13:24:39 +02:00
Norman Feske
40a5af42eb Clean up base-library structure
This patch moves the base library from src/base to src/lib/base,
flattens the library-internal directory structure, and moves the common
parts of the library-description files to base/lib/mk/base.inc and
base/lib/mk/base-common.inc.

Furthermore, the patch fixes a few cosmetic issues (whitespace and
comments only) that I encountered while browsing the result.

Fixes #1952
2016-05-09 13:24:11 +02:00
Emery Hemingway
52cc50174f Amend File_system session with SEEK_TAIL support
Used to read or write from the end of a file when multiple packets may
be in transit.

Supported by ram_fs, rump_fs, and vfs servers.

Fixes #1775
2016-05-09 13:10:53 +02:00
Christian Helmuth
b38c5006d8 vfs: support UNLINK_ERR_NO_ENTRY in TAR file system
We report UNLINK_ERR_NO_PERM only for files in TAR archive, otherwise
UNLINK_ERR_NO_ENTRY is returned. This permits the arbitrary layering of
file systems with support for proper ENOENT reporting, for example,
when using 'rm -f non_existent_file' that aborts if EPERM is wrongly
reported.
2016-05-09 13:10:53 +02:00
Norman Feske
b8cd56cb90 Tweak slab allocators to use whole pages
Most slab allocators in core use a sliced heap as backing store. Since
sliced-heap allocations are performed at page-granularity, it is
sensible to dimension the slab blocks to fill whole pages.
2016-05-09 13:10:53 +02:00
Norman Feske
ba0545de07 Clean up 'Sliced_heap'
This patch cleans up the implementation of the sliced heap, adds a
constructor that takes references instead of pointers, and adds the
function 'meta_data_size' to determine the meta-data overhead per block.
The latter can be used to dimension slab allocators such that slab
blocks use whole pages.
2016-05-09 13:10:53 +02:00
Norman Feske
4f69772ecc Replace 'Env' interface with modern one
The original 'Env' interface as returned by 'Genode::env()' has been
renamed to 'Env_deprecated' and moved to deprecated/env.h. The new version
of base/env.h contains the interface passed to modern components that
use the component API via base/component.h.

Issue #1832
2016-05-09 13:10:52 +02:00
Norman Feske
7274ca997d Remove Genode::Process from API
This patch makes the former 'Process' class private to the 'Child'
class and changes the constructor of the 'Child' in a way that
principally enables the implementation of single-threaded runtime
environments that virtualize the CPU, PD, and RAM services. The
new interfaces has become free from side effects. I.e., instead
of implicitly using Genode::env()->rm_session(), it takes the reference
to the local region map as argument. Also, the handling of the dynamic
linker via global variables is gone. Now, the linker binary must be
provided as constructor argument.

Fixes #1949
2016-05-09 13:10:52 +02:00
Norman Feske
b49e588c1c Assign threads to PD at its creation time
This patch replaces the former 'Pd_session::bind_thread' function by a
PD-capability argument of the 'Cpu_session::create_thread' function, and
removes the ancient thread-start protocol via 'Rm_session::add_client' and
'Cpu_session::set_pager'. Threads are now bound to PDs at their creation
time and implicitly paged according to the address space of the PD.

Note the API change:

This patch changes the signature of the 'Child' and 'Process' constructors.
There is a new 'address_space' argument, which represents the region map
representing the child's address space. It is supplied separately to the
PD session capability (which principally can be invoked to obtain the
PD's address space) to allow the population of the address space
without relying on an 'Pd_session::address_space' RPC call.
Furthermore, a new (optional) env_pd argument allows the explicit
overriding of the PD capability handed out to the child as part of its
environment. It can be used to intercept the interaction of the child
with its PD session at core. This is used by Noux.

Issue #1938
2016-05-09 13:10:52 +02:00
Norman Feske
2bc8a0f76a Move XML util from os to base repository
Since the dynamic linker depends on the XML utils and we plan to replace
the ancient 'Arg_string' with XML, it is time to move the 'Xml_node' and
'Xml_generator' to base/include.
2016-05-09 13:10:52 +02:00
Norman Feske
73b463cdbb Signal_handler: remove num argument from handler
We will eventually remove the delivery of the number of occurred signals
to the recipient. There haven't been any convincing use cases for this
feature. In the contrary, it actually led to wrong design choices in the
past where the rate of signals carried information (such as the progress
of time) that should better be obtained via an explicit RPC call.

The old 'Signal_rpc_member' template retains the old interface for now.
But the new 'Signal_handler' omits the 'unsigned' argument from the
handler function.
2016-05-09 13:10:52 +02:00
Christian Helmuth
861508ad68 Always recreate library archives
GNU ar only uses a flat module (object) name space but supports multiple
instances of objects with the same name. As we use subdirectories with
source file names that may clash (e.g., signal/common.cc and
server/common.cc in the base library) some of our static library
archives have multiple object instances. This is not an issue on archive
creation but works not as expected when updating archives. To avoid
updates of library archives we delete the files before calling GNU ar.
2016-05-09 13:10:52 +02:00
Emery Hemingway
549f77eafe Catch exceptions when creating VFS
Catch exceptions at File_system_factory::create.
Print error message in Dir_file_system.

Fixes #1786
2016-05-09 13:10:51 +02:00
Emery Hemingway
4aafa882d8 XML node type and attribute name string accessors
Issue #1786
2016-05-09 13:10:51 +02:00
Christian Helmuth
d891016632 lwip: prevent warnings
Thanks to Menno Valkema for the patch.
2016-05-09 13:10:51 +02:00
Norman Feske
511acad507 Consolidate RM service into PD session
This patch integrates three region maps into each PD session to
reduce the session overhead and to simplify the PD creation procedure.
Please refer to the issue cited below for an elaborative discussion.

Note the API change:

With this patch, the semantics of core's RM service have changed. Now,
the service is merely a tool for creating and destroying managed
dataspaces, which are rarely needed. Regular components no longer need a
RM session. For this reason, the corresponding argument for the
'Process' and 'Child' constructors has been removed.

The former interface of the 'Rm_session' is not named 'Region_map'. As a
minor refinement, the 'Fault_type' enum values are now part of the
'Region_map::State' struct.

Issue #1938
2016-05-09 13:10:51 +02:00
Norman Feske
e20bbe7002 base: remove integer return codes from PD-session
The return code of assign_parent remained unused. So this patch
removes it.

The bind_thread function fails only due to platform-specific limitations
such as the exhaustion of ID name spaces, which cannot be sensibly
handled by the PD-session client. If occurred, such conditions used to
be reflected by integer return codes that were used for diagnostic
messages only. The patch removes the return codes and leaves the
diagnostic output to core.

Fixes #1842
2016-05-09 13:09:56 +02:00
Emery Hemingway
93b82c14ac libc: read sysctl info from /.sysctl/...
Fixes #1931
2016-05-09 13:09:56 +02:00
Martin Stein
19b3824bfb libav: update to version 11.6
Enables also the use of the avresample library.

Fixes #1910
2016-05-09 13:09:55 +02:00
Martin Stein
7c1235ff34 avplay.run: Remove mixer server
The mixer is not directly necessary for the avplay demo. But it implies
additional maintenance work. E.g., in the current state, it complains about
the missing Report server and mutes audio output by default.

Ref #1910
2016-05-09 13:09:55 +02:00
Alexander Boettcher
1fc707d9dc nova: fix copy-paste bug in oom code
Fixes #1944
2016-05-09 13:09:54 +02:00
Josef Söntgen
3195311b53 usb_drv: fix nullptr access in EP stop cmd
Issue #1945.
2016-05-09 13:09:54 +02:00
Josef Söntgen
2dfbfd7173 qemu-usb: handle STALL_ERROR
Issue #1945.
2016-05-09 13:09:54 +02:00
Josef Söntgen
133c46a784 usb_drv: handle EP stall in Usb_session
Fixes #1945.
2016-05-09 13:09:54 +02:00
Alexander Boettcher
463b39fc73 xml reporter: support different start node name
Currently the report name is used implicitly as first xml node name for the
report.  This is inconvenient if one component wants to generate various xml
reports under various names (e.g. to steer consumers/clients slightly
differently) but with the same xml node tree structure.

Fixes #1940
2016-05-09 13:09:54 +02:00
Martin Stein
ab9fe9cc6c tz_vmm usb_armory: update binary URIs
The binaries were moved to the genode.org webserver as free bandwidth of the
previous Github LFS was depleted.

Fixes #1902
2016-04-25 11:12:38 +02:00
Roman Iten
1ba1980727 libc, vfs: extend rename testing
Issue #1900
2016-04-25 11:02:03 +02:00
Emery Hemingway
ccd50cc9f5 Vfs::Dir_file_system: adjust rename error priority
CROSS_FS error must not propagate before NO_PERM.
New order is OK, NO_PERM, CROSS_FS, NO_ENTRY.

Fixes #1900
2016-04-25 11:02:02 +02:00
Christian Helmuth
da0c467518 Deallocation in slab backend of ported drivers 2016-04-25 10:48:03 +02:00
Adrian-Ken Rueegsegger
cd420b05ec hw_x86_64_muen: Use Bitset template for MSI address handle
Use Bitset_2 to represent MSI address handle which renders the
Msi_handle type unnecessary.
2016-04-25 10:48:03 +02:00
Adrian-Ken Rueegsegger
f5f8011d02 dde_bsd: Switch mirror of dde_bsd.port
The previous mirror has removed OpenBSD version 5.7.
2016-04-25 10:48:03 +02:00
Christian Helmuth
9cd26c4d61 Prevent compiler warnings 2016-04-25 10:48:02 +02:00
Christian Helmuth
dd90cb3bfe trace_fs: prevent compilter warning 2016-04-25 10:48:02 +02:00
Christian Helmuth
ff4033c6b0 noux: prevent compiler warning 2016-04-25 10:48:02 +02:00
Martin Stein
cba6f5f298 base: no exit handler for libc stdout log console
We don't want Genode environment objects that register their destructor
for program exit as it is mostly unnecessary and easily produces
dangling pointers. Thus, use unmanaged_singleton instead of the static
keyword.

Fixes #1941
2016-04-25 10:48:02 +02:00
Christian Helmuth
bf5df7d88d libc: qualify Plugin_context as base class
...by defining a virtual destructor.
2016-04-25 10:48:02 +02:00
Christian Helmuth
43cf789371 vfs: report zero-length read from server 2016-04-25 10:48:02 +02:00
Christian Helmuth
642ce6ca77 lxip: correct return type in send/recv socketcall
Now, error cases are reported correctly and not as gigantic ssize_t
values on 64-bit.
2016-04-25 10:48:01 +02:00
Christian Helmuth
579f4d4991 vfs: count of written bytes in Fs_file_system 2016-04-25 10:48:01 +02:00
Christian Helmuth
7a64e0bb80 ldso: dump link map of loaded shared objects
Also log the link-map information of shared objects loaded after startup
if 'ld_verbose' is configured.
2016-04-25 10:48:01 +02:00
Martin Stein
4ef2b0ed2e hw arm: avoid shared cache lines during MP init
When bringing up the kernel on multiple cores, there is a time span
where some cores already have caches enabled and some don't. Core-local
storage that may be used during this time must be aligned at least to
the maximum line size among global caches. Otherwise, a cached core may
unintentionally prefetch data of a yet uncached core into a global
cache. This may corrupt the view of the uncached core as soon as it
enables caches. However, to determine the exact alignment for every
single ARM platform isn't sensible. Instead, we can align to the minimum
page size assuming that a cache never wants to prefetch from multiple
pages at once and thus fulfills "line size <= page size".

Fixes #1937
2016-04-25 10:48:01 +02:00
Martin Stein
9508f397a2 ldso: use get_page_size_log2 instead of "12"
Ref #1941
2016-04-25 10:48:01 +02:00
Martin Stein
d5d891a227 libports: raise stack size of libc apps
Triggered by cc1plus in noux_tool_chain_auto on hw_arndale that caused
an overflow on its 64K stack.

Ref #1941
2016-04-25 10:48:01 +02:00
Martin Stein
a96130f20b base: get rid of alloc align default value
When using the Allocator interface, one can't tell which alignment
resulting allocations fulfill. However, at least on ARM, given the
architectural alignment requirements of ARM memory accesses, one wants
memory allocations (what allocators are for in most cases) to be word
aligned automatically. Previously, at least the AVL allocator simply
called alloc_aligned without defining align in its alloc implementation.
This led to unaligned access faults (the default was 0) when using the
AVL allocator as Allocator (as done in the metadata management of a SLAB
of an AVL that uses the AVL as backing store). To avoid such pitfalls
in the future, we force users of alloc_aligned to always specify align
(why use alloc_aligned without align anyway).

Ref #1941
2016-04-25 10:48:01 +02:00
Christian Prochaska
cdf57b60f9 noux: keep cap of last pager 2016-04-25 10:48:00 +02:00
Norman Feske
df272c90ec noux: keep caps of secondary threads 2016-04-25 10:48:00 +02:00
Martin Stein
e6061a794f hw: word-width sensitive kernel-stack size
Ref #1937
2016-04-25 10:48:00 +02:00
Johannes Schlatow
5b12034531 hw_zynq: refactor specs
This is a generalisation approach of the hw_zynq target. As the boards
typically use UART1 instead of UART0 (used by qemu), we have to
distinguish between those. Moreover, in general hw_zynq does not imply
zynq_qemu anymore, so that the support of particular boards can be
placed in third-party or community repositories (e.g. Genode world).

Fixes #1926
2016-04-25 10:48:00 +02:00
Norman Feske
05e09a6116 Improve warning message 2016-04-25 10:48:00 +02:00
Johannes Schlatow
0709340788 Component writing a ROM into a file-system session
Fixes #1917
2016-04-25 10:47:59 +02:00
Norman Feske
f186587cab Unify ipc_msgbuf.h across base platforms
Besides unifying the Msgbuf_base classes across all platforms, this
patch merges the Ipc_marshaller functionality into Msgbuf_base, which
leads to several further simplifications. For example, this patch
eventually moves the Native_connection_state and removes all state
from the former Ipc_server to the actual server loop, which not only
makes the flow of control and information much more obvious, but is
also more flexible. I.e., on NOVA, we don't even have the notion of
reply-and-wait. Now, we are no longer forced to pretend otherwise.

Issue #1832
2016-04-25 10:47:59 +02:00
Norman Feske
0c299c5e08 base: separate native CPU from CPU session
This patch unifies the CPU session interface across all platforms. The
former differences are moved to respective "native-CPU" interfaces.

NOVA is not covered by the patch and still relies on a custom version of
the core-internal 'cpu_session_component.h'. However, this will soon be
removed once the ongoing rework of pause/single-step on NOVA is
completed.

Fixes #1922
2016-04-25 10:47:57 +02:00
Norman Feske
e9dec93f4b base: optimized slab allocator
This patch changes the organization of the slab blocks within the slab
allocator. Originally, blocks were kept in a list sorted by the number
of free entries. However, it turned out that the maintenance of this
invariant involves a lot of overhead in the presence of a large number
of blocks. The new implementation manages blocks within a ring in no
particular order and maintains a pointer to the block where the next
allocation is attempted. This alleviates the need for sorting blocks
when allocating and deallocating.

Fixes #1908
2016-04-25 10:47:56 +02:00
Norman Feske
fbc35cb796 base: hide slab implementation details from API
Issue #1908
2016-04-25 10:47:56 +02:00
Norman Feske
db5969e6cc Stress test for the slab allocator
Issue #1908
2016-04-25 10:47:55 +02:00
Norman Feske
7cf40a0971 allocator_avl: hand back meta data when destructed
This patch ensures that the 'Allocator_avl' releases all memory obtained
from the meta-data allocator at destruction time. If allocations are
still dangling, it produces a warning, hinting at possible memory leaks.
Finally, it properly reverts all 'add_range' operations.
2016-04-25 10:47:55 +02:00
Norman Feske
ed37c2ecff core: use copy of region metadata in detach
This patch fixes a use-after-free problem raised by the recent ability of
the slab allocator to dynamically release empty slab blocks. The
Rm_session_component::detach function used to rely on the assumption
that the region metadata co-located with the allocator metadata of the
'_map' would stay intact even after a 'free' if the region.
2016-04-25 10:47:55 +02:00
Norman Feske
329ab80d1d libc: never destruct the file-descriptor allocator
This patch prevents the destruction of the fd allocator when the program
exists. Otherwise, the meta data for file descriptors that were not
manually closed would vanish, which may cause problems in subsequent
destructors.
2016-04-25 10:47:55 +02:00
Norman Feske
8971bb25ce heap: release ds pool meta data when destructed
This patch makes sure that the dataspace pool is flushed before
destructing the heap-local allocator-avl instance. With the original
destruction order, the allocator would still contain dangling
allocations on the account of the dataspace pool when destructed. In
practice, this caused no problem because the underlying backing store is
eventually freed on the destruction of the pool. But it triggers a
runtime warning of the allocator since it has become more strict with
regard to dangling allocations.
2016-04-25 10:47:55 +02:00
Norman Feske
357dbdd64b sel4: allocate vm-space meta data statically
This patch removes the dynamically growing slab allocator from the
page-table registry. This has two benefits. First, we alleviate the
corner cases where the slab allocator needed to extend its backing store
while establishing a core-local memory mapping, thereby triggering a
nested core-local mapping. Without this corner case, no reentrant lock
is needed any longer. Second, it removes the dependency from the overly
large old API of the slab allocator. So we can tighten the slab
interface.
2016-04-25 10:47:54 +02:00
Emery Hemingway
1d301e9c14 lib/vfs: consistent device and inode enumeration
Issue #1751
2016-04-25 10:47:54 +02:00
Emery Hemingway
b8e52189d5 lib/vfs: new permissions errors
New errors STAT_ERR_NO_PERM, DIRENT_ERR_NO_PERM, and READLINK_NO_PERM to
distinguish lookup errors from permissions or other errors.

Issue #1751
2016-04-25 10:47:54 +02:00
Emery Hemingway
14ca140135 lib/vfs: fix disappearing <dir><dir/></dir>
Issue #1751
2016-04-25 10:47:53 +02:00
Emery Hemingway
4a58154e07 server/vfs: refactor for client isolation
VFS handles are allocated from per-session heaps.

Fixes #1751
2016-04-25 10:47:53 +02:00
Emery Hemingway
d1dc5a9071 utility to retrieve aligned sizes from arg strings
Issue #1751
2016-04-25 10:47:52 +02:00
Emery Hemingway
e22cd98a4f File_system::Connection: session upgrading
Upgrade the File_system session RAM quota when an Out_of_metadata
exception is caught.

Issue #1751
Issue #1909
2016-04-25 10:47:52 +02:00
Emery Hemingway
cb952d2087 obscure File_system::Out_of_node_handles exception
Replace the Out_of_node_handles exception with Out_of_metadata.
Clients need to know when the server is out of internal resources,
but not why.

Cleanup and sort the errors at file_system_session.h.
Remove 'Size_limit_reached exception' from File_system, which was
internal to ram_fs.

Issue #1751
Fixes #1909
2016-04-25 10:47:52 +02:00
Emery Hemingway
58632ab8b5 lib/vfs: improve memory safety at ram file system
Reference count files to prevent dangling handles.
Catch out-of-memory conditions and throw NO_SPACE.

Issue #1751
2016-04-11 12:56:54 +02:00
Emery Hemingway
82a7799638 lib/vfs: pass handle allocator to open(...)
Opening a VFS handle previously involved allocating from the global heap
at each VFS file system. By amending open with an allocator argument,
dynamic allocation can be partitioned.

A new close method is used to deallocate open handles.

Issue #1751
Issue #1891
2016-04-11 12:56:54 +02:00
Christian Helmuth
98b9a24357 builddir: genode world in optional repositories 2016-04-11 12:25:56 +02:00
Timo Wischer
3e1fa54c61 sd_card: generalise RPi sd card driver
This enables to reuse the driver for zynq (and other platforms) in the
future.

Fixes #1925
2016-04-11 12:12:23 +02:00
Timo Wischer
036f3b5702 sd_card: add card version information to interface
Issue #1925
2016-04-11 12:06:08 +02:00
Johannes Schlatow
338cfe5a94 sd_card: return capacity in 512kByte blocks
The returned capacity had different semantics dependent on the card
type. For HIGH_CAPACITY cards, the memory capacity is specified in 512kB
blocks. So we should also return 512kB blocks for STANDARD_CAPACITY
cards.

Issue #1925
2016-04-11 12:04:34 +02:00
Johannes Schlatow
063a603948 zynq: fix NIC phy detection
Fixes #1924
2016-04-11 12:01:31 +02:00
Johannes Schlatow
44fe44e8b6 init: invalidate child-provided service on kill
When init destroys a child server with an open session, the client must
be updated as it will otherwise store a pointer to a no-more existing
service object which will be dereferenced when the child client is
destroyed.

Fixes #1912
2016-04-11 11:58:15 +02:00
Emery Hemingway
b07be42e9f noux: fix leak in pipe ring buffer
Fixes #1923
2016-04-11 11:55:01 +02:00
Christian Helmuth
14f1ac497e linux: improve exception-signal handling
First, we use an alternate stack for signal handling now. The stack is
shared among all threads of the component, which is okay as we only
handle exceptions with log output and pass on to the default handler
(that terminates the execution). The primary motivation for the
alternate stack is the detection of SIGSEGV due to stack overflows.

Also, hybrid components now handle exception signals by logging and the
support for multi-threaded applications was improved.

Fixes #1935
2016-04-11 11:53:00 +02:00
Norman Feske
051e84c4b4 Move server API concept to base framework
This commit introduces the new `Component` interface in the form of the
headers base/component.h and base/entrypoint.h. The os/server.h API
has become merely a compatibilty wrapper and will eventually be removed.
The same holds true for os/signal_rpc_dispatcher.h. The mechanism has
moved to base/signal.h and is now called 'Signal_handler'.

Since the patch shuffles headers around, please do a 'make clean' in the
build directory.

Issue #1832
2016-04-11 11:51:46 +02:00
Alexander Boettcher
4ac7127f89 nova: avoid memory leak in kernel 2016-04-11 11:51:45 +02:00
Christian Prochaska
b6afee344f Noux: upgrade RAM quota in Rm_session_component::add_client()
Fixes #1933
2016-04-11 11:51:44 +02:00
Christian Prochaska
17401d6a63 Noux: increase tool_chain_auto run script timeout for Fiasco.OC
Fixes #1932
2016-04-11 11:51:44 +02:00
Christian Prochaska
a0d08d4bd1 Noux: workaround for libtool problem
Add the prefix '-Wl,' to static library names to keep them before shared
library names after libtool's command line reorderings.

Fixes #1928
2016-04-11 11:51:44 +02:00
Alexander Boettcher
f153bc9a74 platform_drv: use server framework for device_pd
Fixes #1927
2016-04-11 11:51:44 +02:00
Christian Helmuth
0cacd41823 base: forward arguments in unmanaged_singleton
This enables the use of reference types for constructor arguments.
2016-04-11 11:51:44 +02:00
Christian Helmuth
02f84f98c3 Explicitly set Qemu disk-image format to raw
Prevents the annoying warning about

  WARNING: Image format was not specified for 'bin/test.img' and probing guessed raw.
           Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
           Specify the 'raw' format explicitly to remove the restrictions.
2016-04-11 11:51:44 +02:00
Christian Helmuth
1f719dee26 Prevent warnings about unconstructed attached ROMs
If attached ROM dataspaces are not valid after update(), code that uses
these ROMs produces

  void Genode::Volatile_object< <template-parameter-1-1> >::_check_constructed() const [with MT = Genode::Attached_dataspace]: Deref_unconstructed_object
2016-04-11 11:51:43 +02:00
Christian Prochaska
146c694513 Reduce the maximum LOG session string length
The maximum possible string length is defined by the platform with the
lowest maximum IPC payload size (currently OKL4).

Fixes #1919
2016-04-11 11:51:43 +02:00
Norman Feske
a1239c5e9d News item about the RISC-V article 2016-04-11 11:51:43 +02:00
Johannes Schlatow
febb0cc13d config: deal gracefully with invalid dataspace cap
In scenarios where the config ROM is loaded from a report ROM or any
other non-static ROM, config might try to access an invalid dataspace
capability. This patch prevents the component from aborting in this
case.

Fixes #1914
2016-04-11 11:51:43 +02:00
Johannes Schlatow
07e10a04f9 tcp_terminal: disconnect socket on empty read
The tcp_terminal kept the socket open even though the client
disconnected. As a result, reconnecting to the tcp_terminal was not
working.

Fixes #1913
2016-04-11 11:51:43 +02:00
Johannes Schlatow
d32b5a54b6 base: remove duplicates from dependency list
This patch prevents duplicates in the DEPS argument to be passed to the build
stage.

Fixes #1916
2016-04-11 11:51:43 +02:00
Norman Feske
cda07b7da0 base: simplification of the IPC code
This commit replaces the stateful 'Ipc_client' type with the plain
function 'ipc_call' that takes all the needed state as arguments.
The stateful 'Ipc_server' class is retained but it moved from the public
API to the internal ipc_server.h header. The kernel-specific
implementations were cleaned up and simplified. E.g., the 'wait'
function does no longer exist. The badge and exception code are no
longer carried in the message buffers but are handled in kernel-specific
ways.

Issue #610
Issue #1832
2016-04-11 11:51:42 +02:00
Norman Feske
47878bd3e1 Remove 'Ipc_istream' and 'Ipc_ostream' from API
Fixes #610
2016-04-11 11:51:42 +02:00
Norman Feske
4cdfb9bc2f base: remove 'Native_connection_state' from API
Issue #1832
2016-04-11 11:51:42 +02:00
Norman Feske
da5d182ad3 base: remove 'Native_thread' from public API
Issue #1832
2016-04-11 11:51:42 +02:00
Norman Feske
dc0ebba1ec base-hw: clean up native_types.h 2016-03-18 22:43:05 +01:00
Norman Feske
84bfb4c04c base: remove 'Native_thread_id' type
Issue #1832
2016-03-18 22:43:01 +01:00
Emery Hemingway
da16ecc002 libc: remove trailing slash during file operations
POSIX stipulates that a trailing '/' on a path is valid for any
operation where the final path element is a directory.

Fixes #1330
2016-03-17 17:15:32 +01:00
Norman Feske
bc058e698a Add rust.run and xml_node.run to autopilot
Issue #1899
Issue #1424
2016-03-17 17:02:04 +01:00
Stefan Kalkowski
5085ad36c3 tool: remove deprecated 'make prepare' mechanism
Fix #1897
2016-03-17 17:02:04 +01:00
Norman Feske
eb4c6c0456 build.mk: suggest verbatim prepare_port command
If ports need preparation in order to execute a run script, use the
knowledge about the actual genode directory to suggest a command to the
user that can be directly copied to the command line.
2016-03-17 17:02:04 +01:00
Christian Helmuth
c53bbfa83c noux: remove unused binary from fork test 2016-03-17 17:02:04 +01:00
Norman Feske
9b0eb720b0 base: remove 'Native_utcb' from public API
Fixes #1905
2016-03-17 17:02:04 +01:00
Waylon Cude
28117fee12 Added rust support
Rust relies on atomic builtins, which are not implemented in libgcc for
ARM. One is implemented in rust, which is sufficient to get the
current rust test to run.

Issue #1899
2016-03-17 17:02:04 +01:00
Tomasz Gajewski
611a73be36 Fixed inconsistency in XML parser
Changed Xml_node::next() to treat text between nodes in the same
manner like Xml_node::_init_end_tag which counts number of subnodes.

Issue #1424
2016-03-15 11:57:52 +01:00
Tomasz Gajewski
4a0b63431f Extended test for XML node
Added function to print tokens.
Added test for text mixed with nodes.

Issue #1424
2016-03-10 17:08:53 +01:00
Norman Feske
cf6f3f46f8 Test for the XML parser
Issue #1424
2016-03-10 17:08:52 +01:00
Norman Feske
9a3185f8ed base-linux: remove chroot support
Fixes #1903
2016-03-08 17:00:54 +01:00
Norman Feske
76db3b9c06 base: retire 'Native_config'
This commit moves the parameters of the stack area to the base-internal
header 'stack_area.h'.

Issue #1832
2016-03-08 17:00:54 +01:00
Josef Söntgen
2490e399dc ldso: check binary pointer before lookup
Check if the binary pointer is valid before attempting to lookup the
symbol. Shared objects with unresolved symbols and missing depencies,
e.g a library that references 'errno' but is not linked against libc,
will now produce an error message when they are loaded by the dynamic
linker.

Fixes #1904.
2016-03-08 17:07:36 +01:00
Emery Hemingway
f46a504bb6 use Arg_string::set_arg_string to set session labels
Issue #1861
2016-03-07 16:10:32 +01:00
Emery Hemingway
110d71c2a8 input_merger: set source label with set_arg_string
Fixes #1861
2016-03-07 16:10:32 +01:00
Emery Hemingway
723d9e7784 util/arg_string.h: set_arg_string
Convenience function to set x="y" style arguments.

Issue #1861
2016-03-07 16:10:32 +01:00
Emery Hemingway
23c1d4c66d libc, vfs: rename improvements
Perform POSIX rename checks at the libc VFS plugin.
Clarify rename at VFS fs, ram, single, and tar file systems.

Issue #1900
Fixes #1782
2016-03-07 12:40:04 +01:00
Emery Hemingway
d0735b1734 Move SQLite to genode-world
Fixes #1874
2016-03-07 12:38:30 +01:00
Christian Helmuth
688e86ab68 core: increase initial quota to 224K 2016-03-07 12:34:47 +01:00
Norman Feske
7f73e5e879 base: hide internals of the Thread API
This patch moves details about the stack allocation and organization
the base-internal headers. Thereby, I replaced the notion of "thread
contexts" by "stacks" as this term is much more intuitive. The fact that
we place thread-specific information at the bottom of the stack is not
worth introducing new terminology.

Issue #1832
2016-03-07 12:34:46 +01:00
Norman Feske
3c686fc9c6 libports: fix warning in x86emu 2016-03-07 12:34:46 +01:00
Norman Feske
8132a16137 base-linux: make linux-specific headers private
The interfaces linux_cpu_session, local_capability, linux_dataspace,
linux_native_pd are mere implementation necessities. They are meant for the
internal use by the framework only. So it is appropriate to move them to
base/internal/.

Issue #1832
2016-03-07 12:34:46 +01:00
Norman Feske
6773d631b9 fiasco: remove thread_helper.h from public API
Issue #1832
2016-03-07 12:34:46 +01:00
Norman Feske
1a19ca5f7b base-fiasco/sel4: unified cancelable_lock.h
On seL4 and L4/Fiasco, we employ a simple yielding spinlock as lock
implementation. Consequently these base platforms used to have a
simplified header. However, since the regular cancelable_lock has all
the member variables needed to implement a spinlock, we can simply use
the generic header on those two platforms too, just leaving some other
parts of the generic header unused. So at API level, the difference is
not visible.

Issue #1832
2016-03-07 12:34:45 +01:00
Norman Feske
3473955212 base-linux/nova: unify include/rm_session/client.h
By moving the stub implementation to rm_session_client.cc, we can use
the generic base/include/rm_session/client.h for base-linux and
base-nova and merely use platform-specific implementations.

Issue #1832
2016-03-07 12:34:45 +01:00
Norman Feske
6e7f7bdad4 base: move crt0.h and elf.h to base/internal
Those headers remained unused outside the internal framework. So it is
better to remove them from the public API.

Issue #1832
2016-03-07 12:34:45 +01:00
Norman Feske
2e701f9afa base: update include guards
This patch cleans up the include guards, assisted by the
tool/fix_include_ifndef script.
2016-03-07 12:34:45 +01:00
Norman Feske
6de763cb0b base-okl4: remove unmaintained porting steps 2016-03-07 12:34:45 +01:00
Norman Feske
e6729316ff base: uniform base-internal header structure
This patch establishes a common organization of header files
internal to the base framework. The internal headers are located at
'<repository>/src/include/base/internal/'. This structure has been
choosen to make the nature of those headers immediately clear when
included:

  #include <base/internal/lock_helper.h>

Issue #1832
2016-03-07 12:34:45 +01:00
Norman Feske
be496c6dc1 base: remove kernel-specific base/sleep.h
With this patch, the platform differences reside solely in the
implementation of the base library.

Issue #1832
2016-03-07 12:34:44 +01:00
Norman Feske
62b1c55399 Integrate CAP session into PD session
This patch integrates the functionality of the former CAP session into
the PD session and unifies the approch of supplementing the generic PD
session with kernel-specific functionality. The latter is achieved by
the new 'Native_pd' interface. The kernel-specific interface can be
obtained via the Pd_session::native_pd accessor function. The
kernel-specific interfaces are named Nova_native_pd, Foc_native_pd, and
Linux_native_pd.

The latter change allowed for to deduplication of the
pd_session_component code among the various base platforms.

To retain API compatibility, we keep the 'Cap_session' and
'Cap_connection' around. But those classes have become mere wrappers
around the PD session interface.

Issue #1841
2016-03-07 12:34:44 +01:00
Norman Feske
b1910cdd54 Integrate SIGNAL session into PD session
This patch removes the SIGNAL service from core and moves its
functionality to the PD session. Furthermore, it unifies the PD service
implementation and terminology across the various base platforms.

Issue #1841
2016-03-07 12:34:44 +01:00
Norman Feske
705ac74498 CLI monitor: remove unused GDB command
This patch removes the support for executing subsystems of CLI monitor
within the GDB monitor. There are multiple reasons: First, the feature
remained unused for multiple years. Second, it relied on the base/elf.h
header to determine whether the started binary is dynamically or
statically linked. This header, however, is going to be removed from the
Genode API. Third, the feature will eventually break with the upcoming
changes of how components are bootstrapped. Finally, there is the plan
to turn CLI monitor into a sole front end of a dynamically configurable
init component. Once we pursue this plan, we'd need to reconsider the
GDB support anyway.

Issue #1832
2016-03-07 12:34:44 +01:00
Norman Feske
5d559a0699 Move util/volatile_object.h from os to base 2016-03-07 12:34:44 +01:00
Alexander Boettcher
079484c5d0 Use base-hw as x86 target for noux_tool_chain_auto
The commit avoids the need to have contrib sources of the kernel
available for this run script. We actually just want to build core and
not the kernel itself, which is always required after recent changes in
the ports tool.
2016-03-07 12:34:44 +01:00
Christian Helmuth
0d6dc46bbb sel4: use O3 optimization level
This is the default optimization level in the original seL4 SDK. By
adapting to O3, we work around a bug [1] in version 2.1.0 that only
shows on low optimization levels.

[1] https://github.com/seL4/seL4/issues/20
2016-03-07 12:34:43 +01:00
Christian Helmuth
958bf4d903 run: successful-boot detection string for sel4 2016-03-07 12:34:43 +01:00
Martin Stein
ff10687a6c toolchain: report missing ports at once
Previously, ports that were needed for a scenario and that were not
prepared or outdated, triggered one assertion each during the second
build stage. The commit slots a mechanism in ahead that gathers all
these ports during the first build stage and reports them in form of a
list before the second build stage is entered.  This list can be used
directly as argument for tool/ports/prepare_port to prepare respectively
update the ports. If, however, this mechanism is not available, for
example because a target is build without the first build stage, the old
assertion still prevents the target from running into troubles with a
missing port.

Fixes #1872
2016-03-07 12:34:43 +01:00
Martin Stein
992a5ec1ae prepare_port: prefix git clone output
To raise readability when preparing multiple ports in parallel we prefix
also the git clone output with the port name dark-yellow-coloured. To
achieve this we sed the git output. In sed \x1b[ resolves to an escape
sequence and \033[, that we use normally, doesn't. The echo command, at
the other hand, resolves both to an escape sequence. Thus we use the
sed-compatible version in general. This commit inhibits the progress
output of git clone as it can't be redirected to sed.

Ref #1872
2016-03-07 12:34:43 +01:00
Martin Stein
b039608e95 prepare_port: prepare multiple ports at once
The tool/prepare_port tool is now able to handle a list of ports that
shall be prepared. Additionally, one may state the number of ports that
shall be prepared in parallel at a max by using the -j parameter. If -j
is not set by the user, the tool acts as with -j1. The previous
implementation of the tool that prepares only a single port was moved to
tool/ports/mk/prepare_single_port.mk and acts as back end to the new
prepare_port tool. The interface of the new prepare_port tool is
backwards compatible. When called for one port only, the behavior is the
same as when calling tool/ports/mk/prepare_single_port.mk directly.

Removes "usage" rule from prepare_single_port.mk. Removes shebang line
from prepare_single_port.mk.

Ref #1872
2016-03-07 12:34:43 +01:00
Emery Hemingway
74342ca2fc lib/lwip: fix import description
The REP_DIR variable does not remain consistent when importing from
other repositories.

Fixes #1888
2016-03-07 12:34:43 +01:00
Igor Podkopaev
b9263a7f4e ahci: routing policies based on device serial/model
Fixes #1882
2016-03-07 12:34:43 +01:00
Christian Helmuth
c17069b35e ports: update hash of gcc (with risc-v patches) 2016-03-07 12:33:14 +01:00
Christian Prochaska
b4c49a4bf0 doc: minor fixes for the release notes 16.02 2016-03-07 12:33:14 +01:00
Norman Feske
37459d833b doc: fix git repo in release notes 16.02
Thanks to Menno Valkema for reporting.
2016-03-03 16:54:46 +01:00
Christian Helmuth
307e2eefa6 version: 16.02 2016-02-26 12:47:15 +01:00
Norman Feske
5a27a9f0a6 Release notes for version 16.02 2016-02-26 12:20:57 +01:00
Norman Feske
75b0880255 News item for Genode 16.02 2016-02-26 12:20:57 +01:00
Norman Feske
55506f432e window layouter: small documentation fix 2016-02-26 12:20:57 +01:00
Alexander Boettcher
b767391d34 doc: remove obsolete challenges 2016-02-26 12:19:25 +01:00
Alexander Boettcher
e5eb1000c7 nova: remove obsolete parts of documentation 2016-02-26 12:19:25 +01:00
Christian Helmuth
9b69c93736 doc: update README, components.txt 2016-02-26 12:19:25 +01:00
Christian Helmuth
66006a0313 libc: provide more net-specific header files 2016-02-26 11:36:55 +01:00
Adrian-Ken Rueegsegger
3a9e5cbd8c Relax tool checks of Muen port
The gnat and gprbuild tools are not necessarily in the PATH when
preparing the port since the effective location is specified by the
--image-muen-gnat-path RUN_OPT.
2016-02-26 11:36:55 +01:00
Martin Stein
5a0bae2ad7 doc: missing </dir> in release notes 14.05 2016-02-26 11:36:55 +01:00
Norman Feske
9e6f3be806 sel4: update to version 2.1
This patch updates seL4 from the experimental branch of one year ago to
the master branch of version 2.1. The transition has the following
implications.

In contrast to the experimental branch, the master branch has no way to
manually define the allocation of kernel objects within untyped memory
ranges. Instead, the kernel maintains a built-in allocation policy. This
policy rules out the deallocation of once-used parts of untyped memory.
The only way to reuse memory is to revoke the entire untyped memory
range. Consequently, we cannot share a large untyped memory range for
kernel objects of different protection domains. In order to reuse memory
at a reasonably fine granularity, we need to split the initial untyped
memory ranges into small chunks that can be individually revoked. Those
chunks are called "untyped pages". An untyped page is a 4 KiB untyped
memory region.

The bootstrapping of core has to employ a two-stage allocation approach
now. For creating the initial kernel objects for core, which remain
static during the entire lifetime of the system, kernel objects are
created directly out of the initial untyped memory regions as reported
by the kernel. The so-called "initial untyped pool" keeps track of the
consumption of those untyped memory ranges by mimicking the kernel's
internal allocation policy. Kernel objects created this way can be of
any size. For example the phys CNode, which is used to store page-frame
capabilities is 16 MiB in size. Also, core's CSpace uses a relatively
large CNode.

After the initial setup phase, all remaining untyped memory is turned
into untyped pages. From this point on, new created kernel objects
cannot exceed 4 KiB in size because one kernel object cannot span
multiple untyped memory regions. The capability selectors for untyped
pages are organized similarly to those of page-frame capabilities. There
is a new 2nd-level CNode (UNTYPED_CORE_CNODE) that is dimensioned
according to the maximum amount of physical memory (1M entries, each
entry representing 4 KiB). The CNode is organized such that an index
into the CNode directly corresponds to the physical frame number of the
underlying memory. This way, we can easily determine a untyped page
selector for any physical addresses, i.e., for revoking the kernel
objects allocated at a specific physical page. The downside is the need
for another 16 MiB chunk of meta data. Also, we need to keep in mind
that this approach won't scale to 64-bit systems. We will eventually
need to replace the PHYS_CORE_CNODE and UNTYPED_CORE_CNODE by CNode
hierarchies to model a sparsely populated CNode.

The size constrain of kernel objects has the immediate implication that
the VM CSpaces of protection domains must be organized via several
levels of CNodes. I.e., as the top-level CNode of core has a size of
2^12, the remaining 20 PD-specific CSpace address bits are organized as
a 2nd-level 2^4 padding CNode, a 3rd-level 2^8 CNode, and several
4th-level 2^8 leaf CNodes. The latter contain the actual selectors for
the page tables and page-table entries of the respective PD.

As another slight difference from the experimental branch, the master
branch requires the explicit assignment of page directories to an ASID
pool.

Besides the adjustment to the new seL4 version, the patch introduces a
dedicated type for capability selectors. Previously, we just used to
represent them as unsigned integer values, which became increasingly
confusing. The new type 'Cap_sel' is a PD-local capability selector. The
type 'Cnode_index' is an index into a CNode (which is not generally not
the entire CSpace of the PD).

Fixes #1887
2016-02-26 11:36:55 +01:00
Christian Prochaska
2df6cd64d4 vbox: implement 'drvNicAsyncIoWakeup()'
Fixes #1893
2016-02-26 11:36:54 +01:00
Reto Buerki
3c23ddb2d5 hw_x86_64_muen: Add support for MSI
Use the new Sinfo::get_dev_info function to retrieve device information
in the platform-specific get_msi_params function. If the requested
device supports MSI, set the IRQ and MSI address/data register values to
enable MSIs in remappable format (see VT-d specification, section
5.1.2.2).

Currently only one MSI per device is supported as the subhandle in the
data register is always set to 0.
2016-02-26 11:36:54 +01:00
Reto Buerki
d137f0f2bf hw_x86_64_muen: Extend sinfo API with device info
The new Sinfo::get_dev_info function can be used to retrieve information
for a PCI device with given source-id (SID). The function returns false
if no device information for the specified device exists.
2016-02-26 11:36:54 +01:00
Reto Buerki
3350c6bf53 hw: Introduce platform-specifc MSI function
The platform-specific get_msi_params function returns MSI parameters for
a device identified by PCI config space address. The function returns
false if either the platform or the device does not support MSI mode of
operation.
2016-02-26 11:36:54 +01:00
Reto Buerki
11ee72eaa6 hw: Add MSI variables to Irq_session_component
Extend the base-hw Irq_session_component class with _is_msi, _address
and _value variables required to support MSI mode of operation.

Return MSI configuration in info() function if _is_msi is set to true.
2016-02-26 11:36:54 +01:00
Reto Buerki
f1d2d7251d hw_x86_64_muen: Include static ACPI report ROM
Enable the ACPI functionality in the platform_drv on hw_x86_64_muen and
provide a simple generated XML report as ROM session in order to make
the PCI configuration space available.

This is a requirement to implement support for MSI on hw_x86_64_muen.
2016-02-26 11:36:53 +01:00
Tomasz Gajewski
74dd356dcd Add check for ACPI version during parsing tables, fix #1883 2016-02-26 11:36:53 +01:00
Reto Buerki
ed54bb2724 hw_x86_64_muen: Adjust _ram_regions function
The available RAM region starts at 25 MiB, not 2 MiB. Also, increase the
region size to 256 MiB.
2016-02-26 11:36:53 +01:00
Reto Buerki
ac478081c3 Update hw_x86_64_muen build.conf template 2016-02-26 11:36:53 +01:00
Reto Buerki
1abff01c66 Update hw_x86_64_muen doc for Muen release 0.7.0 2016-02-26 11:36:53 +01:00
Reto Buerki
aa8e5c5016 Update Muen port to release version 0.7.0 2016-02-26 11:36:53 +01:00
Reto Buerki
39378b9982 Unify naming of libc VFS RAM run script
The new name matches the one listed in tool/autopilot.list.
2016-02-26 11:36:53 +01:00
Josef Söntgen
47b5ba3a89 linux/audio: use Server framework
In addition to now using the framework the playback is triggered by a
timer. For now it is a periodic timer that triggers every 11 ms which
is roughly the current Audio:out period (*).

The driver now also behaves like the other BSD Audio_out driver, i.e,
it always advances the play pointer. That is vital for the Audio_out
stack above the driver to work properly (e.g. the mixer).

(*) It stands to reason if it would be better to use the async ALSA
    timer interface instead of using the Timer session.

Fixes #1892.
2016-02-26 11:36:52 +01:00
Sebastian Sumpf
a8c27b51b5 scout: add config library
For some reason 'os/config.h' is imported through 'launchpad.h', when linking an
undefined symbol ('Genode::config') is produced, which actually should not
happen.
2016-02-26 11:36:52 +01:00
Sebastian Sumpf
a66df55f4e timer: add dummy implementation for RISC-V 2016-02-26 11:36:52 +01:00
Sebastian Sumpf
e367c99864 cli_monitor: build for RISC-V 2016-02-26 11:36:52 +01:00
Sebastian Sumpf
11d242de85 rpc_name: don't build
It is an example and does segfault the riscv tool chain
2016-02-26 11:36:52 +01:00
Sebastian Sumpf
1ff7de62f6 muen: remove depenency to ports for make target all 2016-02-26 11:36:52 +01:00
Sebastian Sumpf
d17134baef ldso: Support for RISC-V
issue #1880
2016-02-26 11:36:51 +01:00
Mark Vels
1668983efa base-hw: RISC-V Rocket Core on Zynq
This commit adds rocket core on the Zynq FPGA support to base HW. It also takes
advantage of the new timer infrastructure introduced with the privileged 1.8 and
adds improved TLB flush support.

fixes #1880
2016-02-26 11:36:51 +01:00
Sebastian Sumpf
c246a0d194 base-hw: initial RISC-V support
using the spike instruction emulator

issue #1880
2016-02-26 11:36:51 +01:00
Sebastian Sumpf
ac70dfd9fe riscv: run tool support for spike
issue #1880
2016-02-26 11:36:51 +01:00
Sebastian Sumpf
8c6e3c6251 riscv: create_builddir support
issue #1880
2016-02-26 11:36:50 +01:00
Sebastian Sumpf
8cddd86a4c riscv: tool chain
issue #1880
2016-02-16 14:38:02 +01:00
Sebastian Sumpf
d424134073 cxx: Simplify C++ exception wrapper functions
The wrapper functions (e.g., 'Unwind_*' and friends) now have the same signature
as the original function in 'libgcc', reside in a separate C file which is
archived to cxx.lib.a. In supc++.o we prefix the wrapped functions with '_cxx_'.

This also enables support for riscv.

related to #1880
2016-02-16 14:38:02 +01:00
Sebastian Sumpf
bfe5208e0e base: Align heap/slab allocation to machine word size
required by riscv

related to #1880
2016-02-16 14:38:02 +01:00
Josef Söntgen
6d1d8afa57 usb_block_drv: USB mass storage bulk-only driver
This driver uses the Usb session interface and provides a Block session
to its client. See _repos/os/src/drivers/usb_block/README' for more
information.

Fixes #1885.
2016-02-16 14:03:38 +01:00
Josef Söntgen
35314c8397 linux/audio: set ALSA device in the configuration
Instead of only hardcoding "hw" read 'alsa_device' attribute from the
config node to determine the proper playback device. The default value
is still "hw" in case the attribute is not present.

Fixes #1884.
2016-02-15 18:56:40 +01:00
Sebastian Sumpf
6b1923bbe6 rump_fs: handle non-existing root directory 2016-02-12 09:17:23 +01:00
Norman Feske
3680a79f38 window layouter: omit superfluous resize request
This patch removes a superfluous resize request at the creation time of
a new window, which resulted from _requested_size being initialized with
zero whereas the _geometry was initialized with the actual window
geometry. In some cases, this inconsistency led to the report of a new
resize request for the size 0x0, which is obviously wrong. I.e., it
leads clients to believe that the user has closed the window.
2016-02-10 16:15:53 +01:00
Norman Feske
56d98824e3 window layouter: reset drag state when finalized
This patch resets the part of the window state that is responsible the
dragging of window controls once the drag operation is finalized.
Without it, the window was wrongly positioned when leaving the maximized
state after a previous resize operation.
2016-02-10 15:41:52 +01:00
Norman Feske
2936cbebfd loader,nit_fb,wm: work-around for NOVA's cap revokes 2016-02-09 16:56:50 +01:00
Norman Feske
d198f07890 window layouter: keyboard actions
This patch adds support for manipulating the window layout with keyboard
actions. It supports the toggling of fullscreen (aka maximize), the
raising of the currently focused window, and the focusing the next/previous
window.
2016-02-09 16:06:40 +01:00
Norman Feske
2a916b143d window layouter: key sequence handling
This patch adds the mechanics for detecting key sequences to the window
layouter. Sequences for layouter actions can be expressed in the
layouter configuration. They cannot trigger any real action yet.
2016-02-09 16:06:40 +01:00
Norman Feske
6f27f85c3d wm.run: enable decorator controls 2016-02-09 16:06:40 +01:00
Norman Feske
44e6870e4e window layouter: respond to decorator margins 2016-02-09 15:38:34 +01:00
Norman Feske
54045771c7 window decorator: report decorator margins 2016-02-09 15:28:47 +01:00
Norman Feske
31888c610a wm: propagate nitpicker mode changes to layouter 2016-02-09 14:30:28 +01:00
Norman Feske
752ddc153e window layouter: respond to nitpicker mode changes 2016-02-09 14:30:28 +01:00
Norman Feske
37044eaad8 window layouter: internal restructuring
This patch splits the implementation of the window layouter into several
headers to ease the upcoming addition of new functionality.
2016-02-09 14:30:28 +01:00
Norman Feske
ff8d790f93 themed_decorator: cope with missing pointer info 2016-02-09 14:29:01 +01:00
Norman Feske
c3b415ffe8 wm: omit superfluous window-list updates 2016-02-09 14:28:50 +01:00
Norman Feske
e34f211dc1 themed_decorator: allow skipping of decorations
This patch weakens the themed decorator's demands with respect to the
supplied theme data. It no longer strictly requires the specification of
the '<closer>', '<title>', and '<maximizer>' nodes and the accompanied
png/tff data. Furthermore, the default.png can be left out if both decor
and aura have a size of zero.
2016-02-09 14:28:43 +01:00
Norman Feske
27b71a0876 window layouter: label-dependent window policies
This patch enhances the layouter to apply a label-dependent policy
for the placement of new windows. The policy may contain the
attributes 'xpos', 'ypos', and 'maximized'. If the latter is set
to "yes", the matching window will appear in maximized state.
2016-02-09 14:28:40 +01:00
Norman Feske
101b868cd4 gems: prevent invalid Nitpicker_buffer objects
This patch ensures that we never request a zero-sized virtual
framebuffer from nitpicker even when instantiating the object with zero
width or height. It therebu removes the burden of handling the resulting
invalid framebuffer dataspace from the user of the Nitpicker_buffer
utility.
2016-02-09 14:28:30 +01:00
Christian Helmuth
f3cce99933 Adapt terminal_mux.run to changes in cli_monitor
Subsystems are now configured via .subsystem files in the VFS directory
/subsystems. The adaption uses one <inline> node per subsystem.
2016-02-09 08:01:40 +01:00
Sebastian Sumpf
191cfd2c53 usb_drv: Add Natural Ergonomic 4000 keyboard support
fixes  #1878
2016-02-05 17:06:26 +01:00
Josef Söntgen
c10ad4ff01 ps2_drv: back down after unsucessful AUX access
The driver might end up in an endless loop on systems that do not
contain an i8042 controller when probing the AUX interface. This
leads to busy looping and in the end to not annoucing the Input
service. Components that wait for the announcement of the service
will therefore hang as well.

Normally a service gets announced only if it is usable but in this
case this is inconvient because it renders all scenarios that use
the input_merger non working on x86 systems that only provide USB
input and do not have PS/2 at all.

Ideally, the PS/2 driver should only be started if the system needs it.
That is currently not feasible and for the time being we post-pone the
inevitable and back down after several unsucessful attempts to read
from the AUX interface while initializing the driver.

Fixes #1871.
2016-02-05 10:59:10 +01:00
Alexander Boettcher
f572cf8a05 nova: stop submitting signals on dead sm caps
Fixes #1877
2016-02-05 10:57:04 +01:00
Alexander Boettcher
73de12999d ahci: fix ready status handling of ahci ports
Fixes #1875
2016-02-05 10:52:48 +01:00
Alexander Boettcher
bc70d67ee7 run: check for mis-configured Intel ME/AMT SOL
and show hint about how to enable it.

Fixes #1876
2016-02-05 10:49:30 +01:00
Josef Söntgen
46e4c3dc9b usb_drv: release interfaces on Usb session close
Interfaces that have been claimed by a component always have to be
released when the session is closed in case the component
malfunctioned.

Fixes #1869.
2016-02-05 10:47:45 +01:00
Josef Söntgen
245dfc2c08 dde_ipxe: fix probing multiple NICs
Fixes #1870.
2016-02-05 10:47:45 +01:00
Christian Helmuth
81ff63c66b vfs stress: prevent warnings when logging size_t
Thanks @gapry for the observation.

Fixes #1868
2016-02-05 10:47:45 +01:00
Christian Helmuth
4506912f6e dde_ipxe: skip MAC/PHY reset on Intel NICs
Inspired by the mailing-list posting [1], this commit removes the
MAC/PHY reset for all Intel cards and effectively prevents the bandwidth
drop to 10 MBit/s (e.g., on i217lm). I understand it as preliminary fix
for practical reasons - a real fix would be to update the ipxe port and
monitor for more postings like the one mentioned.

[1] http://lists.ipxe.org/pipermail/ipxe-devel/2015-December/004511.html
2016-02-05 10:47:45 +01:00
Christian Helmuth
20c9b02326 Mark Server::Entrypoint noncopyable 2016-02-05 10:47:45 +01:00
Stefan Kalkowski
3bfd2aa3c9 nic_bridge: use the server framework (fix #1865)
Let the Server::Entrypoint do all the work: RPC and signal handling.
Additionally get rid of the Net::Env global environment.
2016-02-05 10:47:45 +01:00
Josef Söntgen
71b621775b vbox: remove USB (OHCI) pass-through support
The usage of the USBProxyDevice is no longer necessary because USB
pass-through is now supported by using the xHCI device model.

Issue #1863.
2016-02-05 10:47:44 +01:00
Josef Söntgen
a62859bb39 vbox: Enable XHCI + usb filter in runscript
Issue #1863.
2016-02-05 10:47:44 +01:00
Josef Söntgen
6a2aa903ca vbox: xHCI device model for USB pass-through
This device model enables USB2 and USB3 device passthrough support
for guests running in VirtualBox. It uses the qemu-usb library.

Fixes #1863.
2016-02-05 10:47:44 +01:00
Sebastian Sumpf
b2a1129bd9 vbox: support unaligned mmio writes
Issue #1863
2016-02-05 10:47:43 +01:00
Sebastian Sumpf
a640be9a24 qemu-usb: xHCI model as library
NEC USB3 controller ported from Qemu 2.4.1. See README for more
details.

Issue #1863.
2016-02-05 10:47:43 +01:00
Josef Söntgen
e233fe0b71 os: add component for filtering USB devices report
The 'usb_report_filter' component takes the devices report from the
USB driver and generates a new devices report after checking each
entry against its device white-list. Before emitting the new report
it changes the configuration of the USB driver to contain the
required policy entries.

See 'repos/os/src/app/usb_report_filter/README' for more details.

Issue #1863.
2016-01-27 16:15:34 +01:00
Sebastian Sumpf
716eab21e3 usb_drv: change Usb session and raw driver
- Use 'label' attribute to identify device instead of
  bus/dev and vendor_id/product_id

- Implement release_interface RPC

- Report 'label' as well as 'bus' and 'dev'

- Add policy handling to raw driver (includes reconfiguration
  at runtime)

- Use own memory backing store for large DMA allocations

Issue #1863.
2016-01-27 16:15:34 +01:00
Christian Helmuth
3daa8a3d04 report_rom: update documentation of policy config 2016-01-26 16:50:20 +01:00
Josef Söntgen
8982bc5843 intel_fb_drv: handle displays with EDID extensions
Fixes #1860.
2016-01-26 16:25:54 +01:00
Christian Helmuth
2a698ffd5f signal: prevent submission of contexts w/o receiver
This prevents a sporadic null-pointer dereference in the nic_loopback
test, which occurred once in 100 runs. I'm not sure if there's still a
race window (we may investigate) with context dissolve.
2016-01-26 16:20:47 +01:00
Stefan Kalkowski
b84a47b4db lxip: do not poll for nic session signals
Instead of polling for new Nic session signals, when waiting for
network packets with a timeout, block on the signal receiver, and
register a timer event beforehand using the same signal receiver.

Fix #1862
Ref #1864
2016-01-26 16:20:47 +01:00
Stefan Kalkowski
5fc9f68941 hw_x86_64: do not reference any muen specifics
Do not build core-muen_on library without the muen soecifier set.
Do not reference files of the muen contrib directory in the first
pass of make's rule analysis, when parding the muen specific kernel
makefile.

Fix #1859
2016-01-26 16:20:47 +01:00
Stefan Kalkowski
c3d4802ac8 hw: re-implement lazy FPU context switch
The new implementation of the FPU and FPU context is taken out to
separate architecture-dependent header files. The generic Cpu_lazy_state
is deleted. There is no hint about the existence of something like an
FPU in the generic non-architexture-dependent code anymore. Instead the
architecture-dependent CPU context of a thread is extended by an FPU
context where supported.

Moreover, the current FPU implementations are enhanced so that threads
that get deleted now release the FPU when still obtaining it.

Fix #1855
2016-01-26 16:20:38 +01:00
Martin Stein
f9ccfe3a04 tz_vmm usb_armory: document guest login data
The login data is otherwise only indirectly documented through the command that configures it in the rootfs tutorial [1].

[1] https://github.com/inversepath/usbarmory/wiki/Preparing-a-bootable-microSD-image#root-file-system

Fixes #1856
2016-01-26 16:20:38 +01:00
Alexander Boettcher
0423369f7f base: Unbound_thread exception in rm::add_client 2016-01-26 16:20:38 +01:00
Alexander Boettcher
7598f09295 nova: check for valid platform_pd pointer 2016-01-26 16:20:38 +01:00
Christian Helmuth
8e50464a1a linux: remove lx_environ symbol from audio_drv 2016-01-26 16:20:38 +01:00
Christian Helmuth
a09172aa7e linux: fix whitespace in nic_drv 2016-01-26 16:20:37 +01:00
Norman Feske
f045b1c680 ports: refined noux_fork test
Thanks to the log_terminal server, we no longer rely on a separate UART
for the noux output. We also skip the indirection of using a tar archive
but rather start the test-noux_form program as a mounted ROM module.
2016-01-26 16:20:37 +01:00
Norman Feske
fc6c2537ee vfs: add Rom_file_system::dataspace
By providing this function, we can start a mounted ROM module as program
under Noux.
2016-01-26 16:20:37 +01:00
Norman Feske
900c795df2 os: add Attached_rom_dataspace::cap accessor
The accessor works analogously to the Attached_dataspace.
2016-01-26 16:20:37 +01:00
Stefan Kalkowski
f539cf1231 hw: adjust core's signal thread's stack size
The stack size should be architecture dependent.

Fix #1854
2016-01-26 16:20:37 +01:00
Stefan Kalkowski
5afad64586 hw: preserve core's context-area (Fix #1853)
Remove core's context-area from its virtual memory allocator
2016-01-26 16:20:37 +01:00
Stefan Kalkowski
b0b4c3c7fa noux: consider stack alignment constraints
The interim stack in a forked noux process has to consider the architecture
dependent stack alignment constraints.

Fix #1852
2016-01-26 16:20:37 +01:00
Stefan Kalkowski
040cd95580 noux: fix context-area re-initialization in fork
With commit e74b53d5dd the fork semantic in noux
changed slightly, and broke platforms like hw & sel4, where the UTCB is mapped
directly into the thread's context area. The change moved the re-initialization
to a point where the new noux process' thread stack-pointer was already switched
back to the context area. But to re-initialize the context area RPC calls must
be done, and the UTCB must be used therefore. On the other side the UTCB is
found implicitly by the stack-pointer, whereby a stack-pointer located in the
context-area refers to a UTCB that is expected to reside in the context-area
as well. But the UTCB gets overlayed inside the context area by the
context-area's re-initialization - we've come round in a circle.

This commit rolls back the move of the re-initialization routine. To preserve
the intention of the original commit, the context-area location is stored in
a static variable, so that the Native_config API is not needed anymore.

Fix #1851
2016-01-26 16:20:36 +01:00
Stefan Kalkowski
e143683196 noux: remove dummy local ram service (Fix #1850) 2016-01-26 16:20:36 +01:00
Christian Helmuth
1616295179 x86emu: download from xorg.freedesktop.org
ftp.x.org has not been available for a week now.
2016-01-26 16:20:36 +01:00
Stefan Kalkowski
7aff1895bf hw: enable SMP for ARM Cortex A9
This commit enables multi-processing for all Cortex A9 SoCs we currently
support. Moreover, it thereby enables the L2 cache for i.MX6 that was not
enabled until now. However, the QEMU variants hw_pbxa9 and hw_zynq still
only use 1 core, because the busy cpu synchronization used when initializing
multiple Cortex A9 cores leads to horrible boot times on QEMU.

During this work the CPU initialization in general was reworked. From now
on lots of hardware specifics were put into the 'spec' specific files, some
generic hook functions and abstractions thereby were eliminated. This
results to more lean implementations for instance on non-SMP platforms,
or in the x86 case where cache maintainance is a non-issue.

Due to the fact that memory/cache coherency and SMP are closely coupled
on ARM Cortex A9 this commit combines so different aspects.

Fix #1312
Fix #1807
2016-01-26 16:20:18 +01:00
Martin Stein
2b2007bc3f hw: add Pl310::Debug register definitions
Ref #1312
2016-01-15 16:42:12 +01:00
Martin Stein
c58de0d80e hw_panda: driver for Cortex-A9 wakeup generator
Ref #1312
2016-01-15 16:42:12 +01:00
Martin Stein
5755245609 hw: end interrupts SMP-safe on ARM (Ref #1312) 2016-01-15 16:42:12 +01:00
Stefan Kalkowski
166672fe16 hw: l2 cache initialization is platform specific
On ARM Cortex A9 platforms the external PL310 L2 cache controller
needs to be initialized dependent on the SoC. For instance on Pandaboard
it needs to call the firmware running in TrustZone's secure world,
on i.MX6 it initializes it directly, on other boards it doesn't need
to be initialized at all, because the bootloader already did so.
Therefore, we should implement the PL310 intialization in board specific
code and not in the base class implementation.

Ref #1312
2016-01-15 16:42:12 +01:00
Stefan Kalkowski
e05d26567d hw: make 'smp' property an aspect (Ref #1312)
This commit separates certain SMP aspects into 'spec/smp' subdirectories.
Thereby it simplifies non-SMP implementations again, where no locking
and several platform specific maintainance operations are not needed.
Moreover, it moves several platform specifics to appropriated places,
removes dead code from x86, and starts to turn global static pointers
into references that are handed over.
2016-01-15 16:42:12 +01:00
Norman Feske
8899d9cb6d News item for road map 2016 2016-01-15 13:03:59 +01:00
Norman Feske
08550c6ed9 Road map 2016 2016-01-15 12:43:15 +01:00
Alexander Boettcher
c0a2388978 x86: avoid warning if memory is attached twice
Issue #1848
2016-01-13 14:59:05 +01:00
Alexander Boettcher
cec3ca6a70 x86: use slave label to differentiate device PDs
Issue #1848
2016-01-13 14:59:05 +01:00
Alexander Boettcher
82e35326b7 os: support different binary name for slaves
Issue #1848
2016-01-13 14:59:04 +01:00
Alexander Boettcher
daf67f7baa intel_fb: remove x201 workaround
The workaround is no longer needed as we now propagate the proper device
ID as BDF to the kernel in the platform driver.

Issue #1848
2016-01-13 14:58:01 +01:00
Alexander Boettcher
a258caa7ab nova: propagate bdf for assign_pci properly
Now, the right PCI bus:device:function (BDF) is reported to the kernel
during assign_pci syscall - beforehand it was ever 0:0.0. The BDF is
needed to lookup the correct DMAR unit the kernel has to configure. This
was revealed as the DMAR unit for Intel graphics on x201 is not the same
as for all other PCI devices we have drivers for on this platform.

Fixes #1848
2016-01-13 14:57:02 +01:00
Josef Söntgen
eb16ad3ad9 noux-pkg: port of tar-1.27
Issue #403
2016-01-13 14:49:11 +01:00
Emery Hemingway
9f9510ddb1 libc: implement fstatat by wrapping stat and lstat
Fixes #403
2016-01-13 14:49:11 +01:00
Emery Hemingway
3087b72438 os/path.h: new convenience functions
Infix operators == and !=.
Capacity accessor.

Issue #403
2016-01-13 14:49:11 +01:00
Martin Stein
b63941f456 hw imx53 tz_vmm: fix compiler warnings
There were warnings in tz_vmm/block.cc due to an unitialized variable.

Fixes #1849
2016-01-13 12:28:07 +01:00
Guido Witmond
2e0e767f93 Upgrade lighttpd to 1.4.38
Fixes #1839
2016-01-13 11:14:05 +01:00
Norman Feske
b314430118 News item for FOSDEM 2016 2016-01-13 11:14:04 +01:00
Adrian-Ken Rueegsegger
8ab0638be9 platform_drv: report MSI masking capability 2016-01-13 11:14:04 +01:00
Emery Hemingway
b9c234a341 Libc: sigprocmask reports all signals blocked
Fixes #1756
2016-01-13 11:13:52 +01:00
Emery Hemingway
7186c45de6 noux: getdtablesize support
Fixes #1847
2016-01-08 15:07:58 +01:00
Emery Hemingway
976833f171 libc: getdtablesize support
Issue #1847
2016-01-08 15:07:57 +01:00
Emery Hemingway
2d50552522 Remove Genode namespace from File_system
Fixes #1845
2016-01-08 14:48:52 +01:00
Josef Söntgen
9fb08e045a libports: fix delay in SDL audio backend
Instead of using the 'alloc()' method to allocate new packets use
the 'next()' method with the previous packet. This is needed because
the last audio stack changes broke the semantics assumed by 'alloc()'.

We now keep track of the already queued packets by hand.

Fixes #1827.
2016-01-08 14:48:17 +01:00
Emery Hemingway
56c637c1f6 VFS tar: always set dirent type
Assume tar nodes with missing records are directories.

Fixes #1843
2016-01-08 14:37:58 +01:00
Josef Söntgen
b4c5fb2d29 sdl: use Genode::destroy to free framebuffer
Fixes #1838.
2016-01-08 14:37:57 +01:00
Christian Helmuth
a98e9c1822 libc: fix test for libc_block 2016-01-08 14:37:57 +01:00
Norman Feske
948cb3ef0a os: minor whitespace fixes in nic_loopback 2016-01-08 14:37:57 +01:00
Alexander Boettcher
1d5aa4ca7e nova: avoid warnings because of oom handling
Use kernel branch which is more accurate in accounting memory, which avoids
kernel messages of following form:

[0] warning: insufficient resources ...

Fixes #1830
2016-01-08 14:37:57 +01:00
Adrian-Ken Rueegsegger
b1b3c7bf34 doc: Extend Muen tutorial to match new build process 2016-01-08 14:37:57 +01:00
Adrian-Ken Rueegsegger
316134caf8 run: Add iPXE support to hw 2016-01-08 14:37:57 +01:00
Adrian-Ken Rueegsegger
fcde1d668c hw_x86_64_muen: Extend build.conf with image/muen params
Enable automatic build of Muen system image by adding the image/muen run
script to RUN_OPT. Also specify --image-muen parameters with explanatory
comments.

Note: The ISO image is not built by default anymore.
2016-01-08 14:37:56 +01:00
Adrian-Ken Rueegsegger
bffddd7e15 tool: Extend hw boot_dir script to support Muen SK build 2016-01-08 14:37:56 +01:00
Adrian-Ken Rueegsegger
aefacc9310 run: Add image/muen script to support Muen SK build
The script takes the following RUN_OPT parameters:

--image-muen-external-build  Muen system is built automatically or externally
--image-muen-system          Muen system policy
--image-muen-components      Muen system components
--image-muen-hardware        Muen hardware platform
--image-muen-gnat-path       Path to GNAT toolchain
--image-muen-spark-path      Path to SPARK toolchain
2016-01-08 14:37:56 +01:00
Adrian-Ken Rueegsegger
cb68f9a320 hw: Add kernel/spec/muen/target.mk to build Muen SK
This adds the automated compilation of the Muen Separation Kernel and
the required components to the hw_x86_64_muen build process.
2016-01-08 14:37:56 +01:00
Adrian-Ken Rueegsegger
8d2f2b0101 hw: Add port for Muen Separation Kernel
For additional information about the Muen SK refer to the project page
at [1].

[1] - http://muen.codelabs.ch/
2016-01-08 14:37:56 +01:00
Adrian-Ken Rueegsegger
d3a4ed87d1 hw_x86_64_muen: Drop QEMU related RUN_OPTS
This platform does not support execution on QEMU.
2015-12-21 09:35:23 +01:00
Adrian-Ken Rueegsegger
a98b94f80e run: Pass AMT log password via environment variable
This avoids exposing the cleartext AMT password in the log output.
2015-12-21 09:35:23 +01:00
Adrian-Ken Rueegsegger
184bffbce3 run: Add filter support to AMT log
Add --log-amt-filter option which allows to sanitize the AMT log output by
piping it through a filter.
2015-12-21 09:35:23 +01:00
Christian Helmuth
acab2515e1 base-linux: remove get_pid debug helper
Fixes #1829
2015-12-21 09:22:40 +01:00
Alexander Boettcher
7ee3e98551 nova: update kernel to fix assertion
Some special pages (0-page, 1-page) in the kernel must not be freed up
during PD destruction.

Fixes #1828
2015-12-18 15:04:25 +01:00
Christian Helmuth
6699290766 Optional label in Nic::Connection constructor
Fixes #1826
2015-12-17 15:15:24 +01:00
Christian Helmuth
c43bd472ac packet_stream: peek_packet() should be const
This also fixes the wrong return type.

Fixes #1800
2015-12-17 11:12:53 +01:00
Martin Stein
6deb80f66d ahci_bench: fix condition for test end
Fixes #1824
2015-12-17 10:41:09 +01:00
Martin Stein
852b799cd4 blk-bench: don't write if not requested
Because a check for the TEST_WRITE configuration was missing as condition for a
packet submit, the test caused unwanted write access to the device.

Ref #1824
2015-12-17 10:39:47 +01:00
Martin Stein
96649c716d Remove obsolete block_bench test
This test is deprecated according to its author and test/blk/bench
shall be used instead.

Ref #1824
2015-12-17 10:39:06 +01:00
Christian Helmuth
14c8380507 xml_generator: support bool and integer types
The Xml_generator is extended by overloads for bool as well as signed
and unsigned int, long, and long long.

Fixes #1819
2015-12-17 10:38:19 +01:00
Christian Helmuth
98a4cb27b2 decorator_stress: explicitly generate long values
Explicitly cast floats to long as we currently do not plan to support
float in Xml_generator and previously the value was implicitly casted to
long anyway.

Issue #1819
2015-12-17 10:38:19 +01:00
Christian Helmuth
971b531d58 platform_drv: increase RAM config for -O0 builds (again) 2015-12-17 10:38:19 +01:00
Christian Helmuth
40b8da8755 rom filter: amend name of run script in README 2015-12-17 10:38:19 +01:00
Emery Hemingway
6e9fa10e65 server/report_rom: partial ROM label matching
Fixes #1801
2015-12-17 10:38:18 +01:00
Christian Prochaska
23ff3b1877 nitpicker: fix focus change permission checks
Fixes #1816
2015-12-17 10:38:18 +01:00
Christian Helmuth
dc17e16897 signal: cleanup allocations / reset globals in test
I conserve these cleanups to enable the looped execution of all test
functions as I did to hunt a bug. The loop can easily be added to
main().
2015-12-10 13:17:11 +01:00
Josef Söntgen
48738bbf63 libports: update libssh to 0.7.2
Fixes #1811.
2015-12-10 13:16:29 +01:00
Josef Söntgen
1073d6077b noux-pkg: update OpenSSH to 7.1p1
Fixes #1810.
2015-12-10 13:16:29 +01:00
Josef Söntgen
50b8094d0d noux: extent network errno handling
Add ECONNRESET, ECONNABORTED and EHOSTUNREACH.

Issue #1810.
2015-12-10 13:16:29 +01:00
Josef Söntgen
cebef2bda3 noux: make copy of input fds in SYSCALL_SELECT
Executing the system call will change the input fds as a side-effect
because the select_in.fds and select_out.fds structure are part of a
union. Since the original select_in.fds content is needed afterwards
make a copy instead of using a reference.

Fixes #1809.
2015-12-10 13:16:29 +01:00
Josef Söntgen
8ca4f7a794 noux-pkg: update lynx to 2.8.8rel.2
Fixes #1818.
2015-12-10 13:16:28 +01:00
Norman Feske
8845ca52c9 News item for USB-Armory article 2015-12-10 13:16:28 +01:00
Alexander Boettcher
a73c6470f6 nova: handle hip/mb memory region of size 0
Fixes #1814
2015-12-10 13:16:28 +01:00
Alexander Boettcher
d0db15031a run: provide missing timer route for vbox_pointer
Add missing timer route.

Fixes #1817
2015-12-10 13:16:28 +01:00
Alexander Boettcher
4e00e8ac68 run: enable vbox pointer for vbox_auto* scripts
Makes mouse shapes of Windows VM visible.

Issue #1817
2015-12-10 13:16:28 +01:00
Alexander Boettcher
1aa6a2a4a1 nova: fix kernel freezing
Fixes #1815
2015-12-10 13:16:28 +01:00
Christian Prochaska
89d3083c9f qt5: update the 'lib_mk_file_generator' README file
Fixes #1813
2015-12-10 13:16:27 +01:00
Stefan Kalkowski
2316937e58 hw: remove main thread's initial UTCB from vm area
The main thread's UTCB, used during bootstrap of the main thread before
it allocates its context area, needs to be outside the virtual memory
area controlled by the RM session, because it is needed before the main
thread can access its RM session.

Fix #1804
2015-12-10 13:16:27 +01:00
Christian Helmuth
610b733133 liquid_fb: generate periodic sync events
Issue #1762
2015-12-10 13:16:27 +01:00
Christian Helmuth
e387d2098d demo: adapt nested nitpicker config 2015-12-10 13:16:27 +01:00
Christian Helmuth
2b321b9ce8 nitpicker: improve diagnostic of policy configuration
This patch adds diagnostic messages during the label-policy application,
if no policy for the session label was found or if the domain configured
in the policy node does not exist.
2015-12-10 13:16:27 +01:00
Stefan Kalkowski
23f9761297 base: minimize critical section in Semaphore::up
When unblocking a thread in Semaphore::up() while holding the fifo meta-data
lock, it might happen that the lock holder gets destroyed by the one it was
unblocking. This happened for instance in the pthread test in the past, where
thread destruction was synchronized via a semaphore. There is no need to hold
the lock during the unblock operation, so we should do it outside the critical
section.

Fix #1333
2015-12-10 13:16:27 +01:00
Stefan Kalkowski
9efa3ceccf pthreads: use simple Genode::Semaphore as backend
Instead of using Timed_semaphore, we can directly use the simpler
Genode::Semaphore for pthread's 'sem_t' type.

Ref #1333
2015-12-10 13:16:27 +01:00
Martin Stein
492bd39619 epit timer: raise precision
Previously we used a pretty slow external clock source for the timer. This
resulted in such a low TICS_PER_MS value that the granularity wasn't
sufficient to find a setup with a precision better than 1 second error per
minute. Now we use the so-called High Frequency Reference Clock as input
with TICS_PER_MS=33333 and the timer precision is significantly < 1 second per
minute.

Fixes #1805
2015-12-10 13:16:26 +01:00
Martin Stein
01643ccd94 cpu_quota hw exynos5: raise error tolerance
From our observations we can tell that the error should not exceed 4%.
However, there is no reasonable explanation by now why the test results
are less stable on these platforms. We have tried several things that
did not lead to an explanation or improvement:

  * changing the timing parameters of the scheduler
  * switching off SMP
  * double-checking the speed of userland and kernel timers

Ref #1805
2015-12-10 13:16:26 +01:00
Martin Stein
227b539193 cpu_quota x86_64: fix RAM quota and stack size
The test threads previously used a stack size independent from the machine
word width. Qemu was previously configured to provide 64Mb of RAM which isn't
sufficient for x86_64.

Ref #1805
2015-12-10 13:16:26 +01:00
Martin Stein
a3a8978d77 cpu_quota zynq_qemu: raise error tolerance
On Qemu, the test results for Xilinx Zynq-7000 are less stable than usual.

Ref #1805
2015-12-10 13:16:26 +01:00
Martin Stein
02ef3d13a3 hw: explain misleading "Quota exceeded"
Upgrading the quota of a PD session on HW always triggers a "Quota
exceeded" warning. To prevent unecessary debugging effort in the future,
we explain in an in-code comment that the warning is normal.

Ref #1805
2015-12-10 13:16:26 +01:00
Martin Stein
6410bd7261 cpu_quota.run: more info and simpler calculations
Print result error and error tolerance per test result. Use TCL commands
'format' and 'abs'to simplify calculations in the conclusion part of the run
script.

Ref #1805
2015-12-10 13:16:26 +01:00
Sebastian Sumpf
64f39c9a42 usb_drv: Remove signal dispatching from storage
Do not call 'wait_and_dispatch_one_signal' in storage back end. This causes a
race of the EP with the main thread.
2015-12-10 13:16:26 +01:00
Stefan Kalkowski
60ba210a6b hw: reference count capabilities in UTCBs
When capabilities are delegated to components, they are added to the UTCB of the
target thread. Before the thread is able to take out the capability id out of
the UTCB and adapt the user-level capability reference counter, it might happen
that another thread of the same component deletes the same capability because
its user-level reference counter reached zero. If the kernel then destroys the
capability, before the same capability id is taken out of all UTCBs, an
inconsitent view in the component is the result.  To keep an consistent view in
the multi-threading scenario, the kernel now counts how often it puts a
capability into a UTCB. The threads on the other hand hint the kernel when they
took capabilities out of the UTCB, so the kernel can decrement the counter
again. Only when the counter is zero, capabilities can get destructed.

Fix #1623
2015-12-10 13:16:25 +01:00
Sebastian Sumpf
41b9f6bd03 ldso: Make truly self relocatable
On Linux the linker can now be loaded at arbitrary addresses, this became
necessary for newer kernel versions. The 'linux_arm' target is not supported.

Issue #1728
2015-12-10 13:16:25 +01:00
Christian Helmuth
e74b53d5dd libc_noux: remove use of private Native_config API 2015-12-10 13:16:24 +01:00
Christian Helmuth
30e129a91b pthread: remove use of private Native_config API
Former Native_config::context_area_virtual_base() was used to identify
the main, which is not desired as the Native_config is rather low-level
(almost private to the base libs). The commit uses a library constructor
to retrieve the main-thread Thread_base pointer, which can be used later
to distinguish main and other threads.
2015-12-10 13:16:24 +01:00
Stefan Kalkowski
ee4619687b hw: remove 1:1 I/O mappings from virtual memory
Likewise on the x86 branch, we have to remove all virtual memory ranges from the
virtual memory allocator that are used by one-by-one mappings of I/O regions
used by the kernel.

Fix #1797
2015-12-10 13:16:24 +01:00
Emery Hemingway
cffa4fddec util/xml_node.h: mark for_each_node const
Issue #1801
2015-12-10 13:16:24 +01:00
Christian Prochaska
9c31e18a4f vbox: handle EPT violation during event delivery
If the injection of an event causes an EPT violation, the event must be
injected again. This commit implements the reinjection for the case that
the EPT violation can be resolved without involving the recompiler.

Fixes #1798
2015-12-10 13:16:24 +01:00
Sebastian Sumpf
6a186f6ed0 packet_stream: implement peek_packet function
issue #1800
2015-12-01 15:12:11 +01:00
Norman Feske
f58cc1e83c News item for Genode 15.11 2015-11-30 14:51:12 +01:00
Norman Feske
17feccbbcf Release notes for version 15.11 2015-11-30 14:51:12 +01:00
Christian Helmuth
5c4be9f99b version: 15.11 2015-11-30 13:39:27 +01:00
Christian Helmuth
856851bb3c doc: update doc/components.txt 2015-11-30 11:37:50 +01:00
Alexander Boettcher
5b376188da nova: disable super pages for DMAR units 2015-11-29 18:17:09 +01:00
Emery Hemingway
d0ebdfba4b server/fs_log: merge labels using 'label_prefix'
Policies are no longer partially matched against 'label' attributes.
New test at run/fs_log.

Issue #1766
2015-11-29 18:17:09 +01:00
Josef Söntgen
627ecc44d2 Revert "os: reset Audio_out stream prior to calling start"
This reverts commit d8b95c263b.

Some clients might want to fiddle with the clients play position
(e.g. the mixer) within 'Audio_out::start()' and we might reset
it to an old value if we do it afterwards.

Fixes #1796.
2015-11-29 18:17:09 +01:00
Josef Söntgen
6d1e417250 os: reset one packet further in Audio_out stream
Since all Audio_out server components loop over the packet stream
queue it is save to reset the tail position to one after the play
position. We have to do this because we do not know exactly when
the play position changes (i.e. the driver has processed the packet)
and we might end up with a tail position before the current play
position.

Issue #1796.
2015-11-29 18:17:09 +01:00
Josef Söntgen
e3f301a540 dde_bsd: always advance play position
In addition to always sending the progress signal the driver
will also advance the play position, even if there is no valid
packet.

Issue #1796.
2015-11-29 18:17:09 +01:00
Josef Söntgen
72823eeddb mixer_gui_qt: write config instead of using report
* Also change the way how mute is handled. Only send the
  changed signal if the user has clicked on the mute checkbox

* Always check channels_rom is valid

* Add <default> handling

* Increase verbosity

Fixes #1795.
2015-11-29 18:17:08 +01:00
Josef Söntgen
08ae942d72 mixer: more relaxed config handling
Instead of bailing out if the channel list is incorrect check config
node attributes and default settings first.

Being there also fix flawed LOG messages.

Fixes #1794.
2015-11-29 18:17:08 +01:00
Alexander Boettcher
18130e3120 nova: limit user virtual address space on 64bit 2015-11-29 18:17:08 +01:00
Alexander Boettcher
f92a6a9594 nova: use kernel with DMAR quirk for Lenovo X250
Issue #1764
2015-11-29 18:17:08 +01:00
Alexander Boettcher
7857e830a3 nova: fix write-combing support
Issue #1764
2015-11-29 18:17:08 +01:00
Christian Helmuth
dd96cba415 part_blk: increase entrypoint stack size
The changed policy-matching utility uses session labels etc. on stack
which increases the size demand.
2015-11-29 18:17:08 +01:00
Martin Stein
df53187265 re-enable network tests on hw_zynq
We disabled them recently for all platform w/o a NIC driver. Now
hw_zynq has got a NIC driver.

Fixes #1667
2015-11-29 18:17:08 +01:00
Johannes Schlatow
50c809dfe5 os: remove deprecated os/run/network_test_nic*
The network_test_nic tests seem to be outdated. They don't work anymore for
several reasons.

Ref #1667
2015-11-29 18:17:08 +01:00
Johannes Schlatow
9203b83f24 nic: modify network_test to be executed with qemu
Ref #1667
2015-11-29 18:17:07 +01:00
Johannes Schlatow
2b1a70d66d nic: replace Nic driver interface in the zynq network driver
Ref #1667
2015-11-29 18:17:07 +01:00
Timo Wischer
9f4b77c5c2 nic: support Zynq-7000
Ref #1667
2015-11-29 18:17:07 +01:00
Sebastian Sumpf
020758a2f1 dde_linux: Move symbolic header-file links of Intel driver
Because Linux sometimes uses relative includes, the links are moved to the
'include/include/include' directory.

Ref #1764
2015-11-29 18:17:07 +01:00
Stefan Kalkowski
d65beb970d dde_linux: KMS-based Intel framebuffer driver (II)
* enable i915 driver from Linux 3.14.5
* tested for generation 5 till 8 GPUs

The driver can be configured at run-time via the config ROM. Every
connector of the graphic card can be configured separately using the
following syntax

  <config>
    <connector name="LVDS-11" width="1280" height="800" enabled="true"/>
  </config>

Also, when enabled within the intel framebuffer driver configuration like
the following

  <config buffered="yes"/>

a simple ram dataspace is propagated to the client and the driver
itselfs copies from that buffer to the framebuffer triggered via refresh
calls. This option is useful to alleviate tearing effects.

The  driver distributes all available connectors of the graphic card and
their supported resolutions via a report. It looks like follows

  <connectors>
    <connector name="LVDS-11" connected="1">
      <mode width="1280" height="800" hz="60"/>
      ...
    </connector>
    ...
  </connectors>

The driver distributes the report only if this is stated within its
configuration, like the following

  <config>
    <report connectors="yes"/>
  </config>

Fix #1764
2015-11-29 18:17:07 +01:00
Norman Feske
520c36d77f dde_linux: KMS-based Intel framebuffer driver (I)
Ref #1764
2015-11-29 18:17:06 +01:00
Christian Prochaska
1081af930d qt5: fix possible crash in QPA plugin
Fixes #1793
2015-11-29 18:17:06 +01:00
Christian Prochaska
2c558de891 vbox: 64-bit guest support
Fixes #1791
2015-11-29 18:17:06 +01:00
Christian Prochaska
6bf4fd3340 nova: 64-bit guest support
Issue #1791
2015-11-29 18:17:06 +01:00
Christian Helmuth
c04561f026 wifi: support run-time config of SSID/PSK in test
As known from netperf_l?ip_wifi.run the SSID and PSK can be configured
via environment variables GENODE_WIFI_SSID resp. GENODE_WIFI_PSK.
2015-11-29 18:17:06 +01:00
Emery Hemingway
20dc750d6a Update run scenarios for policy label matching
Issue #1766
2015-11-29 18:17:06 +01:00
Norman Feske
3f6ff39d76 os: improved label matching
This patch unifies the mechanism of selecting server-side policies and
taking session-routing decisions based on session labels. In both cases,
XML nodes are scored against session labels. The score depends on the
XML attributes 'label' (exact match), 'label_prefix', and
'label_suffix'.

Issue #1766
2015-11-29 18:17:05 +01:00
Christian Prochaska
b766387069 qt5: respond to zero-resized framebuffer
Interpret a zero-resized framebuffer as hint to close the window.

Fixes #1792
2015-11-29 18:17:05 +01:00
Emery Hemingway
ee25dcbae3 VFS: check path on the symlink node readlink
Fixes #1790
2015-11-29 18:17:05 +01:00
Emery Hemingway
44cfc414ee VFS server: throw Not_empty
Issue #1750
2015-11-29 18:17:05 +01:00
Emery Hemingway
1d92631ef0 VFS, File_system: Not_empty
Unlink returns an error for non-empty directories when the backend does
not support recursive unlinking.

Fixes #1750
2015-11-29 18:17:05 +01:00
Emery Hemingway
5bc3b53e63 adjust quota in libc vfs tests
Issue #1780
2015-11-29 18:17:05 +01:00
Emery Hemingway
6cb0f3bb71 VFS ram: remove quota
Fixes #1780
2015-11-29 18:17:05 +01:00
Christian Prochaska
25643fa00a init: fix uninitialized variables
Fixes #1753
2015-11-29 18:17:04 +01:00
Christian Helmuth
d46ad98434 clipboard: check validity of import rom before usage
The attached ROM dataspace may be not yet valid on the first update (or
at any time beyond this explicit test case).
2015-11-29 18:17:04 +01:00
Josef Söntgen
e13971fcf0 xml_generator: add attribute String<N> method
Make it possible to directly pass on a Genode::String<N> object instead
of using Genode::String<N>.string() by hand.

Fixes #1783.
2015-11-29 18:17:04 +01:00
Martin Stein
59d2a83f30 TZ VMM & USB Armory: Demo
* Provide paravirtualized block API for accessing the second partition
  of the block device that is provided by the ESDHC driver.

* Provide paravirtualized serial API for sending log-output over Genodes
  serial port.

* Use the latest Linux suggested in the USB Armory Wiki [1] when on USB Armory
  while still using the older vendor Linux when on i.MX53 QSB. I.e.,
  provide a device tree through RAM and a rootfs through the paravirtualized
  block device when on USB Armory while providing ATAGs and Initrd when on
  i.MX53 QSB.

* Switch on the LED on the USB Armory when the VMM catches a VM-exception
  and switch it off again when as soon as the exception is handled. This
  merely show-cases the ability to instrument the LED for such purposes. In an
  ideal world, the LED is switched on as long as we're on the "Secure Side"
  and switched off as long as we're not.

* For further information see repos/os/run/tz_vmm.run

[1] https://github.com/inversepath/usbarmory/wiki/Preparing-a-bootable-microSD-image

Fixes #1497
2015-11-29 18:17:04 +01:00
Martin Stein
bed04f1f16 hw & imx53: kernel Trustzone config for USB armory
On the USB Armory, we want to secure different devices than on other i.MX53
implementations. Thus, add a board specific configuration that is interpreted
by the kernel Trustzone initialization.

Ref #1497
2015-11-29 18:17:04 +01:00
Martin Stein
85ba3259f8 hw & imx53: IRQ injection via Vm::proceed
Enhance the VM state, that can be accessed by a VMM, by a member
'unsigned irq_injection'. In Kernel::Vm::proceed check, whether
irq_injection is set.  If so, check whether irq_injection is a
non-secure IRQ.  If so, let the PIC raise this IRQ in the VM and reset
irq_injection.

Ref #1497
2015-11-29 18:17:04 +01:00
Martin Stein
0b39b22e14 create_uboot: support for hw_usb_armory
The platform name 'hw_usb_armory' targets Genode scenarios with base-hw
as kernel and the Inversepath USB-Armory as target hardware.

Ref #1497
2015-11-29 18:17:03 +01:00
Martin Stein
640b73f5ec create_uboot: spare out first 1K of target medium
This enables installation of the bootloader image without wiping the
partition table which is needed at least for the tz_vmm tutorial with
hw_usb_armory.

Ref #1497
2015-11-29 18:17:03 +01:00
Martin Stein
8c22e5d535 sd_card & imx53: refactor and clean-up
Move ADMA2 stuff to extra header and unit. Move ESDHCv2 implementations to
extra unit. Use exceptions instead of error codes. Clean-up documentation.

Ref #1497
2015-11-29 18:17:03 +01:00
Martin Stein
9da422696b sd_card & imx53: set ADMA entry size more clean
Less heuristics.

Ref #1497
2015-11-29 18:17:03 +01:00
Martin Stein
a08358dce9 sd_card & imx53: fix multiblock write termination
The manual termination of multi-block writes via "Stop Transmission" commands
seems to leave the card in a busy state sometimes. This causes errors on
subsequent commands. Thus, we have to synchronize manually with the
card-internal state via "Send State" commands. Additionally, the method
for issuing the manual "Stop Transmission" commands was refined.

Ref #1497
2015-11-29 18:17:03 +01:00
Martin Stein
2b021ec54b sd_card & imx53: simplify IRQ handler
Less switch cases.

Ref #1497
2015-11-29 18:17:03 +01:00
Martin Stein
48e7d29686 sd_card & imx53: flush ADMA2 writes via DSB
We have to issue a data synchronization barrier after writing a ADMA2
table to ensure that the corresponding write commands were actually
executed before issuing the SD command.

Ref #1497
2015-11-29 18:17:03 +01:00
Martin Stein
bd7fe4160d sd_card & imx53: fix initialization problem on QSB
On i.MX53 QSB, a "Send Op Cond" command during the driver initialization
returns another response value than on the USB Armory. As the check for
this response seems to have no relevance for the driver functionality (Linux
reads the value from MMIO but I can't find a place in the source code where
it is used), we simply remove it.

Ref #1497
2015-11-29 18:17:02 +01:00
Martin Stein
d8e91908a2 sd_card & imx53: install IRQ signal handler
Previously, it was not necessary to acknowledge an IRQ initially before using
it. However, since the IRQ framework changed lately it is. Adapt to this.

Ref #1497
2015-11-29 18:17:02 +01:00
Alexander Boettcher
92cb9eb06d x86: support dynamic upgrades for platform driver
and, especially, for the device_pd. Account all resources per platform session
separately.

Fixes #1539
2015-11-29 18:17:02 +01:00
Alexander Boettcher
4c4e7c64d0 x86: start per platform session separate device_pd
Issue #1539
2015-11-27 12:18:54 +01:00
Alexander Boettcher
b902f42482 os: support reference ram cap for slaves
Issue #1539
2015-11-27 12:18:54 +01:00
Alexander Boettcher
e49a5ee19f base: make reference ram cap part of child policy
Issue #1539
2015-11-27 12:18:54 +01:00
Christian Helmuth
50dd0dda38 Notify report-rom client on signal-handler registration
Notify client initially to enforce a client-side ROM update. Otherwise,
a server-side ROM update between session creation and signal-handler
registration would go unnoticed.

Issue #1788
2015-11-27 12:18:54 +01:00
Norman Feske
4b9e1f1060 Window decorator that can be styled 2015-11-27 12:18:54 +01:00
Norman Feske
2dde77f62c gems: add Nitpicker_buffer and Dither_painter
The two utilities gems/nitpicker_buffer.h and gems/dither_painter.h were
formerly private to the menu_view component.
2015-11-27 12:18:54 +01:00
Norman Feske
c63bea825d decorator: fix warning 2015-11-27 12:18:54 +01:00
Norman Feske
f9d0e57b0e decorator: fix hover detection 2015-11-27 12:18:53 +01:00
Norman Feske
e4678a4dc1 decorator: do not defer stacking changes
This patch changes the decorator to always apply stacking-order changes
immediately instead of deferring the re-stacking of the nitpicker views
to the next call of 'update_nitpicker_views'. The deferred application
did not always work when more then one windows changed their stacking
position at once because the cached '_neighbor' values interfered with
each other.

The eager re-stacking should not have negative effects on the user
experience because, in contrast to re-positioning, re-stacking a rare
operation.
2015-11-27 12:18:53 +01:00
Norman Feske
c26d30dffc decorator: use server API 2015-11-27 12:18:53 +01:00
Norman Feske
acb0ddd9ef decorator: generalize include/decorator/window.h
This change makes it possible to reuse the generic window decorator
classes in include/decorator/ for decorators of a different structure.
E.g., instead of painting decorations on a single nitpicker session,
each window may paint its decorations into additional window-specific
nitpicker sessions.
2015-11-27 12:18:53 +01:00
Norman Feske
493386ed27 wm: prevent superfluous session upgrades
For each session upgrade performed by a wm client as part of the
Nitpicker::Connection::buffer function, the window manager wrongly
upgraded the wrapped nitpicker session twice: Once by handling the
Root::upgrade, and again by handling of the server-side 'buffer'
operation. Here, the 'buffer' operation was implemented by not merely
forwarding the RPC request to the wrapped nitpicker session but by
calling the 'buffer' method on the wrapped session's connection
object, which implictly issues session upgrades. Consequently,
the window manager would transfer twice the amount of the session
upgrades it received by its clients to nitpicker and eventually ran
out of memory.

The patch fixes the problem by eliminating the call of the
Nitpicker::Connection::buffer method and instead merely forward the RPC
requests to the wrapped nitpicker sessions.
2015-11-27 12:18:53 +01:00
Norman Feske
461776a29c wm: support multiple decorator sessions 2015-11-27 12:18:53 +01:00
Norman Feske
ed774253b6 demo: fix corner case in scout_gfx/icon_painter.h
The original version of the icon painter would reach beyong the
texture boundaries for textures of even width and height, and when
painting an icon with the width or height of the texture.

In this case, p3 would be set to the same value as p2. However, the code
expects p3 to lie within the middle rectangle. However, in this corner
case, the middle rectangle is actually empty. So no pixel can lie within
it. Hence, p3 is positioned by one pixel to the left outside the middle
rectangle, which violates the assumptions when calculating the clipping
and texture offsets. The patch fixes the problem by reducing the size of
the right column by one pixel. This ensures that exists always a
non-zero middle rectangle.
2015-11-27 12:18:53 +01:00
Norman Feske
6177424fa6 demo: make Lazy_value::dst() const 2015-11-27 12:18:53 +01:00
Norman Feske
0ab49dff3a nitpicker: reflect Handle_registry::Out_of_memory
In the event where a nitpicker session's quota was depleted by the
allocation of view handles, nitpicker would abort. The patch prevents
the abort by reflecting this condition as an Out_of_metadata exception
to the client. This way, the client can upgrade its session as needed.

The problem was triggered by running the decorator_stress test (changed
to generate 40 windows) with the themed_decorator.
2015-11-27 12:18:52 +01:00
Norman Feske
a1c0c99045 nitpicker: fix corner case in view stack operation
This patch addresses the corner case that the specified neighbor view
is the first view of the view stack. If this is the case when inserting
the view in front of the neighbor (behind == false), the target position
within the view stack must be a null pointer, not the first view.

Because the conditions have become rather complicated, both cases
of 'behind' are handled separately now.
2015-11-27 12:18:52 +01:00
Norman Feske
909c4c9ffc os: define storage type of rgb888 as 32-bit value
The original version used unsigned long as storage type, which wasted
memory on 64-bit machines.
2015-11-27 12:18:52 +01:00
Norman Feske
f655ac31f7 vbox: don't fault if NIC is unavailable
This patch prevents vbox from faulting in the (unexpected) case where
the VM has a network adaptor configured but the NIC session cannot be
opened.
2015-11-27 12:18:52 +01:00
Norman Feske
853378960c init: prevent division by zero
During the reconfiguration of init, the CPU-quota computation caused
init to produce a division-by-zero exception.
2015-11-27 12:18:52 +01:00
Christian Prochaska
a2bb96723a vbox: respond to zero-resized framebuffer 2015-11-27 12:18:52 +01:00
Norman Feske
331225dfcb Increase TRACE quota of trace subject reporter
This change is needed to accommodate the turmvilla scenario.
2015-11-27 12:18:52 +01:00
Norman Feske
23aac2954b rom_filter: respond to dynamic config updates 2015-11-27 12:18:51 +01:00
Josef Söntgen
3859e83a78 dde_bsd: requires pci
Prevent building the driver on linux.

Fixes #1785.
2015-11-27 12:18:51 +01:00
Alexander Boettcher
84dfb668d3 noux: handle rom_connection_failed gracefully
Fixes #1040
2015-11-27 12:18:51 +01:00
Christian Helmuth
638fdeb2f5 vbox: fix nitpicker config in win auto tests 2015-11-27 12:18:51 +01:00
Alexander Boettcher
2b6795df78 ps2: support verbose config parameter
Fixes #7
2015-11-27 12:18:51 +01:00
Sebastian Sumpf
0c3dfbad65 base-hw: use signal context list for pending signals
'block_for_signal' and 'pending_signal' now set pending flag in signal context
in order to determine pending signal. The context list is also used by the
'Signal_receiver' during destruction.

Fixes #1738
2015-11-27 12:18:50 +01:00
Alexander Boettcher
18d24eec7b add missing .so files to noux_tool_chain.inc
required by grep

Issue #1040
2015-11-18 12:22:09 +01:00
Alexander Boettcher
e9525f49fd noux: reflect -no memory- case during process setup
Instead of just red messages in the log and a hanging caller, the issuer
may respond to it - e.g. a noux bash shell will show an error and is
afterwards still usable.

Fixes #1778
2015-11-18 12:22:09 +01:00
Alexander Boettcher
c7df65e1da base: invalidate thread cap if task creation fails
Issue #1778
2015-11-18 12:22:09 +01:00
Alexander Boettcher
9ada3d3178 nova: sanity check parent pd assignments
Issue #1778
2015-11-18 12:22:09 +01:00
Alexander Boettcher
4b6b759739 nova: handle dissolve of not-activated entrypoints
Dissolve calls on not-yet-activated entrypoints will block forever in the
portal cleanup call without this commit.

Issue #1778
2015-11-18 12:22:08 +01:00
Alexander Boettcher
eb236a1a10 nova: re-add server object IPC cleanup call
Accidentally removed by #1658. We need to make the cleanup call for server
objects - otherwise we may get in capability identifier re-use trouble.

Issue #1778
2015-11-18 12:22:08 +01:00
Alexander Boettcher
8c060d6622 x86: support attaching rmrr region to device_pd
Issue #1764
2015-11-18 12:22:08 +01:00
Alexander Boettcher
91b69edb72 nova: adjust kernel warning/error messages
- extend one overmap message case
- show by default more error messages

Issue #1779
2015-11-18 12:22:08 +01:00
Alexander Boettcher
5c63f7003e nova: evalute pending irqs si->sm association
Fixes ps/2 driver bring-up if already some irqs are pending but not delivered
to the Genode signal(Nova semaphore) - reported by @nfeske.

Fixes #1779
2015-11-18 12:22:08 +01:00
Alexander Boettcher
74e89727ee acpi - report rmrr via acpi report rom
Issue #1764
2015-11-18 12:22:08 +01:00
Alexander Boettcher
3789a75ed6 base: support ascii_to for uint64_t
Issue #1764
2015-11-18 12:22:07 +01:00
Norman Feske
7920b57d34 Consider byte offset in Attached_io_mem_dataspace
Ref #1764
2015-11-18 12:22:07 +01:00
Sebastian Sumpf
ab79b0d5e0 ahci: Reset port before access
Also throw error if wakup from power safe mode failes.

Fix #1776
2015-11-18 12:22:07 +01:00
Josef Söntgen
5f2d92f916 gems: add experimental mixer_gui based on Qt
Issue #1770.
2015-11-18 12:22:07 +01:00
Josef Söntgen
7a70833ba1 mixer: add reporting and config handling
Fixes #1770.
2015-11-18 12:22:07 +01:00
Josef Söntgen
72e1147cce mixer: use retry util for remixing packets
Issue #1770.
2015-11-18 12:22:06 +01:00
Josef Söntgen
c814d13737 mixer: use Server framework
Issue #1770.
2015-11-18 12:22:06 +01:00
Josef Söntgen
fe1a0e5f65 os: add mixer utility header for Channel struct
The notion of a channel is shared by the mixer backend as well as the
frontend. To make dealing with reports between those easier move the
Channel definition to a global header.

Issue #1770.
2015-11-18 12:22:06 +01:00
Josef Söntgen
2c9d2e1d32 wifi_drv: remove misleading loading message
Fixes #1774.
2015-11-18 12:22:06 +01:00
Josef Söntgen
dd933de84f wifi_drv: remove device white-list patch
Issue #1774.
2015-11-18 12:22:06 +01:00
Josef Söntgen
88123bdbd5 wifi_drv: make pci probing more sane
Initial patch by @skalk.

Issue #1774.
2015-11-18 12:22:06 +01:00
Christian Helmuth
a01b1793eb dde_rump: fix race condition in rumpuser_mtx
The new mutex is a binary semaphore based on the implementation of
Genode::Semaphore using an applicant FIFO.
2015-11-18 12:22:06 +01:00
Christian Helmuth
60fa8ade1a dde_rump: propagate CC_OLEVEL to buildrump.sh
This effectively enables configuring builds with -O0 for rump sources.
Note, if the build directory is not clean, at least var/libcache/rump*
should be removed before building with changed etc/tools.conf.
2015-11-18 12:22:05 +01:00
Christian Helmuth
5c6f7bdea0 dde_rump: remove static globals 2015-11-18 12:22:05 +01:00
Christian Helmuth
db3a5a3b02 Some rounds of write/read in libc fs test
The test performs several rounds of write-read cycles with the following
configuration attributes in a <write-read> config node

  rounds       determines the number of rounds (default is 4)
  size         determines the number of bytes written/read in one round
               (default is 4 MiB)
  buffer_size  determines the size of the write-read buffer
               (default is 32 KiB)

In one round the test writes and reads "size/buffer_size" times
from/into a buffer_size'd buffer.
2015-11-18 12:22:05 +01:00
Christian Helmuth
a0d92fcdb8 platform_drv: increase RAM config for -O0 builds 2015-11-18 12:22:05 +01:00
Josef Söntgen
c47e9751bd dde_bsd: fix missing bzero ref when building -O0
Fixes #1773.
2015-11-18 12:22:05 +01:00
Josef Söntgen
e9773f237e wifi_drv: move symlink generation to libnl_include
Issue #1772.
2015-11-18 12:22:05 +01:00
Josef Söntgen
5e60a1b32f wifi_drv: move symlink generation to wifi_include
Fixes #1772.
2015-11-18 12:22:05 +01:00
Sebastian Sumpf
e2280a1650 noux: Run script with two bash shells using the same file system
Related to #1765

Instructions:

1. Create a file in terminal one in the 'ram' directory

! echo "test" > ram/test

2. Second terminal

! tail -f ram/test

3. First terminal

! echo "Meaningless output" >> ram/test

4. Observe second terminal
2015-11-18 12:22:05 +01:00
Sebastian Sumpf
06fe755f8c noux: Enable setting of file handle flags
Fixes #1765
2015-11-18 12:22:04 +01:00
Christian Prochaska
f6863e3f4b qt5: add clipboard support
If a Qt application shall use the clipboard, this must be configured as:

<config clipboard="yes">

Fixes #1749
2015-11-09 13:17:56 +01:00
Christian Prochaska
97bbc8f965 pthread: don't destroy the pthread object for the main thread
The pthread object for the main thread initializes its 'Thread_base' base
class part with a reference to the 'Thread_base' object of the Genode main
thread. Therefore the pthread object for the main thread should never be
destroyed, as this would also destroy the Genode 'Thread_base' object.

Fixes #1760
2015-11-09 13:08:31 +01:00
Josef Söntgen
be8f16ac3e vbox: use ring buffer in audio backend
Instead of hardcoding the device model configuration use a ring buffer
to gather samples.

Fixes #1767.
2015-11-09 13:08:31 +01:00
Josef Söntgen
83e5a64864 os: extend Audio_out with queue query method
Issue #1767.
2015-11-09 13:08:30 +01:00
Josef Söntgen
d8b95c263b os: reset Audio_out stream prior to calling start
Issue #1767.
2015-11-09 13:08:30 +01:00
Josef Söntgen
de8794321b os: add tail accessor to Audio_out stream
Issue #1767.
2015-11-09 13:08:30 +01:00
Josef Söntgen
663e8fad9b os: increase Audio_out queue size
Issue #1767.
2015-11-09 13:08:30 +01:00
Josef Söntgen
5b6fdc96fc vbox: disable rdtsc VM exit
Trapping rdtsc creates a huge load in some guests, e.g. Windows 8.1,
that use this instruction very frequently. This influences audio
playback/recording in a bad way (distorted sounds, …). As a interim
solution disable the virtualization of rdtsc completely. As long
as each guest VM runs on its own CPU core it should be fine as there
should not be that much interference (TSC warping).

That being said, TSC offsetting as well as adjusting within vbox have to
be evaluated.

Fixes #1768.
2015-11-09 13:08:30 +01:00
Christian Prochaska
d34bbbceb2 Arora: update to current git master branch
Our current version of Arora crashes at program exit. This bug has been
fixed on the Arora git master branch.

Fixes #1759
2015-11-09 13:08:30 +01:00
Christian Prochaska
0005407832 qt5: increase wm and decorator RAM quota
The RAM quota currently dedicated to the wm and decorator components in
the 'qt5_common.inc' file is too low for a window of size 1920x1080.

Fixes #1761
2015-11-05 16:03:04 +01:00
Christian Helmuth
9730c7e333 base-nova: cleanup specific Rm_session_client
- Align implementation to the current generic implementation
- Document NOVA-specific implementation of dataspace() (as in the
  original commit message)
2015-11-04 14:37:55 +01:00
Norman Feske
82991ba378 base: fix warning in console.cc 2015-11-04 13:49:01 +01:00
Norman Feske
91345a1568 nitpicker: use fb sync for periodic processing 2015-11-04 13:49:01 +01:00
Norman Feske
24b7accbf2 fb_drv: generate periodic sync events
Fixes #1762
2015-11-04 13:49:01 +01:00
Norman Feske
650267b425 libports: fix eglgears example
Thanks to Jamey Sharp for the fix!

Fixes #1670
2015-11-04 14:09:30 +01:00
Christian Prochaska
759b9ed1ad floating window layouter: bring focused window to front 2015-11-04 14:09:30 +01:00
Christian Prochaska
9aff45ae8c floating window layouter: fix padding 2015-11-04 14:09:30 +01:00
Christian Prochaska
75111c4f1a wm: sanitize the view title
By replacing '"' by ''', we work around issue #1757.
2015-11-04 14:09:30 +01:00
Christian Prochaska
220d143e44 decorator: fix detection of hovered window control 2015-11-04 14:09:29 +01:00
Norman Feske
755d2cce05 gems: turn launcher into a panel-like application 2015-11-04 14:09:29 +01:00
Norman Feske
519eb334e9 menu view: add hbox layout, support widget reorder
This patch, complements the existing vbox layout with a hbox layout and
improves the response to dynamic dialog updates. The new version support
disappearing widgets and the reordering of widgets. Furthermore, this
patch ensures that the 'Widget::_layout' functions are executed after
updating a new version of the dialog.
2015-11-04 14:09:29 +01:00
Norman Feske
5456175d07 menu view: change style to be less obtrusive 2015-11-04 14:09:29 +01:00
Christian Prochaska
e652af7518 nitpicker: fix off-by-one bug 2015-11-04 14:09:29 +01:00
Christian Prochaska
0150d02683 nitpicker: never bring the background view to front 2015-11-04 14:09:29 +01:00
Norman Feske
a01a423c91 nitpicker: allow refocus during global key ops 2015-11-04 14:09:29 +01:00
Norman Feske
f01b205c30 nitpicker: postpone focus updates until idle
This patch ensures that focus changes performed via the Session::focus
call are made effective the next time, the user is idle. Previously,
focus changes during drag operations were simply discarded.
2015-11-04 14:09:28 +01:00
Norman Feske
7c968d4c60 nitpicker: externalize xray policy
This patch removes the policy for controlling the X-Ray mode from
nitpicker to the separate component os/app/xray_trigger.

Fixes #1690
2015-11-04 14:09:28 +01:00
Norman Feske
2166aef737 nitpicker: update all on focus change in xray mode 2015-11-04 14:09:28 +01:00
Norman Feske
3726cafb28 window layouter: no focus update on hover reset 2015-11-04 14:09:28 +01:00
Christian Prochaska
f8c1379f15 dde_ipxe: enable Intel I218-LM (rev 03) PCI-ID
Fixes #1754
2015-11-04 14:09:28 +01:00
Christian Helmuth
64a4713fe6 fb_sdl: check for X11 / prevent invalid-event flood
We check for X11 as required platform now and are more verbose on
errors.
2015-11-04 14:09:28 +01:00
Alexander Boettcher
826c81ac18 hw_x86: discover all physical memory in core
Fixes #1741
2015-11-04 14:09:28 +01:00
Alexander Boettcher
f42f946f3b base: support parsing multiboot for phys. memory
Issue #1741
2015-11-04 14:09:27 +01:00
Alexander Boettcher
7ea5884ffc base: use mmio framework for multiboot handling
Issue #1741
2015-11-04 14:09:26 +01:00
Alexander Boettcher
6c1906e43e platform_drv: clear bdf_in_use if set
Fixes #1740
2015-11-04 14:09:26 +01:00
Alexander Boettcher
04cca1edb1 platform_drv: use shared irq path for ps/2
Issue #1740
2015-11-04 14:09:26 +01:00
Alexander Boettcher
8701b7d517 x86: construct platform_drv irq connection lazily
Issue #1740
2015-11-04 14:09:26 +01:00
Alexander Boettcher
2b2587fde9 x86: claim extended pci config io memory lazily
Issue #1740
2015-11-04 14:09:26 +01:00
Alexander Boettcher
bdaf79e3b8 x86: extend io_mem call of platform_drv
Support allocation of sub I/O memory spaces of one I/O memory bar with
write-combined caching attribute.
2015-11-04 14:09:25 +01:00
Christian Prochaska
8f849c9438 clipboard: fix session close handling
Fixes #1747
2015-11-04 14:09:25 +01:00
Christian Prochaska
731a98c266 vbox: decode clipboard content
Fixes #1748
2015-11-04 14:09:25 +01:00
Josef Söntgen
32e2ab85b0 netperf: remove bssid from wifi tests
The bssid is purely optional and only should be used if it really is
needed.

Issue #1746.
2015-11-04 14:09:25 +01:00
Josef Söntgen
9fc7519972 wifi_drv: handle hidden SSID
Form now on always generate a configuration that handles nidden SSIDs
well and document the configuration in more detail.

Fixes #1746.
2015-11-04 14:09:25 +01:00
Emery Hemingway
8ed6364388 refactor Vfs::Ram_file_system
Issue #1648
2015-11-04 14:09:24 +01:00
Emery Hemingway
1b4f894e2d VFS stress test
Issue #1648
2015-11-04 14:09:24 +01:00
Emery Hemingway
cdb44850d3 Strip slashes from Path in Vfs::Fs_file_system
strip_last_element at Path removes everything after the trailing slash,
which causes lookup failures at the VFS server when opening directories.

Issue #1648
2015-11-04 14:09:24 +01:00
Emery Hemingway
b6c558dce9 Vfs: File_system server backed by VFS library
Test available at libc_vfs_fs.

Fixes #1648
2015-11-04 14:09:24 +01:00
Emery Hemingway
1c6164a0c5 File_system session: broaden error handling
Throw Invalid_name, No_space, and Out_of_node_handles where appropriate.

Catch the new range of errors thrown by at the VFS.
Catch Out_of_node_handles at the VFS, but print a message and re-throw.

Issue #1648
2015-11-04 14:09:24 +01:00
Emery Hemingway
1d4bd10701 fix handle leak in Vfs::Fs_file_system
Issue #1648
2015-11-04 14:09:23 +01:00
Emery Hemingway
48fd034cfe New session arguments at File_system connection
Session root and writeablity may be specified at the session
convenience constructor.

Issue #1648
2015-11-04 14:09:23 +01:00
Emery Hemingway
2da239d0c8 void sync(char const *path)
Sync now takes a path argument at VFS and File system interfaces.

Issue #1648
2015-11-04 14:09:23 +01:00
Norman Feske
96d021b9d4 base: char const * comparison operators for String 2015-11-03 17:04:16 +01:00
Norman Feske
a528aa097a init: add 'label' criterion for session routing
This patch introduces a shortcut for conditional session routes of the
form '<if-arg key="label" value="..."/>'. With this change, the label
can be directly specified as 'label' attribute of an '<any-service>' or
a '<service>' node. The '<if-arg>' mechanism was not documented anyway
and I hope to be able to ultimately remove it.
2015-11-03 17:04:16 +01:00
Christian Prochaska
b26ac3c4fb run: fix Qemu boot timeout
Fixes #1758
2015-11-03 17:02:19 +01:00
Alexander Boettcher
115a605658 run: try to detect reboots of platform 2015-10-28 15:06:24 +01:00
Alexander Boettcher
6d0936ca98 okl4: increase available physical memory
required by noux_tool_chain_auto
2015-10-28 15:06:23 +01:00
Christian Helmuth
c2f0bb4fa8 ports: adapt to moved lynx hosting
The new archive has a new naming scheme (also the root directory name
changed) but I compared the contents and those don't differ.
2015-10-28 15:06:23 +01:00
Alexander Boettcher
f9fbe34644 base: avoid detaching not attached trace_control 2015-10-28 15:06:23 +01:00
Alexander Boettcher
6de46dfd2e increase timeouts for noux_tool_chain_auto 2015-10-28 15:06:23 +01:00
Alexander Boettcher
c4686a1196 disable network tests on platforms w/o nic driver
They don't have a network driver currently.
2015-10-28 15:06:23 +01:00
Alexander Boettcher
ffbbf69959 nova: update kernel branch to avoid tlb issues
Following page fault sympton in core gets fixed:

PAGE-FAULT IN CORE (WRITE pf_addr=1000000 pf_ip=14361c from 00 <NULL>)

stack pointer 0xa01fec30, qualifiers 0x6 irUWp

faulter utcb a01ff000, last message item count 1

0 - type=1 rights=0x3 region=0x1000000+0x1000000 hotspot 0(801) - delegated

   1 a01fec30 0014361c
   2 a01fec68 001401d5
2015-10-28 15:06:23 +01:00
Alexander Boettcher
d6bae1a9a3 nova: speedup clearing dataspace in core 2015-10-28 15:06:23 +01:00
Alexander Boettcher
ceb04d3c11 nova: avoid race in pager_object destruction
Don't skip the cleanup call if a pager object is marked as blocked.

It happens that the pager_object is in destruction but it is also used
concurrently by the pager thread. The pager thread handling code may set the
pager object to blocked but still uses the pointer to the pager object. Avoid
locking at the state of the pager object and make the cleanup call everytime.

Error output looks like this, where the pf_ip is within

  void Pager_object::_page_fault_handler(addr_t pager_obj)

method and the pf_addr is the stale pointer to the already released pager_object.

no RM attachment (READ pf_addr=xxx pf_ip=xxx from 00 <NULL>)
static void Genode::Pager_object::_page_fault_handler(Genode::addr_t): page fault, thread '<NULL>', cpu x, ip=xxx, fault address=xxx

PAGE-FAULT IN CORE (READ pf_addr=b10e0090 pf_ip=132dbc from 00 <NULL>)
2015-10-28 15:06:22 +01:00
Alexander Boettcher
c4f8af2665 hw_zynq: limit cpu count to 1 in mp_server.run
qemu says:

Number of SMP cpus requested (2), exceeds max cpus supported by machine `xilinx-zynq-a9' (1)
2015-10-28 15:06:22 +01:00
Sebastian Sumpf
2b429ee84c base: Dispatch server signal in entry point
Currently, when a signal arrives in the main thread, the signal dispatcher is
retrieved and called from the main thread, the dispatcher uses a proxy object
that in turn sends an RPC to the entry point. This becomes a problem when the
entry point destroys the dispatcher object, before the dispatch function has
been called by the main thread. Therefore, the main thread should simply send an
RPC to the entry point upon signal arrival and the dispatching should be handled
solely by the entry point.

Issue #1738
2015-10-28 15:06:22 +01:00
Josef Söntgen
0879a9570c vbox: fix vm_win8.vbox network configuration
We need to specify the interface we want to attach to.

Fixes #1737.
2015-10-09 16:39:39 +02:00
Alexander Boettcher
6c30bf2667 nova: interpret write page fault correctly
Fixes #1722
2015-10-09 16:38:48 +02:00
Sebastian Sumpf
78e18981fb nic session: fix quota check
Check for overflow.

Issue #1735
2015-10-09 16:38:48 +02:00
Alexander Boettcher
5aec67d5bb vbox: enable clipboard support"
Fixes #1696
2015-10-09 16:38:48 +02:00
Sebastian Sumpf
2426c58b9f ahci: support for non-ncq ATA devices
* use '_dma_ext' or '_fdpma' commands
* handle interrupts depending on mode of operation
* spelling fixes
* move ATA 'Idendity' struct to ata header

issue #1734
2015-10-09 16:38:48 +02:00
Alexander Boettcher
a608d48ddf noux: handle more libc getrlimit parameters
- we claim to have no limits on file handles and number of threads
- remove obsolete Thread_base::myself fall-back code for stack size calculation

Issue #1733.
2015-10-09 16:38:48 +02:00
Alexander Boettcher
2e62543fdb nova: use remote revoke
Fixes #1733
2015-10-09 16:38:48 +02:00
Alexander Boettcher
c0e88ec69e nova: adjust kernel quota calculation
Too less memory quota for a PD may be calculated, which leads to too early
punishment for a Genode process.

Discovered during Turmvilla scenario #1552 and issue #1733.
2015-10-09 16:38:47 +02:00
Alexander Boettcher
c7195c8652 nova: sanitize cpu during pager assignment
Additionally print warnings about unavailable CPUs if they are tried to be
used during pager object setup.

Discovered during Turmvilla scenario #1552 and issue #1733.
2015-10-09 16:38:47 +02:00
Alexander Boettcher
24e65e2e39 nova: don't unzip images with grub
Causes trouble if a gz image is loaded via grub and later used as initrd for a
Linux VM (e.g. with Seoul VMM)

Discovered during Turmvilla scenario #1552 and issue #1733.
2015-10-09 16:38:47 +02:00
Alexander Boettcher
d7da035115 nova: sanitize priority parameters
threads with prio 0 will not be started and would fail silently.
Happened on Turmvilla for the USBProxy thread in virtualbox.

Discovered during Turmvilla scenario #1552 and issue #1733.
2015-10-09 16:38:47 +02:00
Alexander Boettcher
70a3bb7465 nova: avoid syscall on invalid signal capability
Reduces kernel log message noise when running on kernel-debug branch.
Additionally add a more verbose core message.

Discovered during Turmvilla scenario #1552 and issue #1733.
2015-10-09 16:38:46 +02:00
Alexander Boettcher
94f64ef464 nova: avoid sc_ctrl syscalls on invalid caps
Avoids kernel log messages if TRACE_ERROR is enabled in kernel.

Discovered during Turmvilla scenario #1552 and issue #1733.
2015-10-09 16:38:46 +02:00
Alexy Gallardo Segura
7f1641e460 usb: use GPIO session for configuration
This fixes the issue of conflicting base-address attachment between USB
and GPIO.

Fixes #1732
2015-10-09 16:37:22 +02:00
Alexy Gallardo Segura
e8b4e0be6d disabling verbose in gpio driver
fixup #1732
2015-10-09 16:37:22 +02:00
Emery Hemingway
b121212b23 init: improve priority upgrade message
Fixes #1731
2015-10-09 16:36:31 +02:00
Martin Stein
2d9d55a6d3 tool: create_uboot
To make the creation of a bootstrap medium for most ARM platforms more
comfortable this tool shall bundle all the different U-Boot source
states, patches, and MMC preparation rules that we gathered over the
year for that purpose. As input, the tool merely needs the targeted
platform (analogous to the platform parameter of 'create_builddir'). By
now, 'hw_wand_quad' is the only supported platform. Further platforms
can be added successively. As output, the tool creates a head image file
of small size (8MiB) that can be copied (dd) with offset 0 to the MMC.

Fixes #1730
2015-10-09 16:36:30 +02:00
Emery Hemingway
88f107e0f9 Fs_log: new truncate behavior
Files are truncated at the next client session if all previous sessions
associated with the file are closed.

Issue #1538
2015-10-09 16:36:30 +02:00
Emery Hemingway
77c00bc26d fs_log: fix creation of '.log' files
Issue #1538
2015-10-09 16:36:17 +02:00
Emery Hemingway
df0bbe0b0e ascii_to() utility for boolean values
Also, Genode::Arg was adapted to use the new utility for boolean tokens
and strings.

Issue #1648
2015-10-09 16:35:30 +02:00
Christian Helmuth
ce354d6fd9 linux: improve diagnosis on exception handling
Under some circumstances, the diagnostic message in the exception signal
handler was not printed. This could happen due to a dead lock in the
console library if the console code itself produces the exception while
possessing the mutex, e.g., by exhausting a undersized stack. Now, we
directly write to the log session via the stdout_write() hook or use
raw_write_str() in core.
2015-10-06 12:18:57 +02:00
Christian Helmuth
bbf8a4f2ec lwip: patch for resetting write offset
Otherwise, the assertion "already writing or closing" may fail.
2015-10-06 12:18:57 +02:00
Norman Feske
aaea28ae85 Fix build and execution of test/sel4 2015-10-06 12:18:56 +02:00
Norman Feske
67b3c23281 dde_rump: adaptation to Xml_node change 2015-10-06 12:18:56 +02:00
Norman Feske
e77df44ed5 Add rom_filter and clipboard tests to autopilot 2015-10-06 12:18:56 +02:00
Norman Feske
57ce50a3d4 window layouter: handle maximize/unmaximize 2015-10-06 12:18:56 +02:00
Norman Feske
818840ca6a wm: provide physical screen mode to layouter 2015-10-06 12:18:56 +02:00
Norman Feske
a8cca8e1b3 window layouter: respond to window closer 2015-10-06 12:18:56 +02:00
Norman Feske
4164c9edec wm: allow resize requests to 0x0 2015-10-06 12:18:55 +02:00
Norman Feske
dcc4b8c313 wm/layouter/decorator: propagate window controls 2015-10-06 12:18:55 +02:00
Norman Feske
0efd908e27 wm: support clients in "direct" role 2015-10-06 12:18:55 +02:00
Norman Feske
e27ebd0368 wm/layouter: respond to external focus requests 2015-10-06 12:18:55 +02:00
Norman Feske
cdb87a7c4f window layouter: handle hidden windows 2015-10-06 12:18:55 +02:00
Norman Feske
e0233604fa wm: handling of temporarily hidden views 2015-10-06 12:18:55 +02:00
Norman Feske
0ab74e61d7 wm: handle Nitpicker::Session::session_control 2015-10-06 12:18:55 +02:00
Norman Feske
afac1e86bb decorator: window colors and controls
This patch improves the decorator in two ways. First, it enables the
assignment of window colors depending on the window labels. This
configuration can be changed dynamically. Second, it adds the handling
of window controls for closing, maximizing, minimizing windows.

Issue #1689
Fixes #1688
2015-10-06 12:18:54 +02:00
Norman Feske
1460105f71 nitpicker: provide user activity in focus reports
This patch supplements the existing focus reports with the new attribute
'active', which indicates recent user activity when set to "yes". This
information is consumed by the clipboard to dynamically adjust its
information-flow policy depending on the user activity.

Issue #1712
2015-10-06 12:18:54 +02:00
Norman Feske
59014a50f1 os: new clipboard component and test
Fixes #1712
2015-10-06 12:18:54 +02:00
Norman Feske
02d07655ce os: make internal report_rom classes reusable
This patch moves the formerly internal classes of the report-ROM service
to the public location os/include/report_rom/ so that they can be reused
by other components such as the upcoming clipboard.
2015-10-06 12:18:53 +02:00
Norman Feske
702646a4a3 os: new ROM filter component
Related to #1690
2015-10-06 12:18:53 +02:00
Norman Feske
8763b6925a os: new ROM logger component 2015-10-06 12:18:53 +02:00
Norman Feske
6ecbc419c0 Xml_node, Xml_generator: sanitize node content
Fixes #1698
2015-10-06 12:18:53 +02:00
Norman Feske
e590d90bf6 xml_generator: support appending of node content
The new 'Xml_generator::append' method can be used to append strings
into the body of an XML node.
2015-10-06 12:18:53 +02:00
Norman Feske
a80d944944 os: add Xml_attribute::value(String<N> *out)
This overload of the value member eases the retrieval of Genode::String
objects from XML attributes. So we won't need to deal with C-style
character buffers anymore.
2015-10-06 12:18:53 +02:00
Norman Feske
c8ec7b6ffb os: add print_lines utility
The code originates from the report_rom server. This patch makes the
code easy to reuse in other components.
2015-10-06 12:18:52 +02:00
Norman Feske
32a227ce77 os: Add == and != operators to Genode::Color 2015-10-06 12:18:52 +02:00
Norman Feske
dce6e14e3e os: generalize Session_label, Session_policy
The utilities in os/session_policy.h used to be tailored for the
matching of session arguments against a server-side policy
configuration. However, the policy-matching part is useful in other
situations, too. This patch removes the tight coupling with the
session-argument parsing (via Arg_string) and the hard-wired use of
'Genode::config()'.

To make the utilities more versatile, the 'Session_label' has become a
'Genode::String' (at the time when we originally introduced the
'Session_label', there was no 'Genode::String'). The parsing of the
session arguments happens in the constructor of this special 'String'.
The constructor of 'Session_policy' now takes a 'Genode::String' as
argument. So it can be used with the 'Session_label' but also with other
'String' types. Furthermore, the implicit use of 'Genode::config()' can
be overridden by explicitly specifying the config node as an argument.
2015-10-06 12:18:52 +02:00
Norman Feske
1f941d1c87 Fix missing include 2015-10-06 12:18:52 +02:00
Norman Feske
8f50b00f13 usb_drv: fix shadowing of loop variable
This patch also fixes the assignment of the pci_dev flags (the
mem flag was never set).
2015-10-06 12:18:52 +02:00
Norman Feske
e17198570e os: add ISABRIDGE class to x86 platform driver 2015-10-06 12:18:52 +02:00
Norman Feske
be789ffcf1 libports: fix comment in import-libc.mk 2015-10-06 12:18:52 +02:00
Norman Feske
ffd48e3f83 run: strip NOVA kernel 2015-10-06 12:18:51 +02:00
Emery Hemingway
1779a0511b vfs: add new error codes
The codes are OPEN_ERR_NAME_TOO_LONG, OPEN_ERR_NO_SPACE, and
FTRUNCATE_ERR_NO_SPACE.

Issue #1693
2015-10-06 12:18:51 +02:00
Alexander Boettcher
286edaed68 base: detect and stop self de-structing threads
Issue #1687
2015-10-06 12:18:51 +02:00
Alexander Boettcher
3f611fe00d pthread: handle self destruction better
Defer destruction of threads which tries to self-destruct. Check an perform
cleanup of such threads during pthread_cancel and pthread_create.

Issue #1687
2015-10-06 12:18:51 +02:00
Alexander Boettcher
6f3e9c12fb vbox: support shutdown of VMM
- send exit signal to parent
- avoid assertion in vbox posix backend

Fixes #1687
2015-10-06 12:18:51 +02:00
Alexander Boettcher
ae12f04354 nova: avoid deadlocks by self-destructing threads
Issue #1687
2015-10-06 12:18:50 +02:00
Alexander Boettcher
6426d4098c dde_rump: handle ENOENT error case
Related to #1687
2015-09-30 17:13:11 +02:00
Christian Prochaska
fd533b0c93 qt5: key repeat support
Fixes #1692
2015-09-30 15:48:12 +02:00
Christian Prochaska
0f8fcab3bd qt5: fix use of uninitialized variable
Fixes #1677
2015-09-30 15:48:12 +02:00
Emery Hemingway
d5dc25adef Noux: connect standard streams to VFS nodes
Fixes #1693
2015-09-30 15:48:12 +02:00
Norman Feske
20f961cbd8 cli_monitor, launcher: handle exiting subsystems
Until now, the CLI monitor and the laucher allowed the user to explitly
kill subsystems but both used to ignore gracefully exiting subsystems.
It was the user's job to remove the remains of those subsystems. The
patch takes the burden of manually killing exited subsystems from the
user.

Fixes #1685
2015-09-30 15:48:12 +02:00
Emery Hemingway
dd13bbb1e2 part_blk: use Session_policy to determine partition
Fixes #1714
2015-09-30 15:48:12 +02:00
Josef Söntgen
2f8b3cfdaf vbox: make I/O port access less noisy
Instead of white-listing floppy controllers, certain SCSI controllers
as well as ISAPnP etc. pp. remove the diagnostics and print each access
if verbose is set.

Fixes #1726.
2015-09-30 15:48:12 +02:00
Josef Söntgen
f9a64b663c vbox: replace alarm_timer thread with trigger_once
Instead of using the alarm_timer thread we use our own timer thread
that uses a kernel semaphore on Nova. On all other platforms a timer
connection and trigger_once is used.

Fixes #1727.
2015-09-30 15:48:12 +02:00
Alexander Boettcher
f7ad6cf4e6 seoul: support ide disk model
Issue #1702
2015-09-30 15:48:11 +02:00
Alexander Boettcher
36947cef3a seoul: fix raw disc boot for 512B sectorsize
Fixes #1702
2015-09-30 15:48:11 +02:00
Alexander Boettcher
21e86227bc seoul: make input available via bios
Enables us to interact with GRUB bootloader during early boot.

Issue #1702
2015-09-30 15:48:11 +02:00
Alexander Boettcher
4da7e89d6b seoul: avoid assertion, adhere to original vancouver version
Issue #1702
2015-09-30 15:48:11 +02:00
Alexander Boettcher
e5ea76c689 seoul: set vCPU priority below seoul threads
Issue #1702
2015-09-30 15:48:11 +02:00
Alexander Boettcher
2d15c6d990 seoul: handle a MSR to let Genode/Nova guest boot
Issue #1702
2015-09-30 15:48:11 +02:00
Alexander Boettcher
ad24b25af0 nova: avoid buddy allocator assertion in kernel
Fixes #1672
2015-09-30 15:48:11 +02:00
Christian Helmuth
985c01116b nova: PIC compatible syscall_5
Addressing must be PC-relative, so adapt the approach from the other
nova_x86_32 syscall bindings (description by @ssumpf):

  Use call to push the current IP on the stack and add the distance of
  label 0 and label 1 in order to determine the return address, which
  NOVA requires in edx.

The bug only showed up with "-O0" in libc.lib.so in form of a unwanted
text relocation.

Fixes #1721
2015-09-30 15:48:10 +02:00
Christian Prochaska
7fff1770e0 qt5: update run scripts
Fixes #1695
2015-09-30 12:20:41 +02:00
Christian Helmuth
08541b68f7 dde_linux: stack alignment on x86_64 in wifi/usb
platform_execute() is used to initially switch the stack of a
routine/task. While Thread_base::alloc_secondary_stack() properly aligns
the returned stack pointer the x86_64 assembler implementation did not
comply to stack frame management specified in the ABI.

The used (and most simple) stack-alignment check may pass a float to a
varargs function on x86, which requires the compiler to properly save
some XMM registers on stack.
2015-09-30 12:20:41 +02:00
Christian Helmuth
92541c49a6 netperf: don't run script on hw_wand_quad 2015-09-30 12:20:41 +02:00
Stefan Kalkowski
bb4ee67357 base-linux: do not copy dataspace components
Dataspace components inherit from RPC objects which are non-copyable from now
on. Therefore, the Rom_session_component's constructor had to be modified
to not construct a dataspace component on the stack and assign it in the
following.

Ref #1704
2015-09-30 12:20:41 +02:00
Stefan Kalkowski
c1492da15b base: do not lock interleaved in object pool
Holding the object pool's lock while trying to obtain an object's lock
can leave to dead-lock situations, when more than one thread tries to
access multiple objects at once (e.g.: when transfer_quota gets called
simultanously by the init and entrypoint thread in core). To circumvent
holding the object pool lock too long, but access object pointers safely
on the other hand, this commit updates the object pool implementation
to use weak pointers during the object retrieval.

Fix #1704
2015-09-30 12:20:41 +02:00
Stefan Kalkowski
b585583ec7 core: do not destroy in object pool's apply scope
Destroying an object within the scope of a lambda/functor executed
in the object pool's apply function leads potentially to memory corruption.
Within the scope the corresponding object is locked and unlocked when
leaving the scope. Therefore, it is illegal to free the object's memory meanwhile.
This commit eliminates several places in core that destroyed wrongly in
the object pool's scope.

Fix #1713
2015-09-30 12:20:40 +02:00
Christian Helmuth
6616bd4593 lwip: log thread and sleep forever in assert() 2015-09-30 12:20:40 +02:00
Christian Helmuth
7e3bcb1e39 tcp_terminal: signal available bytes on partial read
If a client provides a read buffer of insufficient size for all
available data, we have two options

1) Leave it to the client to do partial reads until not further data is
   available, or

2) Signal the client that there still some bytes on a partial read.

As the second option seems more robust it's implemented in this commit.

Fixes #1705
2015-09-30 12:20:40 +02:00
Adrian-Ken Rueegsegger
8eec092851 Add support for ipxe load (nova, foc, fiasco)
This makes use of the iPXE sanboot command [1] which downloads and
boots an ISO image directly via HTTP. Therefore, your RUN_OPT needs
both

  --include image/iso   and
  --include load/ipxe

NOTE: The webserver serving the ISO image must support ranged requests,
      see [2].

[1] - http://ipxe.org/cmd/sanboot
[2] - http://forum.ipxe.org/showthread.php?tid=7295&pid=10482#pid10482
2015-09-30 12:20:40 +02:00
Adrian-Ken Rueegsegger
94afc1a340 run: support loading images via iPXE/HTTP
iPXE is an open source network boot firmware which supports booting from
a web server via HTTP [1].

The following two parameters can be used to specify the iPXE/HTTP setup:

--load-ipxe-base-dir
  This parameter specifies the base directory of the HTTP server from
  which the target machine downloads the files.

--load-ipxe-boot-dir
  The directory relative to iPXE base dir which contains the iPXE
  chainload configuration and all necessary files.

The target machine is expected to request the following iPXE
configuration via HTTP:

http://${HOST_URL}/${ipxe-boot-dir}/boot.cfg

This can be achieved by building iPXE with the following embedded
script:

  #!ipxe
  dhcp
  chain http://${HOST_URL}/${ipxe-boot-dir}/boot.cfg

See also [2] for additional information.

[1] - http://ipxe.org/
[2] - http://ipxe.org/howto/chainloading#breaking_the_loop_with_an_embedded_script

Fixes #1708
2015-09-30 12:20:40 +02:00
Stefan Kalkowski
ccb968ff7d safeguard the synchronized allocator template
* Move the Synced_interface from os -> base
* Align the naming of "synchronized" helpers to "Synced_*"
* Move Synced_range_allocator to core's private headers
* Remove the raw() and lock() members from Synced_allocator and
  Synced_range_allocator, and re-use the Synced_interface for them
* Make core's Mapped_mem_allocator a friend class of Synced_range_allocator
  to enable the needed "unsafe" access of its physical and virtual allocators

Fix #1697
2015-09-30 12:20:39 +02:00
Stefan Kalkowski
53eb666ed0 hw: invalidate all caps of a thread in destruction
Fix #1682
2015-09-30 12:20:39 +02:00
Christian Prochaska
3bf050ed30 qt5: use signal handler for input processing
Fixes #1707
2015-09-30 12:20:39 +02:00
Emery Hemingway
45bcb7f48f Override libc access in Noux plugin
Fixes #1706
2015-09-30 12:20:39 +02:00
Stefan Kalkowski
37bae7bc1f hw: simplify IPC node's state model (fix #1691)
Merge the Ipc_node class' state PREPARE_AND_AWAIT_REPLY and AWAIT_REPLY,
as well as PREPARE_REPLY ans INACTIVE into one.
2015-09-30 12:20:39 +02:00
Emery Hemingway
5d434944eb libc: support access() in plugins
Fixes #1703
2015-09-30 12:20:38 +02:00
Alexander Boettcher
9b21c88bc6 base: handle unsupported printf commands better
The commit consumes the argument of a unsupported printf command.

Without the commit - a subsequent command uses the argument of the preceding
command, which may cause memory corruption or page faults for sequences using
string commands, e.g.

Genode::printf("%#x %s\n", 0x20, "Test");

'#' is not supported by Genode::printf. In this scenario a pagefault at
address 0x20 is caused.

Fixes #1701
2015-09-30 12:20:38 +02:00
Christian Prochaska
5309bda8b6 libc_lwip: 'fcntl()' fix
The 'O_NONBLOCK' flag has different numerical values in lwip and in the
libc, which prevented the correct setting of nonblocking socket mode.

Fixes #1699
2015-09-30 12:20:38 +02:00
Alexy Gallardo Segura
de87ecfc62 foc_odroid_x2: basic configuration for gpio pins
Fixes #1669
2015-09-30 12:20:38 +02:00
Alexy Gallardo Segura
49b3d520a9 exynos: generalize Exynos5 fb_drv for Exynos4/5
Fixes #1678
2015-09-30 12:20:37 +02:00
Christian Helmuth
24b1f269be Remove Packet_ref from File_system::Packet_descriptor
The intention of Packet_ref was to allow clients to place opaque
references into the packet descriptor itself, which could be observed on
packet completion. Currently no component in our sources uses this
feature and beyond that it is questionable if it should be used at all:
If the server tampers with the ref the client may easily be confused
into observing an incorrect or invalid context. It seems better to
remove the opaque context from the descriptor and leave the actual
implementation to the client and its needs.
2015-09-30 12:20:37 +02:00
Christian Helmuth
9212fc0dc6 noux: adapt run scripts to platform_drv.inc reqs 2015-09-30 12:20:37 +02:00
Christian Helmuth
50164336af linux: explicitly add well-known include paths
Unfortunately, the 'gcc -dumpmachine' magic does not suffice on all
Linux distros, so we just add the well-known paths for i386-linux-gnu
and x86_64-linux-gnu.

Fixes #1694
2015-09-30 12:20:37 +02:00
Norman Feske
0f052357ef init: propagate exit conditions of children
This patch extends the configuration concept of init with an additional
sub node for the <start> node:

<start name="noux">
  <exit propagate="yes"/>
  ...
</start>

If the 'propagate' attribute is set to "yes", the exit of the respective
child will appear to init's parent as the exit of the entire init
subsystem.

Fixes #1686
2015-09-30 12:20:36 +02:00
Emery Hemingway
686f53a5c3 fs_log: merge option, increase message buffer
Maximum amount of in-transit packets is TX_QUEUE_SIZE*2 + 1

Issue #1538
2015-09-30 12:20:36 +02:00
Emery Hemingway
ce1e6c16fb fs_log: new log file server using native FS sessions
Fixes #1538
2015-09-30 12:20:36 +02:00
Emery Hemingway
7ce19216f4 VFS: symlink file system
add symlinks to a VFS tree with <symlink name="..." target="..."/>

Issue #1648
Fixes #1653
2015-09-30 12:20:36 +02:00
Emery Hemingway
4a5b7be4e7 TAR VFS: dereference hard links when opening files
Fixes #1636
Issue #1653
2015-09-30 12:20:35 +02:00
Stefan Kalkowski
8c168d7943 hw: use weak pointer when resolving a page-fault
Fix #1674
2015-09-30 12:20:35 +02:00
Alexander Boettcher
be9e157a3d wm: free up weak pointers during view destruction
Fixes #1675
2015-09-30 12:20:35 +02:00
Reinier Millo Sánchez
7db3e461ca gpio: dummy compilation unit to link valid target
Fixes #1683

Signed-off-by: Reinier Millo Sánchez <rmillo@uclv.cu>
2015-09-30 12:20:35 +02:00
Stefan Kalkowski
5cf8c49cb8 libports: prevent dummy target warnings
Fix #1681
2015-09-16 13:58:50 +02:00
Christian Helmuth
bc2c7db4e9 vbox: check for iasl/yasm on prepare 2015-09-16 13:58:50 +02:00
Stefan Kalkowski
ed52d5a211 Introduce 'spec' subdirectories to outline aspects
Instead of holding SPEC-variable dependent files and directories inline
within the repository structure, move them into 'spec' subdirectories
at the corresponding levels, e.g.:

  repos/base/include/spec
  repos/base/mk/spec
  repos/base/lib/mk/spec
  repos/base/src/core/spec
  ...

Moreover, this commit removes the 'platform' directories. That term was
used in an overloaded sense. All SPEC-relative 'platform' directories are
now named 'spec'. Other files, like for instance those related to the
kernel/architecture specific startup library, where moved from 'platform'
directories to explicit, more meaningful places like e.g.: 'src/lib/startup'.

Fix #1673
2015-09-16 13:58:50 +02:00
Christian Helmuth
6cdb823187 Prevent libc file-system tests on hw_zynq 2015-09-09 15:14:30 +02:00
Christian Helmuth
ebd0796fc0 run: plugin for Gembird EnerGenie powerplug
The plugin works just like the netio plugin and uses the following
parameters

  --power-off-energenie-host       network address of device
  --power-off-energenie-password   password for device
  --power-off-energenie-port       target port of device
2015-09-09 15:14:30 +02:00
Christian Helmuth
539e5212ab run: rename powerplug to netio
The run plugin is not generic and works for NETIO4/NETIO230 powerplugs
only. Further, this opens the path for other vendor-specific powerplug
plugins.

Note, the plugin parameter for the addressed powerplug was renamed to

  --power-on-netio-host  resp.
  --power-off-netio-host
2015-09-09 15:14:30 +02:00
Christian Prochaska
6e15c6b707 wifi_drv: enable support for iwl7265
Fixes #1671
2015-09-09 15:14:30 +02:00
Christian Helmuth
5230adfd63 wifi: pseudo library to install firmware
The patch prevents linking wifi_drv on each build.
2015-09-09 15:14:29 +02:00
Stefan Kalkowski
28fdc51a76 foc: delete IPC gates on cap session destruction
To correctly delete all IPC gates created via a CAP session, all
capabilities created have to be stored. Otherwise we leak kernel
objects within Fiasco.OC permanently.

Fix #702
2015-09-09 15:14:29 +02:00
Stefan Kalkowski
acc46f70b7 codezero: remove support from Genode (fix #1668) 2015-09-09 15:14:29 +02:00
Josef Söntgen
7898113f99 os: add sporadic sound test
This scripts starts two Audio_out session clients. These clients
access the soundcard via the mixer. The first client simply streams
a sample file in a loop while the second client generates a click
sound when any key is pressed.

Issue #1666.
2015-09-09 15:14:29 +02:00
Josef Söntgen
a9569eb41e mixer: advance position before mixing
Sometimes, the play position in stream is behind the out stream, mostly
because of timing issue. In this case, the mixer will produce invalid
packets which in return will lead to looping on an invalid packet in
the audio_drv.

Issue #1666.
2015-09-09 15:14:29 +02:00
Josef Söntgen
7d12bdc8bc dde_bsd: change packet processing
Instead of looping the whole queue, the driver now loops on the first
invalid packet. In any case it will send a progress signal to its
client.

Fixes #1666.
2015-09-09 15:14:29 +02:00
Martin Stein
349c15dfe4 timer test: be more tolerant in periodic test
For some platforms (at least hw_zynq on Qemu), the measured time of the
periodic timeout test exceeded the maximum that was previously
calculated without any tolerance. Most likely, this is not a malfunction
of the test subject as the error is pretty small and, of course,
measuring the time produces overhead itself. Introducing a tolerance of
only 0.1% fixes the problem.

Fixes #1599
2015-09-09 15:14:28 +02:00
Johannes Schlatow
be994641ef timer: Add Zynq-7000 support (QEMU)
Ref #1599
2015-09-09 15:14:28 +02:00
Johannes Schlatow
40b31876d2 base-hw: Add basic Zynq-7000 support (QEMU)
Ref #1599
2015-09-09 15:14:28 +02:00
Stefan Kalkowski
458b4d6fc4 base: redesign object pool using lambda interface
Instead of returning pointers to locked objects via a lookup function,
the new object pool implementation restricts object access to
functors resp. lambda expressions that are applied to the objects
within the pool itself.

Fix #884
Fix #1658
2015-09-09 15:14:28 +02:00
Martin Stein
555835c95b hw: unlock kernel before context propagation
Propagating the user context-pointer from C++ code to the mode
transition assembly doesn't touch any CPU global data. Thus, we can
reduce the in-sync window.

Fixes #1223
2015-09-09 15:14:27 +02:00
Martin Stein
91cb3decdb hw_x86_64: move Cpu_context stuff to extra unit
Other platforms implement Kernel::Cpu_context stuff in
kernel/cpu_context.cc. On x86_64, it was implemented in
kernel/thread.cc. The commit fixes this inconsistency to the other
platforms.

Ref #1652
2015-09-09 15:14:27 +02:00
Martin Stein
4e98a0f64a hw: get rid of kernel/thread_* files
The distinction between Kernel::Thread and Kernel::Thread_base is
unnecessary as currently all Hw platforms would have the same content in
the latter class. Thus I've merged Kernel::Thread_base into
Kernel::Thread. Thereby, Kernel::Thread_event can be moved to
kernel/thread.h.

Ref #1652
2015-09-09 15:14:27 +02:00
Alexander Boettcher
dd9793cdc7 hw: show ip and sp during unresolvable pagefault
Issue #1652
2015-09-09 15:14:27 +02:00
Alexander Boettcher
c5877b5575 hw: remove access_thread_regs syscall
Issue #1652
2015-09-09 15:14:27 +02:00
Alexander Boettcher
6e481127ce hw: increase stack size for thread test
Stack size of cpu helper is insufficient if a exception is thrown during
'test_create_as_many_threads()'

Related to #1652
2015-09-09 15:14:27 +02:00
Christian Helmuth
ae43d13b90 Remove always_hybrid spec
With always_hybrid also the lx_hybrid_x86 platform in
tool/create_builddir vanishes.

Fixes #1619
2015-09-09 15:14:27 +02:00
Alexander Boettcher
b6c440852b vbox: allocate guest memory in chunks
Fixes #1575
2015-08-31 13:12:52 +02:00
Christian Helmuth
78708386c5 version: 15.08 2015-08-31 12:12:31 +02:00
Norman Feske
7e7e94d3ca News item for Genode 15.08 2015-08-31 12:08:25 +02:00
Norman Feske
891968b777 Release notes for version 15.08 2015-08-31 12:08:25 +02:00
Christian Helmuth
41be88667f doc: update components, porting guide, README 2015-08-31 09:09:23 +02:00
Christian Helmuth
f4cadb8406 qt5: adapt to audio_drv rename 2015-08-31 09:09:23 +02:00
Christian Helmuth
30db0c5364 hw: prevent compiler warning 2015-08-31 09:09:23 +02:00
Christian Helmuth
ff343eab9c vbox_pointer: remove obsolete boot modules 2015-08-31 09:09:23 +02:00
Reinier Millo Sánchez
750b10b957 gpio: examples for GPIO driver 2015-08-31 09:09:23 +02:00
Reinier Millo Sánchez
98da445269 gpio: RaspberryPI GPIO driver
Fixes #1654
2015-08-31 09:09:23 +02:00
Reinier Millo Sánchez
433f859cb9 foc_odroid_x2: USB support
Fixes #1627
2015-08-31 09:09:22 +02:00
Alexander Boettcher
6776d6c9a8 nova: extend platform test by PAT test
Issue #1566
2015-08-31 09:09:22 +02:00
Alexander Boettcher
0f2c2a675a nova: support write combining
Fixes #1566
2015-08-31 09:09:22 +02:00
Norman Feske
e304bd926e Framebuffer throughput test
Issue #1566
2015-08-31 09:09:22 +02:00
Stefan Kalkowski
9f1beaa036 hw_x86_64: use 'muen' SPEC to implement aspect 2015-08-31 09:09:22 +02:00
Reto Buerki
750c4ad81d Add tutorial for base-hw on Muen
The tutorial describes how to build a Genode scenario using the
base-hw x86_64_muen target and run it as a subject on the Muen SK.
2015-08-27 13:48:26 +02:00
Reto Buerki
ad411e1a90 hw_x86_64_muen: Implement PIC take_request()
The Muen-specific PIC implementation provides the irq_occurred()
function which is used to register an IRQ with the PIC upon thread
exception.

The occurred IRQs are stored in a boolean array internally and handed
out to a CPU via take_request().
2015-08-27 13:48:25 +02:00
Reto Buerki
fa26805fd7 hw_x86_64_muen: Implement paravirt timer driver
The driver uses the timer page containing a vector and timer value to
implement the start_one_shot() and value() functions. The timer value
designates the absolute tick count of the next event.

The address of the time page is acquired using the get_memregion_info
Sinfo API function.
2015-08-27 13:48:25 +02:00
Reto Buerki
4a51f933ce hw_x86_64_muen: Add initial pagetables file
The initial pagetables for hw_x86_64_muen specify an identity mapping
from 2MiB to 1GiB plus mappings for the paravirt pages (sinfo, timer,
...).
2015-08-27 13:48:25 +02:00
Reto Buerki
c434a5ceec hw_x86_64_muen: Add C++ implementation of Sinfo API
The Muen Sinfo API is used to retrieve information about the execution
environment of a subject running on the Muen Separation Kernel.

While the C++ API is defined in sinfo.h, musinfo.h specifies the
internal format of the information stored in the Sinfo pages provided by
the Muen SK. It is a copy of the file contained in the libmusinfo
library of the Muen project. That is the reason why the coding style in
this file differs from the official style.
2015-08-27 13:48:25 +02:00
Reto Buerki
5036b96c11 hw_x86_64_muen: Add fake Timer::ms_to_tics impl
This makes the scheduler happy and it starts scheduling threads:

Booting Muen kernel v0.6.0-329-gdd545fe-UNCLEAN
0004|kernel initialized
0004|Genode 14.11-400-gecee95b
0004|int main(): --- start init ---
0004|[init -> test-printf] -1 = -1 = -1
2015-08-27 13:48:25 +02:00
Adrian-Ken Rueegsegger
21fb356cd4 hw_x86_64_muen: Provide Muen-specific serial
Subjects on Muen are not allowed to access the BIOS data area. Instead a
serial console is emulated on the fixed I/O port 0x3f8.
2015-08-27 13:48:25 +02:00
Reto Buerki
11bfbb3532 run: Use raw binary object for base-hw on Muen 2015-08-27 13:48:25 +02:00
Reto Buerki
96a0820e89 Add Muen-specific platform_support.cc
The file specifies Muen-specific MMIO regions: Sinfo and paravirt timer
pages.
2015-08-27 13:48:25 +02:00
Adrian-Ken Rueegsegger
c310e335ae hw_x86_64: Enable more specialized setup_irq_mode()
Move Platform::setup_irq_mode function from x86 platform_support.cc to
x86_64 specific file. This will enable the upcoming x86_64_muen platform
to provide a separate implementation.
2015-08-27 13:48:25 +02:00
Reto Buerki
dcd20f1566 hw: skeleton for building x86_64_muen
The hw_x86_64_muen platform is a x86/64 base-hw kernel which runs as
isolated subject (guest) on the Muen Separation Kernel (SK) [1].

The platform is implemented as an extension to hw_x86_64 replacing the
PIC and timer drivers with paravirtualized variants. The skeleton
contains a dummy PIC and timer implementation for now.

[1] - http://muen.sk
2015-08-27 13:48:24 +02:00
Reto Buerki
3420cc0b71 Add hw_x86_64_muen to create_builddir tool 2015-08-27 12:36:15 +02:00
Christian Prochaska
0885ebd5b1 vbox: make interruptibility state check conditional
If the guest is not in an interruptible state when the recall handler is
called, an assertion fails. Since the assertion is only relevant if the
recall handler was called during IRQ injection, it should be moved into
the corresponding conditional block which already has the assertion for
the 'IF' flag.

Fixes #1661
2015-08-27 12:05:18 +02:00
Christian Prochaska
26924c9bcd vbox: let the first EMT thread handle timers
By default, the EMT thread of the last vCPU handles expired timers. When
running VirtualBox with 2 vCPUs, it sporadically happens that the EMT
thread of the second CPU clears an 'interrupt pending' flag for the first
vCPU after changing the state of a timer device model, which is not
expected by our Genode-specific code (failed assertion '!_irq_win' in the
recall handler).

The problem did not occur yet when letting the EMT thread of the first
vCPU handle the expired timers, which is done by this commit as an interim
fix until the problem has been further investigated.

Issue #1660
2015-08-27 12:04:26 +02:00
Alexander Boettcher
b438181188 nova: use updated r9 kernel branch
Fixes a kernel regression (because of using builtin_retrun_address)
introduced by the out-of-memory commits.

Issue #1601
2015-08-27 12:02:16 +02:00
Alexander Boettcher
9cd85ddcf7 hw: call lock_for_destruction in platform_pd
Issue #1607
2015-08-25 10:11:07 +02:00
Christian Helmuth
10aba44982 thread: increase test timeout
Because of recently added test cases the script exceeds the timeout on
some embedded boards and base-hw.
2015-08-24 11:38:53 +02:00
Adrian-Ken Rueegsegger
ec92e9c3df hw_x86_64: Only handle masking of I/O APIC IRQs
Ignore toggle requests for vectors not assigned to the I/O APIC.

Fixes #1651
2015-08-21 11:00:59 +02:00
Adrian-Ken Rueegsegger
780863007d hw_x86_64: Use PAUSE instruction in wait_for_interrupt
Add spin loop hint by means of the PAUSE instruction since
wait_for_interrupt is called in a busy loop. This should improve processor
performance and reduce power consumption.

Note: HLT cannot be used since it is a privileged instruction and the idle
      thread is executed in userspace.
2015-08-21 11:00:59 +02:00
Reto Buerki
2a0b6fb541 hw_x86_64: Factor out _core_only_mmio_regions function
Move the _core_only_mmio_regions function to the
x86_64/platform_support.cc file. This is required to make it overridable
for other platforms deriving from x86.
2015-08-21 11:00:59 +02:00
Adrian-Ken Rueegsegger
afb827a96f hw_x86_64: Restore kernel SS on MT entry 2015-08-21 11:00:59 +02:00
Adrian-Ken Rueegsegger
0e065c162b hw_x86_64: Log unknown exceptions of Cpu_idle 2015-08-21 11:00:59 +02:00
Adrian-Ken Rueegsegger
c2ff0ae9d4 Minor cleanup fixes
- Fix spelling errors
- Remove extra semicolons
- Remove extra spaces

Fixes #1650
2015-08-21 11:00:59 +02:00
Adrian-Ken Rueegsegger
d2564442d4 vbox: Drop duplicate RDPMC exiting VM-control 2015-08-21 11:00:58 +02:00
Christian Helmuth
e2f2ac567e report_rom: deny requests for existing reports
If a requested report already exists the request is denied with
Invalid_args.

Further, I dusted the report_rom test and added it to the
autopilot list.
2015-08-21 11:00:58 +02:00
Alexander Boettcher
9a326bed2d nova: revoke unused caps after IPC
Fix issue introduced during #905
2015-08-21 11:00:58 +02:00
Norman Feske
795375796f nitpicker: prevent deadlock in destroy_view
Fixes #1649
2015-08-21 11:00:58 +02:00
Norman Feske
9402261dda os: Add Handle_registry::has_handle
Issue #1649
2015-08-21 11:00:58 +02:00
Norman Feske
b4e3e99cc8 base: add Weak_object::weak_ptr const
Issue #1649
2015-08-21 11:00:58 +02:00
Josef Söntgen
3f3b3a100e vbox: sidestep audio subsystem
There are currently some issue with the mixing/filtering code of vbox.
So instead of using the audio subsystem to do filtering and mixing we
bypass it to get better audio qualitiy. That means that the device
model of the VM has to use the same sample rate as the Audio_out/in
sessions, however.

Issue #1647.
2015-08-21 11:00:58 +02:00
Josef Söntgen
5be5191645 vbox: enable preliminary audio support
With this commit preliminary audio support in VirtualBox is enabled.
The backend supports playback as well as recording sounds from within
a guest VM. Depending on how the guest configures the device model
the audio output may sound disorted. If the guest uses buffers that
are too small, i.e., 10 ms or less, frequent buffer underruns will
occure.

To get this low-latency one has also to increase vbox' update hz
to 200 (i.e., 5ms).

Fixes #1647.
2015-08-21 11:00:57 +02:00
Josef Söntgen
a6c5716796 os: add invalidate_all packets to Audio_out
When a stream was stopped it may still contain valid packets that
will be played automatically when the stream is started again. The
invalidate_all() method may be called after stopping the stream to
prevent this.

Issue #1647.
2015-08-21 11:00:57 +02:00
Christian Helmuth
e8c9125d9f Pseudo target for vfs_jitterentropy
Run script depending on VFS plugins (i.e., shared objects) like
vfs_jitterentropy.lib.so have to state this dependency rather the actual
binaries linked against libc. The latter introduces a library dependency
that is just not there. For example, the dependency on vfs_jitterentropy
is a result from the config node for libc which automatically loads the
plugin.
2015-08-21 11:00:57 +02:00
Christian Helmuth
32da844f01 libc: refactor socket operations 2015-08-21 11:00:57 +02:00
Christian Helmuth
47609dda40 vesa: calculation of default-mode table entries 2015-08-21 11:00:57 +02:00
Norman Feske
26524edbf4 alarm: reposition reprogrammed alarms in queue
The alarm library failed to handle the case properly where an already
scheduled alarm gets rescheduled before it triggered. Even though the
attempt to reschedule the alarm (twice insertion into alarm queue) was
detected, this condition resulted in the mere modification of the
alarm's parameters while keeping the alarm's queue position unchanged.
This, in turn, may violate the invariant that all enqueued alarm objects
are strictly ordered by their deadlines. The patch handles the case by
dequeuing the alarm object before reinserting it into the queue at the
right position.

Fixes #1646
2015-08-21 11:00:57 +02:00
Norman Feske
e410ecc995 timer test: trigger timeout-masking bug
Issue #1646
2015-08-21 10:59:46 +02:00
Josef Söntgen
4992903233 Rename audio_out_drv to audio_drv
With the introducation of the Audio_in session interface it makes
sense to rename the current available audio drivers. At the moment
only the dde_bsd audio_drv supports Audio_out as well as Audio_in.
The Linux audio_drv only supports Audio_out (there is no demand for
Audio_in support currently) but is renamed nonetheless to make it
easiert to write generic run scripts.

Issue #1644.
2015-08-21 10:59:46 +02:00
Josef Söntgen
fb761283a2 dde_bsd: add Audio_in test application
This test is a simple audio monitor that plays all recorded frames
back.

Issue #1644.
2015-08-21 10:59:46 +02:00
Josef Söntgen
8a34d21577 dde_bsd: add recording support to audio driver
The driver is now able to record audio samples. In contrast
to playback it has to be enabled explicitly by setting the
configuration attribute 'recording' to 'yes'. Playback is by
default enabled but may be disabled by setting 'playback' to
'no'. Furthermore it is now possible to configure the mixer
from the configuration. For now, the interface used by vanilla
OpenBSD is just exported.

The following snippet shows how to enable and configure recording
on an Thinkpad X220 where the headset rather than the internal
mic is used as recording source:

! <start name="audio_out_drv">
!   <resource name="RAM" quantum="8M"/>
!   <provides>
!     <service name="Audio_out"/>
!     <service name="Audio_in"/>
!   </provides>
!   <config recording="yes">
!     <mixer field="outputs.master" value="255"/>
!     <mixer field="record.adc-0:1_source" value="sel2"/>
!     <mixer field="record.adc-0:1" value="255"/>
!   </config>
! </start>

In addition to selecting the recording source the playback as
well as the recording volume are set to 255 (maximum).
Information about the available mixers and settings in general
may be obtained by setting the 'verbose' to 'yes' in the config
node.

Issue #1644.
2015-08-21 10:59:46 +02:00
Josef Söntgen
c4e2322a5d dde_bsd: ignore HDMI/DP devices (00:03:00)
Unfortunatly, there is no support for any HDMI/DP based HDA codecs in
this driver. Therefore we try to filter out known devices (normally the
PCI device on 00:03.00). This could also be done in the platform_drv's
configuration by explicitly naming the BDF but for better or worse that
will not work when using a wildcard class like HDAUDIO which is done in
generic run scripts.

Issue #1644.
2015-08-21 10:59:46 +02:00
Josef Söntgen
61f5ca1e4d os: add Audio_in session for recording audio
In line with the Audio_out session a Audio_in session is used to
record audio frames. Like in the Audio_out session shared memory
in form of the Audio_in::Stream is used to transport the frames
from the server to the client. These frames consist of single
channel (mono) samples. An Audio_in::Packet always contains a full
period of frames.

A Audio_in server captures frames and puts them into the
Audio_in::Stream. To do so the server allocates a Audio_in::Packet
from the packet queue embedded in the Audio_in::Stream. If the queue
is already full, the server will override packets and notify the
client by submitting the 'overrun' signal. The client has to cope
with this situation, e.g., by saving packets more frequently.

A client will also receive a 'progress' signal from the server when
a new Audio_in::Packet was submitted to the packet queue.

Fixes #1644.
2015-08-21 10:59:46 +02:00
Josef Söntgen
81599f89ea os: decrease Audio::PERIOD to lower latency
To archive lower latency the length of a period was reduced from
2048 (~46ms) to 512 (~11.6ms) samples.

It should be noted that this change probably breaks audio in Qemu on
most systems.

Issue #1644.
2015-08-21 10:59:45 +02:00
Josef Söntgen
2843a70c0e os: add missing header in Audio_out session header
Include <base/signal.h> directly in the session header to make it
self contained rather than depend on including it outside.

Issue #1644.
2015-08-21 10:59:45 +02:00
Christian Helmuth
5514671630 Improve error message on wrong tool chain (fix #1642)
Following the proposal of @jameysharp.
2015-08-21 10:59:45 +02:00
Alexander Boettcher
df662cc2f3 nova: use kernel branch with quota handling
Fixes #1601
2015-08-21 10:59:45 +02:00
Stefan Kalkowski
eafe5e81e3 core: unify and simplify paging code (Fix #1641)
For most platforms except of NOVA a distinction between pager entrypoint
and pager activation is not needed, and only exists due to historical
reasons. Moreover, the pager thread's execution path is almost identical
between most platforms excluding NOVA, HW, and Fisco.OC. Therefore,
this commit unifies the pager loop for the other platforms, and removes
the pager activation class.
2015-08-21 10:58:59 +02:00
Christian Prochaska
a574f73005 seoul: dummy 'control register access' VM exit handler
This exit handler is called by the NOVA kernel now when the VM uses PAE
with nested paging and the PDPTE registers need to get updated. With this
commit, an error message is printed if this situation occurs.

Fixes #1640
2015-08-21 10:58:59 +02:00
Christian Prochaska
4c19576d4e vbox: use multiple host CPUs
Fixes #1553
2015-08-21 10:58:59 +02:00
Christian Prochaska
824fb72694 vbox: update the PDPTE registers if needed
Fixes #1638
2015-08-21 10:58:59 +02:00
Christian Prochaska
2337dc03f4 nova: use branch supporting changing PDPTE by VMM
Fixes #1637
2015-08-21 10:58:59 +02:00
Alexander Boettcher
f87c573695 nova: increase default capability selector count
The reference count get increase to use 2 bytes, so we need the double amount
of selectors as before.

Additionally print a message if we run out of capabilities in a server. Since
our rpc framework is now clever enough to detect that for a printf we don't
need to setup a receive window, we may use a printf instead of a die call.
Eases debugging.

Issue #1601
2015-08-21 10:58:58 +02:00
Alexander Boettcher
626b0a68f3 base: increase base-control size for 32bit
It is insufficient for creating threads up to the maximum supported limit
(256 by now).

Issue #1601
2015-08-21 10:58:58 +02:00
Alexander Boettcher
9081653c96 Extend thread test
Issue #1601
2015-08-21 10:58:58 +02:00
Alexander Boettcher
c6943d494b nova: extend platform test to provoke kernel panic
Showcasing the out of memory kernel issue.

One test triggers oom during memory delegation when talking to core pager
thread. Two other test trigger oom during capability delegation in a
server/client scenario for send and reply phase separately.

Issue #1601
2015-08-21 10:58:58 +02:00
Norman Feske
1feaf75605 ram_fs: coding style, license headers
Issue #1635
2015-08-21 10:58:58 +02:00
Emery Hemingway
f996697fd5 VFS: local ram_fs instances
Move FS Node implementations from server/ram_fs to include/ram_fs.
Support embedded ram_fs instances in VFS configurations using <ram/>.
Add 'no space' handling to VFS symlink ops.

Fixes #1635
2015-08-21 10:58:40 +02:00
Christian Prochaska
9d37510d1d vbox: shared folder read/write loop fix
Stop trying to read or write if the backend function reports that 0 bytes
have been read or written.

Fixes #1563
2015-07-21 09:43:15 +02:00
Emery Hemingway
8f4f1ae89c ram_fs: treat symlinks as opaque data
Fixes #1604
2015-07-21 09:41:29 +02:00
Emery Hemingway
2f1db06deb rump_fs/fuse_fs/lx_fs/ram_fs: symlink fixup
Allow symlinks to be passed to the read and write file system utilities.

Disallow writes to symlinks with offsets in file system servers, this is
to ensure that writing the target of a symlink is an atomic operation.

Fixes #1604
2015-07-21 09:40:19 +02:00
Martin Stein
b60f28bee9 run/load/tftp: detect bad directory
If a user has e.g. /tftpboot/x86 as directory and configures
base_dir=/tftboot and offset_dir=/x86, this leads to bad behavior
as the load module creates a symlink

/tftpboot/x86/<builddir> -> <absolut_builddir>

in this case instead of the desired

/tftpboot/x86 -> <absolut_builddir>

Furthermore, the module works on

/tftpboot/x86/config-00-00-00-00-00-00

and

/tftpboot/x86/<builddir>/config-00-00-00-00-00-00

afterwards, which looks bad too. As there is no warning at all, this can
be hard to debug. The commit adds an appropriate check with error message and
exit -1 on an existing directory.

Fixes #1630
2015-07-21 09:38:10 +02:00
Alexander Boettcher
4cf319a9d7 os: avoid blocking on resource request in bomb.run
that are caused by bomb clients.

Issue #1632
2015-07-21 09:36:46 +02:00
Alexander Boettcher
fe4e0702d4 base: contain chunk_size heap consumption
Increase internal chunk size of heap only if an allocation succeeded
beforehand. Otherwise the chunk size increases with every unsuccessful
invocation and a upgrade of the used ram session will be insufficient and of
no use at all.

Fixes #1632
2015-07-21 09:36:46 +02:00
Alexander Boettcher
73f9bb73cd init: don't block for resource upgrades
If some sessions run out of memory in init, resource requests will be issued
to core, which it never will satisfy. Setting some default signal handler
avoids that the default implementation will block init for ever.

Issue #1632
2015-07-21 09:36:46 +02:00
Emery Hemingway
28223e3146 noux: return exit value of init child
Fixes #1634
2015-07-21 09:34:48 +02:00
Norman Feske
7478114b23 Fix freetype download location
The originally used host went down.
2015-07-21 09:30:12 +02:00
Martin Stein
f3e76b3e9a base: use BDA header in base-nova like base-hw
Moves the Bios Data Area header from base-hw to base. Modifies the
base-nova core console that it uses the header as replacement for
the previous BDA bit logic.

Ref #1625
2015-07-21 09:30:12 +02:00
Martin Stein
c6f73d365a unmanaged singleton: allow private constructors
Introduces a class Unmanaged_singleton_constructor that can be declared as
friend to be able to call unmanaged_singleton on classes with a private
constructor. Enables the appliance of the singleton pattern.

Ref #1625
2015-07-21 09:30:12 +02:00
Martin Stein
ba18ab7225 run/cpu_quota: raise measurement precision further
Three things were done:

* Timouts are measured in an asynchronous way to be able to start counters
  after the potentially expensive RPC that starts the timeout.
* Timeouts were increased from 45 and 15 seconds to 60 and 20 seconds
  because at least on Arndale, results were not stable enough.
* Counting is done on 'unsigned long long' instead of 'unsigned' because
  with the higher timeouts, overflows occured.

Fixes #1628
2015-07-21 09:30:12 +02:00
Martin Stein
3c49113e64 timer & hw_arndale: don't use any float ops
The timer driver previously used floating point operations to translate us to
tics and vice versa. This isn't necessary as the rounding error isn't critical
for the given values but expensive which should be avoided in a code path that
must be executed pretty frequent with high priority.

Ref #1628
2015-07-21 09:30:12 +02:00
Alexander Boettcher
dddb536e25 vbox: use initFromSettings for construction VM 2015-07-21 09:30:12 +02:00
Adrian-Ken Rueegsegger
2fe0860ba7 hw_x86_64: Extend inital page tables up to 1 GiB
To avoid future issues with regards to non-existent mappings in the
initial pagetables, extend them to cover the memory range of 2 MiB up to
1 GiB.
2015-07-21 09:30:11 +02:00
Christian Helmuth
ce43ed4c17 hw: load bender before kernel on grub too 2015-07-21 09:30:11 +02:00
Alexander Boettcher
73f7a95627 hw: use bios data area to detect com/uart ports
Fixes #1625
2015-07-21 09:30:11 +02:00
Alexander Boettcher
0b019d0508 base: move x86 uart driver from nova to base
So it can be reused by base-hw-x86 instead of re-writing it.

Fixes #1403
2015-07-21 09:30:11 +02:00
Christian Helmuth
bc827787f4 bender: unconditionally relocate all boot modules
If just one multiboot kernel module was loaded after bender, the
relocation was skipped before. This resulted in a corrupt binary image
on ELF loading if the regions of the boot module and the final program
overlap. Now, all modules are copied below 2 GiB (and out of the way)
before ELF loading.

Fixes #1624

Bender upstream issue is TUD-OS/morbo#4
2015-07-21 09:30:11 +02:00
Stefan Kalkowski
0f05fa6fd4 base: resolve dead lock in weak pointer templates
This commit eliminates the mutual interlaced taking of destruction lock,
list lock and weak pointer locks that could lead to a dead-lock situation
when a lock pointer was tried to construct while a weak object is in
destruction progress.
Now, all weak pointers are invalidated and dequeued at the very
beginning of the weak object's destruction. Moreover, before a weak pointer
gets invalidated during destruction of a weak object, it gets dequeued, and
the list lock is freed again to avoid the former dead-lock.

Fix #1607
2015-07-21 09:30:04 +02:00
Emery Hemingway
64831c63c9 rump_fs: move files using 'renameat'
Fixes #1579
2015-07-21 09:29:41 +02:00
Emery Hemingway
c72c9924d3 init: prios shall not exceed the lowest prio level
Fixes #1570
2015-07-21 09:29:03 +02:00
Josef Söntgen
7e40f5f587 base: use proper Cpu_session when tracing threads
Up to now it was not possible to trace threads that use a different
Cpu_session rather than env()->cpu_session() (as done by VirtualBox).
This problem is now solved by setting the Cpu_session explicitly when
creating the event logger and attaching the trace control area when
creating the thread.

Fixes #1618.
2015-07-21 09:28:26 +02:00
Martin Stein
eaf4150c7b cpu_quota.run: support X86
The timer driver on X86 needs CPU quota with highest priority as it
frequently has to interrupt the counters to update the PIT.
On ARM this makes no difference in the test results as ARM timer
drivers, once configured, can sleep until the end of the timeouts.
On X86 we raise the error tolerance to 2% (default 1%) to compensate
the error caused by the timer.

Fixes #1621
2015-07-21 09:28:25 +02:00
Martin Stein
53e742fb02 cpu_quota.run: don't get stuck on zero counters
The test previously complained about divide-by-zero if the counters were all
zero.

Fixes #1616
2015-07-21 09:28:25 +02:00
Martin Stein
413741e58c cpu_quota.run: print all errors
Printing all errors and the goal values instead of exiting at the first
error allows for faster analysis of problems with the CPU-quota
mechanism.

Ref #1616
2015-07-21 09:28:25 +02:00
Martin Stein
5189055396 cpu_quota.run: fix bug in error detection
The test always succeeded because I forgot to set the error tolerance from
my debugging value 1 back to the correct value 0.01 before commiting the
test.

Ref #1616
2015-07-21 09:28:25 +02:00
Alexy Gallardo Segura
c14fe7e6c7 foc: Odroid-X2 basic support
Fix #1597
2015-07-21 09:28:25 +02:00
Alexander Boettcher
c42e770384 detach ds from all rm sessions before destruction
Fixes #1617
2015-07-21 09:28:24 +02:00
Martin Stein
bc8a5cbb2a hw: fix CPU-quota bug in Platform_thread
Since the HW-kern-caps commit, there was a bug in the Platform_thread
constructor. When called for a user thread, the constructor stated 0
as CPU quota at the Kernel_object instead of its quota input-paramater.

Fixes #1620
2015-07-07 19:48:08 +02:00
Christian Helmuth
af5c03edaf vfs: depend on ld library
So, users of VFS need not to state this dependency explicitly.
2015-07-07 19:48:07 +02:00
Alexander Boettcher
9506c89f88 nova: fix memory leaks / invariant TSCs
- free up kernel memory of empty slabs (if already one empty slab is in
  place)
- free up more page table entries
- handle CPUs with invariant TSCs gracefully

  Genode/Nova running on CPUs without the invariant TSC feature may seem
  to 'hang'. The referenced commit of the nova branch fixes the issue
  for some older Intel CPUs.

Fixes #1615
2015-07-07 19:48:07 +02:00
Alexander Boettcher
cb1e0711ec bomb.run: support configuration of many parameters
Adjust bomb to specify the various hard-coded parameters and set up bomb.run
this way that it manages at our test machine to succeed in the given time.

Issue #1615
2015-07-07 19:48:07 +02:00
Alexander Boettcher
4ee8919f29 nova: use 16bit for reference count of caps
Bomb and any server may generate references to capabilities exceeding 256 -
use a 16bit counter until the cap handling in Genode gets unified.

Additionally try to print a warning, instead of dying, if we get cap reference
count under or overflow.

Issue #1615
2015-07-07 19:48:07 +02:00
Christian Helmuth
b1dd5fdf1d Prevent warning in libc_noux
__INT_MAX__ equals 2147483647 which are roughly 68 years.
2015-07-07 19:48:07 +02:00
Norman Feske
0cd93c64aa ldso: add lx_environ to symbol map
This symbol must be exported to build dynamically-linked executables on
the lx_hybrid_x86 base platform.
2015-07-07 19:48:07 +02:00
Sebastian Sumpf
49ae508889 usb_drv: use heap for vmalloc allocations
Do not use slabs for allocations above 64KB, this seems to lead to memory
corruptions and the error described in issue #1613 under certain circumstances.

fixes #1613
2015-07-07 19:48:06 +02:00
Stefan Kalkowski
c951c30d8a base: extend weak pointer test (Ref #1607)
Add a test where a locked pointer shall be taken during object destruction.
Moreover, extend the run-script so it runs on different platforms with
"real" timers.
2015-07-07 19:48:06 +02:00
Josef Söntgen
e6995ecad7 sdl: sync tail pointer in SDL_Audio backend
SDL uses the Audio_out session in streaming fashion. For this reason
the audio might be played with delay of at most the queue size. To
mitigate the effect we synchronize the tail pointer to the current play
pointer when the PlayAudio() function is called by SDL for the first
time.

Fixes #1612.
2015-07-07 19:48:06 +02:00
Stefan Kalkowski
89255c3979 remove Versatile Express board (Fix #1611) 2015-07-07 19:48:06 +02:00
Norman Feske
3c0517fe1f init: use binary name as ROM label
Init used to specify the unique child name as session label when
requesting the binary image of a dynamically linked child. The actual
module name was propagated as "filename" session argument. Since we want
to move towards the sole use of the session label, which can be taken
into account for the session routing, the module name should always be
the last part of a ROM session label.
2015-07-07 19:48:06 +02:00
Norman Feske
785cac7168 decorator: consider partially transparent windows
This patch changes the window manager, the decorator, and the
floating window layouter to propagate the usage of an alpha channel from
the client application to the decorator. This way, the decorator can
paint the decoration elements behind the affected windows, which would
otherwise be skipped.
2015-07-07 19:48:06 +02:00
Norman Feske
ea16c19516 nit_fader.run: fix conditional route 2015-07-07 19:48:05 +02:00
Norman Feske
caa809e593 CPU load display application 2015-07-07 19:48:05 +02:00
Norman Feske
e45e01ee8e gems: HSV-to-RGB color-conversion function 2015-07-07 19:48:05 +02:00
Norman Feske
fd45a70acc dde_linux/wifi: enable IWL device of Lenovo x201 2015-07-07 19:48:05 +02:00
Norman Feske
8b013287ba Simple CPU-time burner application 2015-07-07 19:48:05 +02:00
Norman Feske
503263a8a2 base-nova: consider non-contiguous CPU numbers
This is a follow-up commit to the following two patches:
* base/nova: add idle threads to trace sources
* nova: support to read thread and idle time
2015-07-07 19:48:05 +02:00
Norman Feske
259b127f96 Polygon drawing and rudimentary 3D routines
This patch adds two new painters located at gems/include/polygon_gfx.
Both painters draw convex polygons with an arbirary number of points.
The shaded-polygon painter interpolates the color and alpha values
whereas the textured-polygon painter applies a texture to the polygon.
The painters are accompanied by simplistic 3D routines located at
gems/include/nano3d/ and a corresponding example (gems/run/nano3d.run).
2015-07-07 19:48:04 +02:00
Norman Feske
c74a4fbbe2 wm: decouple decorator and layouter from wm 2015-07-06 12:22:28 +02:00
Norman Feske
a3d78d3779 window layouter: let focus follow the pointer 2015-07-06 12:22:28 +02:00
Norman Feske
0cc314399c nitpicker: make redraw debug feature configurable 2015-07-06 12:22:28 +02:00
Norman Feske
d7256c60a0 window decorator: limit update rate to 50 fps 2015-07-06 12:22:27 +02:00
Norman Feske
69da1fa1ed wm/layouter: Raise window on click 2015-07-06 12:22:27 +02:00
Norman Feske
b4ebefd616 cli_monitor: read subsystem configs from VFS
This patch changes the way how CLI monitor obtains its subsystem
configurations. Originally, this information was provided via the
Genode::config mechanism. But for managing complex scenarios, the config
node becomes very complex. Hence, it is preferrable to have a distinct
file for each subsystem configuration.

The CLI monitor scans the directory '/subsystems' for files ending with
".subsystem". Each file has the same syntax as the formerly used
subsystem nodes.
2015-07-06 12:22:27 +02:00
Norman Feske
f917728ecb vfs: let rom fs update ROM when opening file 2015-07-06 12:22:27 +02:00
Sebastian Sumpf
ffaf65efa0 dde_ipxe: enable BCM57cxx cards
Add tg3 driver files and adjust Genode's ipxe code. Tested on Fiasco.OC only.

issue #1609
2015-07-06 12:22:27 +02:00
Reinier Millo Sánchez
b13b0113c8 usb: kernel-specific USB IRQ number on Raspberry Pi
The USB interrupt number on Raspberry Pi differs betwenn Fiasco.OC and
base-hw, the former uses 9 while the latter uses 17.
2015-07-06 12:22:26 +02:00
Reinier Millo Sánchez
c60d65150e base-foc: support for Raspberry Pi
Fixes #1596
2015-07-06 12:22:26 +02:00
Emery Hemingway
46b7227ef0 cxx: notify parent on abort() (in main thread)
Fixes #1605
2015-07-01 15:09:32 +02:00
Alexander Boettcher
e131235521 hw: support booting via tftp on x86
Fixes #1580
2015-07-01 15:04:35 +02:00
Alexander Boettcher
6f6fb69dc9 hw: keep config file in run directory
Issue #1580
2015-07-01 15:04:35 +02:00
Sebastian Sumpf
4f0251eb00 foc: added Exyonos4 IRQ patches
Fixes #1610
2015-07-01 14:57:43 +02:00
Christian Helmuth
49333bafc2 lxip: do not whine on kfree(0) 2015-07-01 14:46:18 +02:00
Stefan Kalkowski
de4a98c777 hw: avoid using RM session in platform thread
Fix #888
2015-07-01 14:46:18 +02:00
Stefan Kalkowski
f5d5ed9637 hw: use kernel signal API for page-fault signals
Instead of using the Genode user-level signal API to signal page-faults to
a page-fault handler, use the kernel API directly. Thereby the accounting
of signal contexts needed for each paging subject can be done easily.

Fix #956
2015-07-01 14:46:18 +02:00
Stefan Kalkowski
57e2f3affc hw: remove redundant file from signal library
The file seems to be there for historical reasons only.

Ref #956
2015-07-01 14:46:18 +02:00
Stefan Kalkowski
691df908aa core: remove Rm_member from RM session component
Rm_member does not fulfill a useful role, but makes understanding of
the RM session component more difficult.

Ref #956
2015-07-01 14:46:17 +02:00
Stefan Kalkowski
8abd70e6e7 hw: allocate core's page-tables outside of binary
Moreover, be strict when calculating the page-table requirements of
core, which is architecture specific, and declare the virtual memory
requirements of core architecture-wise.

Ref #1588
2015-07-01 14:46:17 +02:00
Stefan Kalkowski
3ee2997198 hw: remove unused declaration in core
Ref #1588
2015-07-01 14:46:17 +02:00
Stefan Kalkowski
dc36b63acb base: turn align_addr tool into constexpr
Thereby, the tool can be used to calculate static compile-time values.
Ref #1588
2015-07-01 14:46:17 +02:00
Stefan Kalkowski
b856bfdfcd base: let bit allocator use fine-grained sizes
Ref #1588
2015-07-01 14:46:17 +02:00
Stefan Kalkowski
6552d47e60 hw: eliminate missing references for consts
Fix #1606
2015-07-01 14:46:16 +02:00
Christian Helmuth
11c31c4432 Prevent silly text-segment alignment on all platforms
We set 'ld -z max-page-size' to 4KiB to prevent the linker from aligning
the text segment to any built-in default (e.g., 4MiB on x86_64 or 64KiB
on ARM). Otherwise, the padding bytes are wasted at the beginning of the
final binary.
2015-07-01 14:46:16 +02:00
Sebastian Sumpf
463c9bec17 Replace Nic driver interface by customizable component
Removed the Nic::Driver implementation. All nic servers now inherit from
Nic::Session_component. Packet stream signals are dispatched to
the 'handle_packet_stream' function within a session component. Thus, nic
servers now have direct access to the packet stream channels, making handling
more flexible.

Adjusted nic_loobpack, dde_ipxe, wifi, usb, lan9118, Linux nic, and OpenVPN to
the new interface.

Fixes #1602
2015-07-01 14:46:16 +02:00
Norman Feske
cc4febd1c2 sd_card: SDHCI quirk for 136-bit responses 2015-07-01 14:46:15 +02:00
Norman Feske
281d3ffba9 hw: free correct IRQ when closing IRQ session
The ~Irq_session_component relied on the IRQ number obtained by the
corresponding kernel IRQ object to mark the IRQ as free at the IRQ
allocator. However, since the kernel IRQ object is initialized not
before the 'sigh' function is called, the IRQ of sessions that
never called 'sigh' could not be freed correctly. This patch fixes
the problem by not relying on the kernel IRQ object for obtaining
the number in the destructor but using the '_irq_number' member
variable instead.
2015-07-01 14:46:15 +02:00
Adrian-Ken Rueegsegger
21c7fa2881 vbox: Fix VMM startup failure message
Use printf format specifier with correct size to log error code which is
if type uint32_t. Also print the error code in hex since this simplifies
lookup as the error values are also defined as hexadecimal values, see
[1].

Fixes #1600

[1] - repos/ports/src/virtualbox/include/xpcom/nsError.h
2015-07-01 14:46:15 +02:00
Stefan Kalkowski
2a351215f4 base: remove pager code from public API
Fix #1593
2015-07-01 14:46:15 +02:00
Christian Helmuth
01f22d4dc6 arora: use github archive for port
code.google.com seems to waste away slowly...
2015-06-22 14:43:41 +02:00
Christian Helmuth
340424db83 wifi: report correct bssid when connected 2015-06-22 14:43:41 +02:00
Stefan Kalkowski
cc58b11998 hw: replace page table allocator with static one
Instead of organizing page tables within slab blocks and allocating such
blocks dynamically on demand, replace the page table allocator with a
simple, static alternative. The new page table allocator is dimensioned
at compile-time. When a PD runs out of page-tables, we simply flush its
current mappings, and re-use the freed tables. The only exception is
core/kernel that should not produce any page faults. Thereby it has to
be ensured that core has enough page tables to populate it's virtual
memory.

A positive side-effect of this static approach is that the accounting
of memory used for page-tables is now possible again. In the dynamic case
there was no protocol existent that solved the problem of donating memory
to core during a page fault.

Fix #1588
2015-06-22 14:43:41 +02:00
Adrian-Ken Rueegsegger
3291ca59a3 hw_x86_64: Extend initial PTs to map 2-16 MiB
Ref #1588
2015-06-22 14:43:41 +02:00
Sebastian Sumpf
696e5cbd54 dde_ipxe: support dis-/reconnect of clients
Unregister callbacks, so rx packets will not be propated to the deleteted
'Driver' object. Initialize ipxe once in the 'Main' object, thus allowing new
session connections.

Fixes #1595
2015-06-22 14:43:40 +02:00
Sebastian Sumpf
d80c1c91be usb_drv: Remove signaling in wait_event_timeout
With the server framework this becomes unnecessary. Also when the 'platform_drv'
has a lower priority, signaling will cause a constant load that starves the
'platform_drv'.

Fixes #1594
2015-06-22 14:43:40 +02:00
Norman Feske
e143084b04 base: fix warning in RPC framework
The recent change of the TRACE session interface triggered the
following warning:

/home/no/src/genode/repos/base/include/base/ipc.h:79:4: warning: ‘ret’ may be used uninitialized in this function [-Wmaybe-uninitialized]
    *reinterpret_cast<T *>(&_sndbuf[_write_offset]) = value;
    ^
In file included from /home/no/src/genode/repos/base/src/core/include/trace/session_component.h:19:0,
                 from /home/no/src/genode/repos/base/src/core/trace_session_component.cc:15:
/home/no/src/genode/repos/base/include/base/rpc_server.h:132:42: note: ‘ret’ was declared here
     typename This_rpc_function::Ret_type ret;

The warning occurs for basic return types (like size_t), which are
indeed not initialized. The variable gets its value assigned by the
corresponding 'call_member' overload, to which the variable is passed as
reference. But the compiler apparently is not able to detect this assignment.

Declaring 'ret' with a C++11-style default initializer fixes the warning.
2015-06-22 14:43:40 +02:00
Christian Helmuth
a844743a2e hello: condition config for various base platforms 2015-06-22 14:43:40 +02:00
Norman Feske
ed88d3aa13 Rename "failsafe" test to "fault_detection"
The name "failsafe" will be used for the upcoming failsafe server
wrapper.

Issue #1592
2015-06-22 14:43:40 +02:00
Norman Feske
712875ade4 os: use the server API in server/nic_loopback
This patch also introduces a run script for testing the component.
2015-06-22 14:43:40 +02:00
Norman Feske
5d678dba9e core: throw Trace::Out_of_metadata in subjects()
While importing trace sources as trace subjects into a TRACE session,
the session quota might become depleted. The TRACE session already keeps
track of the session quota via an allocator guard but the 'subjects' RPC
function missed to handle the out-of-memory condition. This patch
reflects the error condition as an 'Out_of_metadata' exception to the
TRACE client. It also contains an extension of the trace test to
exercise the corner case.
2015-06-22 14:43:39 +02:00
Alexander Boettcher
705257cf22 cxx: show thread name in event of abort
Issue #1591
2015-06-22 14:43:39 +02:00
Alexander Boettcher
be149cc6e4 vbox: increase cpu_session quota for pthreads
Fixes #1591
2015-06-22 14:43:39 +02:00
Norman Feske
a3d287f23d decorator: update hover report on layout change
Fixes #1590
2015-06-22 14:43:39 +02:00
Norman Feske
a23ac5f569 base/nova: add idle threads to trace sources
Issue #813
2015-06-22 14:43:39 +02:00
Christian Prochaska
252a10a859 vbox: fix mouse wheel support
Fixes #1589
2015-06-22 14:43:38 +02:00
Christian Prochaska
a801976727 vbox: dynamic adaptation to screen-size changes
Fixes #1554
2015-06-22 14:43:38 +02:00
Norman Feske
b22f3c67f0 Trace-subject reporter
Issue #813
2015-06-22 14:43:38 +02:00
Norman Feske
959572968d core: provide thread exec times via TRACE service
This patch enable clients of core's TRACE service to obtain the
execution times of trace subjects (i.e., threads). The execution time is
delivered as part of the 'Subject_info' structure.

Right now, the feature is available solely on NOVA. On all other base
platforms, the returned execution times are 0.

Issue #813
2015-06-22 14:43:38 +02:00
Alexander Boettcher
fbe44f08d4 nova: support to read thread and idle time
Issue #813
2015-06-22 14:43:38 +02:00
Norman Feske
4f88fe7bd0 init: fix label buffer size
This patch bases the size of the destination buffer in
'Init::Child_policy_redirect_rom_file' on the maximum label size
instead of the filename size. Otherwise, the use of a long configfile
name (i.e., "trace_subject_reporter.config") in combination with a long
child name ("trace_subject_reporter") would result in a truncated label
string.
2015-06-22 14:43:38 +02:00
Norman Feske
4616f540df report_rom: clear stale content
When replacing a report with a smaller one, the corresponding ROM
dataspace should not contain any traces of the old report. Otherwise,
the consumer of the ROM dataspace may mistake the stale content as
meaningful information. This is particularly annoying when manually
inspecting reports. This patch overwrites the stale content with zeros.
2015-06-22 14:43:37 +02:00
Norman Feske
cc74204801 os: add Reporter::clear method 2015-06-22 14:43:37 +02:00
Norman Feske
2d8a4917a5 base: add Trace::Subject_info::state_name
Issue #813
2015-06-22 14:43:37 +02:00
Taru Karttunen
5fec78fcd6 Add nullptr error handling in part_blk, fix #1586 2015-06-22 14:43:37 +02:00
Josef Söntgen
80893dfcfc platform_drv: specific AUDIO/HDAUDIO class aliases
The alias AUDIO matches audio multimedia device while the HDAUDIO
alias matches HD audio multimedia devices.

Fixes #1581
2015-06-22 14:43:37 +02:00
Christian Prochaska
4cae6c0d12 cxx: report names of uncaught exceptions again
Fixes #1582
2015-06-22 14:43:37 +02:00
Christian Helmuth
1f62446b65 usb: effectively request all IRQ capabilities
Thanks @alex-ab for the remote help.
2015-06-22 14:43:37 +02:00
Christian Helmuth
7dd156c8b6 fuse_fs: prevent annoying warning 2015-06-22 14:43:36 +02:00
Norman Feske
68c6052485 report_rom: zero-terminate reports 2015-06-22 14:43:36 +02:00
Christian Helmuth
7897e52235 vbox_pointer: policy-based shape selection
Fixes #1557
2015-06-22 14:43:36 +02:00
Christian Helmuth
178f2c0e88 reporter: support reporting data buffers
Issue #1557
2015-06-22 14:43:36 +02:00
Emery Hemingway
cec2dd3b3f unify file system utilities to os/include/file_system
Fixes #1564
2015-06-22 14:43:36 +02:00
Alexander Boettcher
c72ea84bcd pci: fix irq re-routing discovery
The commit handles the case that a host bridge device is not at 0:0.0 located.

Issue #1547
2015-06-22 14:43:36 +02:00
Stefan Kalkowski
f78aaf2234 hw: seal capability leak (fix #1568)
Do not initially transfer UTCB dataspace and parent capability to a thread
that is no main thread.
2015-06-22 14:43:35 +02:00
Norman Feske
fcf35a0397 report_rom: add 'verbose' config attribute 2015-06-22 14:43:35 +02:00
Norman Feske
5317cca031 base/allocator.h: clarify use of delete operator
Issue #1571
2015-06-22 14:43:35 +02:00
Stefan Kalkowski
b64f23d4c3 hw: free page tables (fix #1573) 2015-06-22 14:43:35 +02:00
Stefan Kalkowski
409ac1468e core: implement core allocator's free (ref #1573) 2015-06-22 14:43:35 +02:00
Norman Feske
6f167b449c Let XML generator append a trailing newline
By appending a newline to the generated XML data, we prevent the output
from messing with the command prompt when using 'cat' on a shell.
Futhermore, when using line-buffered output, the trailing newline
ensures that the output gets gets properly flushed.
2015-06-22 14:43:35 +02:00
Norman Feske
613d208045 Fix comment 2015-06-22 14:43:34 +02:00
Alexander Boettcher
1f40d9de6a pci: convert to platform_drv
Fixes #1542
2015-06-22 14:43:34 +02:00
Alexander Boettcher
32e792dc74 libegl: remove i915 gallium support 2015-06-22 14:43:34 +02:00
Christian Helmuth
3d7b865251 dynamic_rom: fix returned condition 2015-06-22 14:43:34 +02:00
Norman Feske
4f927f651b core: handle IRQ sessions by separate entrypoint
Fixes #1572
2015-06-22 14:43:34 +02:00
Alexander Boettcher
52110b9d89 os: remove dde_kit
Issue #1565
2015-06-22 14:43:34 +02:00
Sebastian Sumpf
e1be0b3f67 wifi: remove dde_kit
Fixes #1565
2015-06-22 14:43:33 +02:00
Sebastian Sumpf
146b34bf40 lxip: remove dde_kit
issue #1565
2015-06-22 14:43:33 +02:00
Sebastian Sumpf
0a1664b892 usb_drv: remove dde_kit
issue #1565
2015-06-22 14:43:33 +02:00
Sebastian Sumpf
131758eae0 dde_linux: lx utility library
Issue #1565
2015-06-09 11:12:39 +02:00
Alexander Boettcher
1c38d4903b x86: use report_rom for acpi and pci driver
Issue #1542
2015-06-09 11:00:12 +02:00
Norman Feske
66e5796017 nitpicker: fix Domain_registry destructor
When reloading the nitpicker configuration, the destructor would get
stuck, trying to destroy the same object again and again.
2015-06-09 11:00:12 +02:00
Alexander Boettcher
852a250e03 run: fix netperf* perf measurement extraction
The result of the second run (TCP_MAERTS) gets extracted wrongly - due to the
change introduced by commit "run: always append to output buffer"
(Issue #1327). The output buffer is no longer reseted between several
run_genode_until invocation within a run script.
2015-06-09 11:00:11 +02:00
Norman Feske
ef9c745e42 ldso: add memcpy and memset to symbol.map
On ARM, the compiler generates calls to memcpy and memset. Most
dynamically linked programs use the libc, which provides these
functions. However, if a dynamically linked program does not use the
libc (e.g., noux/minimal or the new version of cli_monitor), those
symbols remain unresolved. By adding them to ldso's symbol.map, the
dynamic linker will resolve them with the functions of the cxx
library, which is part of the dynamic linker.

Issue #1561
2015-06-09 11:00:11 +02:00
Christian Helmuth
4004a3a9ca cpu_quota: pre-define variables in run script
If a regexp does not match but the variable is used later, the script
exits with an error like

  can't read "slow_quota_sp": no such variable
2015-06-09 11:00:11 +02:00
Alexander Boettcher
8ccac9a3bb pci: fix 'ALL' policy rule handling
Related to #1541.

Fixes #1559
2015-06-09 11:00:11 +02:00
Norman Feske
65837e8ae9 wifi: fix condition for non-protected connections 2015-06-09 11:00:11 +02:00
Norman Feske
167925ab76 vfs: add Vfs_handle::Guard utility
Issue #1561
2015-06-09 11:00:11 +02:00
Norman Feske
e3be65833f vfs: decouple file-system factory from libc
This patch moves the VFS file-system factory to a separate vfs library
that is independent from libc. This enables libc-less Genode programs to
easily use the VFS infrastructure.

Fixes #1561
2015-06-09 11:00:10 +02:00
Christian Prochaska
435721ea19 VESA driver: report the framebuffer width
With this patch, the VESA driver reports the framebuffer width to the
client instead of the visible width  This fixes possible distortion
if these widths differ, at the cost that content in the right-most area
might be invisible in such cases.

Issue #1264.
2015-06-09 11:00:10 +02:00
Christian Helmuth
93f0cde72f vbox: adapt to framebuffer mode on startup
This works only if guest additions are installed and those report
"graphics=yes".

Related to #1554
2015-06-09 11:00:10 +02:00
Alexander Boettcher
e1896e3b44 run: add platform_drv include for usage by scripts
Related to #765 and used for issue #1542
2015-06-09 11:00:10 +02:00
Alexander Boettcher
8cf09281c1 acpi: transfer memory quota of pci client/driver
Fixes #1550
2015-06-03 12:53:48 +02:00
Alexander Boettcher
7b6cd28dcb nova: update to r9
Fixes compiler warnings and re-enables debug commits regarding out of memory
situations.

Fixes #1551
2015-06-03 12:53:48 +02:00
Christian Prochaska
55ec357d09 vbox: store the unmodified TSC in the GIP
Fixes #1548
2015-06-03 12:53:48 +02:00
Emery Hemingway
46858cf2f6 noux: exit with child
Issue: #1408
2015-06-03 12:53:48 +02:00
Christian Helmuth
992fbb495d stdcxx: simple regression test 2015-06-03 12:53:48 +02:00
Christian Helmuth
ba0e1b782e stdcxx: re-enable _GLIBCXX_USE_C99_STDINT_TR1
The option was enabled until version 4.8 and is needed by
std::lock_guard at least.
2015-06-03 12:53:47 +02:00
Emery Hemingway
2c090119ae ram_fs: writes to files should return length
Fixes #1545
2015-05-28 11:23:18 +02:00
Adrian-Ken Rueegsegger
6b0b297351 libc_ffat: Fix compiler warning
Fixes #1546
2015-05-28 11:20:00 +02:00
Adrian-Ken Rueegsegger
965d85d52d hw_x86_64: Support for dynamic IRQ mode setting
Add a Platform::setup_irq_mode function which enables the IRQ session to
update the trigger mode and polarity of the associated IRQ according to
the session parameters. On ARM this function is a nop.

This change enables the x86_64 platform to support devices which use
arbitrary trigger modes and polarity settings, e.g. AHCI on QEMU and
real hardware.

Fixes #1528.
2015-05-28 11:17:28 +02:00
Alexander Boettcher
1592e78387 pci: handle 'class' alias correctly
Fixes #1541
2015-05-27 11:38:54 +02:00
Josef Söntgen
30a02a5d92 vbox: support unaligned MMIO read access
Fixes #1540.
2015-05-27 11:38:19 +02:00
Alexander Boettcher
6133acb179 pci: use per pci session a separate device_pd
Fixes #1539
2015-05-27 11:37:18 +02:00
Alexander Boettcher
3a021c4c29 pci: deny access to registers used by pci driver
Fixes #1532
2015-05-27 11:28:06 +02:00
Alexander Boettcher
cbc46a2276 usb: avoid allocation across non-cont. phys memory
Fixes #1530
2015-05-27 11:25:34 +02:00
Norman Feske
394e8f878a Small fixes in release notes 2015-05-26 14:04:38 +02:00
Christian Helmuth
03bf8edb91 version: 15.05 2015-05-26 10:33:44 +02:00
Norman Feske
f0e9cead0c News item for Genode 15.05 2015-05-26 10:33:02 +02:00
Norman Feske
a26d4827eb Release notes for version 15.05 2015-05-26 10:33:02 +02:00
Christian Helmuth
aef593b57f doc: update of doc/components.txt 2015-05-26 10:33:02 +02:00
Norman Feske
bf031b174a demo.run: start scout at startup
To be consistent with the documentation, we have to start scout instead
of launchpad right at the start of the default demo scenario.
2015-05-26 09:40:05 +02:00
Christian Helmuth
3384d3d23c linux: fix issue with pointer to rvalue struct member 2015-05-26 09:40:05 +02:00
Christian Prochaska
918895a4f4 vfs: increment 'seek_offset' in block file system
Fixes #1535
2015-05-26 09:40:04 +02:00
Martin Stein
8a99c08ae4 hw: always panic on removal of scheduler head
Because of helping, it is possible that a core thread that wants to
destroy another thread at the kernel is using the scheduling context of
the thread that shall be destroyed at this point in time. When building
without GENODE_RELEASE defined, this always triggers an assertion in the
kernel. But when building with GENODE_RELEASE defined, this might silently
lead to kernel-memory corruption. This commit eliminates the latter case.
Should be reverted as soon as the scheduler is able to remove its head.

Ref #1537
2015-05-26 09:40:04 +02:00
Stefan Kalkowski
28804e2bfb base: remove cap_integrity test (fix #1536) 2015-05-26 09:40:04 +02:00
Emery Hemingway
5fc8ed3e6b file system servers must not use null tx buffers
Fixes #1534
2015-05-26 09:40:04 +02:00
Stefan Kalkowski
e081554731 hw: kernel backed capabilities (Fix #1443) 2015-05-26 09:40:04 +02:00
Stefan Kalkowski
4431ab7354 hw_x86_64: fix kernel stack initialization
Fix #1533
2015-05-26 09:40:04 +02:00
Christian Prochaska
197be2602f Check if the required GCC version is used
Fixes #1531
2015-05-26 09:40:03 +02:00
Stefan Kalkowski
db5e4f70f1 hw: replace 'placement new' with 'construct_at<>'
Placement new can be misleading, as we already overload the new operator
to construct objects via pointers to allocators. To prohibit any problems here,
and to use one consistent approach, we can explicitely construct the object
with the already available 'construct_at' template function.

Ref #1443
2015-05-26 09:40:03 +02:00
Stefan Kalkowski
b8f178e647 hw: move MMU-related functions into Address_space
* Introduce a hw specific Address_space interface for protection
  domains, which combines all memory-virtualization related functionality
* Introduce a core-specific Platform_pd object that solves all the hen-egg
  problems formerly distributed in kernel and core-platform code

Ref #595
Ref #1443
2015-05-26 09:40:03 +02:00
Stefan Kalkowski
d4c55bec2a hw: implement 'Address_space' interface
Ref #595
Ref #1443
2015-05-26 09:40:03 +02:00
Stefan Kalkowski
554146d39c base: enforce ram_quota donations to be consistent
For several basic sessions that core provides default ram quota values
exist in the form of enum values. They are used e.g. by init to deduce
session costs. Unfortunately they were not used when actually establishing
the session, which lead to inconsistencies.

Ref #1443
2015-05-26 09:40:03 +02:00
Stefan Kalkowski
a93266548f base: remove unused enum from object pool
Ref #1443
2015-05-26 09:40:03 +02:00
Stefan Kalkowski
217f62b89d base: move retry template function to util header
Ref #1443
2015-05-26 09:40:03 +02:00
Stefan Kalkowski
64bfe233d7 base: make CAP session upgradeable
* Introduce 'Out_of_metadata' exception for capability allocation

Ref #1443
2015-05-26 09:40:02 +02:00
Stefan Kalkowski
73c3a81e0b base: make PD session upgradeable
Ref #1443
2015-05-26 09:40:02 +02:00
Sebastian Sumpf
2d41f13229 base-foc: update commit and hash 2015-05-26 09:40:02 +02:00
Christian Prochaska
a30e29b9c2 ports-foc: remove balloon server
Fixes #1514
2015-05-26 09:40:02 +02:00
Christian Prochaska
caa61c268b seoul: adapt port files to the updated repository
Fixes #1526
2015-05-26 09:40:02 +02:00
Norman Feske
da0ee84a7d sel4: 3rd article - porting core to seL4 2015-05-26 09:40:02 +02:00
Norman Feske
cada11b553 Add sel4_x86_32 to create_builddir tool 2015-05-26 09:40:01 +02:00
Norman Feske
66dd065163 sel4: use LOG console for non-core components 2015-05-26 09:40:01 +02:00
Norman Feske
a748dfbc5c sel4: implementation of Rm_client::unmap 2015-05-26 09:40:01 +02:00
Norman Feske
da2db02ebd sel4: disable page-fault logging 2015-05-26 09:40:01 +02:00
Norman Feske
84c5437437 sel4: initialization of non-main threads 2015-05-26 09:40:01 +02:00
Norman Feske
06d143d51f sel4: receive-sel handling for early IPC 2015-05-26 09:40:01 +02:00
Norman Feske
3259185bfc sel4: import parent cap into non-core components 2015-05-26 09:40:01 +02:00
Norman Feske
1ea22f82fa sel4: core support for IPC of non-core PDs
This patch installs the parent endpoint selector and the PD's CNode into
a PD at its creation time. Furthermore, it initializes the IPC buffer
for the main thread of the new component.
2015-05-26 09:40:00 +02:00
Norman Feske
acd7a2f1c4 sel4: reserve virt page for main-thread IPC buffer 2015-05-26 09:40:00 +02:00
Norman Feske
38db52e7f5 sel4: non-core capability-space implementation 2015-05-26 09:40:00 +02:00
Norman Feske
d6e3e47348 sel4: use core_printf for non-core components
This allows us to see debug messages printed at the eary initialization
of init (before init is able to obtain the regular LOG session). This
will be reverted as soon as the initialziation of the non-core base
environment works.
2015-05-26 09:40:00 +02:00
Norman Feske
5a05521e0f sel4: bootstrap of init and page-fault handling 2015-05-26 09:40:00 +02:00
Norman Feske
691f0eaae7 sel4: link core to different address
This enables us to debug core and non-core using Qemu's GDB stub.
2015-05-26 09:40:00 +02:00
Norman Feske
11b9a0f376 sel4: definition of non-core cap-space parameters 2015-05-26 09:39:59 +02:00
Norman Feske
f19f454ae5 sel4: move core to a libaray, add boot_modules.s 2015-05-26 09:39:59 +02:00
Norman Feske
51f02340b6 sel4: avoid superfluous header re-generation 2015-05-26 09:39:59 +02:00
Norman Feske
56ec0ad172 sel4: add base.mk lib to build and link init 2015-05-26 09:39:59 +02:00
Norman Feske
6ffba0e473 sel4: IPC implementation 2015-05-26 09:39:59 +02:00
Norman Feske
ff46d02c48 sel4: capability lifetime management 2015-05-26 09:39:59 +02:00
Norman Feske
595e86ca2e sel4: assert macro 2015-05-26 09:39:59 +02:00
Norman Feske
95c3e896dd sel4: add include/kernel_object.h utilties 2015-05-26 09:39:58 +02:00
Norman Feske
0a32bc845f sel4: RAM-session supplements 2015-05-26 09:39:58 +02:00
Norman Feske
bf4b260ce1 sel4: unmapping of virtual memory 2015-05-26 09:39:58 +02:00
Norman Feske
262f52723b sel4: block on first call if Ipc_istream::_wait 2015-05-26 09:39:58 +02:00
Norman Feske
8f535d5371 sel4: enter real thread function 2015-05-26 09:39:58 +02:00
Norman Feske
41b99a6b51 sel4: use yielding spinlock for 'Genode::Lock' 2015-05-26 09:39:58 +02:00
Norman Feske
f24b212e47 sel4: core-local thread creation 2015-05-26 09:39:58 +02:00
Norman Feske
e6ad346e24 sel4: management of core's virtual memory 2015-05-26 09:39:57 +02:00
Norman Feske
1f5cfef64e sel4: switch to core's custom cspace layout 2015-05-26 09:39:57 +02:00
Norman Feske
de8bfb37f9 sel4: initialization of core's allocators 2015-05-26 09:39:57 +02:00
Norman Feske
633f335171 sel4: core skeleton 2015-05-26 09:39:57 +02:00
Norman Feske
b8c107ceb2 sel4: let run tool support core and non-core tests 2015-05-26 09:39:57 +02:00
Norman Feske
65a74cf5e0 sel4: complement base-common.mk
This patch extends the base-common library with the symbols needed to
link core.
2015-05-26 09:39:57 +02:00
Norman Feske
885e9333ac sel4: don't use base-common.mk in test roottask
To build core and other Genode components, we will need to extend the
base-common.mk library with additions that conflict with the
minimalistic root-task environment of test/sel4. To preserve the
minimalistic root task, we need to decouple it from the base-common
library.
2015-05-26 09:39:56 +02:00
Norman Feske
c73b6e9c0d sel4: move core console to core_printf library 2015-05-26 09:39:56 +02:00
Norman Feske
e3cb8d48f7 sel4: never compile syscall-using code with -fPIC 2015-05-26 09:39:56 +02:00
Norman Feske
1314bd3b2a sel4: notes about virtual memory management 2015-05-26 09:39:56 +02:00
Norman Feske
9bf7a240fc sel4: test the use of memory mappings 2015-05-26 09:39:56 +02:00
Norman Feske
58481fe35d sel4: use largest untyped range 2015-05-26 09:39:56 +02:00
Norman Feske
37c266327f sel4: capability overmap test 2015-05-26 09:39:56 +02:00
Norman Feske
418f2ab119 sel4: testing the unwrapping of capabilities 2015-05-26 09:39:55 +02:00
Norman Feske
33c2bc3bf2 sel4: capability delegation test 2015-05-26 09:39:55 +02:00
Norman Feske
03010831cd sel4: adapt article to new version of run tool 2015-05-26 09:39:55 +02:00
Norman Feske
1fdf36efed sel4: IPC between two threads 2015-05-26 09:39:55 +02:00
Norman Feske
45b90aa898 sel4: review of the first article 2015-05-26 09:39:55 +02:00
Norman Feske
68671dbc2f sel4: preemptive scheduling 2015-05-26 09:39:55 +02:00
Norman Feske
40c48c4538 sel4: thread creation 2015-05-26 09:39:54 +02:00
Norman Feske
9bf7568909 sel4: replace syscalls.patch by macros.patch 2015-05-26 09:39:54 +02:00
Norman Feske
52c4dc8ec8 sel4: print boot info 2015-05-26 09:39:54 +02:00
Norman Feske
6b9185ab34 sel4: enable core console 2015-05-26 09:39:54 +02:00
Norman Feske
666c74345f sel4: add patch for sel4/syscalls.h 2015-05-26 09:39:54 +02:00
Norman Feske
29f58dbd70 sel4: first syscall invokation 2015-05-26 09:39:54 +02:00
Norman Feske
2b24593758 sel4: minimalistic roottask 2015-05-26 09:39:54 +02:00
Norman Feske
456d81f517 New base-sel4 repository 2015-05-26 09:39:53 +02:00
Norman Feske
a96243eebf News item for third seL4 article 2015-05-26 09:39:53 +02:00
Norman Feske
35a52f0282 base: const qualifiers in base/trace/types.h
This patch adds missing const qualifiers to the == operators of
'Subject_id' and 'Policy_id'. Thanks to Pirmin Duss for reporting.
2015-05-26 09:39:53 +02:00
Christian Helmuth
8990346c6c mmio: fix compiler warnings
We implicitly know that the value range will not exceed access_t despite
the integer-based arithmetics, i.e., negation and shift operations.

Fixes #1524
2015-05-26 09:39:53 +02:00
Christian Helmuth
140ecb1238 linux: prevent hybrid-mode compiler warnings 2015-05-26 09:39:53 +02:00
Christian Helmuth
c934ee1650 libc: remove debugging artifact from exit() 2015-05-26 09:39:53 +02:00
Christian Helmuth
b5b9b1789d libcrypto: remove redundant ) from .mk 2015-05-26 09:39:52 +02:00
Christian Helmuth
05dc764935 qt5: prevent compiler warnings 2015-05-26 09:39:52 +02:00
Christian Helmuth
97889935cf pci: fix compiler warning 2015-05-26 09:39:52 +02:00
Christian Helmuth
e9652d765d foc: increase stack size for IRQ handler 2015-05-26 09:39:52 +02:00
Alexander Boettcher
869fac8f76 pci: print irq/msi vector when a device gets used 2015-05-26 09:39:52 +02:00
Alexander Boettcher
dd7ddae0e9 pci: add readme to pci_drv, adjust acpi_drv README 2015-05-26 09:39:52 +02:00
Alexander Boettcher
51b79d7da6 pci: support disabling msis 2015-05-26 09:39:52 +02:00
Christian Prochaska
d9825cd708 codezero: move first container to higher address
Fixes #1525
2015-05-26 09:39:51 +02:00
Christian Helmuth
7d39304050 rpi: fix response initialization in platform_drv
GCC 4.9 legitimately whines that const members of responses must be
initialized on construction.
2015-05-26 09:39:51 +02:00
Christian Helmuth
4dad09203a input_merger: fix compiler warning 2015-05-26 09:39:51 +02:00
Alexander Boettcher
3e90542559 nova: use signals with irqs in core
Avoids the need to have per IRQ a thread that blocks synchronously for next
interrupt. Now a thread may wait for multiple IRQs as other signals
simultaneously.

In core no threads are required anymore for IRQs/MSI - the clients (either
the pci_drv or in case of MSI the driver) gets the IRQ delivered directly as
a ordinary Genode signal.

Useful since #1216 and #1487 is now available.
Commit applies feature of #1446 also to IRQ/MSIs.
2015-05-26 09:39:51 +02:00
Christian Prochaska
d554200e5a x86emu: prevent warnings about uninitialized vars
Fixes #1522
2015-05-26 09:39:51 +02:00
Christian Prochaska
526d6eed1c libc: fix compiler warning
Fixes #1523
2015-05-26 09:39:51 +02:00
Alexander Boettcher
e5930105bb tool_chain: symlink fix
If contrib is a symbolic link using ".." leads to wrong directories.
2015-05-26 09:39:51 +02:00
Christian Helmuth
1ff8a55d7c create_builddir: use acpi spec on hw_x86_64 2015-05-26 09:39:51 +02:00
Norman Feske
e2fe071871 Minor comment refinements for the manual 2015-05-26 09:39:50 +02:00
Reto Buerki
f02c92598b run: Use -m 512 for hw_x86_64 on qemu
The base-hw kernel on x86_64 currently assumes 254 MiB of RAM. The RAM
region is subtracted from the I/O mem allocator and therefore this range
is not available for device I/O.

If qemu is started with -m 128, the region for (emulated) PCI config
space access lies within this region and I/O mem allocation in the
pci_drv will fail. Giving qemu more RAM moves the PCI config space out
of the 254 MiB region, making the run/libc_ffat scenario with acpi work.
2015-05-26 09:39:50 +02:00
Reto Buerki
58178949ef hw_x86_64: Make AHCI driver work
The assumption that IRQs in the legacy ISA range are always
edge-triggered is wrong. For the free-for-use IRQs it depends on the
actual device which uses the specific IRQ. Therefore, treat IRQs 9, 10
and 11 as level-triggered.
2015-05-26 09:39:50 +02:00
Reto Buerki
afec233f50 hw_x86_64: Use _edge_triggered() in _create_irt_entry() 2015-05-26 09:39:50 +02:00
Reto Buerki
5eed6de910 hw_x86_64: Let _edge_triggered() operate on IRQ
Use the base IRQ in the _edge_triggered() utility function, not the
remapped vector.
2015-05-26 09:39:50 +02:00
Reto Buerki
6af893123e hw_x86_64: Only block masking of legacy IRQs
Allow legacy IRQ unmasking. Initially, all IRQs are masked and must be
explicitly unmasked by a driver.
2015-05-26 09:39:50 +02:00
Reto Buerki
e034846f32 hw_x86_64: Initially mask IRQs in _create_irt_entry 2015-05-26 09:39:50 +02:00
Christian Prochaska
e0dbf67e1d tool_chain: enable x86_64 target support in GDB
Fixes #1521
2015-05-26 09:39:49 +02:00
Christian Prochaska
72e31090ee tool_chain: update GCC to version 4.9.2
Fixes #1520
2015-05-26 09:39:49 +02:00
Christian Prochaska
7709059245 tool_chain: update GCC to version 4.8.4
Fixes #1519
2015-05-26 09:39:49 +02:00
Christian Prochaska
b704944d4d tool_chain: update binutils to version 2.25
Fixes #1518
2015-05-26 09:39:49 +02:00
Christian Prochaska
2706e4cd75 tool_chain: cleanup
Fixes #1517
2015-05-26 09:39:49 +02:00
Christian Prochaska
ebcfc28a5b qt5: GCC 4.9 compile fix
Fixes #1515
2015-05-26 09:39:49 +02:00
Emery Hemingway
ed4a821891 jitterentropy: update 20140411 to 1.2.0
Issue #1416
2015-05-26 09:39:48 +02:00
Alexander Boettcher
1f4c8ae92d run: support specifying on/off of softreset tool
With it all relays can be geared.

Fixes #1516
2015-05-26 09:39:48 +02:00
Alexander Boettcher
93c1ef0309 run: build nova kernel on every run invocation
Compared to some other kernels checking the nova source and building is way
faster - so we can spend on each run/* invocation the extra time.
2015-05-26 09:39:48 +02:00
Alexander Boettcher
8fa802815d pci: fix wrong warning about multiple usage
Issue #1487
2015-05-26 09:39:48 +02:00
Alexander Boettcher
ccc0f4c2ec usb: handle quota_exceed exception of pci_drv
Issue #755
2015-05-26 09:39:48 +02:00
Christian Prochaska
493bcc80df dde_rump: don't build non-Genode shared libraries
Fixes #1512
2015-05-26 09:39:48 +02:00
Christian Prochaska
5bf538de0c Noux: implement the 'F_GETFL' 'fcntl()' command for pipes
Fixes #1513
2015-05-26 09:39:48 +02:00
Christian Prochaska
e7f869611c hw: static constexpr function when reinterpret cast is used
Issue #1511
2015-05-26 09:39:47 +02:00
Alexander Boettcher
e84284c0cd base: remove shared irq from core
Cleanup commit after all relevant drivers got adapted to use the x86 platform
driver (pci_drv).

Issue #1471
2015-05-26 09:39:47 +02:00
Alexander Boettcher
3783db66e2 base: implement detach for core context_area
Required to destroy threads within in core. Used when IRQs get reused on
platforms where every IRQ needs a thread in core.

Issue #1471
2015-05-26 09:39:47 +02:00
Christian Prochaska
3a378bb970 libc_noux: remove dependency on 'platform_env.h'
Currently, libc_noux includes the 'base/src/base/env/platform_env.h' file
to be able to reinitialize the environment using the 'Platform_env'
interface. For base-linux, a special version of this file exists and the
inclusion of the generic version in libc_noux causes GCC 4.9 to make wrong
assumptions about the memory layout of the 'Env' object returned by
'Genode::env()'.

This commit moves the reinitialization functions to the 'Env' interface to
avoid the need to include the 'platform_env.h' file in libc_noux.

Fixes #1510
2015-05-26 09:39:47 +02:00
Christian Prochaska
1207a4cecd fiasco: remove 'const' GCC attribute from some functions
Some functions in the kernel, which create a static object and return its
address, are declared with a GCC 'const' attribute, which can cause GCC
4.9 to optimize the function call out and use the static object's address
without calling the constructor.

Fixes #1509
2015-05-26 09:39:47 +02:00
Norman Feske
57c9f2aa43 Fix comment 2015-05-26 09:39:47 +02:00
Norman Feske
33c2bc8ad0 Fix comment 2015-05-26 09:39:46 +02:00
Sebastian Sumpf
bd2e15aeb0 foc: update hash for gcc-4.9 support
see: https://github.com/ssumpf/foc/issues/10
2015-05-26 09:39:46 +02:00
Sebastian Sumpf
8eb2286f60 part_blk: propagate back end information
Propagate supported device operations and read/write errors from back end to
client.
2015-05-26 09:39:46 +02:00
Christian Prochaska
88034ef836 vbox: enable USB (OHCI) pass-through support
The information about connected devices is obtained from a ROM file named
'usb_devices', which is supposed to contain a device list as in the device
report generated by the USB driver (see issue #1506).

A policy for 'report_rom' would look like:

<policy label="vbox -> usb_devices" report="usb_drv -> devices"/>

If the 'usb_devices' ROM file is not available, a warning message gets
printed and VirtualBox continues without USB pass-through support.

The devices to be passed-through need to have a matching device filter in
the '.vbox' file. Example:

<USB>
    <DeviceFilters>
        <DeviceFilter name="USB Scanner" active="true" vendorId="04a9"
                      productId="2220" remote="0"/>
    </DeviceFilters>
</USB>

The feature was tested with HID devices (mouse, keyboard) and a flatbed
scanner. Mass storage devices didn't work correctly (they also didn't work
with VirtualBox on Linux without the closed-source extension pack).

It should be made sure that the USB driver does not try to control the
devices to be passed-through itself, for example, when passing-through
a HID device, the '<hid/>' config option should not be set.

Fixes #1507
2015-05-26 09:39:46 +02:00
Christian Prochaska
2d869dd15e usb_drv: generate a device list report
The report lists all connected devices and gets updated when devices are
added or removed.

Example report:

<devices>
    <device vendor_id="0x17ef" product_id="0x4816"/>
    <device vendor_id="0x0a5c" product_id="0x217f"/>
    <device vendor_id="0x8087" product_id="0x0020"/>
    <device vendor_id="0x8087" product_id="0x0020"/>
    <device vendor_id="0x1d6b" product_id="0x0002"/>
    <device vendor_id="0x1d6b" product_id="0x0002"/>
</devices>

There is no distinction yet for multiple devices of the same type.

The report is named "devices" and an example policy for 'report_rom' would
look like:

<policy label="vbox -> usb_devices" report="usb_drv -> devices"/>

The report only gets generated if enabled in the 'usb_drv' configuration:

<config>
    <raw>
        <report devices="yes"/>
    </raw>
</config>

Fixes #1506
2015-05-26 09:39:46 +02:00
Christian Prochaska
e8f82a1da3 nova: delay UTCB revocation on thread destruction
On NOVA, a Genode thread currently cannot destroy itself by destroying its
own 'Thread' object, because in 'Thread_base::_deinit_platform_thread()'
it cannot call 'Cpu_session::kill_thread()' anymore after it has revoked
its own UTCB.

As solution, the revocation of the UTCB can be delayed until its location
in the context area is needed by a new thread.

Fixes #1505
2015-05-26 09:39:46 +02:00
Christian Prochaska
65d8d4461f vbox: adapt run scripts to new AHCI driver
Fixes #1503
2015-05-26 09:39:46 +02:00
Alexander Boettcher
24a4e486c4 nova: adjust phys and io_mem allocator
Add comments about the way the allocator are filled and make solely acpi
related memory as io_mem available to platform.
2015-05-26 09:39:45 +02:00
Martin Stein
c6417051ce hw & x86: Use register framework for IRTEs
Ref #1494
2015-05-26 09:39:45 +02:00
Martin Stein
6ec39d8df5 hw & x86: Style fixes for cpu_support.h
Ref #1494
2015-05-26 09:39:45 +02:00
Adrian-Ken Rueegsegger
f99fab544a hw_x86_64: Add x86-specific I/O mem allocator init
Enable a platform to specify how the MMIO memory allocator is to be
initialized. On ARM the existing behavior is kept while on x86 the I/O
memory is defined as the entire address space excluding the core only
RAM regions. This aligns the hw_x86_64 I/O memory allocator
initialization with how it is done for other x86 kernels such as NOVA or
Fiasco.
2015-05-26 09:39:45 +02:00
Adrian-Ken Rueegsegger
36b2cf932b hw_x86_64: Initialize complete I/O APIC IRT entries
Also set high 32 bits of I/O APIC redirection table entries.
2015-05-20 17:53:00 +02:00
Adrian-Ken Rueegsegger
f2fe0eccb8 hw_x86_64: Explicitly initialize MXCSR
The assures that the MXCSR is initialized to the recommended value.
2015-05-20 17:52:59 +02:00
Adrian-Ken Rueegsegger
ded302c61c hw_x86_64: Perform lazy FPU state initialization
Perform lazy-initialization of FPU state when it is enabled for the
first time. This assures that the FXSAVE area (including the stored
MXCSR) is always properly setup and initialized to the platform default
values.
2015-05-20 17:52:59 +02:00
Adrian-Ken Rueegsegger
a0ec317753 hw_x86_64: Explicitly set all FPU-related CR flags
Perform all FPU-related setup in the Cpu class' init_fpu function instead of
the general system bring-up assembly code.

Set all required control register 0 and 4 flags according to Intel SDM Vol. 3A,
sections 9.2 and 9.6 instead of only enabling FPU error reporting and OSFXSR.
2015-05-20 17:52:59 +02:00
Adrian-Ken Rueegsegger
5eb75e9e81 hw_x86_64: Add control register 4 to Cpu class 2015-05-20 17:52:59 +02:00
Adrian-Ken Rueegsegger
fdbb073414 hw_x86_64: Log ip on unknown exception 2015-05-20 17:52:59 +02:00
Adrian-Ken Rueegsegger
4d700fe2ae hw_x86_64: Emit debug message on #UD
Print information when handling an undefined instruction exception.
2015-05-20 17:52:59 +02:00
Adrian-Ken Rueegsegger
96149db858 base: Add #UD exception to x86_64 Cpu_state 2015-05-20 17:52:59 +02:00
Adrian-Ken Rueegsegger
370271324e hw_x86_64: Simplify kernel physical init
Merge finish_init_phys_kernel into init_phys_kernel function.
2015-05-20 17:52:58 +02:00
Reto Buerki
bb06826c95 hw_x86_64: Factor out initial PT to separate file
This allows the specification of different initial pagetables for a
platform based on x86_64 (e.g. Muen).
2015-05-20 17:52:58 +02:00
Sebastian Sumpf
9d4f410988 test: block benchmarking 2015-05-20 17:52:58 +02:00
Sebastian Sumpf
ff12ea01d5 blk_cli: add support for test size
'test_size' can be set as parameter in <config> node.
2015-05-20 17:52:58 +02:00
Sebastian Sumpf
7910b5146f ahci: new AHCI driver implementation
Supports native command queueing and multiple ports.
2015-05-20 17:52:58 +02:00
Sebastian Sumpf
33bc63e7c3 os: rename 'bswap' to 'host_to_big_endian' 2015-05-20 17:52:58 +02:00
Josef Söntgen
6a89bd15fd dde_bsd: prefix audio library name
Issue #1498.
2015-05-20 17:52:58 +02:00
Josef Söntgen
11d5f07862 dde_bsd: remove disabling of MSIs
Issue #1498.
2015-05-20 17:52:57 +02:00
Norman Feske
4736488d99 core: change order of _export_ds and _clear_ds
On seL4, we need to convert untyped memory to page frames before being
able to use it as normal memory. There already exists the hook function
'_export_ds' that is principally suitable for such tasks. It is
currently solely used on Linux where we have to create a file for each
dataspace. To make the hook useful also for seL4, we need to call
_export_ds prior _clear_ds. Otherwise, we would try to clear memory that
is still untyped.
2015-05-20 17:52:57 +02:00
Alexander Boettcher
a312d440c8 acpi: use local irq service for pci slave
Fixes base-foc issue on qemu caused by wrong set irq polarity and trigger mode.

Bug introduced in #1471

Issue #1216
2015-05-20 17:52:57 +02:00
Alexander Boettcher
2ceecd44f9 pci: assign device during pci config cmd write
Issue #1216
2015-05-20 17:52:57 +02:00
Alexander Boettcher
3eed3ad329 ahci: use MSIs on x86
- remove code for disabling MSIs

Issue #1216
2015-05-20 17:52:57 +02:00
Alexander Boettcher
b3964f4af1 netperf: test usb30 also for x86
On our test machine the xhci controller has a usb3.0 network adapter attached
and the xhci controller is the only usb controller which has MSI support,
so let us use and test it.

Issue #1216
2015-05-20 17:52:57 +02:00
Alexander Boettcher
ecc9007e84 pci: add msi support to platform driver
Fixes #1216
2015-05-20 17:52:56 +02:00
Alexander Boettcher
d998df3b7f base: extend irq session to support MSIs
Works on base-nova and base-foc, the other kernels have no MSI support.

Issue #1216
2015-05-20 17:39:14 +02:00
Josef Söntgen
b0f900b32b adapt run scripts to new audio_out_drv
Issue #1498.
2015-05-06 16:18:53 +02:00
Josef Söntgen
27e5d48fd0 dde_oss: remove repository
This repository is superseded by the 'dde_bsd' repository.  Though
OSSv4 served us well, its future is uncertain and having active
upstream development is preferable. In addition the ported Intel
HD Audio driver did not work on any Thinpad model newer than T60.

Issue #1498.
2015-05-06 16:18:42 +02:00
Josef Söntgen
49dd9242f7 dde_bsd: add audio drivers ported from OpenBSD
These audio drivers enable support for Intel HD Audio (Azalia) and
Ensoniq AudioPCI (ES1370) compatible soundcards. They are ported
from OpenBSD 5.7.

Fixes #1498.
2015-05-06 16:18:36 +02:00
Josef Söntgen
df04b17594 os: show played times in Audio_out test
The message may be used by a run script to signal successfull testing.

Issue #1498.
2015-05-06 16:18:31 +02:00
Josef Söntgen
4b687f4b1a pci: add AUDIO to alias list
Strictly speaking we make AUDIO an alias for PCI_CLASS_MULTIMEDIA
and ignore any sub class.

Issue #1498.
2015-05-06 16:18:20 +02:00
Christian Helmuth
dcd589d113 l4linux: platform_drv may provide platform session
This is especially true for i.MX53 but is not needed on Arndale
currently.

@skalk the test will still fail each night as we do not have a nic_drv
for imx53...
2015-05-06 12:46:25 +02:00
Christian Prochaska
a4868f8d1d vbox: use interface declarations from 'VirtualBox_XPCOM.h'
Fixes #1499
2015-05-06 12:06:23 +02:00
Christian Prochaska
1001a04883 usb_drv improvements
- send a 'state_change' signal on session creation if the device is
  already attached
- evaluate the status code of a finished asynchronous operation
- return the number of actually transferred bytes for control transfers,
  too

Fixes #1490
2015-05-06 12:01:30 +02:00
Norman Feske
c1cb3a6642 Increase initial block for cxx malloc
This patch avoids the attempt to extend the cxx-local heap during the
startup phase of an application. Originally, the static part of the cxx
was merely 100 bytes, which did not suffice to run the minimalistic test
roottask on seL4.
2015-05-06 11:32:06 +02:00
Norman Feske
89e987b22e base/x86_32: preserve EBX value in crt0 2015-05-06 11:32:06 +02:00
Christian Helmuth
ec954a2278 base-foc: comply with thread limit in core
Fiasco.OC limits the UTCB area for roottask to 16K. Therefore, the
number of threads is limited to 16K / L4_UTCB_OFFSET. (see
kernel/fiasco/src/kern/kernel_thread-std.cpp:94)
2015-05-06 10:55:24 +02:00
Christian Helmuth
6b0723b3bb libc: provide C99 API functions
At least stdcxx needs some C99 functions and depends on _GLIBCXX_USE_C99
for C++11 compatibility.
2015-05-06 10:55:24 +02:00
Christian Helmuth
c6857b3019 thread: remove weak implementation of myself() 2015-05-06 10:55:24 +02:00
Christian Helmuth
2f14f57735 stdcxx: add dependency to libm 2015-05-06 10:55:24 +02:00
Christian Helmuth
5d18e0f23b linux_drivers is obsolete 2015-05-06 10:55:23 +02:00
Martin Stein
7c133add52 hw: acknowledge IRQs via Kernel::ack_irq
In the past, when the user blocked for an IRQ signal, the last signal was
acknowledged automatically thereby unmasking the IRQ. Now, the signal session
got a dedicated RPC for acknowledging IRQs and the HW back-end of that RPC
acknowledged the IRQ signal too. This led to the situation that IRQs were
unmasked twice. However, drivers expect an interrupt to be unmasked only on
the Irq_session::ack_irq and thus IRQ unmasking was moved from
Kernel::ack_signal to a dedicated kernel call.

Fixes #1493
2015-05-06 10:55:23 +02:00
Stefan Kalkowski
e61a3db30d hw: separate function declaration/implementation
Move kernel object functions from its headers to compilation units,
thereby reducing the kernel's text section, cache, and TLB footprint.

Fix #1492
2015-05-06 10:55:23 +02:00
Alexander Boettcher
bc3ba380ae nova: fix check in irq_session destruction
Issue #1456
2015-05-06 10:55:22 +02:00
Alexander Boettcher
b7f2b92dbc pci: restrict usage of pci config space
White list access to ports we actually need for our drivers so far and
deny everything else by default. The extend pci config space dataspace is
currently not used and exposes a potential risk (BAR rewrite) - so deny.

Related to #1487
2015-05-06 10:55:22 +02:00
Alexander Boettcher
729ae0a838 pci: track usage of pci devices by drivers
Warn about if more than one driver uses the same device.

Issue #1487
2015-05-06 10:55:22 +02:00
Alexander Boettcher
6c65e436bf usb: use io_mem on x86 via platform driver
Issue #1487
2015-05-06 10:55:22 +02:00
Alexander Boettcher
a4d6be1b3d wifi: use io mem via device interface
Issue #1487
2015-05-06 10:55:22 +02:00
Alexander Boettcher
b9379a10e7 dde_ipxe: use io mem via device interface
Issue #1487
2015-05-06 10:55:21 +02:00
Alexander Boettcher
65a3be856f pci: provide io mem via device interface
Fixes #1487
2015-05-06 10:55:21 +02:00
Alexander Boettcher
f265b64d6d ps2: use io port via device interface
Issue #1487
2015-05-06 10:55:21 +02:00
Alexander Boettcher
e8854cd998 dde_ipxe: use io ports via device interface
Issue #1487
2015-05-06 10:55:21 +02:00
Alexander Boettcher
b7ca04ddde dde_kit: use io ports via device interface
Issue #1487
2015-05-06 10:55:21 +02:00
Alexander Boettcher
c84817dd7b pci_device:: add convenience phys to virt bar method 2015-05-06 10:55:21 +02:00
Alexander Boettcher
1006571c85 pci: provide io_ports via device interface
Issue #1487
2015-05-06 10:55:20 +02:00
Alexander Boettcher
4e99925c7c vesa: upgrade memory for pci device iteration
Issue #755
2015-05-06 10:55:20 +02:00
Alexander Boettcher
6fa85dfd45 ahci: upgrade memory 2015-05-06 10:55:20 +02:00
Alexander Boettcher
4ead4484ec dde_linux: upgrade quota for wifi
Issue #755
2015-05-06 10:55:20 +02:00
Alexander Boettcher
d37d2bd737 dde_linux: upgrade quota for usb_drv
Issue #755
2015-05-06 10:55:20 +02:00
Alexander Boettcher
828ae3800d dde_ipxe: upgrade quota for nic_drv
Issue #755
2015-05-06 10:55:20 +02:00
Alexander Boettcher
0cf8d75346 dde_kit: upgrade ram support for device iteration
Issue #755
2015-05-06 10:55:20 +02:00
Alexander Boettcher
06e7c947bc pci: use ram quota upgrade mechanism
Fixes #755
2015-05-06 10:55:19 +02:00
Alexander Boettcher
df50d1b29d run: adjust autopilot run scripts to pci changes
Issue #1486
2015-05-06 10:55:19 +02:00
Alexander Boettcher
18b36fb339 acpi: provide pci policy to pci driver
Issue #1486
2015-05-06 10:55:19 +02:00
Alexander Boettcher
e527f6e5ac ps2: use irqs via device interface
Issue #1486 and #1471
2015-05-06 10:55:19 +02:00
Alexander Boettcher
7770a0fbbe pci: enforce policy on device discovery
Fixes #1486
2015-05-06 10:55:19 +02:00
Alexander Boettcher
8743575dcf pci: support discovery of non pci devices
Issue #1486
2015-05-06 10:55:19 +02:00
Alexander Boettcher
e4d663cf41 pci: remove device_cap from dma calls
Issue #1486
2015-05-06 10:55:18 +02:00
Alexander Boettcher
0ed45d92ff base: string length handling fix in Rpc_in_buffer
If a null-terminated string exactly of length MAX (0 byte included) is
provided, it will be handled as invalid because of wrong string size length
checks.

Commit fixes this.

Discovered during #1486 development.
2015-05-06 10:55:18 +02:00
Alexander Boettcher
3c5fb420ca dde_ipxe: use irq via device interface
Issue #1471
2015-05-06 10:55:18 +02:00
Alexander Boettcher
5c1504fd8f wifi: use irq via device interface
Issue #1471
2015-05-06 10:55:18 +02:00
Alexander Boettcher
a58bc84d3e usb: use irq via platform driver or directly
Issue #1471
2015-05-06 10:55:18 +02:00
Alexander Boettcher
6dd9d349fc pci: support shared irqs (x86)
Step to move shared irq handling out of core in the long run. So, use
irq_proxy implementation from base in os and implement shared irq handling
in platform driver of x86 (pci_drv).

Fixes #1471
2015-05-06 10:55:18 +02:00
Alexander Boettcher
31faee3b5c pci: provide irq capability via device interface
Issue #1471
2015-05-06 10:55:17 +02:00
Christian Helmuth
f20b6bdc88 Prevent overlap of stack and thread-context members
Now, Thread::Context provides the first word of the stack to prevent the
overlapping of stack top and the 'stack_base' member.

Fixes #1491
2015-05-06 10:55:17 +02:00
Christian Helmuth
ae61e520d7 run: fail if boot_dir module was not declared 2015-05-06 10:55:17 +02:00
Christian Helmuth
98def2488a thread: move Thread_base::myself() to separate file
The thread library (thread.cc) in base-foc shared 95% of the code with
the generic implementation except myself(). Therefore, its
implementation is now separated from the other generic sources into
myself.cc, which allows base-foc to use a foc-specific primitive to
enable our base libraries in L4Linux.

Issue #1491
2015-05-06 10:55:17 +02:00
Emery Hemingway
55c0a947e4 Move generic fs helpers to os/include/file_system
Fixes #1488
2015-05-06 10:55:17 +02:00
Norman Feske
eecb5cc300 Move OKL4 source code on genode.org
The original download location at wiki.ok-labs.com went down.

Fixes #1489
2015-05-06 10:55:16 +02:00
Alexander Boettcher
50d6d2e922 okl4: fix return value if IPC failed
Otherwise RPC calls to dead/invalid destinations are rated as successful,
which leads to wrong execution paths later on. Triggered by bomb.run where
rm_session.attach() returned as successful with local address set to 0, which
causes un-handled page-faults later on.

Fixes #1480
2015-05-06 10:55:16 +02:00
Christian Helmuth
eee0bf5ab2 init: abort request on invalid route
Fixes #1423
2015-05-06 10:55:16 +02:00
Martin Stein
c9272937e7 CPU session: apply quota via relative weightings
Physical CPU quota was previously given to a thread on construction only
by directly specifying a percentage of the quota of the according CPU
session. Now, a new thread is given a weighting that can be any value.
The physical counter-value of such a weighting depends on the weightings
of the other threads at the CPU session. Thus, the physical quota of all
threads of a CPU session must be updated when a weighting is added or
removed. This is each time the session creates or destroys a thread.

This commit also adapts the "cpu_quota" test in base-hw accordingly.

Ref #1464
2015-05-06 10:55:16 +02:00
Martin Stein
955977b516 hw: syscall for changing a threads physical quota
This commit also extends the "cpu_scheduler" test to test the back-end of the
new syscall.

Ref #1464
2015-04-23 16:51:33 +02:00
Martin Stein
e4f560f39b hw: change round-robin scheduling slice to 10 ms
Previously, it was set to 100 ms which caused a remarkable disadvantage
in reactivity.

Ref #1464
2015-04-23 16:51:33 +02:00
Martin Stein
de9d69a6d7 hw: re-enable kernel tests with the new run env
The new run env doesn't pass the "core_type" parameter at one point
which is why we have to pass it through a global HW-specific variable.

Ref #1464
2015-04-23 16:51:33 +02:00
Josef Söntgen
7a8c088fc6 gems: remove d3m
D3m is superseded by now. Altough there is no direct replacement
combining various other components is equal to its functionality.

Issue #1456.
2015-04-23 16:48:00 +02:00
Josef Söntgen
2c39c75e1c base: remove Irq_connection::wait_for_irq() 2015-04-23 16:48:00 +02:00
Josef Söntgen
0383c68bf6 os: use async IRQ interface in Irq_activation
Issue #1456.
2015-04-23 16:48:00 +02:00
Josef Söntgen
85599c072f os: use async IRQ and server lib in drivers
Use the new asynchronous IRQ interface in the mostly used drivers, e.g.:

* ahci_drv: x86/exynos5
* gpio_drv: imx53/omap4
* input_drv: imx53/dummy
* ps2_drv: x86/pl050
* timer_drv

Now, the Irq_session is requested from Gpio::Session:

From now on we use an asynchronous IRQ interface. To prevent triggering
another GPIO IRQ while currently handling the former one, IRQs must
now by acknowledged explicitly. While here, we also changed the GPIO
session interface regarding IRQ management. The generic GPIO component
now wraps the Irq_session managed by the backend instead of using the
GPIO backend methods directly. A client using the GPIO session may
request the Irq_session_capability by calling
'Gpio::Session::irq_session()' and can use this capability when using
a local Irq_session_client.

Issue #1456.
2015-04-23 16:47:59 +02:00
Josef Söntgen
bfb47cfd4e wifi_drv: use asynchronous IRQ session interface
Issue #1456.
2015-04-23 16:47:59 +02:00
Josef Söntgen
9606abc146 dde_ipxe: remove dde_kit
A long long time ago, in a galaxy^W^W^W we used DDE kit to ease the
porting of purely C based drivers. By now it became clear, that we
do not gain that much by following this approach. DDE kit contains
much generic functionality, which is not used or rather not needed
by most ported drivers. Hence, we implement a slim C wrapper on top
of Genode's C++ APIs, that is especially tailored to the driver.

In addition to removing the dependency on DDE kit, the iPXE driver
now uses the server framework and the newly introduced signal based
IRQ handling.

Issue #1456.
2015-04-23 16:47:58 +02:00
Josef Söntgen
09e96dfdcd dde_kit: use async IRQ session interface
Up to now, dde_kit used the synchronous IRQ session interface. This
interface is going to get deprectated very soon.

Issue #1456.
2015-04-23 16:47:58 +02:00
Alexander Boettcher
faa25e1df6 base: make irq_session asynchronous
second step

options: factor out common parts of irq_session_component.cc
options: use on foc arm no proxy threads

Fixes #1456
2015-04-23 16:47:58 +02:00
Alexander Boettcher
e2cbc7c5b3 base: unify some irq_session headers
remove repos/base-*/include/irq_session headers and use only a unification
from   repos/base/include/irq_session

first step

Issue #1456
2015-04-23 16:47:57 +02:00
Josef Söntgen
2002e1ccba os: remove ATAPI driver
The driver will be superseeded soon by a new AHCI driver that supports
ATAPI devices. There is no IDE support in Gende anymore, however.

Issue #1456.
2015-04-23 16:47:57 +02:00
Norman Feske
97dc9664fe base: move flex_iterator.h to include/util
Fixes #1482
2015-04-17 16:13:22 +02:00
Norman Feske
eaab23c012 base: const-correctness of Allocator interface
This patch adds const qualifiers to the functions Allocator::consumed,
Allocator::overhead, Allocator::avail, and Range_allocator::valid_addr.

Fixes #1481
2015-04-17 16:13:22 +02:00
Norman Feske
847ddbf72e os: Remove new operator from packet_stream.h 2015-04-17 16:13:22 +02:00
Norman Feske
c4dea1057b Document empty Pd_session_client::assign_pci 2015-04-17 16:13:22 +02:00
Norman Feske
e4906ef777 Remove unused GTA01 platform support
This platform (originally added to support the GP2X handheld console)
remains untouched since half a decade.
2015-04-17 16:13:21 +02:00
Norman Feske
270f1068cb os: Move Ring_buffer to Genode namespace
Fixes #1479
2015-04-17 16:13:21 +02:00
Stefan Kalkowski
146292dba9 base-host: remove platform template completely
Fix #1476
2015-04-17 16:13:21 +02:00
Stefan Kalkowski
0188b08f6a hw: construct kernel irq objects on demand
Ref #1443
2015-04-17 16:13:21 +02:00
Stefan Kalkowski
b32af4e0a4 hw: directly reference kernel objects from core
Instead of handing over object ids to the kernel, which has to find them
in object pools then, core can simply use object pointers to reference
kernel objects.

Ref #1443
2015-04-17 16:13:20 +02:00
Stefan Kalkowski
c850462f43 hw: replace kernel's object id allocators
Instead of having an ID allocator per object class use one global allocator for
all. Thereby artificial limitations for the different object types are
superfluent. Moreover, replace the base-hw specific id allocator implementation
with the generic Bit_allocator, which is also memory saving.

Ref #1443
2015-04-17 16:13:20 +02:00
Stefan Kalkowski
2df86cd34b hw: rename bin_* syscalls with delete_*
The verb "bin" in the context of destroying kernel objects seems pretty
unusual in contrast to "delete". When reading "bin" in the context of
systems software an association to something like "binary" is more likely.

Ref #1443
2015-04-17 16:13:20 +02:00
Stefan Kalkowski
b949489641 base: remove local capability from generic base
* Instead of using local capabilities within core's context area implementation
  for stack allocation/attachment, simply do both operations while stack gets
  attached, thereby getting rid of the local capabilities in generic code
* In base-hw the UTCB of core's main thread gets mapped directly instead of
  constructing a dataspace component out of it and hand over its local
  capability
* Remove local capability implementation from all platforms except Linux

Ref #1443
2015-04-17 16:13:20 +02:00
Stefan Kalkowski
a168c9d6ce core: remove global capability id counter
The global capability ID counter is not used by NOVA and Fiasco.OC
and in the future not needed by base-hw too. Thereby, remove the static
counter variable from the generic code base and add it where appropriated.

Ref #1443
2015-04-17 16:13:19 +02:00
Stefan Kalkowski
358380046c base: assign allocator and quota to platform pd
Enable platform specific allocations and ram quota accounting for
protection domains. Needed to allocate object identity references
in the base-hw kernel when delegating capabilities via IPC.
Moreover, it can be used to account translation table entries in the
future.

Ref #1443
2015-04-17 16:13:19 +02:00
Norman Feske
d9d65aa86b base: use reference for ascii_to output argument
Issue #1477
2015-04-17 16:13:19 +02:00
Norman Feske
d884cf1a9a base: unify ascii_to conversion functions
This patch addresses the first point of the issue #1477, namely
replacing the function-template magic by plain function overloads.

Issue #1477
2015-04-13 14:18:16 +02:00
Alexander Boettcher
84a98e18ad tool: add bomb to autopilot list 2015-04-13 14:18:16 +02:00
Christian Helmuth
95c651b4aa Enable drivers for hw_x86_64 in create_builddir 2015-04-13 14:18:16 +02:00
Christian Prochaska
63ebebcfa4 nitpicker: update the 'pointed session' more often
Currently, the 'pointed session' gets updated only when an input event
occurs, but an update is also needed in other situations, for example
when the view under the current mouse position was moved.

With this commit, the 'pointed session' gets updated whenever the
timer-triggered 'handle_input()' function is called.

Fixes #1473
2015-04-13 14:18:15 +02:00
Christian Prochaska
0fd53c7fe4 Extract numeric string arguments with the correct signedness
There are lots of places where a numeric argument of an argument string
gets extraced as signed long value and then assigned to an unsigned long
variable. If the value in the string was negative, it would not be
detected as invalid (and replaced by the default value), but become a
positive bogus value.

With this patch, numeric values which are supposed to be unsigned get
extracted with the 'ulong_value()' function, which returns the default
value for negative numbers.

Fixes #1472
2015-04-13 14:18:15 +02:00
Christian Prochaska
af2cd7175c vbox: enable video acceleration (VBVA)
This commit enables the VirtualBox graphics adapter, provides guest mouse
pointer integration with Nitpicker using the 'vbox_pointer' application
and enhances the VirtualBox run scripts with the configuration of
Nitpicker, input merger and network driver.

Fixes #1474
2015-04-13 14:18:15 +02:00
Christian Helmuth
0ef20f7ece tool/ports: curl timeout and retry in check.mk 2015-04-09 16:04:47 +02:00
Christian Helmuth
0fb5ce0918 base: run mp_server on hw_x86_64 as single core 2015-04-09 16:04:47 +02:00
Norman Feske
8fd30b13ac Consider Raspberry Pi in sd_card.run
Issue #1475
2015-04-09 16:04:47 +02:00
Norman Feske
91e0a5d5dd SD-card driver for the Raspberry Pi
The driver operates in PIO mode only. Depending on the block size (512
bytes versus 128 KiB), it has a troughput of 2 MiB/sec - 10 MiB/sec for
reading and 173 KiB/sec - 8 MiB/sec for writing.

Fixes #1475
2015-04-09 16:04:47 +02:00
Norman Feske
87f13d77c0 Omit timer RPC calls for usleep(0) 2015-04-09 16:04:46 +02:00
Norman Feske
77cba65b7a os: detection of standard-capacity SD cards
This patch enhances the generic SD-card protocol implementation in
sd-card.h with the ability to handle the version 1.0 of the CSD register
(containing the capacity information of older SD cards).
2015-04-09 16:04:46 +02:00
Norman Feske
26442f782b os: add 'clock_rate' to Rpi platform driver 2015-04-09 16:04:46 +02:00
Norman Feske
ea9c2199e8 base: extend emergency dataspace size
The emergency dataspace is used to accommodate the corner case where
a signal context capability is created while issuing the first
resource request. Normally, the attempt to upgrade the signal-session
quota under such a constrained situation would fail. By freeing the
emergency dataspace in this situation, we regain enough quota to
upgrade the signal session.

This is a follow up commit for "base: Raise RAM quota of signal session
to 16K" and fixes the resource_request test on 64-bit platforms.
2015-04-09 16:04:46 +02:00
Norman Feske
eaac3cc1bd Revised API documentation
This patch curates the API documentation to become suitable for the
functional specificaton, which is partially generated from the header
files.
2015-04-09 16:04:46 +02:00
Norman Feske
7441df33c9 Improvements of parse_cxx tool
This patch improves the C++ parser to accommodate the tools for
generating the functional specification from source code:

* Added support for class definitions prefixed with a
  namespace as promoted by Genode's coding style.
* Improves robustness of the parsing of function arguments by
  considering nameless arguments in function declarations, default
  values, varargs.
* Consider const qualfiers in return types.
* Added support for the override, constexpr keywords.
* Parsing of overloaded operators.
* Improved handling of type definitions.
* Added parsing of template arguments.
* Handling of template constructors.
2015-04-09 16:04:45 +02:00
Norman Feske
e1b4408090 os: turn Xml_node::Attribute to Xml_attribute
Moving the XML attribute class to the Genode namespace simplifies the
API.
2015-04-09 16:04:45 +02:00
Norman Feske
394fce110e base: coding style 2015-04-09 16:04:45 +02:00
Norman Feske
13a0c336d9 base: separate the API's 'Thread_base' constructor
The 'Thread_base' class is constructed differently in some special cases
like the main thread or a thread that use a distinct CPU session. The
official API, however, should be clean from such artifacts. Hence, I
separated the official constructor from the other cases.
2015-04-09 16:04:45 +02:00
Norman Feske
0d74435448 base: remove Genode::parent_cap from the API
Components interact with their environments using the Genode::Env class
instead of directly using the parent capability.
2015-04-09 16:04:45 +02:00
Norman Feske
695ac957f4 base: add missing override annotations 2015-04-09 16:04:44 +02:00
Norman Feske
6fc372bcf4 base: add const qualifiers 2015-04-09 16:04:44 +02:00
Christian Prochaska
0e344c9830 vbox: support more mouse event combinations
VirtualBox can receive absolute or relative mouse motion events from the
'Input' service and the VM can support either or both of them. With this
patch, more of the possible combinations are handled.

Fixes #1470
2015-04-09 16:04:44 +02:00
Martin Stein
70aa98d837 hw: fix bug in cancellation of 'await_signal'
There were two bugs. First, the caller of Kernel::await_signal wasn't
re-activated for scheduling. Second, the caller did not memorize that he
doesn't wait on a receiver anymore which had bad side effects on further
signal handling.

Fix #1459
2015-04-09 16:04:44 +02:00
Martin Stein
60e392f0c0 hw: support Wandboard Quad (i.MX6)
The port uses the Cortex-A9 private timer for the kernel and an EPIT as
user timer. It was successfully tested on the Wandboard Quad and the CuBox-i
with the signal test. It lacks L2-cache and Trustzone support by now.

Thanks to Praveen Srinivas (IIT Madras, India) and  Nikolay Golikov (Ksys Labs
LLC, Russia). This work is partially based on their contributions.

Fix #1467
2015-04-09 16:04:43 +02:00
Martin Stein
4f887448c3 hw & cortex_a9: clean-up board_support.h
Change class name according to our common naming scheme and remove unnecessary
'using' directive.

Ref #1467
2015-03-27 12:20:07 +01:00
Norman Feske
9fcce49548 doc: improve coding-style descriptipn, fix #1468
This patch removes a broken link to an external blog posting and adds
an example for the proper use of tabs and spaces instead.
2015-03-27 11:53:35 +01:00
Sebastian Sumpf
1b155dbaa6 libssh: git repo for source retrieval
We now use 'http://git.libssh.org/projects/libssh.git'

Fix #1428
2015-03-27 11:53:35 +01:00
Reto Buerki
c82f5e9269 hw_x86_64: Do not mask edge-triggered interrupts
Do not mask edge-triggered interrupts to avoid losing them while masked,
see Intel 82093AA I/O Advanced Programmable Interrupt Controller
(IOAPIC) specification, section 3.4.2, "Interrupt Mask":

"When this bit is 1, the interrupt signal is masked. Edge-sensitive
interrupts signaled on a masked interrupt pin are ignored (i.e., not
delivered or held pending)"

Or to quote Linus Torvalds on the subject:

"Now, edge-triggered interrupts are a _lot_ harder to mask, because the
Intel APIC is an unbelievable piece of sh*t, and has the edge-detect
logic _before_ the mask logic, so if a edge happens _while_ the device
is masked, you'll never ever see the edge ever again (unmasking will not
cause a new edge, so you simply lost the interrupt)."

So when you "mask" an edge-triggered IRQ, you can't really mask it at
all, because if you did that, you'd lose it forever if the IRQ comes in
while you masked it. Instead, we're supposed to leave it active, and set
a flag, and IF the IRQ comes in, we just remember it, and mask it at
that point instead, and then on unmasking, we have to replay it by
sending a self-IPI." [1]

[1] - http://yarchive.net/comp/linux/edge_triggered_interrupts.html

Ref #1448
2015-03-27 11:53:34 +01:00
Martin Stein
bfe1fac37c hw_x86_64: style fixes
Ref #1448
2015-03-27 11:53:34 +01:00
Stefan Kalkowski
49bffbfe7e os: enable PIT timer for hw_x86_64 platform 2015-03-27 11:53:34 +01:00
Adrian-Ken Rueegsegger
f4cb9101a4 hw: Fix format string for 64 bit platforms
Use the format specifier of the largest possible type and cast the value
to the chosen type. This avoids compiler warnings on x86_64.
2015-03-27 11:53:33 +01:00
Reto Buerki
92efc13a17 hw_x86_64: Add x86-specific IRQ session component
In order to match the I/O APIC configuration, a request for user timer
IRQ 0 is remapped to vector 50 (Board::TIMER_VECTOR_USER), all other
requests are transposed by adding the vector offset 48
(Board::VECTOR_REMAP_BASE).
2015-03-27 11:53:33 +01:00
Adrian-Ken Rueegsegger
f9f74d2930 hw_x86_64: Add VESA resources to x86 MMIO regions
The additional MMIO regions are necessary for emulated graphics devices
of QEMU and Bochs.
2015-03-27 11:53:33 +01:00
Adrian-Ken Rueegsegger
8b8e8c8270 hw_x86_64: Add various drivers to x86
Include PCI, PS2, VESA and Framebuffer drivers on x86_64 platform.
2015-03-27 11:53:33 +01:00
Adrian-Ken Rueegsegger
e5f26fa8db base: Raise RAM quota of signal session to 16K
On base-hw/x86_64 the quota of the signal session is not sufficient due to
the large size of the Signal_session_component. Increasing the quota to
16K avoids signal-context resource exhaustion messages as emmitted by the
run/launcher scenario:

  ...
  Quota exceeded! amount=4096, size=4096, consumed=4096
  failed to allocate signal-context resources
  upgrading quota donation for signal session
  C++ runtime: Genode::Parent::Quota_exceeded
  void* abort(): abort called
  ...

Note: This change increases the quota for all kernels even though it is
      strictly only required for base-hw/x86_64.
2015-03-27 11:53:33 +01:00
Adrian-Ken Rueegsegger
96a3eabe16 hw_x86_64: Log additional information on unknown exception
Provide more information in the log message when an unknown exception
occurs.
2015-03-27 11:53:32 +01:00
Adrian-Ken Rueegsegger
544148bc24 hw_x86_64: Add I/O port allocator to platform
Add the entire I/O port range to the I/O port allocator on x86. Do nothing
on ARM platforms since there are no I/O port resources.
2015-03-27 11:53:32 +01:00
Reto Buerki
5765398741 hw_x86_64: Add x86 platform services to core
Use the x86-specific platform_services.cc file and register the I/O port
session component.
2015-03-27 11:53:32 +01:00
Reto Buerki
28b5e67a8c Update or add hw_x86_64 copyright headers 2015-03-27 11:53:32 +01:00
Adrian-Ken Rueegsegger
ace61c54d6 hw_x86_64: Zero-fill BSS segment in x86_64 crt0.s
Make sure all content of the BSS segment is initialized to zero.
2015-03-27 11:53:32 +01:00
Reto Buerki
69a58c4bd5 hw_x86_64: Set EFLAGS IF, IOPL bits in Cpu::init_thread
Enable interrupts for all threads, set I/O privilege level (IOPL) to 3
for core threads to allow UART access.
2015-03-27 11:53:32 +01:00
Adrian-Ken Rueegsegger
7ce8464b3a hw_x86_64: Enable FPU support
* Enable the use of the FXSAVE and FXRSTOR instructions, see Intel SDM
  Vol. 3C, section 2.5.
* The state of the x87 floating point unit (FPU) is loaded and saved on
  demand.
* Make the cr0 control register accessible in the Cpu class. This is in
  preparation of the upcoming FPU management.
* Access to the FPU is disabled by setting the Task Switch flag in the cr0
  register.
* Access to the FPU is enabled by clearing the Task Switch flag in the cr0
  register.
* Implement FPU initialization
* Add is_fpu_enabled helper function
* Add pointer to CPU lazy state to CPU class
* Init FPU when finishing kernel initialization
* Add function to retry FPU instruction:
    Similar to the ARM mechanism to retry undefined instructions, implement a
    function for retrying an FPU instruction. If a floating-point instruction
    causes an #NM exception due to the FPU being disabled, it can be retried
    after the correct FPU state is restored, saving the current state and
    enabling the FPU in the process.
* Disable FPU when switching to different user context:
    This enables lazy save/restore of the FPU since trying to execute a
    floating point instruction when the FPU is disabled will cause a #NM
    exception.
* Declare constant for #NM exception
* Retry FPU instruction on #NM exception
* Assure alignment of FXSAVE area:
    The FXSAVE area is 512-byte memory region that must be 16-byte aligned. As
    it turns out the alignment attribute is not honored in all cases so add a
    workaround to assure the alignment constraint is met by manually rounding
    the start of the FXSAVE area to the next 16-byte boundary if necessary.
2015-03-27 11:53:31 +01:00
Reto Buerki
c14898703d hw_x86_64: Implement Cpu_idle::exception function
Forward external interrupts during the CPU idle thread to the
_interrupt function.
2015-03-27 11:53:31 +01:00
Reto Buerki
e443b859e6 base: Add x86 RESET pseudo-exception
Define RESET as exception 0xfe. The reset state is only used initially
in the CPU idle exception function.
2015-03-27 11:53:31 +01:00
Reto Buerki
c9c84dd751 base: Move Cpu_exception enum to x86_64 cpu_state.h 2015-03-27 11:53:31 +01:00
Reto Buerki
4e259f7b1e hw_x86_64: Implement LAPIC-based kernel timer
The LAPIC timer is programmed in one-shot mode with vector 32
(Board::TIMER_VECTOR_KERNEL). The timer frequency is measured using PIT
channel 2 as reference (50ms delay).

Disable PIT timer channel 0 since BIOS programs it to fire periodically.
This avoids potential spurious timer interrupts.
2015-03-27 11:53:31 +01:00
Reto Buerki
a21959fc26 hw_x86_64: Implement APIC-based PIC driver
The implementation initializes the Local APIC (LAPIC) of CPU 0 in xapic
mode (mmio register access) and uses the I/O APIC to remap, mask and
unmask hardware IRQs. The remapping offset of IRQs is 48.

Also initialize the legacy PIC and mask all interrupts in order to
disable it.

For more information about LAPIC and I/O APIC see Intel SDM Vol. 3A,
chapter 10 and the Intel 82093AA I/O Advanced Programmable Interrupt
Controller (IOAPIC) specification

Set bit 9 in the RFLAGS register of user CPU context to enable
interrupts on kernel- to usermode switch.
2015-03-27 11:53:31 +01:00
Reto Buerki
557c96a9cb hw_x86_64: Add APIC MMIO to native regions 2015-03-27 11:53:30 +01:00
Reto Buerki
cf100f96af hw_x86_64: Add x86-specific board.h file
The file specifies constants for the LAPIC, I/O APIC MMIO regions plus
the interrupt remapping offset and timer vectors.
2015-03-27 11:53:30 +01:00
Adrian-Ken Rueegsegger
42987a7b2f hw_x86_64: Add mapping for I/O APIC MMIO to initial pt
Make the I/O APIC accessible via its MMIO region by adding a 2 MB large
page mapping at 0xfec00000 with memory type UC.
2015-03-27 11:53:30 +01:00
Adrian-Ken Rueegsegger
c06c21e472 hw_x86_64: Add mapping for APIC MMIO to initial pt
Make the local APIC accessible via its MMIO region by adding a 2 MB
large page mapping at 0xfee00000 with memory type UC.

Note: The mapping is added to the initial page tables to make the APIC
      usable prior to the activation of core's page tables, e.g. in the
      constructor of the timer class.
2015-03-27 11:53:30 +01:00
Reto Buerki
b75b1902f2 hw_x86_64: Provide inb and outb functions for port I/O
The port_io.h file provides the inb and outb functions to perform port
I/O operations.
2015-03-27 11:53:30 +01:00
Reto Buerki
1b3871a3f0 hw_x86_64: Move exception_entry to 0xffff0000
The location in memory is arbitrary but we use the same address as the
ARM architecture. Adjust references to virtual addresses in the mode
transition pages to cope with 64-bit values.
2015-03-27 11:53:30 +01:00
Reto Buerki
147b1ec2b1 hw_x86_64: Adjust parameter type of Message_tpl::prepare_send
Change the type of the local name parameter from unsigned to unsigned
long. Otherwise only 4 bytes are copied on x86_64, leaving 4 bytes of
garbage.
2015-03-27 11:53:29 +01:00
Reto Buerki
16a51b317a hw_x86_64: Implement Cpu_idle::Cpu_idle function
The function is a copy of the ARM version.
2015-03-27 11:53:29 +01:00
Reto Buerki
2ecdf4f729 hw_x86_64: Forward interrupts to _interrupt function
Extend the Thread::exception function to forward external interrupts to
the _interrupt function for processing.
2015-03-27 11:53:29 +01:00
Reto Buerki
d0024e1893 hw_x86_64: Fill _fault_addr from cr2 in _mmu_exception
Use the Cpu::Cr2 register to read the linear page fault address in the
Thread::_mmu_exception function.
2015-03-27 11:53:29 +01:00
Reto Buerki
d553d38ecf hw_x86_64: Model cr2 register in CPU state
Make the cr2 control register accessible in the Cpu class. The register
is needed to retrieve the linear address that caused a page fault.
2015-03-27 11:53:29 +01:00
Reto Buerki
466ad3aed4 hw_x86_64: Implement Thread::_mmu_exception() for x86_64
The function is a copy of the ARM version minus the in_fault
distinction.
2015-03-27 11:53:29 +01:00
Reto Buerki
0992c233bd hw_x86_64: Forward page faults to the _mmu_exception function 2015-03-27 11:53:28 +01:00
Reto Buerki
112ff2609a hw_x86_64: Add Thread::_event implementation
It is an exact copy of the ARM version.
2015-03-27 11:53:28 +01:00
Reto Buerki
83a1b826a3 hw_x86_64: Add supervisor call handling to Thread::exception
Forward supervisor calls to the Thread::_call function for dispatching.
2015-03-27 11:53:28 +01:00
Reto Buerki
0568dcc875 hw_x86_64: Implement Thread::_reg function 2015-03-27 11:53:28 +01:00
Reto Buerki
e5be376f57 hw_x86_64: Declare Thread_reg_id enum for x86_64
Only define IDs of registers which are actually accessed by threads.
2015-03-27 11:53:28 +01:00
Reto Buerki
472c3b6502 hw_x86_64: Use mtc relative addressing for master context 2015-03-27 11:53:28 +01:00
Reto Buerki
080d7d5f8b hw_x86_64: Use mtc relative addressing for _mt_buffer in crt0.s
Until the kernel page tables are active, labels can't be used directly
because the associated pages are not mapped for non-core threads.
2015-03-27 11:53:28 +01:00
Reto Buerki
09c90e5751 hw_x86_64: Set interrupt stack in Tss::Setup 2015-03-27 11:53:27 +01:00
Reto Buerki
9af9dcc02c hw_x86_64: Reserve space for interrupt stack in mtc region
The interrupt stack must reside in the mtc region in order to use it for
non-core threads. The size of the stack is set to 56 bytes in order to
hold the interrupt stack frame plus the additional vector number that is
pushed onto the stack by the ISR.
2015-03-27 11:53:27 +01:00
Reto Buerki
9c44d32dd9 hw_x86_64: Add virt_base paramater to Tss::setup function
The stack pointers (RSP) for privilege levels 0-2 must be setup using an
address in the mtc region to make stack switching work for non-core
threads.
2015-03-27 11:53:27 +01:00
Reto Buerki
15d131b723 hw_x86_64: Use _virt_mtc_addr to calculate ISR base
Call the _virt_mtc_addr function with the _mt_isrs label to calculate
the ISR base address in Idt::setup. Again, assume the address to be
below 0x10000.
2015-03-27 11:53:27 +01:00
Reto Buerki
a5efe04656 hw_x86_64: Add virt_base paramater to Idt::setup function
Use parameter instead of class member variable because it would get
stored into the mtc region otherwise. In a further iteration only the
actual IDT should be saved into the mtc, not the complete class
instance. Currently the class instance size is equal to the IDT table
size.
2015-03-27 11:53:27 +01:00
Reto Buerki
1102b2b562 hw_x86_64: Calculate limit using _mt_gdt_end in Gdt::load 2015-03-27 11:53:27 +01:00
Reto Buerki
6f5ea78a51 hw_x86_64: Prefix gdt labels with _mt
Streamline the naming by prepending the _mt prefix to the gdt labels.
2015-03-27 11:53:26 +01:00
Reto Buerki
69e820e4e3 hw_x86_64: Reload GDTR in Genode::Cpu::init_thread
The GDT reload must happen after the page tables mapping the mtc region
is active, that's why it cannot be done in the Genode::Cpu ctor.
2015-03-27 11:53:26 +01:00
Reto Buerki
968ab15bbb hw_x86_64: Add Genode::Gdt class
The class provides the load() function which reloads the GDTR with the
GDT address in the mtc region. This is needed to make the segments
accessible to non-core threads.

Make the _gdt_start label global to use it in the call to
_virt_mtc_addr().
2015-03-27 11:53:26 +01:00
Reto Buerki
251b270e4b hw_x86_64: Factor out _virt_mtc_addr to mtc_util.h header 2015-03-27 11:53:26 +01:00
Reto Buerki
cfe89996e8 hw_x86_64: Factor out pseudo descriptor class to own header 2015-03-27 11:53:26 +01:00
Reto Buerki
d0f14cb941 hw_x86_64: Use _mt_tss and _mt_begin labels to set TSS base
The TSS descriptor base address is assumed to be below the 0x10000 mark
(only bits 0-15 used) for now.
2015-03-27 11:53:26 +01:00
Reto Buerki
00921e4a5c hw_x86_64: Create Tss instance in mtc region
Use the _mt_tss label and the placement new operator to create the
Tss class instance in the mtc region. Update the hard-coded
TSS base address to use the virtual mtc address.
2015-03-27 11:53:25 +01:00
Reto Buerki
b9fe4a8d48 hw_x86_64: Reserve space for TSS in mtc region 2015-03-27 11:53:25 +01:00
Reto Buerki
34a25d3160 hw_x86_64: Make Tss member functions non-static
Add appropriate Tss object to Genode::Cpu class.
2015-03-27 11:53:25 +01:00
Reto Buerki
ec028ea06f hw_x86_64: Move GDT into mtc region
The GDT must be visible for non-core threads too.
2015-03-27 11:53:25 +01:00
Reto Buerki
bf5118fe54 hw_x86_64: Make _virt_idt_addr member more generic
Add label argument to function and rename it to _virt_mtc_addr. It can
be used to retrieve the virtual mtc address of any given label.
2015-03-27 11:53:25 +01:00
Reto Buerki
b8e2249f51 hw_x86_64: Use _virt_idt_addr member in Idt::load
Load the virtual address in the mode transition pages into Interrupt
Descriptor Table Register (IDTR).
2015-03-27 11:53:25 +01:00
Reto Buerki
9c2d071654 hw_x86_64: Add virt_base argument to Idt::load
The argument specifies the virtual base address of the mode transition
pages.
2015-03-27 11:53:24 +01:00
Reto Buerki
ecaad9ecce hw_x86_64: Add private _virt_idt_address member to Idt class
This function calculates the address of the IDT for a given virtual
mode transition base address.
2015-03-27 11:53:24 +01:00
Reto Buerki
89add00518 hw_x86_64: Create Idt instance in mtc region
Use the _mt_idt label and the placement new operator to create the Idt
instance in the mtc region.
2015-03-27 11:53:24 +01:00
Reto Buerki
9c8109c276 hw_x86_64: Reserve space for IDT on mode transition pages
On exception, the CPU first checks the IDT in order to find the
associated ISR. The IDT must therefore be placed in the mode transition
pages to make them available for non-core threads.
2015-03-27 11:53:24 +01:00
Reto Buerki
d8a10448bb hw_x86_64: Make Idt member functions non-static
Add appropriate Idt object to Genode::Cpu class. Update the hard-coded
TSS base address.
2015-03-27 11:53:24 +01:00
Reto Buerki
e3332c6c53 hw_x86_64: Drop obsolete isr.s assembly file 2015-03-27 11:53:24 +01:00
Reto Buerki
a361fbd2bc hw_x86_64: Move ISR entries to mode transition page
This is needed to make them available for non-core threads which
initially only have the mode transition page mapped.
2015-03-27 11:53:23 +01:00
Reto Buerki
d1a4eaed0d hw_x86_64: Add fake Timer::ms_to_tics implementation
This makes the scheduler happy and it starts scheduling threads.
2015-03-27 11:53:23 +01:00
Adrian-Ken Rueegsegger
4946f21302 hw_x86_64: Set base address and limit of TSS descriptor
The limit is set to match the TSS size - 1 and the base address is
hardcoded to the *current* address of the TSS instance (0x3a1100).

TODO: Set the base address using the 'tss' label. If the TSS descriptor
      format were not so utterly unusable this would be straightforward.
      Changes to the code that indirectly lead to a different location
      of the tss result in #GP since the base address will be invalid.
2015-03-27 11:53:23 +01:00
Adrian-Ken Rueegsegger
58e5f9b2fe hw_x86_64: Jump to actual kernel entry on interrupt 2015-03-27 11:53:23 +01:00
Adrian-Ken Rueegsegger
9f825ffb17 hw_x86_64: Setup and load Task State Segment 2015-03-27 11:53:23 +01:00
Adrian-Ken Rueegsegger
2af5aaa54d hw_x86_64: Add Tss class
The class Genode::Tss represents a 64-bit Task State Segment (TSS) as
specified by Intel SDM Vol. 3A, section 7.7.

The setup function sets the stack pointers for privilege levels 0-2 to
the kernel stack address. The load function loads the TSS segment
selector into the task register.
2015-03-27 11:53:23 +01:00
Adrian-Ken Rueegsegger
793b5264e3 hw_x86_64: Set dpl of syscall IDT entry to 3
Since this IDT entry is called from usermode the descriptor privilege
level must be 3.
2015-03-27 11:53:22 +01:00
Adrian-Ken Rueegsegger
ed06c46233 hw_x86_64: Specify user argument to register mapping
Implement user argument setter and getter support functions. The mapping of
the state registers corresponds to the system call parameter passing
convention.
2015-03-27 11:53:22 +01:00
Adrian-Ken Rueegsegger
16a15237a4 hw_x86_64: Continue execution of the kernel
The instruction pointer is the first field of the master context and can
directly be used as a jump argument, which avoids additional register
copy operations.
2015-03-27 11:53:22 +01:00
Adrian-Ken Rueegsegger
ecfb954eb9 hw_x86_64: Restore kernel stack pointer 2015-03-27 11:53:22 +01:00
Adrian-Ken Rueegsegger
c62b4ea36a hw_x86_64: Restore kernel register values from master context
Set stack pointer to master context and restore kernel register by popping
the values from the master context.
2015-03-27 11:53:22 +01:00
Adrian-Ken Rueegsegger
7b051c0531 hw_x86_64: Restore kernel segment registers
The segment registers are set to reference the kernel data segments of
the GDT.
2015-03-27 11:53:22 +01:00
Adrian-Ken Rueegsegger
fb5946b69c hw_x86_64: Save client register values to context
Point stack to client context region and save registers using push
instructions.

Note that since the push instruction first increments the stack pointer
and then stores the value on the stack, the RSP has to point one field
past RBP before pushing the first register value.
2015-03-27 11:53:21 +01:00
Adrian-Ken Rueegsegger
1035efcf3f hw_x86_64: Save info on interrupt stack to client context
As the kernel entry is called from the interrupt handler the stack
layout is as specified by Intel SDM Vol. 3A, figure 6-8. An additional
vector number is stored at the top of the stack.

Gather the necessary client information from the interrupt stack frame
and store it in the client context.
2015-03-27 11:53:21 +01:00
Adrian-Ken Rueegsegger
3d782282db hw_x86_64: Switch to kernel page tables
After switching to the kernel address space the client context region is
accessible to store the client register values.
2015-03-27 11:53:21 +01:00
Adrian-Ken Rueegsegger
16496af371 hw_x86_64: Create temporary copy of client RAX in kernel entry
Copy client context RAX value to buffer to enable use of RAX as scratch
register.
2015-03-27 11:53:21 +01:00
Adrian-Ken Rueegsegger
43bd925c7f hw_x86_64: Add offset constant for Cpu_state.trapno field 2015-03-27 11:53:21 +01:00
Adrian-Ken Rueegsegger
408cec32f5 base: Add errcode to x86_64 Cpu_state
The new errcode field is used to store the error code that some
interrupts provide (e.g. #PF). Rework mode transition reserved space and
offset constants to match the new CPU_state layout.
2015-03-27 11:53:21 +01:00
Adrian-Ken Rueegsegger
1d762ca254 hw_x86_64: Implement syscall with one to six arguments 2015-03-27 11:53:20 +01:00
Adrian-Ken Rueegsegger
04ad1340d5 hw_x86_64: Add syscall helper macros
The macros are used to assign syscall arguments to specific registers.
Using the AMD64 parameter passing convention avoids additional copying of
variables since the C++ function parameters are already in the right
registers.
2015-03-27 11:53:20 +01:00
Adrian-Ken Rueegsegger
3e779e3ca1 hw_x86_64: Perform the user entry mode transition
The interrupt return instruction in IA-32e mode applies the prepared
interrupt stack frame to set the RFLAGS, CS and SS segment as well as
the RIP and RSP registers. It then continues execution of the user code.

For detailed information refer to Intel SDM Vol. 3A, section 6.14.3.
2015-03-27 11:53:20 +01:00
Adrian-Ken Rueegsegger
ab9d7afa45 hw_x86_64: Finally restore RAX client register value
Set the stack to the mode transition buffer and pop the temporary copy
of the RAX client value into the register.
2015-03-27 11:53:20 +01:00
Adrian-Ken Rueegsegger
1fc867f1d7 hw_x86_64: Switch to client page tables
After activating the client page tables the client context cannot be
accessed any longer. The mode transition buffer however is globally
mapped and can be used to restore the remaining register values.
2015-03-27 11:53:20 +01:00
Adrian-Ken Rueegsegger
172dec209b hw_x86_64: Restore registers to client context values
Set the stack pointer to the R8 field in the client context to enable
restoring registers by popping values of the stack.

After this step the only remaining registers that do not contain client
values are RAX, RSP and RIP.

Note that the client value of RAX is pop'd to the global buffer region as
the register will still be used by subsequent steps. It will be restored to
the value in the buffer area just prior to resuming client code execution.
2015-03-27 11:53:20 +01:00
Adrian-Ken Rueegsegger
60e799f7b4 hw_x86_64: Set segment registers prior to mode transition
The registers for the ds, es, fs and gs segments are hardcoded to GDT
index 4 with requested privilege level set to 3.
2015-03-27 11:53:19 +01:00
Adrian-Ken Rueegsegger
fe22858550 hw_x86_64: Adjust EFLAGS of prepared interrupt stack frame
Set I/O privilege level to 3 to allow core to perform port I/O from
userspace. Also make sure the IF flag is cleared for now until interrupt
handling is implemented.
2015-03-27 11:53:19 +01:00
Adrian-Ken Rueegsegger
40862a81eb hw_x86_64: Prepare interrupt stack frame in mode transition buffer
Setup an IA-32e interrupt stack frame in the mode transition buffer region.
It will be used to perform the mode switch to userspace using the iret
instruction.

For detailed information about the IA-32e interrupt stack frame refer to
Intel SDM Vol. 3A, figure 6-8.
2015-03-27 11:53:19 +01:00
Adrian-Ken Rueegsegger
4b7a5ced3b hw_x86_64: Declare CPU context offset constants
The constants specify offset values of CPU context member variables as
specified by Genode::Cpu_state [1] and Genode::Cpu::Context [2].

[1] - repos/base/include/x86_64/cpu/cpu_state.h
[2] - repos/base-hw/src/core/include/spec/x86/cpu.h
2015-03-27 11:53:19 +01:00
Adrian-Ken Rueegsegger
e3f10b5ce2 hw_x86_64: Reserve space for mode transition buffer
Since the buffer stores an IA-32e interrupt stack frame, its size must
be 6 * 8 bytes.
2015-03-27 11:53:19 +01:00
Adrian-Ken Rueegsegger
03929b3cc9 hw_x86_64: Add 64-bit user code and data segments to GDT
The new entries specify a 64-bit code segment with DPL 3 at index 3 and a
64-bit data segment with DPL 3 at index 4.

These segments are needed for transitioning to user mode.
2015-03-27 11:53:19 +01:00
Adrian-Ken Rueegsegger
51d515c77f hw_x86_64: Explicitly set up segment selectors during boot 2015-03-27 11:53:18 +01:00
Adrian-Ken Rueegsegger
65de09c7a6 hw_x86_64: Reserve space for client context pointer
A pointer to the client context is placed in the mt_client_context_ptr area.
It is used to pass the current client context to the lowlevel mode-switching
assembly code.
2015-03-27 11:53:18 +01:00
Adrian-Ken Rueegsegger
4417fe6201 hw_x86_64: Implementation of IA-32e paging
IA-32e paging translates 48-bit linear addresses to 52-bit physical
addresses. Translation structures are hierarchical and four levels deep.
The current implementation supports regular 4KB and 1 GB and 2 MB large
page mappings.

Memory typing is not yet implemented since the encoded type bits depend
on the active page attribute table (PAT)*.

For detailed information refer to Intel SDM Vol. 3A, section 4.5.

* The default PAT after power up does not allow the encoding of the
  write-combining memory type, see Intel SDM Vol. 3A, section 11.12.4.
* Add common IA-32e paging descriptor type:
    The type represents a table entry and encompasses all fields shared by
    paging structure entries of all four levels (PML4, PDPT, PD and PT).
* Simplify PT entry type by using common descriptor:
    Differing fields are the physical address, the global flag and the memory
    type flags.
* Simplify directory entry type by using common descriptor:
    Page directory entries (PDPT and PD) have an additional 'page size' field
    that specifies if the entry references a next level paging structure or
    represents a large page mapping.
* Simplify PML4 entry type by using common descriptor
    Top-level paging structure entries (PML4) do not have a 'pat' flag and the
    memory type is specified by the 'pwt' and 'pcd' fields only.
* Implement access right merging for directory paging entries
    The access rights for translations are determined by the U/S, R/W and XD
    flags. Paging structure entries that reference other tables must provide
    the superset of rights required for all entries of the referenced table.
    Thus merge access rights of new mappings into existing directory entries to
    grant additional rights if needed.
* Add cr3 register definition:
    The control register 3 is used to set the current page-directory base
    register.
* Add cr3 variable to x86_64 Cpu Context
    The variable designates the address of the top-level paging structure.
* Return current cr3 value as translation table base
* Set context cr3 value on translation table assignment
* Implement switch to virtual mode in kernel
    Activate translation table in init_virt_kernel function by updating the
    cr3 register.
* Ignore accessed and dirty flags when comparing existing table entries
    These flags can be set by the MMU and must be disregarded.
2015-03-27 11:53:18 +01:00
Reto Buerki
c7cadf52a6 hw_x86_64: setup ISR and IDT
* Add isr.s assembler file:
    The file declares an array of Interrupt Service Routines (ISR) to handle
    the exception vectors from 0 to 19, see Intel SDM Vol. 3A, section
    6.3.1.
* Add Idt class:
  * The class Genode::Idt represents an Interrupt Descriptor Table as
    specified by Intel SDM Vol. 3A, section 6.10.
  * The setup function initializes the IDT with 20 entries using the ISR
    array defined in the isr.s assembly file.
* Setup and load IDT in Genode::Cpu ctor:
    The Idt::setup function is only executed once on the BSP.
* Declare ISRs for interrupts 20-255
* Set IDT size to 256
2015-03-27 11:53:18 +01:00
Reto Buerki
6e0f1a4466 hw_x86_64: Adjust size of _mt_master_context
The CPU state in IA-32e mode consists of 20 64-bit registers.
2015-03-27 11:53:18 +01:00
Reto Buerki
0f624cdde7 hw_x86_64: Perform indirect long jump to 64-bit code 2015-03-27 11:53:18 +01:00
Reto Buerki
15d0e86592 hw_x86_64: Load Global Descriptor Table register 2015-03-27 11:53:17 +01:00
Reto Buerki
27191b17ce hw_x86_64: Declare Global Descriptor Table (GDT) in .data
The table specifies a 64-bit code segment descriptor at index 1, a
64-bit data segment descriptor at index 2 and a task segment descriptor
at index 3.
2015-03-27 11:53:17 +01:00
Reto Buerki
59bba7624f hw_x86_64: Set system control flags of cr0 register
Enable paging, write protection, caching and native FPU error reporting,
see Intel SDM Vol. 3A, section 2.5.
2015-03-27 11:53:17 +01:00
Reto Buerki
032fc3b190 hw_x86_64: Enable IA-32e mode and execute-disable
Set bits 8 (LME) and 11 (NXE) in the IA32_EFER MSR to enable IA-32e mode
and execute-disable.
2015-03-27 11:53:17 +01:00
Reto Buerki
d23cd7e5ff hw_x86_64: Load initial pagetable address into cr3 2015-03-27 11:53:17 +01:00
Reto Buerki
bafb893a70 hw_x86_64: Declare initial pagetables in .data segment
The table specifies the initial identity mapping for the memory region
from 2 MiB to 4 MiB using one 2 MiB mapping.
2015-03-27 11:53:17 +01:00
Reto Buerki
be430b9648 hw_x86_64: Enable Physical Address Extension (PAE)
This is a prerequisite for IA-32e mode.
2015-03-27 11:53:16 +01:00
Adrian-Ken Rueegsegger
8c9b79fab0 hw: Use properly sized asm type in boot_modules.s
The boot modules assembled by the generated boot_modules.s file is
accessed from core using struct Bm_header. Unfortunately the assembler
.long directive is synonym to .int [1] and thus has the same size as the
C++ int type and *not* long. Use the matching assembly type .quad in
boot_modules.s when generating the file for 64-bit platforms such as
x86_64.

[1] - https://sourceware.org/binutils/docs/as/Long.html
2015-03-27 11:53:16 +01:00
Adrian-Ken Rueegsegger
3ad0f06b06 hw: Drop unnecessary include in pd.h 2015-03-27 11:53:16 +01:00
Norman Feske
a974726e26 hw: skeleton for building on x86_64
This patch contains the initial code needed to build and bootstrap the
base-hw kernel on x86 64-bit platforms. It gets stuck earlier
because the binary contains 64-bit instructions, but it is started in
32-bit mode. The initial setup of page tables and switch to long mode is
still missing from the crt0 code.
2015-03-27 11:53:16 +01:00
Norman Feske
cc00af85bf Add hw_x86_64 to create_builddir tool 2015-03-27 11:53:16 +01:00
Alexander Boettcher
97758f8468 libc: use correct type for dummy libc functions
as far as possible. Some functions are internal to libc and no public
header are available.

Fixes #1466
2015-03-27 11:53:16 +01:00
Josef Söntgen
e53e6b0c5c vbox: rework network backend
* Handle signals and thereby work asynchronously
* Forward link-state changes to the attached AboveNetwork

Fixes #1465.
2015-03-27 11:53:15 +01:00
Josef Söntgen
19f8666170 vbox_auto_win7_share: adapt to new DHCP behavior
Issue #1327.
2015-03-27 11:53:15 +01:00
Josef Söntgen
be6d8db491 noux_net_netcat: adapt to new DHCP behavior
Issue #1327.
2015-03-27 11:53:15 +01:00
Josef Söntgen
e6cf426d72 run: always append to output buffer
On each execution the output buffer is overriden when run_genode_until
is executed multiple times. Run scripts, that depend on extracting
information after several execution steps, e.g. noux_net_netcat, will
fail to do so. Therefore, we append the newly captured log output to
the old output buffer.

Issue #1327.
2015-03-27 11:53:15 +01:00
Josef Söntgen
88c1ca8e9c lwip: adapt run script to new DHCP behavior
We will always get an IP after the server was started. Therefore, we
have to wait until we see the "got IP" message.

Issue #1327.
2015-03-27 11:53:14 +01:00
Josef Söntgen
c6f33fc0d2 netperf: adapt to link-state change changes
Change the matching mechanism because the IP address message may appear
at any time after starting the netserver when using lwip.

Issue #1327.
2015-03-27 11:53:14 +01:00
Josef Söntgen
2d469cb35c lwip: packet-stream/link-state signals in recv thread
Issue #1327
2015-03-27 11:53:14 +01:00
Josef Söntgen
6c6375aa83 lwip: use netifapi
The netifapi makes sure, that all operations are done in the context of
the tcpip-thread.

Issue #1327.
2015-03-27 11:53:14 +01:00
Josef Söntgen
5518a21692 lwip: clean up patches
Issue #1327.
2015-03-27 11:53:13 +01:00
Josef Söntgen
dd47129bef nic session: link-state change handling
A Nic::Session client can install a signal handler that is used to
propagate changes of the link-state by calling 'link_state_sigh()'.
The actual link state is queried via 'link_state()'.

The nic-driver interface now provides a Driver_notification callback,
which is used to forward link-state changes from the driver to the
Nic::Session_component.

The following drivers now provide real link state: dde_ipxe, nic_bridge,
and usb_drv. Currently, OpenVPN, Linux nic_drv, and lan9118 do not
support link state and always report link up.

Fixes #1327
2015-03-27 11:53:13 +01:00
Josef Söntgen
e4f6fca355 packet_allocator: catch expection when calling free()
If a client acknowledges the same packet more than once, the packet also
gets freed more than once. At the second attempt the underlaying
Bit_array will throw an 'Invalid_clear' exception, which results in an
uncaught exception that leads to an abort() call in the freeing
component.

Fixes #1462.
2015-03-27 11:53:13 +01:00
Stefan Kalkowski
381711dbea hw: extend warning messages to ease debugging
To ease debugging without the need to tweak the kernel every time, and to
support userland developers with useful information this commit extends several
warnings and errors printed by the kernel/core by which thread/application
caused the problem, and what exactly failed.

Fix #1382
Fix #1406
2015-03-27 11:53:13 +01:00
Martin Stein
ff6595f150 hw: enable destruction of IRQ sessions
Implement the missing Irq_session_component destructor.

Fix #1460
2015-03-27 11:53:13 +01:00
Martin Stein
98616a1812 i.MX53: SD-card driver and bench
The driver for the Freescale eSDHCv2 doesn't support the highest
available bus frequency by now and also the bus width may be set to a
higher value but that needs further checks on the capabilities of the
inserted card.

The commits provide a benchmark as it exists for the OMAP4 SDHC driver.

Fix #1458
2015-03-27 11:53:12 +01:00
Martin Stein
c52bf757f0 register: make bitfield-mask methods constexpr
Ref #1458
2015-03-27 11:53:12 +01:00
Alexander Boettcher
7f0460c6a5 launchpad: handle case running out of threads
Fixes #111
2015-03-27 11:53:12 +01:00
Alexander Boettcher
30094ecd48 okl4: check result of bind_thread
Related to #1418
Issue #111
2015-03-27 11:53:12 +01:00
Alexander Boettcher
096d72de90 base: check result of bind_thread
Related to #1418
Issue #111
2015-03-27 11:53:12 +01:00
Alexander Boettcher
c76de84f0a gems: let run decorator-stress on 64bit
Fixes #1247
2015-03-27 11:53:12 +01:00
Alexander Boettcher
b50d707d5b nova: leverage kernel to implement Genode signals
Fixes #1446
2015-03-27 11:53:11 +01:00
Alexander Boettcher
f5329c23b7 nova: update to kernel branch introducing signals
+ adjust syscall headers accordingly

Issue #1446
2015-03-27 11:53:11 +01:00
Alexander Boettcher
1f8fad8fa1 base: refactor signal_transmitter::submit
Move it to platform specific .cc file, so that it may get re-implemented
platform specifically if needed.

Issue #1446
2015-03-19 09:32:52 +01:00
Christian Prochaska
dac3efcc02 vbox: replace too strict assertion with debug message
The 'continue_hw_accelerated' assertion at the end of the recall handler
can fail in situations which are not problematic, for example if the
'Timer' thread has set the 'VMCPU_FF_TIMER' flag in the meantime and
requested a recall afterwards. Since we don't know for sure if a recall is
requested for the other flags as well, the assertion gets replaced by a
debug message, which gets printed if any of the 'not yet verified as safe'
flags is set.

Fixes #1426
2015-03-19 09:25:04 +01:00
Josef Söntgen
9b7e0ce0a5 part_blk: add GPT support
The GUID partition table (GPT) is primarily used by systems using
(U)EFI and is a replacement for the legacy MBR. For now, the current
implementation is able to address up to 128 GUID partition entries
(GPE).

To enable the GPT support in 'part_blk' it has to be configured
accrodingly:

! <start name="part_blk">
! [...]
!   <config use_gpt="yes">
! [...]
! </start>

If 'part_blk' is not able to find a valid GPT header it falls back
to using the MBR.

Current limitations:

Since no endian conversion takes place it only works on LE platforms
and of all characters in the UTF-16 encoded name field of an entry
only the ones included in the ASCII encoding are printed. It also
ignores all GPE attributes.

Issue #1429.
2015-03-19 09:22:37 +01:00
Christian Helmuth
2694b5f9c6 nitpicker: fix refresh of pointer view on stacking
Fixes #1441
2015-03-19 09:17:54 +01:00
Christian Helmuth
d8e50dd366 nitpicker: add hover report
The hover reports provides information about the session currently
pointed-to, i.e., hovered session. It can be enabled by the 'hover'
attribute of nitpicker's 'report' configuration element

  <report hover="yes" />

Fixes #1442
2015-03-19 09:17:36 +01:00
Alexander Boettcher
2a4b67f90b nova: fix syscall bindings for 32bit
The bindings for 32bit did not consider that in the syscall_3 function
edx changes due to the assembly instructions and that in the syscall_4
function edx and ecx change. So, the compiler wrongly assumed that the
content of these registers stayed unchanged.

Fixes #1447
2015-03-19 09:13:32 +01:00
Alexander Boettcher
e664c979b2 base: adjust 'affinity.run' time for vea9x4
remove imx53 since it has a single CPU
2015-03-19 08:57:22 +01:00
Sebastian Sumpf
36e01b720e ldso: Refactor dynamic linker
Issue #1349
2015-03-19 08:57:22 +01:00
Alexander Boettcher
c94145f74d base: run mp_server also on single core setups 2015-03-19 08:57:22 +01:00
Christian Helmuth
5c728cf0c4 linux: log diagnostic message on exceptions
Log the fact that a software exception will terminate the process and
hint about more information available from the Linux kernel log.

Fixes #1457
2015-03-19 08:57:22 +01:00
Norman Feske
560a58e5c6 Move packet stream to Genode namespace, fix #1455 2015-03-19 08:57:22 +01:00
Norman Feske
001b069509 Simplify base/semaphore.h, fix #1453 2015-03-19 08:57:21 +01:00
Norman Feske
d841fbb82e Add missing header in base/signal.h 2015-03-19 08:57:20 +01:00
Norman Feske
45c9739fe7 Remove repos/qt4, fix #1451 2015-03-19 08:57:20 +01:00
Norman Feske
99e7f26b99 Remove base/include/base/errno.h, fix #1450 2015-03-19 08:57:20 +01:00
Norman Feske
2ddf941660 Abandon Init::Traditional_child_policy, fix #1449 2015-03-19 08:57:20 +01:00
Martin Stein
d312f840bd hw: error message on unmap on broken RM clients
In the past, unmap sometimes occured on RM clients that have no thread,
PD, or translation table assigned. However, this shouldn't be the
case anymore.

Fixes #504
2015-03-19 08:57:20 +01:00
Stefan Kalkowski
657646e76e hw: adjust core bootstrap to fit generic process
* Introduce hw-specific crt0 for core that calls e.g.: init_main_thread
* re-map core's main thread UTCB to fit the right context area location
* switch core's main thread's stack to fit the right context area location

Fix #1440
2015-03-19 08:57:19 +01:00
Alexander Boettcher
2ad6a3b934 vbox: support multi touch input events
Fixes #1444
2015-03-19 08:57:19 +01:00
Alexander Boettcher
c745f9b48c nitpicker: forward touch events
Issue #1444
2015-03-19 08:57:19 +01:00
Alexander Boettcher
cd764a6aa6 usb: support multi touch devices
Issue #1444
2015-03-19 08:57:18 +01:00
Alexander Boettcher
71c3fa53da os: add input touch event type
Issue #1444
2015-03-19 08:57:18 +01:00
Stefan Kalkowski
684ce272e6 tool/ports: add tool to check source availability
The 'check_port_source' checks whether all remote sources defined for a given
port are currently available. It returns zero, when all remote resources are
available.

Fix #1430
2015-03-19 08:57:18 +01:00
Reto Buerki
ebfe3d8ff0 hw: Use mtc_size from Cpu class for mtc::SIZE
This decouples the size of the mode transition control region from the
minimal mapping size of the page tables implementation. Rather, the CPU
architecture is able to specify the actual size.

Rationale: For x86_64, we need the mtc region to span two pages in order
to store all the tables required to perform the mode switch.
2015-03-13 12:17:28 +01:00
Reto Buerki
32521cfd71 hw: Declare mtc_size constant in arm/cpu_support.h
This constant specifies the size of the mode transition control region.
2015-03-13 12:17:28 +01:00
Norman Feske
174fdb162f News item for ARM virtualization article 2015-03-13 12:17:28 +01:00
Josef Söntgen
47b0aea30d wifi_drv: use report mechanism in wifi.run
Update the wifi run script to reflect the current configuration
mechanism used by the wifi driver.

Issue #1439.
2015-03-13 12:17:28 +01:00
Josef Söntgen
9d5b119186 wifi_drv: add dummy member to empty structs
The size of empty structs differs in C (0 byte) and C++ (1 byte), which
leads to different offsets in compound structures. This fixes the driver
on 32Bit platforms.

Issue #1439.
2015-03-13 12:17:27 +01:00
Josef Söntgen
36bcc69faf wifi_drv: on timeout return correct remaining time
Issue #1439.
2015-03-13 12:17:27 +01:00
Josef Söntgen
7e69013e0c wifi_drv: store timeout also in timer_list.expires
The wireless stack calls timer_before(foo, timer.expires) and up to now
it was always 0. Let's be save and set this field when scheduling the
timer, although it worked fine so far.

Issue #1439.
2015-03-13 12:17:27 +01:00
Josef Söntgen
88fc1eee61 wifi_drv: add verbose attribute in config node
Among others, the driver will now print the MAC address of the wireless
device when 'verbose="yes"' is added to <config>.

Issue #1439.
2015-03-13 12:17:27 +01:00
Josef Söntgen
c46e3db4d5 wifi_drv: silence 'Slab too large' error
We will always see this error message when the driver is started. It
is expected and not an actual error. When the driver is running it will
not allocate larger chunks than the Slab provides. Therefore, we can
safely ignore this message.

Issue #1439.
2015-03-13 12:17:27 +01:00
Norman Feske
862251fa8e News item about the second seL4 article 2015-03-13 12:17:27 +01:00
Christian Prochaska
c11b02dfd4 gdb: save generated files in the build directory
Fixes #1435
2015-03-13 12:17:26 +01:00
Christian Prochaska
1f7fd647da vbox: wait longer for stable timer state
Some functions in the time manager, for example 'TMTimerSet()' and
'TMTimerStop()' let VirtualBox abort with a failed assertion if the timer
does not change to a 'stable' state after 1000 calls of a mixture of
'yield' and 'sleep'. On Genode, this happens sometimes when the 'EMT'
thread is executing 'TMTimerSet()' and gets interrupted by the 'TAP'
thread, which calls 'TMTimerStop()' and waits for the 'EMT' thread to
finish setting the timer. Since the 'EMT' thread has the lowest priority,
1000 retries can be too few. Without the assertion, these functions would
return an error code, which is often ignored by the caller, so it seems
safer to keep retrying until the function can return successfully.

Fixes #1437
2015-03-13 12:17:26 +01:00
Christian Helmuth
143c703669 vbox: prevent warning 2015-03-13 12:17:26 +01:00
Christian Helmuth
da21a3c338 create_grub2: ext2 default parameters for image
The mkfs.ext2 heuristics select the "small" ext2 usage type, which does
not fit well with GiB-sized pen drives. For example, the block size is
just 1024 bytes compared to 4096 for "default". Therefore, we enforce
the default usage type as this fits our use case of dumping the image to
USB sticks better.
2015-03-13 12:17:26 +01:00
Christian Helmuth
86c0656de0 vbox: cleanup device registration
Patch got lost on win8 merge ;-)
2015-03-13 12:17:25 +01:00
Martin Stein
a5d043443d run/signal: abort "many contexts" if manage fails
Previously, in the manage-many-contexts test we didn't test wether the manage
operations succeed.

Ref #1433
2015-03-13 12:17:25 +01:00
Martin Stein
726e6b3e5d signal: fix infinite loop
Fixes #1433
2015-03-13 12:17:25 +01:00
Josef Söntgen
7923b287d9 wifi_drv: fix find_next_bit function
Among others, this function is used in the for_each_set_big() macro,
which is used when configuring the data rate tables. Therefore, this
fixes observed performance issues.

Fixes #1439.
2015-03-13 12:17:25 +01:00
Josef Söntgen
f94176af3f wifi_drv: handle invalid config_rom and psk
* Only attach the config_rom dataspace if it is valid.
* Check if PSK has a valid length.

Issue #1439.
2015-03-13 12:17:25 +01:00
Josef Söntgen
d443c136ed wpa_supplicant: report quality value
Issue #1439.
2015-03-13 12:17:25 +01:00
Alexander Boettcher
3279346f80 nova: update kernel (fixes endless loop)
If running multiple VBox VMMs with Windows as guest concurrently then it may
happen that the system seem to hang. It turned out that actually
a VM-exit storm (vmx_exception->handle_exc_nm) causes a endless loop between
kernel and vCPU. Nothing gets scheduled nor interrupts are received anymore.
The referenced kernel commit fixes this issue.

Issue #1343
2015-03-13 12:17:24 +01:00
Christian Helmuth
d6f9725548 libc: fix compiler warning (issue #1434) 2015-03-13 12:17:24 +01:00
Emery Hemingway
f2d6e38cb4 fb_sdl: set size from config
Issue #1414
2015-03-13 12:17:24 +01:00
Christian Prochaska
c68828519e vbox: revert 'PGMR3Phys{Read,Write}External'
Fixes #1417
2015-03-13 12:17:24 +01:00
Alexander Boettcher
d303a25489 foc: increase maximal supported threads
Fixes #1418
2015-03-13 12:17:24 +01:00
Alexander Boettcher
75ab803ea2 foc: check result of bind_thread
Issue #1418
2015-03-13 12:17:24 +01:00
Alexander Boettcher
d7b88afb68 base: propagate bind_thread result of pd_session
Issue #1418
2015-03-13 12:17:23 +01:00
Stefan Kalkowski
679f66667c l4lx: don't request framebuffer dataspace twice
Fixes #1427
2015-03-13 12:17:23 +01:00
Alexander Boettcher
e5b187ce16 vbox: support wheel input events
Issue #1438
2015-03-13 12:17:23 +01:00
Alexander Boettcher
c8a9b1802e vbox: enable usb support for guests
Fixes #1438
2015-03-13 12:17:23 +01:00
Christian Prochaska
d76220d6a9 qt5: save generated source files in the contrib directory
Fixes #1436
2015-03-13 12:17:23 +01:00
Norman Feske
e8336acafc base,os: Coding-style unification
Fixes #1432
2015-03-13 12:17:23 +01:00
Norman Feske
56ed7addbc base: fix misleading ROM-connection error message 2015-03-04 17:32:20 +01:00
Norman Feske
f9269f5cb1 Adapt base-codezero to new ports mechanism
Fixes #1425
2015-03-02 12:19:12 +01:00
Christian Helmuth
54ef87c979 version: 15.02 2015-02-27 11:57:59 +01:00
Norman Feske
0bbad0f5d4 News item for Genode 15.02 2015-02-27 11:52:17 +01:00
Norman Feske
2392700c79 Release notes for version 15.02 2015-02-27 11:52:17 +01:00
Sebastian Sumpf
e866bf3fa3 l4linux: Adapt netperf run script to new run tool
With the new run tool, we net to use the 'serial_id' when using the 'send'
command.
2015-02-27 11:48:36 +01:00
Alexander Boettcher
d68c7d1d10 usb: rename coordinates to width/height for touch 2015-02-27 11:48:36 +01:00
Sebastian Sumpf
89dbc10334 L4Linux: Update hash and revision (eager FPU)
The corresponding L4Linux fix:

25aa4a5f25
2015-02-27 11:48:36 +01:00
Martin Stein
c78efd4428 odroid_xu: prevent tests with sd/platform/ahci/fb
Drivers like SD-Card, platform, AHCI, and framebuffer are specified as Exynos5
compliant. But they are at least not compliant with Odroid-XU although this is
Exynos5. Thus, prevent tests that rely on such drivers when building for
hw_odoid_xu. Furthermore, make previous Arndale regulator/consts.h,
uart_defs.h, and some Board_base enums available to all Exynos5 builds to
enable at least building the drivers.

Fixes #1419
2015-02-27 11:48:36 +01:00
Martin Stein
9737b5d966 tz_vmm: support USB-Armory board
For the USB-Armory, we use a newer version of Linux (3.18) as for the
i.MX53-QSB. The main difference is, that the newer Linux uses a DTB instead of
ATAGs.

Fixes #1422
2015-02-27 11:48:35 +01:00
Martin Stein
be392b3bf9 hw: support USB-Armory board
The USB Armory is almost the same as the i.MX53-QSB but it uses only
one of the two RAM banks available in i.MX53. Furthermore we use the USB
Armory only with Trustzone enabled.

Ref #1422
2015-02-27 11:48:35 +01:00
Sebastian Sumpf
2b87628b3c base-foc: Update hash/revision for cli patch.
Issue #1420
2015-02-27 11:48:08 +01:00
Sebastian Sumpf
76d38a8c76 L4Linux: Update hash and revision (SMEP patch)
The corresponding L4Linux fix:

  7f2ab08eb6
2015-02-27 11:48:08 +01:00
Stefan Kalkowski
c176fc24a1 tz_vmm: make script success detection more robust 2015-02-27 11:48:08 +01:00
Christian Prochaska
70540e6f8e Improve 'Timed_semaphore' accuracy
Fixes #1421
2015-02-27 11:48:07 +01:00
Martin Stein
d2b82274db run scripts: don't use is_qemu_available anymore
With the new run tool, there is no more is_qemu_available function. However,
some scripts still try to use it because only frequently used scripts were
updated by now. The commit replaces the function calls with the new
'have_include power_on/qemu' check.

Ref #1419
2015-02-27 11:48:07 +01:00
Josef Söntgen
8d9561595c netperf: add wifi test
Enables testing of the wifi_drv with netperf.

Fixes #1415.
2015-02-27 11:48:07 +01:00
Josef Söntgen
894974f73b wifi_drv: copy firmware images to build directory
Always copy the firmware images to the bin directory within the
build directyry when building the wifi_drv binary.

Issue #1415.
2015-02-27 11:48:06 +01:00
Josef Söntgen
818dad72d0 dde_linux: download firmware for iwlwifi driver
Also download firmware images needed by the wifi_drv when preparing
the dde_linux port. The images are placed in 'firmware' directory.

Issue #1415.
2015-02-27 11:48:06 +01:00
Josef Söntgen
85031f1c1a wifi: report wlan networks
The wifi_drv now provides two reports. The first one contains all
accesspoints that were found while scanning the supported frequencies.
The second one reports the state of the driver, i.e., if it is
conntected to an accesspoint or not. In addition to that, the driver
now gets its configuration via a ROM session.

More detailed information are available in 'repos/dde_linux/README'.

Issue #1415.
2015-02-27 11:48:06 +01:00
Alexander Boettcher
c578a455ba vbox: adapt auto run scripts for win8
Issue #1413
2015-02-27 11:48:06 +01:00
Christian Helmuth
417199ea64 vbox: enable support for Windows 8
Fixes #1413
2015-02-27 11:48:05 +01:00
Alexander Boettcher
d86380d744 nova: provide assessors in utcb for efer register
Issue #1413
2015-02-27 11:48:05 +01:00
Sebastian Sumpf
e4194b4f44 base-foc: Remove 'modaddr' from bootstrap
Let bender relocate the boot modules. Skip relocation strep in bootstrap (only
the kernel, sigma0, and roottask will be loaded).
2015-02-27 11:48:05 +01:00
Stefan Kalkowski
7582396e9c hw_arndale: enable ARM virtualization extensions
* enables world-switch using ARM virtualization extensions
* split TrustZone and virtualization extensions hardly from platforms,
  where it is not used
* extend 'Vm_session' interface to enable configuration of guest-physical memory
* introduce VM destruction syscall
* add virtual machine monitor for hw_arndale that emulates a simplified version
  of ARM's Versatile Express Cortex A15 board for a Linux guest OS

Fixes #1405
2015-02-27 11:48:05 +01:00
Stefan Kalkowski
07c8d1652e hw_arndale: setup ARM hypervisor mode
To enable support of hardware virtualization for ARM on the Arndale board,
the cpu needs to be prepared to enter the non-secure mode, as long as it does
not already run in it. Therefore, especially the interrupt controller and
some TrustZone specific system registers need to be prepared. Moreover,
the exception vector for the hypervisor needs to be set up properly, before
booting normally in the supervisor mode of the non-secure world.

Ref #1405
2015-02-27 11:48:05 +01:00
Stefan Kalkowski
e7dad39016 uart_drv: enable RX channel for exynos5 driver
This is useful for automated tests on this platform, where the run script
wants to interact with some component via terminal

Ref #1405
2015-02-27 11:48:05 +01:00
Stefan Kalkowski
1e3c80ff5b arm: enable cpu cortex_a15 compiler flag
To enable the usage of virtualization extension related instructions
there is the need to enable the '-mcpu=cortex_a15' compiler flag on
those cpus. To not conflict with other compiler flags (Ref #810) we've
to disable the '-march=arm_v7a' flag.

Ref #1405
2015-02-27 11:48:04 +01:00
Stefan Kalkowski
8e2b4d6f45 hw: extend kernel interrupt class
The generalization of interrupt objects in the kernel and the use of
C++ polymorphism instead of explicitely checking for special interrupts
within generic code (Cpu_job::_interrupt) enables the registration of
additional interrupts used by the kernel, which are needed for specific
aspects added to the kernel, like ARM hardware virtualization interrupts.

* Introduce generic base class for interrupt objects handled by the kernel
* Derive an interrupt class for those handled by the user-land
* Implement IPI-specific interrupt class
* Implement timer interrupts using the new generic base class

Ref #1405
2015-02-27 11:43:56 +01:00
Stefan Kalkowski
0836726df2 hw: use one IRQ for all cpus to send IPIs
Until now, one distinct software generated IRQ per cpu was used to
send signals between cpus. As ARM's GIC has 16 software generated
IRQs only, and they need to be partitioned between secure/non-secure
TrustZone world as well as virtual and non-virtual worlds, we should
save them.

Ref #1405
2015-02-27 11:43:56 +01:00
Stefan Kalkowski
a40932a324 hw: refactor irq controllers
* name irq controller memory mapped I/O regions consistently
  in board descriptions
* move irq controller and timer memory mapped I/O region descriptions
  from cpu class to board class
* eliminate artificial distinction between flavors of ARM's GIC
* factor cpu local initialization out of ARM's GIC interface description,
  which is needed if the GIC is initialized differently e.g. for TrustZone

Ref #1405
2015-02-27 11:43:56 +01:00
Sebastian Sumpf
c13fbff8c1 rump: Silence build process
The 'dest' target is renamed in the updated rump version  to 'dest.stage'. This
triggered some building steps, even when the targets already existed.

Issue #1409
2015-02-27 11:43:56 +01:00
Sebastian Sumpf
47b0b9b689 rump: Enable single CPU lock semantics
* Compile in single CPU support only
* Fix 'try_enter' semtantic for mutexes
* Unschedule when entering RW locks

Issue #1409
2015-02-27 11:43:56 +01:00
Sebastian Sumpf
422923cc95 rump: Add 'get_random_backend' function
A rump server may now implement its own random number generator, the default
impelementation will not generate random number.

Issue #1409
2015-02-27 11:43:55 +01:00
Alexander Boettcher
a594ae703d base: fix location_of_index affinity calculation
Take care that ypos parameter is smaller than height().
If it is not - wrap around.

Issue #1412.
2015-02-27 11:43:55 +01:00
Alexander Boettcher
babe1d1026 acpi: amend handling MMIO regions for ACPI tables
The handling of MMIO regions now supports more pathological cases with
weird cross references. Also, MMIO regions are releases after the
parsing is done.

Fixes #998
2015-02-27 11:40:59 +01:00
Christian Prochaska
679ae1dd14 vbox: improve virtual time accuracy
Fixes #1411
2015-02-27 11:40:58 +01:00
Alexander Boettcher
a31378476d nova: use in core one pager per CPU
Fixes #1394
2015-02-27 11:40:58 +01:00
Josef Söntgen
0f47ac958b log/serial: handle spurious EOF
While booting up, some devices send garbage over the serial connection.
This can result in an unexpected EOF event within expect(1). A filter
program may be specified with '--log-serial-filter' to circumvent this
problem. Then, the output of the serial program is piped through
the filter, which may sanitize the character stream.

Fixes #1395.
2015-02-17 16:01:37 +01:00
Alexander Boettcher
6329395026 run: remove upgrade messages in mp_server script 2015-02-17 14:18:16 +01:00
Martin Stein
3a40c27c26 hw_vea9x4: quickfix slow RAM access
Setting the ACTLR.SMP bit also without SMP support fastens RAM access
significantly. A proper solution would implement SMP support which must enable
the bit anyway.

Fixes #1353
2015-02-17 14:18:16 +01:00
Alexander Boettcher
467eee07a6 run: increase tcl buffer for run_genode_until
and move it close to run_genode_until implementation.
Somehow the "match_max -d" gets ignored if it is to far away and some
our run scripts fails because the buffer contains not all information
(seen for affinity.run on a 8 core machine)
2015-02-17 14:18:16 +01:00
Josef Söntgen
7617833365 run: capture kernel msg to detect boot errors
Handle boot errors like the old run tool did by checking a kernel
specific string on boot up and start the run script timeout afterwards.

Issue #1395.
2015-02-16 14:01:45 +01:00
Alexander Boettcher
2b69310adf nova: detect overlapping module regions
Detect overlapping regions which should not overlap and print some meaningful
message instead of dying with some mysterious page fault.

Issue #1402
2015-02-16 14:01:45 +01:00
Martin Stein
00167aec14 hw: activate perf-counter by default
This is needed at least by rump_ext2.run as it uses the perf-counter
in the jitterentropy-lib. On other platforms the perf-counter gets enabled
by the kernel by default. However, on HW, we keep the specifier to allow users
to disable it easily (e.g. for security reasons).

Ref #1393
2015-02-16 14:01:45 +01:00
Sebastian Sumpf
b4a880ca54 bender: restrict relocation below 2G physical
Fixes #1402
2015-02-16 14:01:24 +01:00
Alexander Boettcher
2e1686558c run: constrain physical memory for pci/acpi driver
Permit pci/acpi driver to constrain physical memory allocation to needs of
the driver it serves.

Fixes #1045
2015-02-16 13:40:38 +01:00
Alexander Boettcher
34719c4589 pci: allocate below 3G physical for 32bit & iommu
Related to #696.

Issue #1045
2015-02-16 13:40:38 +01:00
Alexander Boettcher
8c66a4b1be base: support phys range specifier in ram_session
Fixes #696
2015-02-16 13:40:38 +01:00
Alexander Boettcher
95ff5ba11d base: support range restriction in allocator
Issue #696
2015-02-16 13:40:38 +01:00
Alexander Boettcher
57c4678aa1 gdb: adapt gdb_monitor run scripts
Adjustment are required due to changes of the new run tool and the new shared
library implementation.

Issue #1192
2015-02-16 13:40:37 +01:00
Stefan Kalkowski
322be1b4fb hw: LPAE for Cortex a15 (fix #1387) 2015-02-16 13:40:37 +01:00
Stefan Kalkowski
21fd2fc582 hw: introduce ARM LPAE extension (ref #1387)
This patch adds support for the Large Physical Address Space Extension
for ARM v7.
2015-02-16 13:40:37 +01:00
Stefan Kalkowski
102444b82b hw: remove pointless, wasted memory in pd object
(ref #1387)
2015-02-16 13:40:37 +01:00
Stefan Kalkowski
34f169293f hw: fix page table handling of core (ref #1387)
There might be more then one nested slab allocation.
2015-02-16 13:40:37 +01:00
Josef Söntgen
4ca1284e0e vfs: do not return early on directory operations
When returning early on directory operations, file systems that might
be able to handle the request but come after the current one are not
tried.

Fixes #1400.
2015-02-16 13:40:36 +01:00
Sebastian Sumpf
c2c8483293 usb_drv: Fix controller initialization on RPI
Execute high priority tasklets immediately, these tasklets need to be processed
before any other work.

Issue #1401
2015-02-16 13:40:36 +01:00
Martin Stein
5dea0b40aa hw: don't use ARM CPU-state stuff in generic code
Fixes #1404
2015-02-16 13:40:36 +01:00
Martin Stein
63f8a38b5a hw: default boot-modules vpath is generic
Ref #1404
2015-02-16 13:40:36 +01:00
Norman Feske
cb579ec8d7 hw: minor 64-bit fixes 2015-02-16 13:40:36 +01:00
Stefan Kalkowski
7cb4d7bf41 run: support fastboot tool to load images
Fixes #1397
2015-02-16 13:40:36 +01:00
Stefan Kalkowski
a3abf74d1e hw: remove code duplication related to Exynos5 SoC
Fixes #1396
2015-02-16 13:40:36 +01:00
Josef Söntgen
4caf12cd16 tool/run: decrease timeout in log/serial
Set the timeout to 60s. The original value of 210s is too long and
delays the testing process unnecessarily.

Fixes #1395.
2015-02-16 13:40:35 +01:00
Josef Söntgen
a838b6a657 noux: add local nanosleep(2) and sleep(3)
Up to now Noux used the libc sleep functions, which actually is not
possible because the _nanosleep() function implemented by our libc
creates a new thread to handle the timeout. Noux childs may have
only one thread, e.g., the main thread, though. To fix this issue
sleeping is now handled directly by Noux. It is implemented by calling
select(2) with a timeout. This fix is needed for mutt(1), which calls
sleep when it prints a notification for the user.

Fixes #1374.
2015-02-16 13:40:35 +01:00
Sebastian Sumpf
7ecd83373c rump: Reduce startup latency
Since rump now requires large buffers of random numbers (>= 512 bytes), use the
jitterentropy library instead of the slow timer pseudo random number generation.

Fixes #1393
2015-02-16 13:40:35 +01:00
Sebastian Sumpf
ab0fd6510f jitterentropy: Fix foreign import
Make the jitterentropy library accessible from other repositories.

Noticed while working on issue #1393
2015-02-16 13:40:35 +01:00
Stefan Kalkowski
b69deec067 autopilot: adapt runscripts to run new tool
Related to #1372.
2015-02-16 13:40:35 +01:00
Stefan Kalkowski
0ac039fad7 L4Linux: make ballooning driver configureable
To circumvent compilation errors with the older L4Android Linux kernel
version, the ballooning driver is included in the more recent L4Linux
kernel only. Moreover, to be able to maintain L4Android / L4Linux in a more
convenient way, e.g. to apply patches valid for both versions, we use
the same git clone that is used for L4Linux instead of using the upstream
L4Android version by applying patches.

Fixes #1390
2015-02-16 13:40:35 +01:00
Josef Söntgen
78e8e04b88 tool/run/README: fix wrong examples
Fixes #1392.
2015-02-16 13:40:34 +01:00
Josef Söntgen
863b6fef80 noux: prevent override in SYSCALL_STAT
Fixes #1386.
2015-02-16 13:40:34 +01:00
Josef Söntgen
0a835e4ce9 os: structured timestamp in Rtc session
Instead of returning an uint64_t value, return a structured time stamp.
This change is only visible to components using Rtc_session directly.

Fixes #1381.
2015-02-16 13:40:34 +01:00
Sebastian Sumpf
6d2c697da1 lxip: Fix timeout handling for 'schedule_timeout'
Up until now 'schedule_timeout' did only wait for the next signal to occur.
However, we might run into situations where there won't occur signals for longer
periods of time. Therefore, we took care of the respective timeout handling.

This commit also adds Genode's tracing support

Issue #1310
2015-02-16 13:40:34 +01:00
Sebastian Sumpf
8843564850 usb_drv: USB terminal driver
Issue #1329
2015-02-16 13:40:34 +01:00
Sebastian Sumpf
3fd561aab6 terminal_echo: Add line feed end carriage return
Issue #1329
2015-02-16 13:40:33 +01:00
Sebastian Sumpf
0c2bdf9edd usb_drv: Remote USB driver interface
Issue #1329
2015-02-16 13:40:33 +01:00
Christian Helmuth
e479b9e8e8 ports: also hash patches with absolute path names
Fixes #1305
2015-01-27 12:17:53 +01:00
Norman Feske
1717d11742 doc: mention packages needed for using the ports
Fixes #1383
2015-01-27 10:09:19 +01:00
Sebastian Sumpf
15a379894a lxip: Fix on OKL4
This has been broken for a while now. Use correct (global) signal transmission,
do not use local signal transmission, as signals seems to get lost.

Issue #1310
2015-01-26 12:28:42 +01:00
Wolfgang Faust
b2947d2187 Add filenames to code snippets in hello_tutorial
Fixes #1369
2015-01-26 12:28:42 +01:00
Norman Feske
671682cb6a base: use reinterpret_cast for symbol lookup
This patch changes the Shared_object::lookup function to use a
reinterpret_cast instead of a static_cast to allow the conversion
from symbol addresses to arbitrary pointers.
2015-01-26 12:28:42 +01:00
Norman Feske
f68889ea0a arora: fix domain config in plugin demo
Fixes #1375
2015-01-26 12:28:42 +01:00
Norman Feske
cb4302d06a loader: make CPU session upgradable
Fixes #1379
2015-01-26 12:28:42 +01:00
Norman Feske
623bc82e07 fs_rom: realloc only when dataspace grew
Fixes #1377
2015-01-26 12:28:42 +01:00
Norman Feske
ff422ccc6e backdrop: respond to config changes
Fixes #1376
2015-01-26 12:28:42 +01:00
Norman Feske
db56946ba9 rom_prefetcher: Yield CPU after each request
By blocking on a timeout, we yield the CPU in order to give a
concurrently running sporadic process a chance to obtain ROM modules.
Otherwise, such requests would be deferred until the ROM prefetcher
completes its operation or in the unlikely event that the prefetcher
gets preempted.

Fixes #1378
2015-01-26 12:28:41 +01:00
Christian Helmuth
86eb3f4a0d rtc: rename get_current_time() to current_time()
Issue #1344
2015-01-26 12:28:41 +01:00
Josef Söntgen
026b5a66c9 autopilot: get settings via RUN_OPT_AUTOPILOT
If the variable RUN_OPT_AUTOPILOT is set the autopilot will override
the default RUN_OPT settings provided in build.conf.

Related to #1355.
2015-01-26 12:28:41 +01:00
Josef Söntgen
55bf0bb294 run: add power_on/softreset
The softreset module resets the target system by triggering a software
reset.

Fixes #1355.
2015-01-26 12:28:41 +01:00
Josef Söntgen
88f62b0988 autopilot: adapt runscripts to new run tool
Related to #1372.
2015-01-26 12:28:41 +01:00
Josef Söntgen
e3c37f43a0 build.mk: remove RUN_ENV usage 2015-01-26 12:28:41 +01:00
Josef Söntgen
ce24547eea create_builddir: add default RUN_OPT configuration 2015-01-26 12:28:40 +01:00
Josef Söntgen
c706b1c0a7 run: modularize run tool 2015-01-26 12:28:40 +01:00
Christian Helmuth
febca1b827 rtc: pseudo driver for linux + server framework
The commit also includes a test program incl. run script.

Fixes #1344.
2015-01-26 12:28:40 +01:00
Josef Söntgen
a36d0ec83a lxip: provide struct file pointer for udp_poll
Lxip may deference the file pointer in 'udp_poll()'. So we provide a
valid dummy object.

Fixes #1371.
2015-01-20 12:05:54 +01:00
Norman Feske
363fd6065d Init: support for aliases for child names
Fixes #1373
2015-01-20 11:25:59 +01:00
Norman Feske
a0abb093ed Remove output-section fill from linker scripts
The linker scripts use to fill alignment gaps within the text section
with the magic value 0x90909090, which correponds to the opcodes of four
nop instructions on x86. This patch removes this value because it
apparently solves no problem. If, for some reason (e.g., due to a dangling
pointer) a thread executes instructions within alignment paddings, NOP
instructions are not any better than any other instruction. The program
will eventually execute the instructions after the padding, which is
most likely fatal. It would be more reasonable to fill the padding with
the opcode of an illegal instruction so that such an error can be
immediately detected. That said, I cannot remember a single instance,
where the fill value has helped us during debugging.

Even if the mechanism served a purpose on x86, it is still better to
remove it because it does not equally work on the other architectures
where the linker scripts are used. I.e., on ARM, the opcode 0x90909090
is not a NOP instruction.
2015-01-20 11:25:59 +01:00
Emery Hemingway
e1667e61cc libports: sqlite
Issue #1357
2015-01-20 11:25:58 +01:00
Emery Hemingway
e4ac1f99ed tool/ports: run unzip with UNZIP_OPT
The patch supports both, a download-specific UNZIP_OPT(download) and a
general UNZIP_OPT that can be defined across downloads.
UNZIP_OPT(download) overrides UNZIP_OPT.

Note, the `--strip-components=1` argument is not required for unzip.

Issue #1357
2015-01-20 11:23:52 +01:00
Emery Hemingway
b5f1af6af0 libports: libbz2 (Bzip2)
Issue #1357
2015-01-20 11:23:52 +01:00
Norman Feske
cfea0ea97d News items for FOSDEM and roadmap 2015 2015-01-20 11:23:51 +01:00
Norman Feske
cbe835f2c8 Roadmap 2015 2015-01-20 11:23:51 +01:00
Christian Helmuth
ce15800beb vbox: loosen boot heuristics in auto-disk test 2015-01-20 11:23:51 +01:00
Alexander Boettcher
9262629a86 vbox: fix interrupt injection in recompiler mode
Fixes #1365
2015-01-20 11:23:51 +01:00
Christian Prochaska
50950ec248 vbox: 'poke' fixes
Fixes #1364
2015-01-20 11:23:51 +01:00
Alexander Boettcher
336018b493 base: append label per line properly (log service)
If newlines are in the string send to the core log service, they don't get
the label properly appended before each output. The messages then look like
they are coming from core.

Fixes #1368
2015-01-20 11:23:51 +01:00
Alexander Boettcher
25eec75ad8 vbox: be less verbose in vmx_invalid exit cases
Be less verbose regards warnings caused by vmx_invalid exits - which triggers
on T400 more often because it has no Unrestricted Guest support. This leads
to lot of log messages so that the test does not succeed in time. Additionally,
the virtualbox_auto_disk.run script is adjusted to check for some output to
exit earlier if something went wrong.

Fixes #1367
2015-01-20 11:23:51 +01:00
Alexander Boettcher
988a7962a8 nova: disable vpid feature
Workaround for issue #1343. By disabling the 'vpid' feature of the nova
kernel several VMs can be used concurrently. Applies for Seoul and VirtualBox.

Issue #1343
2015-01-20 11:23:50 +01:00
Alexander Boettcher
ee996d2280 vbox: enable dumping GuruMeditations messages
This typically is a sign that something went terribly wrong. The information
may help to debug issues.

Issue #1343
2015-01-20 11:23:50 +01:00
Stefan Kalkowski
e8d1d6e87c rpi: add missing drivers in run-scripts (Fix #1366)
Add platform driver and usb-network driver for platform_rpi where appropriated.
2015-01-20 11:23:50 +01:00
Stefan Kalkowski
28112d1ff9 rump: exclude ARM architectures apart from v7
Ref #1366
2015-01-20 11:23:50 +01:00
Stefan Kalkowski
df8bdaaf79 run: increase JTAG load timeout (Ref #1366) 2015-01-20 11:23:50 +01:00
Christian Helmuth
f99ca9e372 Tools for convenient handling of port contrib dirs
tool/ports/shortcut

  create symbolic link from 'contrib/<port-name>-<hash>' to
  contrib/<port-name>

tool/ports/current

  print current contrib directory of port

Fixes #1345.
2015-01-20 11:23:50 +01:00
Christian Prochaska
6791fd18cc vbox: use libc's 'gettimeofday()' function
Fixes #1363
2015-01-20 11:23:50 +01:00
Alexander Boettcher
4be7b3c3ad seoul: exclude 64bit guest in seoul-genode.run
Fixes #1358
2015-01-20 11:23:49 +01:00
Josef Söntgen
d58509f446 libc: create poll.h symlink
Since user-land tools tend to look for <poll.h> instead of <sys/poll.h>
make them happy like w/o resorting to patch the source.

Fixes #1356.
2015-01-20 11:23:49 +01:00
Josef Söntgen
f01472b308 dde_rump: Update to current version
Issue #1361
2015-01-20 11:23:49 +01:00
Stefan Kalkowski
2380fc442f ahci: avoid to reinstantiate backend driver
Instead of fixing the missing dynamic facilities of the AHCI driver
backends for x86 and Exynos5, just avoid to create/destroy the backend
for every new connection, but always use one and the same object.
The AHCI drivers need to be re-written anyway, see issue #1352 for instance,
we can make it more robust for the dynamic case then.

Fixes #786
Fixes #1133
2015-01-12 14:24:55 +01:00
Stefan Kalkowski
901bff813d imx31: remove platform completely (fix #1360) 2015-01-12 14:24:15 +01:00
Alexander Boettcher
0f18ecc142 base: handle input overflow exception
Fixes #1348
2015-01-09 11:52:06 +01:00
Sebastian Sumpf
1a26f33469 ldso: shared-object lock and ctor test
This has to be used during shared object creation and destruction because global
lists are manipulated. We cannot use the 'Elf_object::lock' here because there
may be jump-slot relocations during object initialization.

Fixes #1350
2015-01-09 11:31:21 +01:00
Alexander Boettcher
e5b509cabb nova: breakpoint handling
If no one is registered for a breakpoint trap - stop the thread. E.g. used
by virtualbox assertion implementation.
2015-01-09 11:03:29 +01:00
Martin Stein
9a4a0448be hw vea9x4: remove trustzone support
When building Genode for VEA9X4 as micro-hypervisor protected by the ARM
TrustZone hardware we ran into limitations regarding our basic daily
testing routines. The most significant is that, when speaking about RAM
partitioning, the only available options are to configure the whole SRAM
to be secure and the whole DDR-RAM to be non-secure or vice versa. The
SRAM however provides only 32 MB which isn't enough for both a
representative non-secure guest OS or a secure Genode that is still
capable of passing our basic tests. This initiated our decision to
remove the VEA9X4 TrustZone-support.

Fixes #1351
2015-01-08 13:28:42 +01:00
Alexander Boettcher
91daf433c5 seoul: transform absolute events to relative (PS2)
Fixes #1346
2015-01-07 15:17:51 +01:00
Martin Stein
be7d5b4827 hw: use context-area base that is ok for VEA9X4-TZ
On VEA9X4-TZ, the context-area overlaps with the virtual area of the
text, data and bss. However, we can't simply change the link address as
the core image (used physically respectively 1:1 mapped) needs to be in
this particular RAM-region as it is the only one that can be protected
against a VM. Thus I've moved the context area to a place where it
shouldn't disturb any HW-platform.

Fixes #1337
2015-01-07 10:41:22 +01:00
Martin Stein
e63092f1dd hw & cortex_a9: fix scheduling-timer speed
The estimation of the input clock of the Cortex A9 Private Timer module
was pretty miserable at every Cortex A9 board.

Fixes #1341
2015-01-06 15:22:07 +01:00
Martin Stein
ba321c20d1 hw vea9x4: let userland timer SP804 0/1 be secure
Declaring the SP804 0/1 module and its interrupt to be non-secure prevents the
secure Genode from receiving the interrupt and hence the timer driver in the
secure Genode doesn't work.

Fixes #1340
2015-01-06 15:16:02 +01:00
Sebastian Sumpf
6f8f9085f3 os: Add virtual destructor to block driver
Fixes #1339.
2015-01-06 15:10:17 +01:00
Christian Helmuth
11a513ac63 prepare_port: disable certificate checking in wget
Some downloads are available via HTTPS only, but wget < 3.14 does not
support server-name identification, which is used by some sites. So, we
disable certificate checking in wget and check the validity of the
download via SIG or SHA.

Fixes #1334.
2015-01-06 12:39:11 +01:00
Alexander Boettcher
8842ba2e1c nova: remove timer delay heuristic
The commit uses a fixed kernel branch (r8), which fixes a caching bug
observable in the Genode host. The quirk detecting the circumstance in the
timer service is obsolete now and is removed.

Fixes #1338
2015-01-06 12:39:11 +01:00
Alexander Boettcher
1d920fa1b5 nova: fix usage of portal permission
The commit
- fixes the syscall bindings for using portal permissions
- revokes PT_CTRL permission after pager in core set local badge name
- revokes PT_CTRL permission after server entrypoint code set local badge name

Fixes #1335
2015-01-06 12:39:11 +01:00
Christian Helmuth
2cd902f09f libc: warn on configuration errors in rtc wrapper
Fixes #1336.
2015-01-06 12:39:11 +01:00
Alexander Boettcher
bfa2ad7d47 nova: platform test for portal permission usage
Test and run script showcasing issue #1335.

The test mainly tries out syscalls which should not succeed.
2015-01-06 12:39:11 +01:00
Christian Helmuth
77410a08a8 libc: remove debug messages from vfs plugin 2015-01-06 12:39:10 +01:00
Martin Stein
659f6ff5c8 hw_vea9x4: quickfix for missing SMP awareness
This fix configures TTBRs and translation-table descriptors as if we would use
SMP although we don't to circumvent problems with UP-configurations.
This fix should be superseded later by full SMP support for the VEA9X4.

ref #1312
2014-12-19 13:58:49 +01:00
Christian Helmuth
59d26e040e ahci: enable benchmark on x86 2014-12-19 13:58:48 +01:00
Martin Stein
5783ba4b1f base: let context area RM session be expanding
Fixes #1331.
2014-12-19 13:58:48 +01:00
Martin Stein
d31492040c hw: fix race on pager-object dissolve
The HW-kernel, in contrast to other kernels, provides a direct reference
to the pager object with the fault signal that is send to the pager
activation. When accessing this reference directly we may fall into the
time span where the root parent-entrypoint of the faulter has alredy
dissolved the pager object from the pager entrypoint, but not yet
silenced the according signal context.  To avoid this we issue an
additional 'lookup_and_lock' with the received pager object. This isn't
optimal as we don't need the potentially cost-intensive lookup but only the
synchronization.

Fixes #1311.
Fixes #1332.
2014-12-19 13:58:48 +01:00
Alexander Boettcher
a59cf9f557 usb: wacom touchscreen support 2014-12-19 13:58:48 +01:00
Christian Helmuth
6344ab94b2 run: use predefined name for wsman script
"file tempfile" is not available in tcl versions below 8.6, which are
still wide spread, for example, in Ubuntu 12.04.5 LTS.

Fixes #1328.
2014-12-19 13:58:48 +01:00
Christian Helmuth
22db466194 wifi_drv: adapt wifi.run for iwl7260
Fixes #1317.
2014-12-19 13:58:48 +01:00
Christian Menard
fa0f7c0d6d wifi_drv: enable support for iwl7260
- essential support for 7260 chipset and DMA fixes
- assign mvm->pm_ops at beginning of function iwl_op_mode_mvm_start.
  iwl_mvm_mac_setup_register() uses mvm->pm_ops, but it is called
  before this field is set to a valid value.
- disable call to function iwl_mvm_prepare_multicast.
  This function leads to a pagefault, as it aspects a list of multicast
  addresses, but the list is empty as it is not generated by this port.
2014-12-19 13:58:48 +01:00
Christian Helmuth
727ac4bc0c Put entry point at start of binary on x86 platforms
Related to #881.
2014-12-19 13:58:47 +01:00
Martin Stein
d704563453 hw: helping on IPC
On base-hw, each thread owns exactly one scheduling context for its
whole lifetime. However, introducing helping on IPC, a thread might get
executed on scheduling contexts that it doesn't own. Figuratively
spoken, the IPC-helping relation spans trees between threads. These
trees are identical to those of the IPC relation between threads. The
root of such a tree is executed on all scheduling contexts in the tree.
All other threads in the tree are not executed on any scheduling context
as long as they remain in this position. Consequently, the ready-state
of all scheduling contexts in an IPC-helping tree always equals the
state of the root context.

fix #1102
2014-12-19 13:58:47 +01:00
Martin Stein
6370b6880a hw: rename Thread::State SCHEDULED in ACTIVE
As soon as helping is used, a thread may also be in a blocking state when its
scheduling context is ready. Hence, the state designation SCHEDULED for an active
thread would be pretty misleading.

ref #1102
2014-12-19 13:58:47 +01:00
Martin Stein
6f377ec4c5 hw: add FIFO variant with for_each() method
ref #1102
2014-12-19 13:58:47 +01:00
Martin Stein
9c027fd9bd hw: remove deprecated TLB declaration
fix #1320
2014-12-19 13:58:47 +01:00
Alexander Boettcher
cdaf6a502d vbox: support absolute mouse input events
Got broken during upgrade from 4.2 to 4.3.

Fixes #1321
2014-12-19 13:58:47 +01:00
Alexander Boettcher
6d02c4c89f vbox: use power of two priority levels
Avoids warnings of init in form of

"priority band too small, losing least-significant priority bits"

when virtualbox starts threads.

Fixes #1323
2014-12-19 13:58:47 +01:00
Alexander Boettcher
51489e2f82 vmm: fix overmap attempts by seoul and vbox
If the debug branch of the nova kernel is used, following messages are printed
by the kernel during vCPU setup phase:

[0] overmap attempt OBJ - tree - ...

Fixes #1324
2014-12-19 13:58:46 +01:00
Alexander Boettcher
f36c0f150f demo: support launchpad entries with mem >= 2048M
Fixes #1325
2014-12-19 13:58:46 +01:00
Josef Söntgen
b557fb13f9 wifi_drv: fix timer scheduling
The context of timer are now inserted correctly and the actual timer
triggering the exection of each context is always programmed if the
head of the timer list changes.

Fixes #1326.
2014-12-19 13:58:46 +01:00
Josef Söntgen
4c7a5bb388 wifi_drv: call schedule() in sleep functions
The jiffies are only updated on each round of scheduling the runnable
tasks. We have to schedule the current task that executes the sleep
call to update the jiffies count and thereby preventing the task from
entering an endless loop when using a statement like
'while (!time_after(jiffies, now + timeout)) { msleep(1); }'.

Related to #1326.
2014-12-16 15:08:07 +01:00
Josef Söntgen
9ed935ff2a wifi_drv: look for PCI_CLASS_NETWORK_OTHER only
Instead of probing all device on the PCI bus just look for devices
matching PCI_CLASS_NETWORK_OTHER. This fixes issues with other devices
on the PCI bus, e.g. the GPU, when access their extended config space.

Related to #1326.
2014-12-16 15:07:56 +01:00
Alexander Boettcher
183a2c1be6 vbox: support more graphic modes
Fixes #1319
2014-12-09 18:21:09 +01:00
Christian Prochaska
b4f41aecad vbox: enable 1-byte MMIO writes at 4-/8-byte aligned address
Fixes #1318
2014-12-08 17:39:23 +01:00
Stefan Kalkowski
3367fd27e4 run: avoid buffering of output for expect
Due to commit "run: relax IP power plug recognition + serial EOF",
when piping the serial command through 'tr', some characters might
get buffered, thereby preventing some run scripts to finish correctly.
This commit removes the 'tr' hack. Instead, to circumvent the 'expect'
problem, which kills under special conditions spawned childs used to
obtain serial line content, whenever EOF of the serial command is
recognized during the boot phase, the child process gets re-spawned.
2014-12-08 13:53:17 +01:00
Alexander Boettcher
68abf0616a dde_ipxe: enable Intel I218-LM/I218-V PCI ID
Commit inspired by patch from @alex-ab/@cnuke but uses only one patch
file for all added NICs.

Issue #1220
2014-12-05 15:17:00 +01:00
Christian Helmuth
cf358b5db1 Revert "foc: relax parsing of boot process termination"
This reverts commit a9a6e8df89.

Setting correct UART parameters in U-Boot also fixes the issue and
reenables us to observe L4 bootstrapper startup.
2014-12-05 15:16:47 +01:00
Alexander Boettcher
513be78c05 seoul: adapt to nitpicker and use fixed seoul repo
Fixes #1307
2014-12-05 11:01:24 +01:00
Christian Helmuth
9996acf091 dde_linux: check tools needed for libnl 2014-12-05 11:00:15 +01:00
Christian Prochaska
36ca0497de qt5: set explicit routes for Nitpicker's 'Framebuffer' and 'Input' sessions
Setting explicit routes for Nitpicker's 'Framebuffer' and 'Input' sessionsi
avoids ambiguities if a Qt application provides these services, too.

Fixes #1316
2014-12-04 17:17:23 +01:00
Christian Prochaska
136d87bd9a qt5: fix include dir of 'qt5_qpa_nitpicker' library
Fixes #1315
2014-12-04 17:17:23 +01:00
Christian Prochaska
21154d6866 qt5: let QNitpickerViewWidget react to focus event
With this patch, when calling 'setFocus()' on a QNitpickerViewWidget, the
Nitpicker view gets the input focus (provided that the parent Qt window
already had it).

Fixes #1314
2014-12-04 16:26:22 +01:00
Stefan Kalkowski
a9a6e8df89 foc: relax parsing of boot process termination
Until now, the successful termination of the boot process was recognized
when 'expect' saw the first L4 bootstrapper output on serial line. On sytems
with initially shaky serial connection like Versatile Express, where the serial
line baudrate changes with the bootstrapper initialization, the first expected
line might be missing. Therefore, change the expected line to the first
Fiasco.OC kernel output.
2014-12-03 11:41:47 +01:00
Stefan Kalkowski
726c32e5f6 run: relax IP power plug recognition + serial EOF
* To communicate with IP power plug devices from Koukaam, to remote
  control power supply of test boards, don't parse minor versions, but
  support different IP power plugs
* TCL's expect may report an EOF when reading from the spawned serial
  terminal, especially when using 'socat' to stream serial over TCP/IP,
  although the spawned child is still running and delivering content.
  This problem is clearly not dependent on the characters send, but
  possibly due to strange pipe signals. When piping the serial output
  through 'tr' the problem vanishs.
2014-12-03 11:41:13 +01:00
Alexander Boettcher
6d391aae10 vbox: support routing serial output to Genode
Fixes #1308
2014-12-01 17:29:17 +01:00
Alexander Boettcher
f970e4a71b libc: support F_SETFD && FD_CLOEXEC ioctl
Issue #1308
2014-12-01 17:29:17 +01:00
Christian Helmuth
f9422b241f Fix compiler warning about uninitialized variable
Fixes #1051
2014-12-01 17:29:17 +01:00
Alexander Boettcher
9c0ced0a85 ldso: add __L4_ThreadSwitch to ldso symbol.map
This wasn't necessary before because we built an l4 library for
Pistachio and linked it against each application. With the new linker,
we compile the required files from within Genode and create a syscall
library that is only linked to ldso. If a program uses system calls
directly, for example, DDE kit's spinlock implementation, the required
symbols must be made globally accessible.

Fixes #1306
2014-12-01 16:32:35 +01:00
Christian Helmuth
510efce3a1 version: 14.11 2014-11-28 12:56:08 +01:00
Norman Feske
0e20daacde News item for Genode 14.11 2014-11-28 12:58:04 +01:00
Norman Feske
a7c38b8f81 Release notes for version 14.11 2014-11-28 12:58:04 +01:00
Norman Feske
4b117d4a66 doc: update of doc/components.txt 2014-11-28 12:58:04 +01:00
Stefan Kalkowski
4d3fa001e0 hw: remove memory region duplicate (fix #1304)
On the Versatile Express Cortex A9x4 platform the first memory region
0x0 - 0x4000000 is a hardware remapped memory area, containing flash
and DDR RAM copies and thus should not be added in addition to all
DDR RAM regions and the SRAM region.
2014-11-28 12:02:40 +01:00
Alexander Boettcher
604b831e1e vbox: update to virtualbox 4.3.16
Fixes #1296
2014-11-28 12:02:40 +01:00
Alexander Boettcher
c40aa45d86 pthread: support pthread_key_delete
Issue #1296
2014-11-28 12:02:39 +01:00
Sebastian Sumpf
a4f7800bf0 lxip: signal NETDEV_TX_BUSY if tx queue is full 2014-11-28 12:02:38 +01:00
Martin Stein
16b4e7d73a os: add missing include in vea9x4/pl011_defs.h
fix #1303
2014-11-28 12:02:38 +01:00
Christian Helmuth
dfe95b26c8 Fix handling of cache attribute with RAM
Adapt drivers for Exynos5 and PandaBoard to cache attribute changes in
786fe80.

Fixes #1301.
2014-11-28 12:02:38 +01:00
Martin Stein
8f9355b360 thread API & CPU session: accounting of CPU quota
In the init configuration one can configure the donation of CPU time via
'resource' tags that have the attribute 'name' set to "CPU" and the
attribute 'quantum' set to the percentage of CPU quota that init shall
donate. The pattern is the same as when donating RAM quota.

! <start name="test">
!   <resource name="CPU" quantum="75"/>
! </start>

This would cause init to try donating 75% of its CPU quota to the child
"test".  Init and core do not preserve CPU quota for their own
requirements by default as it is done with RAM quota.

The CPU quota that a process owns can be applied through the thread
constructor. The constructor has been enhanced by an argument that
indicates the percentage of the programs CPU quota that shall be granted
to the new thread. So 'Thread(33, "test")' would cause the backing CPU
session to try to grant 33% of the programs CPU quota to the thread
"test". By now, the CPU quota of a thread can't be altered after
construction. Constructing a thread with CPU quota 0 doesn't mean the
thread gets never scheduled but that the thread has no guaranty to receive
CPU time. Such threads have to live with excess CPU time.

Threads that already existed in the official repositories of Genode were
adapted in the way that they receive a quota of 0.

This commit also provides a run test 'cpu_quota' in base-hw (the only
kernel that applies the CPU-quota scheme currently). The test basically
runs three threads with different physical CPU quota. The threads simply
count for 30 seconds each and the test then checks wether the counter
values relate to the CPU-quota distribution.

fix #1275
2014-11-28 12:02:37 +01:00
Christian Helmuth
f60e2af21f dde_oss: use dde_kit_timer_ticks
The Linux-specific 'jiffies' symbol was removed from dde_kit in 35239b8.

Fixes #1302.
2014-11-28 12:02:37 +01:00
Sebastian Sumpf
038a7999bf ldso: Disallow recursive initialization
Do not support the global construction from of objects from within a global
constructor of another object. This can happen if, for example, dlopen is called
from a global constructor. The construction will be post-boned until the current
constructor has finished.
2014-11-28 12:02:37 +01:00
Martin Stein
09e6c3457f hw_arndale: consider timer resets
On Arndale, the kernel timer resets to the initial value of the last
count-down and continues as soon as it reaches zero. We must check this
via the interrupt status when we read out the timer value and in case
return 0 instead of the real value.

fix #1299
2014-11-28 12:02:37 +01:00
Christian Prochaska
2f5fbe73d3 q5: 'QTime::currentTime()' fix
Fixes #1298
2014-11-28 12:02:37 +01:00
Josef Söntgen
703e3622ff wifi_drv: Port of the Linux wireless stack 2014-11-28 12:02:36 +01:00
Josef Söntgen
2eaa55e6b1 dde_linux: remove base cxx from lxip.mk 2014-11-28 12:02:36 +01:00
Josef Söntgen
f127f5c7fc dde_linux: remove base cxx dep from usb.inc 2014-11-28 12:02:36 +01:00
Josef Söntgen
8870539904 dde_linux: clean up lxip patches 2014-11-28 12:02:36 +01:00
Josef Söntgen
338cfaaf9f dde_linux: clean up usb patches 2014-11-28 12:02:36 +01:00
Josef Söntgen
4eda2deeb1 ddekit: remove sleep_forever in dde_kit_debug
The way this function is currently used in dde_linux expects this
function to return. Since there is dde_kit_panic it should better
be used in such a case the output should block.
2014-11-28 12:02:35 +01:00
Josef Söntgen
969cebc659 dde_linux: remove bogus semicolon 2014-11-28 12:02:35 +01:00
Christian Helmuth
58b6c88301 rpi: remove spec for pl011
The Raspberry Pi has only one UART, which is used by core exclusively.
Therefore, the driver server for pl011 should not be built.
2014-11-28 12:02:35 +01:00
Martin Stein
b8ba3a7a22 hw: rename Kernel::Processor Kernel::Cpu
Kernel::Processor was a confusing remnant from the old scheme where we had a
Processor_driver (now Genode::Cpu) and a Processor (now Kernel::Cpu).
This commit also updates the in-code documentation and the variable and
function naming accordingly.

fix #1274
2014-11-28 12:02:35 +01:00
Martin Stein
b3655902ed hw & arm_v7: provide run/hw_info
The run test 'hw_info' prints the content of the basic ARMv7 identification and
feature registers in a pretty readable format. It is a kernel-internal test
because many of these registers are restricted to privilege level 1 or higher.

fix #1278
2014-11-28 12:02:35 +01:00
Martin Stein
1b1fd1e1f9 hw: add and test totally sophisticated scheduler
The new scheduler serves the orthogonal requirements of both
high-throughput-oriented scheduling contexts (shortly called fill in the
scheduler) and low-latency-oriented scheduling contexts (shortly called
claim in the scheduler). Thus it knows two scheduling modes. Every claim
owns a CPU-time-quota expressed as percentage of a super period
(currently 1 second) and a priority that is absolute as long as the
claim has quota left for the current super period. At the end of a super
period the quota of all claims gets refreshed. During a super period,
the claim mode is dominant as long as any active claim has quota left.
Every time this isn't the case, the scheduler switches to scheduling of
fills. Fills are scheduled in a simple round robin with identical time
slices. Order and time-slices of the fill scheduling are not affected by
the super period. Now on thread creation, two arguments, priority and
quota are needed. If quota is 0, the new thread participates in CPU
scheduling with a fill only.  Otherwise he participates with both a
claim and a fill. This concept dovetails nicely with Genodes quota based
resource management as any process can grant subsets of its own
CPU-time and priorities to its child without knowing the global means of
CPU-time and priority.

The commit also adds a run script that enables an automated unit test of the
scheduler implementation.

fix #1225
2014-11-28 12:02:35 +01:00
Martin Stein
a00eb9a66a hw: enhance and test double-list data-structure
To serve the needs of the coming CPU scheduler, the double list needs
additional methods such as 'to_tail' and 'insert_head'.

The commit also adds a run script that enables an automated unit test
of the list implementation.

ref #1225
2014-11-28 12:02:35 +01:00
Martin Stein
0ab5310b8a hw: enable kernel-internal tests via run tool
Kernel tests are done by replacing the implementation of an otherwise
empty function 'Kernel::test' that gets called once at the primary CPU
as soon as all kernel initialization is done. To achieve this, the test
binary that implements 'Kernel::test' must be linked against the core
lib and must then replace the core binary when composing the boot image.
The latter can be done conveniently in a run script by setting the new
argument 'core_type' of the function 'build_boot_image' to the falue
'test'. If no kernel test is needed the argument does not have to be
given - it is set to 'core' by default which results in a "normal"
Genode image.

ref #1225
2014-11-28 12:02:34 +01:00
Martin Stein
b3bc9bd549 hw: idle execution context is no thread anymore
Previously, Idle_thread inherited from Thread which caused an extra
processor_pool.h and processor_pool.cc and also made class models for
processor and scheduling more complex. However, this inheritance makes
not much sense anyway as an idle context doesn't trigger most of the code
in Thread.

ref #1225
2014-11-28 12:02:34 +01:00
Martin Stein
ec6c19a487 base: memory barriers in lock implementations
The memory barrier prevents the compiler from changing the program order
of memory accesses in such a way that accesses to the guarded resource
get outside the guarded stage. As cmpxchg() defines the start of the
guarded stage it also represents an effective memory barrier.

On x86, the architecture ensures to not reorder writes with older reads,
writes to memory with other writes (except in cases that are not
relevant for our locks), or read/write instructions with I/O
instructions, locked instructions, and serializing instructions.

However on ARM, the architectural memory model allows not only that
memory accesses take local effect in another order as their program
order but also that different observers (components that can access
memory like data-busses, TLBs and branch predictors) observe these
effects each in another order. Thus, a correct program order isn't
sufficient for a correct observation order. An additional architectural
preservation of the memory barrier is needed to achieve this.

Fixes #692
2014-11-28 12:02:34 +01:00
Stefan Kalkowski
d452f37c25 hw: print page faults of core (fix #1286) 2014-11-28 12:00:44 +01:00
Alexander Boettcher
eedf3fa413 nova: update to r7 branch
Fixes #1297
2014-11-28 12:00:44 +01:00
Alexander Boettcher
4de6d54e50 vmm: tag printf with compiler "printf" attribute
Issue #1296
2014-11-20 17:10:18 +01:00
Alexander Boettcher
cdcc4ee60f pthread: support pthread_once
Issue #1296
2014-11-20 17:10:07 +01:00
Alexander Boettcher
e6850359e1 rtc: be less verbose
Issue #1296
2014-11-20 17:09:42 +01:00
Christian Helmuth
1a718a7770 prepare_port: log download errors explicitly 2014-11-20 17:06:41 +01:00
Christian Helmuth
c3ce1887a2 openssl: fix download location
Issue #1295
2014-11-20 17:05:59 +01:00
Christian Prochaska
ac6c4682f3 okl4: declare read-write-lock as volatile
GCC 4.7.4 and newer seems to optimize the lock-variable accesses more
radically, which uncovered the missing volatile qualifier and resulted
in:

Assertion "(int)locked >= 0" failed in file '.../okl4_x86/kernel/include/kernel/read_write_lock.h', line 151 (fn=f0104771)
--- "KD# assert" ---
2014-11-20 16:39:16 +01:00
Sebastian Sumpf
97d117c89d noux: reinitialize Genode::config 2014-11-20 16:39:16 +01:00
Martin Stein
635de1791f hw: fix panda instability on kernel exits
Invalidating all branch predictors before switching the PD
fixes instability problems on Panda and has not much effect
on the performance of other boards. However, we neither know why
this is a fix nor wether it fixes the real cause of the problem.

fix #1294
2014-11-20 16:39:16 +01:00
Stefan Kalkowski
0ffc89ee30 hw: clrex during context switch (Fixes #1196) 2014-11-20 16:39:16 +01:00
Christian Menard
eedddeced1 dde_linux: fix bug in find_next_zero_bit_le
value '1' has a default type of int, but long is needed to cover all 64 bits
2014-11-20 16:39:16 +01:00
Christian Prochaska
2583aa2ab4 tool_chain: update GCC to version 4.7.4
Fixes #1051.
2014-11-20 16:39:16 +01:00
Alexander Boettcher
0b194c9689 init: restrict cpu_sessions to configured affinity
Fixes #1289
2014-11-14 12:01:45 +01:00
Martin Stein
8dad54c914 hw: fix scheduler timing on prio preemption
Previously, the timer was used to remember the state of the time slices.
This was sufficient before priorities entered the scene as a thread always
received a fresh time slice when he was scheduled away. However, with
priorities this isn't always the case. A thread can be preempted by another
thread due to a higher priority. In this case the low-priority thread must
remember how much time he has consumed from its current time slice because
the timer gets re-programmed. Otherwise, if we have high-priority threads
that block and unblock with high frequency, the head of the next lower
priority would start with a fresh time slice all the time and is never
superseded.

fix #1287
2014-11-14 12:00:45 +01:00
Christian Prochaska
dda8044183 nova: refine the timer delay heuristic
Fixes #1291
2014-11-12 14:49:42 +01:00
Alexander Boettcher
3babee4e19 vbox: support resetting of a VM
Fixes #1290
2014-11-12 14:47:47 +01:00
Christian Prochaska
cb51d67c8d vbox: don't enforce instruction emulation after recall event
Fixes #1284
2014-11-12 14:44:17 +01:00
Sebastian Sumpf
bc4eab430a lxip: Add loopback device
Fixes #1204
2014-11-12 14:44:17 +01:00
Norman Feske
21f013d2c4 libports/sdl: fix keycode for return key 2014-11-12 14:44:17 +01:00
Norman Feske
620d6c8ab2 rpi: add buffered mode to framebuffer driver 2014-11-12 14:44:17 +01:00
Norman Feske
50ea944789 libports/sdl_image: enable XPM, add include/SDL
Some SDL applications expect the SDL_image headers in include/SDL to be
reachable without the SDL/ prefix. This patch adds the corresponding
search path. Furthermore it enables support for XPM images.
2014-11-12 14:44:17 +01:00
Sebastian Sumpf
d426c5e6c2 dde_linux: make drivers self containing
Ported drivers list and extract all needed source files. This decouples
ports according to contrib sources and also enables us to revert lxip to
Linux version 3.9, while staying with 3.14 for usb.

Fixes #1285
2014-11-12 14:44:17 +01:00
Christian Helmuth
2eca4ec98b base: document specifics of Slab::alloc()
Also removed unimplemented overload of alloc() with no parameters.
2014-11-12 14:44:16 +01:00
Christian Helmuth
e708bbe2c6 libc: do not zero errno on success in vfs plugin
The manpage to errno tells the following story:

The <errno.h> header file defines the integer variable errno, which is
set by system calls and some library functions in the event of an error
to indicate what went wrong. Its value is significant only when the
return value of the call indicated an error (i.e., -1 from most system
calls; -1 or NULL from most library functions); a function that
succeeds is allowed to change errno.

Valid error numbers are all nonzero; errno is never set to zero by any
system call or library function.
2014-11-12 14:44:16 +01:00
Christian Helmuth
20afccf6ed vfs: use 256-byte buffer in log file system
128 bytes is not much for logging-output line length esp. when also
counting the color sequences of PDBG() and friends.
2014-11-12 14:44:16 +01:00
Christian Helmuth
f8dcf76480 dde_kit: panic does not return
The attributes enables to use panic as final statement in branches of
functions declared to return.
2014-11-12 14:44:16 +01:00
Christian Prochaska
ac47053b2f vbox: set the 'CPUM_CHANGED_GLOBAL_TLB_FLUSH' flag
Fixes #1281
2014-11-12 14:44:16 +01:00
Christian Prochaska
d65826a85d vbox: always transfer FPU ownership back to the VM
When the 'Mtd::FPU' flag is set during the registration of a
virtualization event handler, it must also be set whenever the event
handler returns.

Fixes #1283
2014-11-12 14:44:16 +01:00
Christian Prochaska
e3fa8c9f22 vbox: save the guest FPU state before 'longjmp()'
'longjmp()' restores the (partial) FPU state saved by 'setjmp()', so it's
necessary to save the guest FPU state before calling 'longjmp()'.

Fixes #1282
2014-11-12 14:44:16 +01:00
Norman Feske
6afba00ad6 okl4: fix success condition in priority test 2014-11-12 14:44:16 +01:00
Norman Feske
e4c636b0a0 init: clamp priority values to valid range
This patch ensures that priority values passed as session arguments
are within the valid range of priorities. Without the clamping, a child
could specify a priority of a lower priority band than the one assigned
to the subsystem. Thanks to Johannes Schlatow for reporting this issue.

Fixes #1279
2014-11-12 14:44:15 +01:00
Sebastian Sumpf
8b0f9fd82a rump: Use shared library interface
Remove DL-interface

Fixes #1280
2014-11-12 14:44:15 +01:00
Sebastian Sumpf
5a821d4c92 base: Genode's dynamic linker
Issue #1280
2014-11-12 14:44:15 +01:00
Sebastian Sumpf
8738673625 base-codezero: Add dummy functions to syscall library
Issue #1280
2014-10-30 13:36:14 +01:00
Sebastian Sumpf
e0ed7c3cd0 base-pistachio: Add syscall library support
Makes old l4 library obsolete

Issue #1280
2014-10-30 13:36:13 +01:00
Norman Feske
c6fdc2923f News item about the first seL4 article 2014-10-30 13:17:37 +01:00
Christian Helmuth
351dad80af noux: increase timeout for tool-chain test
This is just a quick fix to calm down the buildbot - a revised
implementation is needed according to issue #1277. Further, the reason
for the increased test duration on several platforms must be
investigated.
2014-10-21 11:05:15 +02:00
Christian Helmuth
6e166d01bb autopilot: detect missing run script with timestamps 2014-10-21 11:05:15 +02:00
Josef Söntgen
35239b84df dde_kit: remove jiffies alias
The alias is rather Linux-specific and also prevents particularly
tailored jiffies implementations. For the existing dde_linux ports (usb
and lxip) we just define jiffies to be dde_kit_timer_ticks with a
preprocessor macro.
2014-10-21 11:05:15 +02:00
Norman Feske
6244c6ec97 gems: launcher application 2014-10-13 15:21:55 +02:00
Norman Feske
cc303c4671 gems: new menu-view application
The menu view generates a simple dialog of widgets and reports the
hovered element. It is meant to be embedded into applications that
require simple GUIs but don't want to deal with the pecularities of
a full-blown widget set.
2014-10-13 15:21:54 +02:00
Norman Feske
40aadb8601 gems: add gems/wrapped_nitpicker_session.h
The 'Wrapped_nitpicker_session' contains the boiler-plate code that is
needed when virtualizing the nitpicker session interface.
2014-10-13 15:21:54 +02:00
Norman Feske
ece64db196 gems: move reusable wm headers to include/gems 2014-10-13 15:21:54 +02:00
Norman Feske
ec565c1ded gems: add include/gems/animator.h
The utility for animating GUI elements was formerly private to
'app/decorator'.
2014-10-13 15:21:54 +02:00
Norman Feske
9129db03c4 gems: nit_fader 2014-10-13 15:21:54 +02:00
Norman Feske
08d28e9b94 nitpicker: add 'session_control' RPC function
The new 'session_control' function can be used to perform operations on
the global view stack that span one or multiple sessions, e.g., bringing
all views of specific sessions to the front, or hiding them.
2014-10-13 15:21:54 +02:00
Norman Feske
5af830c0de demo/scout: alpha-surface support for icon_painter 2014-10-13 15:21:54 +02:00
Norman Feske
94f9e989df wm: invalidate dataspaces on model updates
If the Rom_session::update function returns false, the ROM dataspace may
have been physically destructed (and core has removed all mappings).
In this case, we have to omit the detach operation in the destructor
of 'Attached_dataspace' to avoid detaching the same region twice.
2014-10-13 15:21:54 +02:00
Norman Feske
2f5cff5347 os: add 'Attached_dataspace::invalidate' 2014-10-13 15:21:54 +02:00
Norman Feske
b2b5d1b2d2 os: make reusable cli_monitor headers public
The child handling as done by CLI monitor is worth reusing. Hence, this
patch moves the corresponding headers to 'os/include/cli_monitor/'.
2014-10-13 15:21:54 +02:00
Norman Feske
28119e3536 os: add 'Reporter::name' accessor 2014-10-13 15:21:54 +02:00
Norman Feske
13bce287ad os: add 'Xml_node::for_each_sub_node'
The new function template simplifies the common case of iterating
through the sub nodes of an XML node.
2014-10-13 15:21:53 +02:00
Norman Feske
3a1ecdd5a7 os: fix race in 'os/child_policy_dynamic_rom.h' 2014-10-13 15:21:53 +02:00
Norman Feske
c48a4ebce8 os: add texture_rgb888.h and texture_rgb565.h
The headers 'texture_rgb565.h' and 'texture_rgb888' contain
template specializations needed for using the 'Texture::rgba' function
for the respective pixel formats. The specializations were formerly
contained in application-local code.
2014-10-13 15:21:53 +02:00
Norman Feske
0b3efa90c9 gems: move reusable code to include/gems
This patch makes various utilities that were originally developed for
the backdrop application publicly available.
2014-10-13 15:21:53 +02:00
Norman Feske
40d92b7cec os: improve alpha-channel support for Pixel_rgba
This patch add an optional alpha argument to the constructor, which may
be passed to a pixel type representing an alpha channel. Furthermore,
a new overload of the mix function has been added to accommodate use
cases where one texture is applied to both a pixel surface and an alpha
channel.
2014-10-13 15:21:53 +02:00
Norman Feske
b01c74ae12 os: define ALPHA8 pixel format 2014-10-13 15:21:53 +02:00
Norman Feske
a7fa0ccd06 base: add 'String::operator!=' 2014-10-13 15:21:53 +02:00
Norman Feske
46968c0015 nitpicker: motion events for non-xray clients
When X-ray mode is active, nitpicker filters motion events that are not
referring to the currently focused domain. However, domains configured
as xray="no" (such as a panel) need to obtain motion events regardless
of the xray mode. This patch relaxes the motion-event filtering to
accommodate such clients.
2014-10-13 15:21:53 +02:00
Norman Feske
2ef0b0796c nitpicker: report xray mode 2014-10-13 15:21:53 +02:00
Norman Feske
a00f9bcf99 nitpicker: disable reports by default
Prior this change, a config update would not disable reports if the
report node disappeared during the update.
2014-10-13 15:21:53 +02:00
Norman Feske
83705d3c78 nitpicker: fix input-mask offset calculation
The buffer offset was wrongly accounted for. The miscalculation went
unnoticed until now because the buffer offset was apparently never used
in combination with alpha-channels.
2014-10-13 15:21:53 +02:00
Norman Feske
23c22f52b3 nitpicker: consider xray config in find_view
If a domain is configured as xray="no", we want to let the views of the
domain respond to input events like in flat mode, even if xray mode is
active. Normally, the input mask of views with an alpha channel is
disregarded in X-ray mode. However, for non-ray views, the input mask
should always be considered.
2014-10-13 15:21:53 +02:00
Norman Feske
3113aac2c0 dynamic_rom: remove superfluous sigh dissolve
The 'Signal_rpc_member' takes care about dissolving its signal context
from the receiver. So we don't need to manually perform this operation
in the session destructor.
2014-10-13 15:21:52 +02:00
Norman Feske
e20c27c9ab init: use file name as label for redirected ROMs 2014-10-13 15:21:52 +02:00
Norman Feske
a3985f3d04 ports: rpi support in netperf run scripts 2014-10-13 14:53:36 +02:00
Norman Feske
181d507cf8 libports: rpi support in lwip.run 2014-10-13 14:53:20 +02:00
Norman Feske
85362ba0b9 dde_linux: USB SOF IRQ filter for Raspberry Pi 2014-10-13 14:53:00 +02:00
Norman Feske
58a1e42201 hw/rpi: USB SOF interrupt filtering 2014-10-13 14:52:43 +02:00
Norman Feske
d59d3c684f hw: don't preserve mmio of core devices
Fixes #1269
2014-10-13 14:51:55 +02:00
Christian Prochaska
d7c2a5cd7f VFS: acquire tar dataspace only once
Fixes #1271
2014-10-13 08:43:55 +02:00
Sebastian Sumpf
0b0074d2ff seoul: update pae branch
Fixes #1262
2014-10-10 14:46:14 +02:00
Alexander Boettcher
a48efd0a9d seoul: enable -Wall and fix warnings
Issue #1262
2014-10-10 14:46:02 +02:00
Christian Prochaska
443dc1f71d sdl: evaluate the motion event type
Fixes #1272
2014-10-10 13:02:46 +02:00
Christian Prochaska
2db563ebdd libc_lwip: 'fcntl()' fix
Fixes #1273
2014-10-10 13:02:46 +02:00
Christian Prochaska
1e424a6fd2 run: mark ext2 partition as bootable
When building for the 'disk' run target, the ext2 partition needs to be
marked as bootable to be booted from on some hardware.

Fixes #1270
2014-10-10 13:02:46 +02:00
Christian Helmuth
2350eac251 xml_generator: timer not needed for test 2014-10-10 13:02:45 +02:00
Christian Prochaska
363ffe40a0 qt5: support window resizing by window manager
Fixes #1268
2014-10-10 13:02:38 +02:00
Christian Prochaska
4539eb7512 heap: release some memory to the RAM session
With this patch, allocations >= 64K are fulfilled by dedicated
dataspaces, which are released to the RAM session when not needed
anymore.

Fixes #1267
2014-10-10 13:02:38 +02:00
Alexander Boettcher
53d471aa22 nova: handle race during signal setup phase
Fixes #1266
2014-10-10 13:02:32 +02:00
Christian Prochaska
0252d47f28 VESA driver: typo fix
Fixes #1265.
2014-10-10 13:02:32 +02:00
Christian Prochaska
4d4d3cb9bb VESA driver: choose highest resolution video mode
With this patch, the VESA driver chooses the video mode with the highest
resolution from the list of available modes if no resolution is
explicitly configured.

Fixes #1263.
2014-10-10 13:02:31 +02:00
Sebastian Sumpf
b32b6948c7 seoul: use pae branch of seoul
Fixes #1262
2014-10-10 13:02:31 +02:00
Alexander Boettcher
d006185d90 seoul: add script turning Genode scenario into VM
Related to issue #1261
2014-10-10 13:02:31 +02:00
Alexander Boettcher
9f8c87f2ed ahci: ignore spurious interrupts
Qemu 2.0 makes trouble when using seoul-disc.run - related to #1261
2014-10-10 13:02:31 +02:00
Norman Feske
ba34bc32c2 iso9660: remove on-demand paging
Required to run a Genode VM provided as ISO - issue #1261
2014-10-10 13:02:31 +02:00
Bernhard Kauer
27d76f77d1 seoul: update branch to using vbios emulators
* use seoul branch containing vbios emulator

* report the memory model in the VBE mode info as otherwise the
  Genode framebuffer driver will ignore this mode

Fixes #1261
2014-10-10 13:02:31 +02:00
Christian Prochaska
0be264d7d2 ps2_drv: read configuration before self tests
It turned out that the controller configuration can change during the self
tests, so now it is read before running the tests and restored afterwards.

Fixes #1260.
2014-10-10 13:02:30 +02:00
Christian Prochaska
81af714949 Input merger
This component merges the input events of multiple sources.

Example configuration:

<start name="input_merger">
	<resource name="RAM" quantum="1M" />
	<provides>
		<service name="Input" />
	</provides>
	<config>
		<input label="ps2" />
		<input label="usb_hid" />
	</config>
	<route>
		<service name="Input">
			<if-arg key="label" value="ps2" /> <child name="ps2_drv" />
		</service>
		<service name="Input">
			<if-arg key="label" value="usb_hid" /> <child name="usb_drv" />
		</service>
		<any-service> <parent /> <any-child /> </any-service>
	</route>
</start>

For each 'input' config node, the component opens an 'Input' session with the
configured label. This label is then evaluated by 'init' to route the session
request to a specific input source component.

Fixes #1259.
2014-10-10 13:02:30 +02:00
Stefan Kalkowski
3befb64afe hw: correctly flush cache on ARM (fix #1257)
* When flushing the data and unified cache on ARM, clean and invalidate
  instead of just cleaning the corresponding cache lines
* After zero-ing a freshly constructed dataspace in core, invalidate
  corresponding cache lines from the instruction cache
2014-10-10 13:02:30 +02:00
Josef Söntgen
23dcbff998 libports: fix sdl_mixer include paths
Fixes #1255.
2014-10-10 13:02:30 +02:00
Christian Prochaska
c41a102bc4 Add 'check_tool' function to new ports mechanism
Fixes #1254.
2014-10-10 13:02:30 +02:00
Stefan Kalkowski
f0fae2a5f2 hw: set TTBR0 according to CPU facilities
Fixes #1195
2014-10-10 13:02:30 +02:00
Christian Helmuth
e9032904a3 Increase slab-block size in signal component
The backend allocator for the slab is a sliced heap, which hands out
allocations with page-size granularity (4096 bytes). Therefore, the
slab-block size should also be about a multiple of the page size minus
some bytes of overhead.

Additional adjustments:

- The slab-block size and the default quota-upgrade amount for SIGNAL
  sessions depends on the platform bit width now.
- The signal test also stresses the case of many managed context in one
  session including creation and destruction of the used signal receiver
  in repeated rounds.
2014-10-10 13:02:29 +02:00
Christian Helmuth
aea35ee7d2 lx_fs: improve root directory handling
- correctly catch and report non-existing root directories
- remove *all* leading slashes from root-directory attributes and
  sanitize empty declarations to current working directory
2014-10-10 13:02:29 +02:00
Alexander Boettcher
96d9e442f5 vbox: enable auto test for 32bit Genode host
Issue #1246
2014-10-10 13:02:28 +02:00
Alexander Boettcher
8b8c2713ae vfs: use 64bit for file offset and size
Fixes #1246
2014-10-10 13:02:28 +02:00
Christian Helmuth
289cfa5fcf terminal: fix warning about uninitialized variable
In fact the struct member `value` was not initialized for Invalid_entry.
2014-09-11 10:23:39 +02:00
Christian Helmuth
0b5f901e58 Log name of exiting child from Child::exit()
Fixes #1243.
2014-09-11 10:23:39 +02:00
Stefan Kalkowski
53a7b4ca66 blk_cache: don't try to sync 'zero' chunks
Invalid cache entries called 'zero chunks' shouldn't be synced.

Fix #1249
2014-09-11 10:23:38 +02:00
Stefan Kalkowski
41b62e50bb blk_cache: correctly examine return value in write
Ref #1249
2014-09-11 10:23:38 +02:00
Alexander Boettcher
1add912df2 acpi: fix skipping over parameters of devices
Fixes lookup of pci GSI IRQ re-routing tables seen on Ultrabook Fujitsu t904.

Fixes #1250
2014-09-11 10:23:38 +02:00
Alexander Boettcher
cc2f173ca3 run: support Intel AMT wsman protocol
The older SOAP EOI protocol is not supported with AMT version 9+. By default
the wsman tool will be used if installed.

RUN_OPT examples to enforce amtool or wsman:

--target amt --amt-tool wsman
--target amt --amt-tool amttool

Fixes #1251
2014-09-11 10:23:38 +02:00
Christian Helmuth
976d669253 base-nova: remove special Thread_base::myself()
The weak implementation was added for quite special purposes years ago
and is no longer needed. On the other hand, the weak attribute does not
help if the implementation ends up in a shared library, which first
resolves symbols locally before asking ldso (that includes the acutal
thread library) *shiver*
2014-09-04 14:45:39 +02:00
Norman Feske
be4971eb0a libports: fix VFS config of sdl.run 2014-09-02 18:06:38 +02:00
Christian Helmuth
7394f0c306 nitpicker: fix warning about truncated integer
warning: large integer implicitly truncated to unsigned type [-Woverflow]
2014-09-01 18:16:07 +02:00
Norman Feske
3cbbf8aa60 libports: download location of jbig2dec
The original git:// URL produced the following error:

Cloning into 'jbig2dec'...
fatal: remote error: access denied or repository not exported: /jbig2dec.git
2014-09-01 13:17:24 +02:00
Norman Feske
e7ebfb6874 qt4: change download URL for qscriptclassic
The archive vanished from the previously used mirror.
2014-09-01 11:00:38 +02:00
9942 changed files with 613979 additions and 316267 deletions

38
.gitignore vendored
View File

@@ -5,39 +5,7 @@
/build
/contrib
/repos/base-codezero/contrib
/repos/base-fiasco/contrib
/repos/base-fiasco/download
/repos/base-foc/contrib
/repos/base-pistachio/contrib
/repos/dde_ipxe/contrib
/repos/dde_linux/contrib
/repos/dde_linux/download
/repos/dde_oss/contrib
/repos/dde_oss/download
/repos/dde_rump/contrib
/repos/dde_rump/include/rump
/repos/libports/contrib
/repos/libports/download
/repos/libports/src/lib/qt5/qtjsbackend
/repos/libports/src/lib/qt5/qtwebkit/Source/JavaScriptCore
/repos/libports/src/lib/qt5/qtwebkit/Source/WebCore/generated
/repos/ports-foc/contrib
/repos/ports-okl4/contrib
/repos/ports-okl4/download
/repos/ports/contrib
/repos/ports/download
/repos/ports/src/app/arora/html
/repos/ports/src/lib/gdbserver_platform/generated
/repos/qt4/contrib
/repos/qt4/download
/repos/qt4/tool/bootstrap
/repos/qt4/tool/misc/var
/repos/qt4/tool/moc
/repos/qt4/tool/qmake/*.d
/repos/qt4/tool/qmake/*.o
/repos/qt4/tool/qmake/qmake
/repos/qt4/tool/rcc
/repos/qt4/tool/uic
/repos/linux_drivers
/depot
/public
/repos/world

873
LICENSE
View File

@@ -1,280 +1,701 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Linking exception clause
The Genode OS Framework (Genode) is licensed under the terms of the
GNU Affero General Public License version 3 (AGPLv3).
Linking Genode code statically or dynamically with other modules
is making a combined work based on Genode. Thus, the terms and
conditions of the AGPLv3 cover the whole combination.
As an "additional permission" as defined by Section 7 of the
AGPLv3, Genode Labs as the copyright holder of Genode gives you
permission to link Genode source code with "independent modules"
to produce an executable if the independent modules are licensed
under an "approved license", and to copy and distribute the
resulting executable under terms of your choice, provided that you
also meet, for each linked independent module, the terms and
conditions of the license of that module.
An "approved license" is a license that is officially approved as
an Open-Source license by the Open Source Initiative [1], or
listed as a Free-Software license by the Free Software Foundation
[2], or explicitly approved by Genode Labs.
An "independent module" is a module which is not derived from or
based on Genode, or merely uses the Genode API as defined in the
official documentation.
If you modify Genode, you may extend this exception to your
version of Genode, but you are not obliged to do so. If you do not
wish to do so, delete this exception statement from your version.
[1] https://opensource.org/licenses
[2] https://www.gnu.org/licenses/license-list.en.html
------------------------------------------------------------------------------
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
TERMS AND CONDITIONS
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
0. Definitions.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
"This License" refers to version 3 of the GNU Affero General Public License.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
A "covered work" means either the unmodified Program or a work based
on the Program.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
1. Source Code.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
The Corresponding Source for a work in source code form is that
same work.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
2. Basic Permissions.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
13. Remote Network Interaction; Use with the GNU General Public License.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
14. Revised Versions of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
NO WARRANTY
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
15. Disclaimer of Warranty.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<http://www.gnu.org/licenses/>.

63
README
View File

@@ -10,10 +10,10 @@ the project's official website:
:Official project website for the Genode OS Framework:
[http://genode.org/documentation/general-overview]
[https://genode.org/documentation/general-overview]
The current implementation can be compiled for 8 different kernels: Linux,
L4ka::Pistachio, L4/Fiasco, OKL4, NOVA, Fiasco.OC, Codezero, and a custom
L4ka::Pistachio, L4/Fiasco, OKL4, NOVA, Fiasco.OC, seL4, and a custom
kernel for running Genode directly on ARM-based hardware. Whereas the Linux
version serves us as development vehicle and enables us to rapidly develop the
generic parts of the system, the actual target platforms of the framework are
@@ -33,6 +33,31 @@ the kernel that fits best with the requirements at hand for the particular
usage scenario.
Documentation
#############
The primary documentation is the book "Genode Foundations", which is available
on the front page of Genode website:
:Download the book "Genode Foundations":
[https://genode.org]
The book describes Genode in a holistic and comprehensive way. It equips you
with a thorough understanding of the architecture, assists developers with the
explanation of the development environment and system configuration, and
provides a look under the hood of the framework. Furthermore, it contains the
specification of the framework's programming interface.
The project has a quarterly release cycle. Each version is accompanied with
detailed release documentation, which is available at the documentation
section of the project website:
:Release documentation:
[https://genode.org/documentation/release-notes/]
Directory overview
##################
@@ -61,6 +86,26 @@ The source tree is composed of the following subdirectories:
Source-code management tools and scripts. Please refer to the README file
contained in the directory.
:'depot' and 'public':
Local depot and public archive of Genode packages. Please refer to
! doc/depot.txt
for more details.
Additional community-maintained components
##########################################
The components found within the main source tree are complemented by a growing
library of additional software, which can be seamlessly integrated into Genode
system scenarios.
:Genode-world repository:
[https://github.com/genodelabs/genode-world]
Contact
#######
@@ -70,5 +115,17 @@ mailing list. Please feel welcome to join in!
:Genode Mailing Lists:
[http://genode.org/community/mailing-lists]
[https://genode.org/community/mailing-lists]
Commercial support
##################
The driving force behind the Genode OS Framework is the German company Genode
Labs. The company offers commercial licensing, trainings, support, and
contracted development work:
:Genode Labs website:
[https://www.genode-labs.com]

View File

@@ -1 +1 @@
14.08
20.02

1
depot/alex-ab/download Normal file
View File

@@ -0,0 +1 @@
https://depot.genode.org

52
depot/alex-ab/pubkey Normal file
View File

@@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFqqaR8BEAC0vonMP5zZtWUYgQ76HIhvjkI3FWZ721fzg1245+B6vmUTBnon
WvGa+Z2WcKiMJKKfBThm1SExAUsUT2DX4uxyvJWpActoAbcljvhRadVlAgZpPMUR
Rc18FkH+Kc5hBxIJnrxD5eLReTqqKp2KQ1OznUHCCCZGV+rzbEWSCNnJmKEILgkq
UeGZGDJ2aoQQBwVHNNd5PUM8PX1UqBpbB9GEbqEpCy6kNUrz3VTMKOm9WcveYV9c
m27e+loebuimz7qin61d7MOr0WSnqY/MKI9pwAR9/rGeEf0GCZlBgLCmfZZmHnYV
NpA0uY3viV4H2ooFX2cQ3FA1CVjBD5tHdMfNygDoPLjL8yaxcA5Ftdlt+D0mYFCt
n5t1awZuLnJBgWoGKziOPpv38hHE1HPfKw9E14Y/DzBeNrmkfON21xbDgdgurWbM
FSnOUxEKO/7PVMfLHLVz7Ml2bmZFic4XFKZGQAVft6eUV9t9NaaSuh5a9DO0wAVI
9OkPm4MfWIu8dRhnHrxbmxlvhduGYZfUCNl8JGwgz7zstCeCuodzwfiYkjQVZCLD
7MrT3pw2raAtbn5Tz3Crkxkmgj4rBTLui+IchTA0hIwFJIvvJxFT521pnnJfjuPX
tsm3twlgEq1g3KR6GkFOvtBCln+pGslXve4+x5094HoZIlJwJ602KP1RiQARAQAB
tDlBbGV4YW5kZXIgQm9ldHRjaGVyIDxhbGV4YW5kZXIuYm9ldHRjaGVyQGdlbm9k
ZS1sYWJzLmNvbT6JAk4EEwEIADgWIQS94id8InEq6+roQea7Tef/n/btXgUCWqpp
HwIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRC7Tef/n/btXrPaEACZEMqU
D/nIcTQF1NdK19/GZ8vwtfEhsfFel975xjSOgEP+mslgoqXXeMYr9qB74564OPKd
KBSoAi8FZkRGPYqVyp0jfbxC4b6TfuLPFONjcLT05kDnadL2MWPhvv9gRJ/J7Joq
5z+vs6Anw9B//Vbpy9NaV+Vp6Zhf+ISR2EvThvmtGnDlt1Etv7py7v3uc12hLqjN
FkVfyU+NZLY1XHDlNHEScmFri0w/nxsbc0Dp3nUr0Xr3mAdKlg/1Z0xS68QnkJg/
B62Oy91spDPQtt6QEhO/PDFIff+404qJiMvUc8pFieIpZseVqwW5plhL21RBhIYu
qvjcstXqFFHuzW0XvrjxMFizyRFgcO7QozsrLmrrFvseR1yXbDuXB2NMGUvL1ZpU
cPTrdbBIMFsaxqMyG1ELfaNj1t8PsW85+6sN81Nc1bhr+rwW75qtIYhAbB+jcuY0
fv0FVXw/BJOe9RnLdFhXmkOX+bQ+wcF0oAvLxd+wQtTPThfbYfUim+LTzw0DHpbK
qdTcYzmk4AVinXuTwWqBAD3URbakWWqNrElQ5ad4iEZpcIP87FMvrS/dDB1/o1jQ
dnJfSIjmKnVVLDT5SkWgeihfOFAUO6RDRG1/DOxLaARrfG3oYE5+6INYnZvU7a2d
UOglDt2xRfGp6TWPawJEXsWfnok/gDq+J+6TEbkCDQRaqmkfARAAyCJNL3hJVS00
v8KqJDa6BHBwhv86ybDRJKFbnDEtX9uFeRS2HlKHQfD3mCgtPv6tQYuyDC/AvMRF
1N7v2B+P+UQVBrN/+3kyz3m12lP7ZT/imFR4cHehTUQeaJhXQrs1YC6J2gO81HET
KsWa1B4DZdeFqRkgfm33Na521yaGtC6HG6yU8l4OG91Pm4iEZ5eGdzvDNa888+Kf
ppXkaOlgaa1gd48g0rKvPrXlYUgg4MbmryKfOh8+Mrg4lkTkZGRIR2T+lGhVCTvZ
VJkA/xD24Kbxv7U4CKhirbAW1L8fS6Z5wOoXAmFi8jKftvCoFEEDrclfoZaIS6pC
OO7ZL2DlLBZ8Zg/Z8ncdisnQiURjobAK+H4ObzbuXAG7uLPMSSR6gmTULAIURfmF
YaWGrqC2bPViVKBtS6yFoT0bwnQ2n5BbdbIKf03ljbM1kVa+WoyMw9/DUsjSqcmJ
AXqVYR0FR3zBzcAwOnW/4yIcXqafY21WGByqF7WWN3DhWofm+WlshljOfjSvWEAR
l/tIUSzYYEca0mKyAEtcwxSyKzzhYjEXRfA0Me73rVxa2Zjlunq0hwUQvOJ43l2R
7R1FYlQhmbQWDByAg3W0eoE2qFrTvctLz172A/rK88VV6ULwpJ8IaTPg96n0PVPv
kptb273cjKBFhJWDDcLU65ONygwC03kAEQEAAYkCNgQYAQgAIBYhBL3iJ3wicSrr
6uhB5rtN5/+f9u1eBQJaqmkfAhsMAAoJELtN5/+f9u1ea2IP/3nfcsAzJtUhU+XV
P6pO5kyQIvUgCj0gA/BNRom2FnTtfyThwumcdeKBrbddF7uFXGi/vLJ03qy2CusZ
PEgiT6tcR4MpptlsMnKvRZsHHlnpxo54qdwfKpHv7NbLjelmhInkSe3/nz/JW9+m
Wpzyhe0EHOkoZKO9U/RDkDw42pYVrSJoZE+mMNxZ1YJCqDMeClHumxpjWHdhuuR0
2jY7sB8DBpuMWgHwle/FANG6sh2OprdGJlSqQzeqev8z2tY21cSqpPx4pYW/HvxD
YcbMtwsTIHqU7YtKyH4t/C7r9yB/gcd60FwnY0YuqykdOTG8nesBQ+4rIDUqyqgV
zT7agmaUhji4EMyjjRPiu81xole0TmO4HpklqQL5US2fW/4VRdan7lxxWvRm9U1h
aM79kQSWIKUnGFQ5ekobTF3GSB46zfB0kgJivoP2+sOFPEu0p/mA28fCZmM3J6fx
wBNW/8HTLOQ4gvLuRrxZ75PG6XeveNDTdnP/owNXd43NjRwpY4EJzBdI96ehCrNH
VBUvvNwBCyf8hOPmPb7bw7lIvPjh2LNmwG9nep1i79I7SI3b9Xfs+6P7nSYXHkBp
jFXPSZm7nP5+zgxO82Rp6sEqmNdWpVFjlLdOQRMhN+hDgtNJCUM7S5pjYMzGtwtV
qXQ/nZ2NHZy9C3RfSKz3NJ/v69xS
=alCT
-----END PGP PUBLIC KEY BLOCK-----

1
depot/blarson/download Normal file
View File

@@ -0,0 +1 @@
https://nobodyiii.github.io/genode-depot

31
depot/blarson/pubkey Normal file
View File

@@ -0,0 +1,31 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
mQENBFkxBJcBCADWbo8ejEu1uWHtmZth3Rwtd2gWKUOS8w4VIFXZE4c+ENDnPV6O
q0W/C7J4lgVVM20gMDr1cVinBdKiGPV3RgWat23ElDKTKAWK/H9GM1poRygrB1s7
isC21gEFmPu5CZ1nTWFDyVCIbiiWP8pXA2V51tCAGp5MH2gcKT7hDKYiisGUCL/s
tEtfdmCwBX5gFfdUR8SGFilwTj97You7stiCpWbRaN0gmjqbrMCVdyQ6/WA3/Z2h
u5KFpugJeHkGEbuFg3DVEMnCO3XuaHfTVeeyJC2RTChqguox7AoX11lo80F8dwSM
C5j5R+A1ZHXpspn5tTu9LuRzwBvwraAUOa1hABEBAAG0MkJlbiBMYXJzb24gKE5v
Ym9keSBJSUkpIDxodW5ncnluaW5qYTEwMUBnbWFpbC5jb20+iQE4BBMBAgAiBQJZ
MQSXAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDySGri10JqkdjHB/0f
FCzMOrDEOhmCfazAHJdf0tUvXZ+hnKomt9j3MSN+5M/1gi37N8GZ9ATW7MPN26Dc
HhW+LE0MBo5lqPEwZ73UNAQh42nGqd8ZxQhakRHcHL2awVejGvMqFxn4SREAnsjO
GkI7qufe1r8xiWljQa4oTglw3FQLXCf/ftwgsBHOcKmjjDsZ6tvtpJGv7iiz656R
xq+cYLyriZi/CW6AyOn5NT/FmybRV30GTeA6wkvZGJt55uwk+Sb8ns/+TGPHoSb9
tkwwqynZEqX+DwBpZLBkzNE2A0iKk9GVWG1llgruurZgUpH8z8RjTi3N5q7IFWaR
uEo2D+RFrCRR4SDOdTnruQENBFkxBJcBCADYOKov6if8tOGwWTnxuHPQ7DA0J97e
yrohsY8BRgKA4fbetXrczgkbeQtSrBE/44wjj6iRiYPr23WYtOLiMTy+I+TNMRSQ
5gpsvhoITxicwbRyyiKvWQSzlq3CBiICopKP3DYYIRcH5jDD1qCU3r6YCYN/Jmr8
MRLZrUKomwfKiPweeS/JQEAFatT6m/OZY6FARDFloeeuEBc6m5TS5Q2aldswPCJj
iZ2kMHMLiIpDDdqxfXkKYvjkm52b2DRwFjXtj8Ll5dFcrJnQunEMg4paVpnwibcI
n0SgmOC48qACFQZmNI9r83LMYLLSLcFXIKTeevKm2aAQzlaG5SQsMhKBABEBAAGJ
AR8EGAECAAkFAlkxBJcCGwwACgkQ8khq4tdCapEopQgArQfqlJ88dTB7KkTqqZRw
rN004XEELK0cZOfvXejrRYhFGPkHE1ecqgUh8Tf0Ks1/WuujOTRlzlGIfAruY+5q
/uEzr+3S0CK2lm4YX37oBrZ215nM3Ve737WT8mHDQcv3K7XsTulWpK9DUpQb1Wkg
R46HSeVlly850WDQNn6/Nbv1qHcjKykTKiESmoD6PJ6BwKtmfjCvStlWplVlN2i9
2OfPPibX9/DHH0/laJJ+nlO892JBIyCyixEP9IBGF/3hJ+7S8ONK4eM+nKWjiczh
riaKdHaCBWPR4nlpEXZXg5Zhe3i7/pliBKAwBle02NiyPijkieY/9kJ24SqF61aE
gg==
=GqDG
-----END PGP PUBLIC KEY BLOCK-----

1
depot/chelmuth/download Normal file
View File

@@ -0,0 +1 @@
https://depot.genode.org

67
depot/chelmuth/pubkey Normal file
View File

@@ -0,0 +1,67 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2
mQINBFaLsVMBEADBfN2EjmVzFzih7aYgjXeM7oKVFPKwTHvohbHjy/zE0y8+aVB4
YiNJGDeqZX3SDxSfPQoQJA6gfNGT8tI+rYPjwp3Kg5TWofs/G+cbfzoXoVEp+kUr
/FeYvniPQdsDttiGqhwv6tBPVYkYbZXKsiSPicStaUoIggvmGlvGxDfdTedqkaV5
b84KeKfjfFEvgjDxtjAdaDDMCrMkb8GMbZ007k4ZOKmi66Xnis4RqArgJDFo50Cf
XSYxcPcTOb/EKjfJw9cbfxSNVkp8ElBkGLCdsxe8CrBzz16A1dK53gsFNRSKXEzm
rMwaTfeaDbe4kctiBI5QxcsBBatgxRr09rhxIJruCDT15npdqkxFP/2z9mv+iRNE
M41hCaroqLLHst3GEyQY7QoAC+qlPeyVwvFzsyrLrkfD+ZQe5vA3MSk38hIGTapB
i5t8V9FWPHcIdp6aB7wGt8ZuZyHthCdR1MEYZNQH+UZnDM3ZnCaLi5Yj5/ftmi9a
9pC5tWy22Kp6ikY/Yknm9InPESuky8L9enOeMP/3CkkRqIJgD/1q3d3t7VPdnot+
OcAKCSSLPLT6ipKYUtwB6floaRn/LIzO/L/GzkluBfpfbE05GOpxq7dhQQVdLZM4
8R08VChQzE8UR6fdejIFtq/E5/FBjcUzv9dUEXaSpDCEItopMJaSv8hnhwARAQAB
tDVDaHJpc3RpYW4gSGVsbXV0aCA8Y2hyaXN0aWFuLmhlbG11dGhAZ2Vub2RlLWxh
YnMuY29tPokCOAQTAQIAIgIbAwIeAQIXgAUCVou2TgYLCQgHAwQFFQoJCAsFFgID
AQAACgkQpyRgNBfs1rdkdw//SEANJLGb9HEPBk6LFLvi5MP9NdeWdGSRY6ZNRWLZ
tZq/YnoEjt+ASN0sQevDDtui5aItZ7iuA9AZ5LwqnX8nocwLGGBV3tIjTtaJG8tm
n4xsBAJCQi7odyGqi/CHmAq0jgz+YWu2gAn4tASZlkqLeAIhJezHVHwDuwjWWsHO
dY2cBqJXxyR595YtvNkAmsITR0Yt/P7WPD1Nv+DsbmpSKtECrguUPWXeOFCyJNNk
cKqB9hkokcbwwGMwqUL4a9czX7OCZMddxR/5fiw9UNGzAYqh5b3vK43ZoKOvzMd2
+zGc9PmZDr/3Ve0pDD+9DxaePh/BN+XwyvJ/8GrevYhRP/3fIhWp7y8vBekS00U2
a8+PTZl3OQaJqifuwJwzGyV5k5w1+ajcQcUthmWAF3DhQMn5Y9BDY58H3nde/PYP
cJbaIFocUKRxRv8pfU4MvSDDIQAugaAmRbH4AAY9TM6Y9kSNOwBo7zJnlvFlu9TZ
7gvw/yoJzho9JxDbEr4J4X7SBCR+cED3T3vvPscaFf7cbkN9IH08g3Cy6lg4hbNA
6zLRb98MxN1V+Et2U1PAzadFY94gUvagTc58r2plfh6QbJvQyrUBg/mcJrAcO/dD
64AKRnpeLETJTUc1tZeJiyryJeqx5Oanb5gM+m4z9l7R08MV9jEQCq/YvdRhU6K/
yYiIRgQQEQoABgUCVou2vwAKCRBsqSZFpnWxWP7NAKCGtmiDbvlyYOsdoyronJCz
oRkLKQCgxuBUceOO2PoEi/Qt6cVp+2UeO1aIRgQTEQIABgUCVo9rSwAKCRBDCmmn
xpXiyDh+AJ9uPXhB80sFAwL84fa1VSIzuuuf2wCfTA51oMdbNC5Yy3k1TSAUVXDP
Fj2JAjgEEwECACIFAlaLsVMCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJ
EKckYDQX7Na3X2MP+wfPCXCqTe46AtnmELO+Ka4wK17xmWz7bXoTn0PYuooQL5bj
aFvU9D4t2Hbg9Roi21bGC5ODUUBUfUy0S2e9WTjwnJLDepO0odgnx9PKtv7P+QWf
fnzBbOckpFKEk6w/hHiimh8Giff1GefUqXrMq2Z7sPKe32/7hNOiqpnq7DT6jSFb
W8PFKTsIFIwlhGgMsu4Bffxw96LltuVz3SW2ppUAy53SCYl1MUCvNvwXogrEyPMD
2hTe6R5Hr8lujkCpR2cs8TJZc48qfhRPts4YrX7aVcA5fZMXOFSuRu62NgUREauv
YHgoAWhNhOcnZfEz1tpgha9UsXqysE+0cdEZWl1O4Yp8TduRMnaGWy+Z/2GjXDit
AKnCmtqj+LPiYdNdAXT1qSVtdZNklh3r6BZMbNhFJvCvBm2e3DwmO65O4p31JX2O
SP/BeLc7yDZ0wQ2FBuGs/rM5nKg2Xs3CU0KOfGsl/H7zitgzkZv882z1vcFdiUmz
8rOWq5s+wNISFMwX6AdUF50N1hlqs77OL0eQqAJ6wcAKvQykd0p4/v2ttGGV5q7F
V1qBYiQmiKyNr96TVnNifT0yKP1xgjB5fAhKjf/jSv29xzcHk/uytIeKdepGzeOL
pk7guQ3Zb2BTDbVEUgcbUQUioInteeMXi9nARJArGcxQorDdYg+D6MZ+kcM2uQIN
BFaLsVMBEAC81nNknQ9aoRFaT/0FF9se5MiYMWipg3EdIOxxj8PmM5IjH1HJNYeY
OZ41N39RXW1Ecpb32Kbg2RwVy3RKxx0ZoCdSvdbSAmLUvDGQNtWgwQZX7nYb8oE5
vrjDw6BjRizE9guTIp7mp10w2Jg/vYuvwGjHl/Srjo7tPlENKWE50Q6hG1d1ANKj
DXsIjse6JSYE2kfyIMjlZGo9zUgMa6EBVe6/BGUuK6qHdJZ+HE4Zqkxfn41UAx0Q
xbl3f36u3+6yak58XzXoHGkTABSqOHIBlTat0dXWFmLs8poyjI4SXRsddiD2+0lf
XJciVcsv9seyuRFrwROTqleCxQQTAmHchIWRQ4Rr4vSx2Zaf9GrNIaXS8hi04dBu
19JmBfdFmH+gFmKzThraIHVPRQLP/gZonhA1VXg78WNmCY8vvh3McLpXUGHeWpgl
vVRGktieFCx740a1Lj5VgpM9o6GQAdH1eO+N8w0GawL/UNPipJl/4tSaWGOcPKKn
ZKBavWsw/4aM+o9XG6Y+3XnpoAKmKGA+3hPwCIfsQ8vSg/T4Z9juse2RAIL3Rxel
a2WMWZWw6JwVtwdOj63GzN0PbK1uBCPMGcuudhJb6/8uRVNO9MEHQvO+FtNNa+rJ
ZuVetK1oiZSolbc/FlXH+TkzsyDrTqt5PgbBhb7u4we/uYMXP+QHgwARAQABiQIf
BBgBAgAJBQJWi7FTAhsMAAoJEKckYDQX7Na35HEQAKmFdyMy+FZleLU0yfNzURGC
N4oNTmPFksdgOE4tb8h5wmZFE5TEazqeUAeLPNg3kvi9RnErcEMl+hj28gb2wtkj
cSsBlfMzh0KehK0ycrzYerGySX4Mp574Ds9YC3TJSRnbK1UgvQ3jne53/Fm/LcI2
2cOcYl5GiRUy9Wu2N/Rv2b47f/G5SQ9w6zj6vgUxgIXPVU/5PZ1LKA1qAtSS8yVR
ccgb/GyPUHPu9wNpxL8RyrVtxHrLAekTIBqIIrO8xDPdBJ6u/A4RJ7ErRcDPl8ws
gzzIQVpB3uoYJEtzK/Qa+Z6YFaxQy8kA/Qa8odrbFO5mcU90lGVpCtok+mGfkMo0
G9vcilWLCP+Ck5fCYyWL1ndg2KZFqX0rUptHFyp6GulVxsyGcXYuZUJ3FfkJw0hR
cH8tdRKZ7vtulFWaCQ+jacBQm3wEYR5oQIHcOQfvb2DqYU0ZScyZsS92rc89juLe
som+K851Mgp5sTXAS0RpfyZM7AH2OysC3fevuUNnsY3PtEV3Ht4CpMExqC25GDvU
GzZZWEAu+Bx5ASh0QYUNr4SxmzITtDpPqt2+3gjsxjY99jvDaH0EaUwNP2AxGKKB
dTCd+doryZ7WjXKqKVaiajo+aFIoZPUF6id/Bu+1gHvF18ogMtQMWXpu7C7t7Uk9
hrLzN1c00aF4AvcZbMhA
=QgAj
-----END PGP PUBLIC KEY BLOCK-----

1
depot/cnuke/download Normal file
View File

@@ -0,0 +1 @@
https://depot.genode.org

52
depot/cnuke/pubkey Normal file
View File

@@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFqQDrIBEAC7hA8ceYe/eMqWMUG74miep7D5q2ebbvSBJW69NuhjWefDQiey
sJGIk52ZlHvVsXe/DR1GZ3uWyQVUufWU4hlcphmzzd3RJJ+MF4yhd0YbaefVL7vb
g1soEgBGVsnLBW/sUDEcF1sIe/gh/HcZVWebFr3mCE9AVv/juroDVRL5Eah3YJbV
wOQeMKhYzKUszEuYQGbNw2E7u/M+JUqSfAw49gtlT/HH2jJGF00YJo7SCRRzd6MP
n3e/Fd6nVLcjpDJ+M0pEqqK/Uuiz/2VA6uU+IubqN8JoSWwbxvc09bafet3/CIAH
78M5IrpHsPnH12odI81VRkAT6yjnjC3SjeGjsTeeayKmAt0gn5PAqqpK0Wt9R3GS
xReEYBxqYWoKB1v85eSWlJ0jwjX6LFST5nR/R8ew2k7uLjY9tb0tIGbiG/ECpeHC
kIeO1bXiCtca30rlXaT6U551m2Zhi8mwAGUxiuyLJQ+m0pXe82BB3hSDRUhQJ1Ra
sCaRvwPZdRCDDdhObkgkMlYROVNdC7ju8jZmB4n5O/5N7Ll7/RVhUWD7KeJu1UTM
oNEmhxEMrEcYcHFt8N8YVtJleRMVnsrZBNxOkFnpsPZr02XIQKfYi5tqSaBQZ47h
TTtXP3+FEaU+EoJprWqH55Sh97Fg6vuBJEmcGJeMGudFrypTzwqnM22DHwARAQAB
tCdKb3NlZiBTw7ZudGdlbiA8Y251a2VAZGVwb3QuZ2Vub2RlLm9yZz6JAlQEEwEI
AD4CGwMFCwkIBwIGFQgJCgsCBBYCAwECHgECF4AWIQSFq6G0496kOfRE2qnpSz5B
lOa1+AUCXk6dFAUJB4D1YgAKCRDpSz5BlOa1+JHXEACyB6vfzfuyo8fu1IaGrloC
qUUuSfhdleF1tPhZQn9W92bEEoXPfqFUuiNaxeFIXonyiD7wJYdcowdIb6CiNWrx
B8yjDQ7yb08sDLlL821I93kByy24Er5hY3QEMuEL3qv8YD/6Bh36Q0aoTXqQXMuQ
3AcHp0JI932Oez3q+gEdW7CUe40N9LaTx0A7ZTHe0i8IELkUPFtDg8xibOjZhBMR
vlxNUtzQVvC5kT5Wt0w6ZFKPGJguFylaE+TcsTNtiLNS4Z8PmRPgygrWotmprELo
2/py/VMxgQb7p4LFj+sNmU9x3ulFO3Efb9cVZVjBMYx5xh83ZiLZ3PvK43Eo+7nm
kYQhPinAjNmqng4/ZdQFrayFMkZc4oKCqV6BaYnybbsSn2ZEwVQqpDMeswWXTf9k
qC6DONz3ETtyzBEF8cHDpy+BwHRXx+pysGLhIvHS9C3M91j8oXvogZRbw/dEKGX2
eWes7nsdHeTbyRJunCCnsXDm0Js8cZcqj3Eu3Kpeu2CbgJGD+ajOel2RSMo2mFtg
OoRWjCibWHDSeUS+LGtspDpry+4VYwm4KBdcyEgiXnE8WDb/xk/hZgJCr2814AJC
RPpXoIZdFiwSP46vgoAnHynPbGTmE/Wt+F9Y2cn/dz6rmg5ynS8AKuTOUSoAKEUV
J20mBJpkSx7Cc95AGE8K/LkCDQRakA6yARAAws48PKN3BQPEM0M4kTO57/OqwGrA
AMlxnB3n+AP7rtZEC2L548+3pfg7Ub45Oq1X0ySxgPhV15CDUEK69pgs0JhphMbM
DyaUp04DyQWFhdueAqQVFnKvg6nZm/WIJF1VYEc0/q6Ramsdv2cWdxFBkFHYsH3P
G2bXCZZAEO6eJI8cdmBH6+bVptky/AybzBLztp1ruWlj+rm79qULmW7zJfxYwL1U
4MkSN6+nQ2diU2tsOOcENKzuQbB7N1Pdp4VItjIq+65z0U81iPGKMwVjcilx9pVV
C1qf1YvsqsNhWcUCTDiPUrXW65ppq9VcQmHpNKtnrFEpQ3SjjEezWbiEmN5Ua8RJ
NKT6RAy07wO8Fx2kUmnXiHgOu7CYAgXo9jwR/mWdnh3qNAtfvF/BS/EC/F97vWQi
kAVN0Y0H9EGSEoVyKwS1DErzcBgajPKWedKlmjU1uIzupRWn5oqetVbNfZ3Z/EJ/
HdMCX0PN1kxg4WoI9mkP/moly1yopVOTTLJwvC2C85NQUmxyZeb4h9O7toFczBxn
7pV9Eprm/xRcO3ZEEpmdM7gR3+R3PpxkjgPIZAn9il32VYzdT3eQmDZ8sKC0qASG
ik2if34YnAggGmsrVB0nzT9fZR7CQq2IR7eohczLJRl+n7USQMgRweF+sl9PcbDT
aC0b0i+VveSEBOEAEQEAAYkCPAQYAQgAJgIbDBYhBIWrobTj3qQ59ETaqelLPkGU
5rX4BQJeTp05BQkHgPWHAAoJEOlLPkGU5rX4RRAQAKSsr//mEXy6iQyoqaxJ796s
ljaoqsmT4ly/+0k9diX1+/wkulSkj4/fL2fDvRQK2cU1i6mYJVugN5swqXvp8WF8
scnDS/H75v/3Z+clTlsMjZ4qI0PmXYDpcvp5+zU85USEjOxpHmIKvQGflZ0NMvkI
uo2ZC6F4xnB5iizx9Ebm0gGAiKKEJ8ID/LLhJmOtidnGc3322SUVXIl4+ue9KgpO
hTBjx5UdIQ+21uSRf+zv3ZQH/KA/08iNyD20fIiUZKfEoeovlW8SipoO/pf/+1DE
WSiJqL3K7T3ixkC4oWSp7tbo2MWU247PItxTnnGF+KjwbkzpPwyPYPHT5Ed3XEZV
e39r9xUzdvYKKDCNDToDFsh4bm4hq7xXgnTwAbF6hw0iyBK02ZB6FKJsF/ZJi8gC
Ni4d3Lb54CV/Z7nAqMFbTa6KT8o9fc0Bw6tgX2ch7SRWU70yVGYmQzrdRsOtDkIV
iYA05JozwwsIcJQS7hBVnsqgD/huYLd+y7iCUgw35NdQ5764jzVlUpYtFO0NFrM6
QSKnnFFRiwr3+ZqIja2SGW455uP1hsl2ccA4Rdp/JRuEI6ojIo0R+JBpcMeqdv9d
HcNsAoZkrm/cQfIwlyKsU4/dEFL09kEtv7x/aO2ImqjAZ5xT3ml+4kFGEn7M7rsc
M6R6fgkYrVo1GhjXTlCL
=4bj4
-----END PGP PUBLIC KEY BLOCK-----

1
depot/cproc/download Normal file
View File

@@ -0,0 +1 @@
https://depot.genode.org

57
depot/cproc/pubkey Normal file
View File

@@ -0,0 +1,57 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2
mQENBE5x1ZYBCACnYHUIJG9JDe5s2zEc7oQNEfRoqWHtj1hkT7jXzM8RgxT6I6M2
StaPFvSQ0EWpLuZBlUrUKFcEQ5OAICx1asljSdW17hBel3nkSsA7ORfOi1St7FPo
7GTgzoOuB3Db4xG/0IVEt7PZ+vO3T4we/+D49ShiNBEwp+iV/LX8HncQHCJqBYyn
VZ11d67Hb4L/hKbcasL/3d7TFanBxyGj0lFnHtoOMP1SmXF2sx6W3Uz5tqN5LAyS
+Bo2BBKQg/97fF35f+w0c8o9uVRQNW5srxmYn6sL7vMP7+2rD1frq8+2q7DlyJCW
iKUb2kLN2l2lm+uIHhwqH8zu4lLiVCMc/by1ABEBAAG0OUNocmlzdGlhbiBQcm9j
aGFza2EgPGNocmlzdGlhbi5wcm9jaGFza2FAZ2Vub2RlLWxhYnMuY29tPokBOAQT
AQIAIgIbIwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AFAlqUONoACgkQAx0TUceu
pp99XQf+Nd4waDIgDVwWxAYcs/fZig6a6j8Sq+9aMTGi+gfI/Kqq2PrMy917pbGr
SjQ73g1Fwn6KRKHMG7Q5Auwo2iw0m7XQBxzFFKKDmGVMd5AJxhsRkIlGV/aZnG3u
Mo8iSi/wq00SyAJZgOqEdGyEmqbyy6hCmsaW0oQczZYS5SfGTQkf6kwKKnRz0Vz/
pg55bl3sjc6C+DnL6IKLW1pOFWfQXcKNam+bj32OeRL5k49IV+tx6l5eeWlVSob3
E4j5iYW3f3+Ueu6YK7lKf4/cNTp1BXjvWApseWgUU6OlUpxQ7mFzvWuUf6Nci53F
wecwf6OYscetMgNnTx2twOpzr+VPWIhGBBARAgAGBQJSoE05AAoJEGypJkWmdbFY
OAUAoOWVPRLWHV3zHk57Gj+1DP0mFAgGAJ9Q6aaueOIhOj3YA6lssIY3OuRVbIkC
HAQQAQoABgUCVo9xVQAKCRCnJGA0F+zWt7aoD/98PxUAKaPAopMf+FGgu/LoYCIZ
uvkZav6OgYObck8s50mKVs+cXnYbCIthlVFjY1vss8Ztwrz4nnzqngHObQqD7Z7X
OLjQC/1NU1+DSfIke1jTX5tSBbDzPTGU4PXkkdnSHpc1R/dGupcGU8JrTCy30iQT
GNM7XBAwQ0B+ls1t5aOFtP1228GWuEGmFNlne3vwYH/+oxMG+uVZ9b6UWNeXRFcN
Ke7mQ5LBjvJarFq/Hnrj8fPC223tixgEb+hFI0PK6rslRia6mqrjQOSdZaDL6zb9
BHD+gSDktDYHHA6a0duP9+v0EaWaDC0PemIb1uinDxuUbDTHRXxIT/OP2bYQdiVI
+sMPTz2HFEvbWYMG3sEeJ/YTct7tsK6ml5Wl8vB3aiX+k1a3e/bNosLMJ/Ht6DEQ
uy4eTZn8itl6nwsdxoE+t7LXQSONi9GGYOCBzBb27ymh/bOcgUFIcUH5uxvTTSes
VkiKdX6Nq3mkxY63dTm/CDMof64IJYBqnVVSTytlNVAB3PNGiEhK7GDZ5ykuuvxD
jONloLCZbNG4arRcfFwb2E3Y7DCink4qKMPbSZlPUl6ho/gsU0WlGE26XqqgeTzL
MThOfgcDAMAK7Zmev2dpzXBOFY8ZR4hpitYCBQsVnpexC5khGbnawgnWhudzg0ap
SO0DxeOyyhJ8Qh2yMYkBPgQTAQIAKAUCTnHVlgIbIwUJCWYBgAYLCQgHAwIGFQgC
CQoLBBYCAwECHgECF4AACgkQAx0TUceupp/qoQf/UJelQAsDLkEeAhZ8DRAXROJA
25JXF3fCUF2oimih6k1aH+yAr610i1tct/ch1g7TKZEB9RJKbssAtGv9722oxla5
zHc1ChYC7gaDNX1UDZ/ggsg7HLxGKS01t+9D9syT84PQFgod+ReoXvvpiuVlPjsw
TAAUQN0QM7P8H7q3g4L7rByT+W0JwQ7KFSahWKoalgKXKR4XxgRoi1gga3scVqQj
+nzXlKWAa6WbDwcFJnZP+vITYoAeWgPQ9ez7Uwi11IYk1q3LS34hlCxyZs1HWRrw
eAT2V8aHGgf4GMkptOMRcQVFftk70+zaEMV4iSBwRwMKWnKMEtRv2nLFdKixQ4kB
PgQTAQIAKAIbIwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AFAlf34TMFCQtnPx0A
CgkQAx0TUceupp/quggAnCihEvOT3Qs/2LMZ2IrPiCEETNE10lD4EfNl/DpWqJaG
730Olf4FLgCfsA/JQRyl6B//8UvSgPuU2+Lh+Swzita78AvGW3GsnVel54FHzAyx
GLPyIIFk99J3CtKGCZEZA73q4En2k/Vo9d4g1md6dcXZaLNleXXpIXLKanX1BSPG
jdHv5Ac76dM3JU46/Zxq5ZpYD2Oh2FQxqPtbUftWvi+gWQndcnU+ocEbWBvJ3ZiP
f/YNdq0YQGUuaHlIV7abgD3Mq+LYxF91XWLE2aOYLrqupm1B9ZNkm8xqWJSU4nWK
jbXVDgY2obLNz593OjLoOJ7PNRpK+7Q7uUwxSUBg2rkBDQROcdWWAQgAvvfPd2y9
K7Pca9ABWr7JpJIX+Wc/b1YowaaUddvubLfHbyUXoWXX/mxcQow99kJaQ5xdMDsD
qwdq44ni8uWWOIZHA+JSvARNrUz3zvb1vyUt0LvlzuhZjNMD3I3y8cmhF9W1OKNl
yw/K1onwywkxvnUwrqxBj+hNYzl4xiALLV1g+OkkKhaO64zFcwovGomSWBU+kAAO
RW7/7BPGgsOdB+V6RysUOenPyd88a21zV2JE0oiuxylTdUEd59VaPezANaxlgCDY
PEyLO7ccNdaBkMZEHaIlG5JMNYLcCeWDsRPxngwJvapIb5gU6BGjXiYq2wLZco3O
glzLcTTaIiReVwARAQABiQEfBBgBAgAJAhsMBQJalDjjAAoJEAMdE1HHrqaffocI
AKPsOb12U5A5zPbhv1HuCp5eQOhGqARCTY5dbDHRlkUXiaoY+X+fpbu1ZUd/ZipK
7ZqXlHLFBMBelEae5tC8xa/WYxJpk+AtqKVd8FiR3QR8ki0I+PVWcRdKsLt7pZGO
pmtNGF5vQ9g/rzU5BOyjlN4d2bhjdhCOwRzfK8iGTA0qvoLCPKULVaRaJNadbh6V
Xehep+BiVgOaoDRXAt+34hptB1S0WC5UcyLBXyd53pjCdMixal2um61qOhJNEAsx
OSrHWaCQcJguSFgB5ALrxuQVqo9+pJAxxQvwy2YsthF/zZsdQtGy6AyMsDDQ+BA+
fqZ/7ClCj4t1KdI4+LC9Qok=
=mumy
-----END PGP PUBLIC KEY BLOCK-----

1
depot/ehmry/download Normal file
View File

@@ -0,0 +1 @@
https://depot.1337.cx

37
depot/ehmry/pubkey Normal file
View File

@@ -0,0 +1,37 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
mQENBFm3BlYBCADR2ZGIWiYurf/urQ+rAZs3HMobXQ/fckc3FOAdY9qiklrvPr9s
maZZyMF+Wn4J2AmsGctJbBUt3ujcmk09AgZIzrHpVJRagUSz9q+bK7NvAfenDC2q
w4HS5yE9DYxXOjxrcS5a2HhKfE5sZef1zPtFIkEZCJXCvh4IL6maLijOrUZPf9R6
VJ+0itNh0hK9KiYsKA7CwrWuFaw7ZenVkEBV1HGXybFh9aInTTSqopyU6qYLDK1X
U0NG24cjM8TDbMGTaoScpLchcftBGEhjYg7Y2FCu455MDVdrmoOoxDINYgDU1KN6
8GBKKJ+xqG703/o550l+rCMB+TxMN5zKTFhXABEBAAG0IkVtZXJ5IEhlbWluZ3dh
eSA8ZWhtcnlAcG9zdGVvLm5ldD6JAVQEEwEIAD4CGwMFCwkIBwIGFQgJCgsCBBYC
AwECHgECF4AWIQRuEEFO5xYHgfX+6P+xTQQ6JrPSxwUCWgHubgUJAZm9OgAKCRCx
TQQ6JrPSxyJ0B/0eBOIloo3zJwtuQnNXe2ZFAmHFF7MJhrr0IpZ0n5K0OHTFPqXN
VJ+vhTGuI/SlF3a9YEHohIT2KKal1aq+/wVkX6Kdi4G4nGTEXdRsTwlzN/GXHBPF
IW0iUOInJOliKReaamsR/rgXXH5sstq2IU4x+NpHMT/OrkQPNSqVX0RjS9i76Awo
+EqdtW8g3y8qWd8WtTfhbMlQLhuzm99aADbspr4nK9WhZ7UHYLJAz/u7LzZlRiI5
hNa85BCPhNuYz5NTHhn4L9r6PdbKPzUV173XrlAtlteYuGIHk4d/zSAwlgDevChL
0MDRq1vvgfQ2V0SwIqRqIfnO31Ph8uktJ8WRiQEfBBABCAAJBQJaAReyAgcAAAoJ
EIZq4LBroLaERpQH/3Dw0H6N9YF2ATmkse6NNNQjxhKSUoA34UBWj0v4Q1AvXEe6
nHRR0mAa9Gije9ixKUg85VbKM3lUhXCFqW5jzyzpF1rzzTpAHaUTYKb8M2D9iRKo
9ejTK3KrgpstYJ8jthfosxeC+lK24WUXKKWPjgoIhv7Thd31ea/PZdkFVd1MpSwg
5BHRHcogsJI9uou7zWYbap9/k0lxKHJWklLh/oXet+aAoUIL0kTU+nILy3/RZJGW
9WlnZR9g3qSQ8YNpgNSrraEtXpcs6MGsWZSzbzJ1U95NL87NbWEOYgHZA++vhEy5
EXVrd8SuSHbUbqNF36gz1cxmEuKwxAaWZ1/UbGW5AQ0EWbcGVgEIANC9LozG/TXV
4j0TniuLrsq7kkNH+OJQexcD19pBrmEV4eYYD6c8BB9CaBITqvKIqtG0VJrmB5S5
D0oW4mQI+TkcX+Q7y3S7dUkc856d03aUX3vVcNhXEbNgM19qxAGieC8WH2kr4XU1
psu1WvFCXOktrE5c8H0rPCQ1jseB0S67XCA9BLwAqlqu0OuTpbWddjXuE1ahi0ig
Yt5YsHvgCMLup208azQqGCnJ5tFotqzbLg3I6+QzMcLySqsN4BzYmUGbOSSZdUhX
DWxwAK1dB8qa27iwsxCMncdGnqOTkq+mXRmu8ztPTUivyC6YHJ+O5lXvMMADZi4j
8RpQQlh5gFkAEQEAAYkBNgQYAQgAIBYhBG4QQU7nFgeB9f7o/7FNBDoms9LHBQJZ
twZWAhsMAAoJELFNBDoms9LHTmIH/0PuzpA3Ezdrb4xfVwnhUUZGiqfNzULCZipT
qtfym6Ove6To4BbXAihWwnCYs4sgipabW1WaXsDDvU+AmOmz4EPyTna23fUzYRSL
MT/kk77d+BGRGeA8/Gj/BgjPlHlFa7ukbT1DL1lSV0RMQ32tDGnhJ7wMBx4GoYU+
xjlsxrYKKdvZKOQVCCFn4KY/GavqT+8pYYI63stSPGspboQR2iboKqc350MVMvzz
IaDt14YiOYlgV6LoNj2VaPJvFqm9ML+plYl4PPQZTV6KAhFWCDJq2DzEQqwG6RU4
SsneHAqMlG4A5SSMTLEd9F2gZ2sJicybr1WbNLj1KF74ckUhpM4=
=p4q9
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1 @@
https://depot.genode.org

41
depot/genodelabs/pubkey Normal file
View File

@@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
mQINBFkuiRQBEAC693ngCVrfdPThstQmcH51tk/jx5zZxJ9SF+0nrh/kZYs11Fph
Hy1WIWjAqmfaoInIen+k9tCM0IKdbNkCbH3I8/MjcENMSa8vHfimcicsQl0wPdbL
ZNBkLEKdTVwRVpn4cYlSDqTV/nNnJiGbdiLVZdLj1g93Ph9llgPTv2zFbwltKHrm
t+1Q5MlvApsuE3Swwm3fMenhXAwNH/aHqhxCkYwYiiMduY9AHQ+a1YfRbiaH1byy
nEeYqBJLCEbhAqTEamWWzziYsHFqJ2UO6v+Ckgl7w2n2T+nVQd855p9nSxGjuoUF
LnVlphTh8Dr22fznBJVZRJuYBLO/aNW+RaqqKqwxxgpBxlzdMrlOkKLxvnRzxM6Q
YSQwmGfe48NTZw8vXUsRBnfsGry0CIeZcJxN7j4WkD5qRvIg+OZSwl2Zs0Rc5xX8
N8PjyxdiQ4VFJRRvQ3vix7rmmdFd3e0bNVVzkjygRne5/Kn0IsCLhCSl54YuxOrm
xUyGEUXF2c16JOPxE008eyns6PPHNxQuWJ8x6aZ010K42RQDpryT191CuWpppLzL
TbUerHuZb70P4K+Pki9jgaOCQXhNYLR8zpjoXbTrjtY0Q9z5K8nuN/UPTwXdu/o8
jxBU/Y+XGkUc0410Vf6SE3R19dbZlGCljSNewcQ6+xNI5qlGnH4RjQokGQARAQAB
tCpHZW5vZGUgTGFicyBEZXBvdCAxNy4wNSA8ZGVwb3RAZ2Vub2RlLm9yZz6JAjgE
EwEKACIFAlkuiRQCGwMGCwkIBwMEBRUKCQgLBRYCAwEAAh4BAheAAAoJENpDnGeE
K08lT7wQAJqw28U7fusS6W8xhZoOH+iWlso7ToTcDLiRXBk90hf5BPhgVlRpw++X
khzG2eDTspS3b2HVaZ9B4t9VzDCapfZ+PeGxT2F8qhVFSldTR0YZQ8b7pnUfyygN
/WReRjhYFvqCB+DgS6c7JLzkH1POeEUhiGg3cxC4x/JkmbcvOITC4aChsornqEiK
thLtZYC3MVfLS7d485XvIiaMZDfinsjYMIE9NOQMlkpTPzUXIWnIxFHEj2BOqrm/
8pBoqh7DHTuXcFaCm0HTMICUXQBPjddY+lxmdvS6FV5ReNEMmOqz9axadwLyfihi
gUR1UkBvP8jKu7zi3QiMsEYWy8Baohv4YNZjGHGfa/qR4LeHYlYEicusRnTth5vo
ZfBfzg2lXwhDfY/Ela/strpgXjUUpC/r/orJJuAq8jlHqv3CmnmRjN1CNT9RF/cX
NaICHL/OpULWyuRrRvxDMT6XNNV6sIPEhjZXy6l1U4JAmRxg0XdC1knKnjldzdxy
FGVMU4H7ks6Vm3Sx+m8QIBciSun8L6R7JdMf9ffeLsoNXVQ81DxIBklOcl1S0t/J
Cl6+VNt2trGTvA6HTwobCh1J4c/gnyQr8JpcA/stLnOWHAoF0N5lLRM7pok/FEDk
Lh11Os2HRHcS0FysrKn7Rm3sKwaMAmqryFw6D5yuFun8lU+kBQtBiQIcBBABCgAG
BQJZLonBAAoJEKckYDQX7Na3oOoP/0+BLv6Z1rgrNO59n5WGgkAwc+HCkJfqe+Mb
B2lQpp7Rn/kVsY/+LfqmBocUmHYYUUvZc4sLfuYUdkHxcGFx16VvOmC7UciMZEfF
fK6Ix6dmzoPlY4aRDYI/PhHCxzio0pOaTbv9vWwkd6AQulhqk2v4zN61YFQBT1RO
ZVvHg492KeerjcIIDYzqaA/ttFCsw6C0jeb9LLR0aWcpdJqOWCPbTf2+/+EgXFYS
0ToiLUFL8x6VExeAj0kXti3824saqni7nXjZkFtV/m24Uufd8kbaJLv4yQFdS49O
8YeQw+IB0/qwQqlkwIbnXQ5xtOLhCGXB0nOjrDR3EVn1iy4LlKpQab0P0BTHXBee
vaIMGs12Qu+Jn6ovsBM93NjI2t2M1204CY3qK1ciTPehD9wSmYFxy26wkD5nrYqb
oo2ELF58+u9Ku3jPy+T/5qgUJGx5crEfZn2G12dMagYarKT3Nmqi8HlSB+oCMtWr
12aeuEaZjHtiW1THzJ+PJvbq0cvKCPskEBW5G1ybjwWY8MnEO9VAjOZHZq6o/cud
tBdm6yXQ5zUx9FQu3af2kvBHdTWal51yvyxm/YpaIPGLkbHAEyh7AbotzquPswEH
/DXRUpYPS/WV3T56hCCj6Tlzc8mZyP6mB+Izajl2jiyS0XpyTPw4P2UPPrlQzbWD
dLZKzeV2
=n5MC
-----END PGP PUBLIC KEY BLOCK-----

1
depot/mstein/download Normal file
View File

@@ -0,0 +1 @@
https://depot.genode.org

51
depot/mstein/pubkey Normal file
View File

@@ -0,0 +1,51 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFuhfGYBEADOj0EW/U2O3koeGIuNGDuBDSzkYjncoBrrPN1z69hgK349xiP7
ZwrPBA0kJ3ctLcRQcOEDF5XJzjByuNk3JV6MuKFqwy2i9dDTHkv5pv7Na/R3L2CM
k79weVahjPllt9nnbSMMtYH0eL187EhLW9owd0CY9wDj1lhLISHpyKvb9vwiUAwQ
i+xypGgU+Qvf8BmfTDdjfP0n+Iw31z+R3xiHhWmhrs9gID2XVtGZIy9NQQrijJYS
1Hp8hjgH9Fzmj0GkxUI+2mEqLeEp6wBmmo+7PRzc+iRYJNocyRxDbmdE0eyh3P93
QABzZiWTU+Feq0MYa1FK55uFCFHe6MSFLq33CGYMzQ9oFQHjuEX1KqJT/OoumPgN
iEb8Bt3XmqiI8GejafLKIW8gO8tYLABdrEpFelnyXy12IIOpOwb8GrxFUEu8+bDb
Fc0YkV7cZ4NH2Kq/6/Or30gCA2XUpqhDNSxA6jer35a3ZzvgXvcRkNR/oOt+qt/3
u9ew+e6Xjque0PRWzdavVlKdYWzSV8umVw5DGgQj/rSn+8spog/5w1lElyUa/5Yx
Z+1bvOIyXPg+tTLimWtGRZQorak1sMsLMDqQck9SwOQWpSmVGsJ14uWXSMaZjdj9
4rHSSymYlcQWP8t9lfPf6/ZSH8574PbbJSe71UXcWWznSGprSt2QQAQ7NwARAQAB
tCtNYXJ0aW4gU3RlaW4gPG1hcnRpbi5zdGVpbkBnZW5vZGUtbGFicy5jb20+iQI+
BBMBAgAoBQJboXxmAhsDBQkDwmcABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK
CRDJZVRAR8NPkiTSD/9xiUVNgKTkmH9WRdCcaHuyhKoQI6CsWnMOW5OZ+gVXPc9U
LapQ5Wymb+yGE8Uyn4EJnwdEa8TdWztMs3TNtK5vh1Pk1lKmtKcblBiDrUPEURhR
mUBoUkMe2VDXyN27e0lkbxcFJ0HrYnhvb72Yfnw6B3XMa/NIhbOU3ttB/tVR6Kjl
YVDtTokfILQc07Ai+TqkqNARtPGntHAn9qFvPLNKI31c+Xw/QGZbVPNFW1QAYBiO
5dqsSwKaouapHAb0GBmU0fAfJZNcvwt9Ph7WDXU9Ce3LZmIshGW7Gzm7EGdf4VS6
k4OtEWZhZHRnl9/sBJ2UlQU0tFs3ow53aDZQIa4FKd4JKabBeRgDUKCGEyfoNKCq
NKkLZaR/kFA9EqTPZSIXPLYIzIlSFoL3LVDOc5O7hDT9vXaubdZeAfE9VcHDdm3u
usW034F0zbsuu4G83qZ6QhDOp0UhujfSU+BDkH0I+OfFyVkQAmy69J3byi7Iluno
OcZM13rbe30jzyyyWAnjHicAt8tNwCLMmnIRvYT9ELqywID0Zzxkct61eJQ6L6aq
/DnUD9Kq0OwdxC1wMGtimX5eUnN7S7y5+TMRepJnWcTtgrLBVqwRrvSLnsKVd4Gb
Bu3dSs+BxMV1UcyU0KWwDPY2D7k8SGgeH7IEPo/JiGO8RrWYJRac9qel9egMYbkC
DQRboXxmARAAoaRH/xgKvp0QrNFJZBW12SdXT4h1nXglbpZd+bUl738LqM2JSIC5
Qq7t2DUtOiL9UxqvRgAIjkVLR+hHJBZyuPOP5Ebaf3Mr7eAdmCx2TMsHZPKBLnTy
EqeUcnPwThNKcUaGsQYlkxIQAJtPzy3YBuDCYnzzSi6KzP3VC8szHsXcPo2DeKWI
m9BbMMSQkB3m0fz8W3ar/64RDoubRWRJ07b7q4WUb4jPvql+Tz+Gv5x3qm8g6m1j
uD+U5OhGCe3m5/MsI2JYdWXEwif8YD59gylsj3LJIu3i4SkR8aS+x6n3LIvdSCOt
P3To87wfoSqBWWObVe/vOHRXqpzEF6T/ih/rkhUFzrHNMziTPsujBazm82AUZ6xi
2TddbdSAK+ZpSPQjyyRflNyNgv0iu6P3BnBgv0Xcuf2RsDMBDjdvHtX0lXkPMB+r
6jgxl0faV6UktH5R2d4Zt9i0/vWlZZd0MDylPNQDiKs+qSIX3ntfUUaPdEJqYAwM
gloXr3cZtsVh+Yoqt8pa4x0x6kqez+oyBUFf6y1FCKYq2H/QfPRkF/DrfZS+7jXW
iAX8PcrDceCN6Dr10/g5LPWXQOHUWxCu7FEYoYJsVXst4N0FnCOCe/OGYIhMteSV
IJJvNS4qwXZKKZ+cmuT9skEQ6zsLV9+VDYMwVqXB4wTp4EwT2pCp6LEAEQEAAYkC
JQQYAQIADwUCW6F8ZgIbDAUJA8JnAAAKCRDJZVRAR8NPktRiD/9qjH6uuT1y5uNA
4E8u6/vxZGsyBG57dtnQ0KQbcsZSrUxMiDTtMMrklsl2vtut/XDroajm+d2eaQ4K
j0h285VRkT5xJ79JaIQ8oyzRWBtpENy0iLUm7CmqCMuH8VFifZyEBYZgR/K+9ago
WwF3sk0QP0WJTFqIZajKK0Lo5Juk8DCXjvtkvGNytHkZ2vEkiZ9m7Eq0AjQnts5T
PdHkob7Z8fu0KfUMoCUtb+TzNyMYOVGE6uTfo8wKvbhwzUWSymZkrecx73XUUmew
MdZ2WzwGdUMXwcBZ4LvgrZVg+LKxR1lyJ+qbIUpDKXCZGGH2VZVaQspgnx2Yt0EI
Zl2ELMrTq5IcOkxtblEZpQkwaXszqUDNO43ezp/PmbTRWChoM/k3RAbp9rvoYx93
UChyRXpJRaqDxK502k3BSnOfmolpQvxTMKtLZO50URa0F0F4qD2csns4QrqOWsGr
qPqVKcLn8Q/yMW9fm5+xX+ZHICKk64GAB0YyHcw9lOWekLhGzZV1KnD5ID6+5E0B
nsWZB6PDqLM+/ykXh0rcN8DWwZvhimI5/dOEIWIkADKT8WGwh+2JnRyimhxYdaiH
ul1BvZAYqF1FVXAHd0u48MssLywGGbW4fH8D9SM+LFpP4+8oYFLNgH1OreMENuag
i47EaxpnQUgIt8PZ/gL3LeiGs8SNpw==
=flyM
-----END PGP PUBLIC KEY BLOCK-----

1
depot/nfeske/download Normal file
View File

@@ -0,0 +1 @@
https://depot.genode.org

52
depot/nfeske/pubkey Normal file
View File

@@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
mQINBFjSXTIBEADXQ8joLgvDPxnL7XVHW+fbxWhO+TOWVb4u19+YUcYnY3HSnYFd
8hFyFlgSs6vKZ6l2W5Ls9/FIFeVHLr9Ign/X7wLS0OGmAQ7hsyVSRe9xXQm1xIzS
qExLHHxSXEEtrxaRjE7qxEhsKLotmLC9SoV+j9CXU5SxuWH5i3aVB2hxv9zJoJ4z
cgS8VCGdEwHSsvBfv+G2b1bdI7yBOaA/IqIZX5KG1Mg6lsRcpV/1q4og4ybSNL6O
4uj7cIXiRTkX4o0i7mIvI1zpezDi6/7DeBGiML18IFupF6TknZQ2etajuN0g34/C
vGf9SOVxNEHXnT409ZCQa74nI5t+QGdJRa6JbKUQzZ1etONAqcbp4Z3l5Sh32hRs
Kjf2POUT6Zv4uElufxmmoaoWfj8w5K2JqrM1bFgBvK8ynGkl6AOld9FUqAmKK4bq
lMb1tXE0GQgrVSkC2g2uzj9q/IIMNq5Hs+82F3uRiWcvLRB3sB5YP1Ys7iFvEN7G
UZB0ORUCVFT61yEHT2EGSt8QUMnxzY8oMN0whihRMZHfhaP6mPqfP+g84wcdz8an
fNeMoy/nye1GnItDobvQBcd+eSIKuE01OuG1JTs70ia8WKCj8IEe+7IP1aCP+5EM
d3B65DK21c4JB8mOgfD952w3ukqlhe/LQGQ6HmiBn/OKHm5rsyt57A79iQARAQAB
tCtOb3JtYW4gRmVza2UgPG5vcm1hbi5mZXNrZUBnZW5vZGUtbGFicy5jb20+iQI4
BBMBAgAiBQJY0l0yAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAVEJpB
Oi5F4noMEADGYVpxczHNbydRnd0NQDdb+/vr+n2f4FHY+6tdGLzcW8zzayg7y6x7
3oC4xhDZGjUbpiF2p5SOUh25q3DE9zQEZlzr1GbFug6nPt5Qolmtytzlt2jO0il7
oxobo5O/kqw1d/+zGFwMCkGKyDruvl7PQWSGYPIuJ6uLapRJurWjUSYuO95oqBvp
6HKPbasuEdAAeLBmpHANvkPnl1QzZBmsNLlvo8bsihfQJTzrGAsIMm0A4EBctGhl
FkM7VbkzyPaDvEV+PUa1ifn/Rfk95XdZcUJ0+RjmuzO44xSu/rROlZMftct2vhWa
coDsdxZUTsfB1UkIn6Up+zDjc0+80YSwRcDNSrCxJeegvrLOodRqLzDFzBUmwOTp
rrD/LW9y7drbf3GuBSYH9+AN5VcHSs2FpAjkngxWkOEhBPWw8ZuLRiR4OK3nrowl
672At/pFAIL/g+CXZv6CyfPM062AT8pVO/8K3dseaSiuwBoAaGU4h4hlkDQ+JlSu
PpPWC9lagnch8LWQ7blIPfGpRngLjHQAXqTi23JmgJcTEoo+v02pgHI6u7DVB3ur
/8waK0G+0ZAHvchifk/lwfKGwZmunct0aSBvMDgCt+Ahq+1Qc6NKwkauO4DAw1K9
KGzsqMi3MT/Ca4fZyUWAJQc71SwpUOBCFcrYBarp/JtQl6fBQ9XI8rkCDQRY0l0y
ARAAwL0A7D3aY6W5oOo+0jiEqad0AJTgfV8mbElxhZVHNo5R0bN1yqXqX9sAo5qD
+a56ae7zAwX+WRSahUNcn2c3Y/k4f4slP0j7VFOc3Vq5PHeJT3bXWB8eZdJcu1B2
LfpdvjUEUzn0dlP4Yf/P1dhJtjN9wYrAsqKQwA+vhiXNQ2XQnnSkLNnRsYzdLLeg
jL07/41viAwWw+oRpiux9jBUBVyaP827cajf7S3OIZ/avB/zcV0t7Sa2N+OwLn/I
5g4g9K4x2T4HQNZjgaNXpFPWpMzEJLR000oQYptT9KnA+1NOCvWu9DJHL+SPV11M
QgyzTkicCjWuq2GlI/V7/El5TJtoMebquX0bkFvuTpKAWyAdz7T/QkIOLuFST6MV
gj54E7h18RB07+dYLRfBXfS2TGHItsMc+IZ4nttvBKNLNVbj+2ScD0TQ7ccwQEzS
UyAeiHTm9I2GH4JmR6l4uYPhqqHS0gH5Zvxx8yEsm/ZIhDGlZAt8HsypX891zor1
kRAHqyBbkqSmgNyKlLtu5CDD3pew0UBK3LgKNhqFViWFR56xvvVsz/AESck6n/li
PUP8mFQjjnvU5F6O7Dk9bCkUgUUCjkoV/LKPiLXcGTMS9SZeTD+xxUJxrnwos39h
6s7PUQQC7IKPz71ZUIbX97EpciKSW8mtOk43XsUNh+PSex0AEQEAAYkCHwQYAQIA
CQUCWNJdMgIbDAAKCRAVEJpBOi5F4vdGEACLMixOIihrADwUDMcLbqGSfURQKBzO
GFsZj3T+yoRzGQlIjjBDqmMMj5dQH2YdtY+UEPbU5ELyLebNEMWwWkZER0WknpIj
4BC3LXQhSpagllGqTute/AczYe+fejXvpunlEgftN2Bypw+kDWGAvHjHSNULOA2W
4kOa44Nc0S36CKXdvfLGb0DllfZIJmGtEOsV52ILEGKCFtYnYlaAr/hybmmTy1Ia
MCJGR6KtE1Ag8bC2dRUScRmV4DAMZ6+cI03YKxufEVR9891aKEXltJbRMsCSEvVT
BONiwoeXsgCUrJvTYMtBW+EbkisvVjo7Q3zG1/K5mTKS1TR0Raz3Dp1UZ3Mk8qrx
frYlm6xFHHcBxIkh1YyzB9um1SAPJqKI0R0KS8WuBIsooBslOQM1J8PNADQfOslU
fbKFpPmD2JR/qME68/0x3HUKy3ti5EqpCxOremff+UXygE/rZHlAV0vAO460uOxg
9wiTT7gDUSS22Bf+y+09qMbBvhJmeh/fD/3WqVVh1qVicD2vtKAnhCfzWVqSyGnD
DV/PS1MHv6V8MOixoaAQVtZKeyopl4F1n43stozuF/SPEil3EjqwKukxLS4gRdKq
pGvvjau+IEkwzJuVLA4N2AncB4X9wEFXJ9bFNLum83RFkRXoqzj7AU9t3zRcBqfd
O1UsB7/WBT7kMw==
=p/S3
-----END PGP PUBLIC KEY BLOCK-----

1
depot/rite/download Normal file
View File

@@ -0,0 +1 @@
https://s3.eu-central-1.amazonaws.com/dev.depot.gapfruit.com

29
depot/rite/pubkey Normal file
View File

@@ -0,0 +1,29 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFp01OkBEADmU6vR+hQsfLSZW1aQacmd6PBt9vlPev2hqRfMhntgpWEYyGW8
fz1+XPWJCBbMJC7Tq8feIJa1KAKkvLJMbnf+UTl7dbxeqwVOhFYi2hS7XbbHdUNH
00PDT+tQSLQkRbfD7qQYvOiGcpu0x15KA53BJO8lJK+oxUVfThNsJK9STmOh0+lV
ITtBkPBGEcQgQ9usLZRr2GSThYbfWfLd61BFWw4dJ0GVFk/jnq454laXKyoP7WvE
T/WDCyHnnbz6vdWRrrHwLPBd+yi4uYSPorPcWeCm4eTEQABifx+jUOQSuFFozRUK
8iQD4saquseWYyDHpH4LzIlIJtfZe1ukKMNnEhXTdQI2Fu4iyq63RiCP7WAiXMna
JbqZ4QFMXUdhLrldDpYM9CdKMiI3eT9RT7C0DBv1uqfr7yZD7KG7uNVbHVZjn3Pb
xjBmxccSFgZWwAJj9z4Rh6+KU/zpjP3FVQOznZptl1pg+l8CieUYF/RVTKzzYamN
mrCqBeSVWyGqJlMOjPUv5/5RIAKsKn5zgoxPgGkiYn/2uO/YtiAajjrzVv4SsUly
k6+IZhe58BM8KQFNBwlaSkRtbvL6+Q95G8Aqy5J/GEaiDPMJ4+bEa5bz4m86pRNM
L0j6JAxWGNyPWM6bKRNRykFE5C2ruX60YlbjnL3EMCkM2q7sAAPW9K3iRwARAQAB
tDRSb21hbiBJdGVuIChkZXBvdCBzaWduaW5nKSA8cm9tYW4uaXRlbkBnYXBmcnVp
dC5jb20+iQJUBBMBCAA+FiEEWyrhpcjTKVapBRt/ldYTDrk++fsFAlp01OkCGwMF
CQHhM4AFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQldYTDrk++fvkWg//VT9U
pCPqYt5y/41jG0L4NkOXY144oMn0hZ3hWQMQOmiuvxp9nROxcI1tIZ3bjHBPWOv8
hPXQ13haO0ZiPv7f9AfejspCNvoJYIRi1On3+RIZ2qjtS8s9sSwNX1aU1ZFUX6sE
SYGDqDItYtJExvh3pTxFKbQ4l3ypYX3NKN2YcMYV8uIFqghTwX1ACHRl30CEgLSw
g9JhKbu8sEMoPwv09v5rq9Ut1lY6mZ3Xv9Yjb4qKKPoSDuvaB2AsrgJJkFRWJs/h
K7PprxdoxrwQ0LiH4YahIItXgxgizWI+opP4ARS8WiiwRMgZAgC+nHvyo7dirGrS
tfzdC9QkqHOytSsgxLzvn4xqRXQwFU/7CABCaf28WCiz4ROsksaSpPvskmkbarqT
rjevqi8fte7HIOxyhnkW6prGNwpLFHWmLVa4cULXiCuaY0viOEhF03d753aYCqos
2oEEYOs25XyztLGkStea7KtCGTUnMTqSj5Hr9mZs354Joy+kU/pFlf2LgMucRE80
WyWQOPNkQ+RwodjRjt20qvMNks1LAmw5Kh30VK3ld/mA35GcwGWEXJDgvPcUvlEq
g1bEuio/YbNfMAy2FQY6aixtMpE6Ke8+jDW4rzEKHXln5FzB4FQTKpm6OxwTFXSc
+RL16LtxpvCXEpgz2e+D5+5pKg/yD4AdjUw/IWM=
=mScq
-----END PGP PUBLIC KEY BLOCK-----

1
depot/skalk/download Normal file
View File

@@ -0,0 +1 @@
https://depot.genode.org

31
depot/skalk/pubkey Normal file
View File

@@ -0,0 +1,31 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFpT5C4BCADHk4DtY2IQI6KlE+2td4wXKw0dILOobGExRffOgdB5d0WWKQgW
gFw+UaywFxgJT0p2b7XoVsXE0bOz4tQRMdMxtYhL0qAhyj9+DsqqCBp0EcBD3XEz
spm0DdNCEVfUbIQUstbSNt1kDGIlqPvZmoRj5YwDECW6ULG8jTWhaAz9SybJCE86
jLPzZHjKtVhCVO1X0ogSxvvYGemUpqVCLfKcIb1TucieKKCrnjiHwp0XZ41DWqSb
kBwWW2YQMEsw8JNGNTfCCUFf6+1l4mMixtv2sEqFiH1wQJ0c4gSa4iSYZ+eNmzJ0
B13K8kONOctSg3NYZz/dC1aUzLOTkgJHqEPHABEBAAG0KVN0ZWZhbiBLYWxrb3dz
a2kgPHNrYWxrQGRlcG90Lmdlbm9kZS5vcmc+iQFUBBMBCAA+AhsDBQsJCAcCBhUI
CQoLAgQWAgMBAh4BAheAFiEEI2X1/oP+p+Ls2L28qrC4CLnp/P8FAl4XHPUFCQ0p
OkcACgkQqrC4CLnp/P8bAgf/ToUKzXMGdRXpB+xIBbOxuu8xVdLRj+5cm7cjZRiy
N0ulrzAlaZqrfqb5rTujPDjakmVSBVRIi8zWlzU7y67fevTFdi/Q9xeLgbqP3cWU
UgUJs03cdacFIamSIO//I9gaImZ2kpUcA6Nj+N+jPepRgUBzljsJG8678ndicA0e
Yio4uAvZY9JmsWGn48rmkqshPf9lag4GUnXn+R/AFKCts55kOiPekux3pJBhmrLJ
TdLgdAzlzGQfHxQbz3oVK4yE19ReAd6rnpW06oK4KfiWrgCmaEk1quirDNfIMDfr
nwe6571TY5is0f9zJjJgP8ogLUMI3n54OvwMezUMz+bLbbkBDQRaU+QuAQgAuame
2VDCgNmiwu+QmWyNN4jzbE7+VNmDr37HO9lZRIROC4eACPOGfUL03jLGvUn7rrxQ
JK+Pit6gXXCoIWDhCMNRSZKho416KJZWxF2jxKBKGQ7DtWaTR3YOzSf0ka9DZSrp
wG22xS0Uf1U/0ZBIf24LbyUDFLc8zt4eey2D9AHm+9vCf7wnf8TV6SNIXRz3wj7d
VqoZLXRTT7twBSaNahLhNtg7fhS8Nu6/THuwXpNKPAvAsgJRTGk7kmrKj5P7rOZA
rNHC1pvK1EWJJi2onHOmCzBccKRp9SeQlj+ddqG6seZhEnRYG6l7uhkyNZoyvKxO
Fguc5g8Xf37VyuRMfwARAQABiQE8BBgBCAAmAhsMFiEEI2X1/oP+p+Ls2L28qrC4
CLnp/P8FAl4XHW4FCQ0pOsAACgkQqrC4CLnp/P/xGggAhMz6NH1dYiFtc9+3vkAW
bZ10MDvxdgyU+G1a0BVYVo2ZXkhJlb2yg5MEeL1MZ6cUtM7MR1OL0U1jayfdcTfr
kkUi2a35BdvKRpxc3hcc4i2CdDxdx+IGrBa75P+vIKFj8WIvwABgRJNVzY1Oq6Lq
zKPUpVPug80Hch++Kv6l1DEpcoXlGaI8Z1dWfAjYQ7HJF/YJNHloKwxa1mXo/l/S
qQSFHB23IN682ANm8iEUphuvJVbOw4mubpCEpmJvIhEBeesgXfB503nniOsshq+9
1bNZ3CFv/ylnj5sy5VzU0lfW/TrHiW4OOOSbX8mCSvcqN2mhjcu6r4olV0fWPrrV
Lg==
=H+8g
-----END PGP PUBLIC KEY BLOCK-----

1
depot/ssumpf/download Normal file
View File

@@ -0,0 +1 @@
https://depot.genode.org

52
depot/ssumpf/pubkey Normal file
View File

@@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFxvvIkBEACdb88mQFNBM7IG6i52BgpBqfkn4HNrlb5xOBgV90btReZWUfgs
2Fas7kg69yyYuuPkdsWHG5d06tj21WVuuB9r2I0aFvNOIFOc0uSDUCl+YZGiwYjB
UvRg+oKFmWO2f62ttpsrAKjCKAIuQBJBnPsDXtvcRzquV8C/bJTMOTLQ1NfgS9Ay
wSOdvooG8/gfuC0+ZgbdPgpDcDMQcS2o6Q0aAa3dbTksWKtrnqzE/m7wA4CgZWTd
6LzD8hGayVjLcTUzsqBRqixPSACi4CbOnohWIuXPU6FZWD2YgOKfRf3w3OvX+o/k
9SuOv8fR72kQoRrDhz6D3Fq5koST1977oEYc6Ns/yCdzV5xzCYBQ6D30LrkyGj6y
4anEkaljeCqGXf1S/Dg+1lQ7lzbII/BHJIAn18303XBeg29mLSXPLpNtrpb7UFMX
cjNlN4nG2N7Oa2N73lD+FK56mVwQfb5Xoj5kZCPMLvxicfRHmf1UAVE47Y0p0eE3
B2SqqGflcSCZbpGK/o21jn16Vme2vJqIXbs+mGdYTBHn/9O312XWs8apNqWW92u3
5pVcxc3JK1fLpLUZo/ohUneM2V8rXPdVCg7h5c84dHUrPXfOQH8e9s24Inq5l9vx
zYcf1QUzeFQspO3ECKvuNmKyQTAWmrcD5vSx7Epa3wynsXOx6bttR2/OyQARAQAB
tDREZXBvdCBTdW1wZiAoZGVwb3QgcGFja2FnZXMpIDxkZXBvdEBnZW5vZGUtbGFi
cy5jb20+iQJOBBMBCAA4FiEE0Tow76OCSsNBYjoWmSWROw/a3bUFAlxvvIkCGwMF
CwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQmSWROw/a3bWmcxAAiKJRk+Sp4wmP
PVCztw0h4bwu6/AHWM34qgWLFIf7pX+uUp7NZ8vnMEft5+XXLJdCnIdCeMCgSfo/
5FeD2uNHrLLI33PMCixAidg0sZ0ENpopY48SHdlADCMUH0c7/kFWdX63UznyhAIe
KsUyglY9j6oCNSEEna3lUsFGQ2Z7Cl4b3OWSkBAMyBe7NUs3pnyy2XdCP5uUREuB
PakqS2HuQ6zvdFLU0h2PBq4KT7nzBHPUMnkrw0ulM+4JX29GFk1WzNpJYCZW50vx
kD8bEfzwqyZPpo12M4Ica9su7mMFpVSMeTVhI5vdQ6AxaCRRNojgfVNn1TjCRWUD
91PxKg+CbHiAcEdFRNOH+nVZpqQ/sspSKigS5QrGmRvr2dwP8KFOyjN1hNLp3x1R
SkGqPtThlpqAJo1YEsuy0gfetdSaLPXtkEFuAIynt861C/bBYfB9vaD8dSEbolQj
CI2k6sWv8p9Ym+/2vNvYOgKe6PlVtoXOydRR1i4uWuVsJIFlIc2NGyiUXIZ0AvFp
X2KAMjxGAvcfLN6MTzCwSSN5Zk0oOV3NRqbdqOWRDVhCZIpGpjov/E9LKjh4X4xf
ybdrU4vRgiTRk4WriY0tiWOqgJrOo+wc+1VgJl6YaP4fY7eocGS7NvZVnWhq2JNY
s8oiNYbdd72NVQYdTAJzDhpnjJ4USSC5Ag0EXG+8iQEQAMVEBe9AOUrsbqn6dvhS
vgs/TsTx1R7hWA/RgP95nDZDnzQg+QVCs2rqp+pVgqNgaz9eJhlT7NCCLE95LCKY
F0lWkSwRRWxMTQzdou0/o132UBSUKD2IAkY1wsH86foUZY7UDENm7Ht23Uvy2dCY
fwNVaNOvqs7FGDWIPmb6IehJqrJgFUEfgJYUAqTr4R/q3MIYceC5Llnm6NqptlSy
BN7Ixyvvij56MsWM9dasm/lHTYJuVWmRjo0gvlvL3eTD/NMSkRqzGw1O6RRbmQxX
yfo19ERZ/ALY6q6/cmOSQh2Fi8vd+NgJ308PthwPAnAsnMz82sKnJAoZ6PNmk5GT
dbQe+lQCwBreozGfLhP8hYlR27N6oydc0t2nf8h/GGQONcX6ySAiRaGt3Ryc59d0
H+S1JTJoUxaFBBsLFJWe1Ci93ueg0370nHtZbjtP/TG/4pS+A/hDiRMCBIMOP1eh
tQRjO6bMgPgxX0i1Lv6aHDf3cJcg0dqjAxfLaTVXYWtnDcqtwARnbcJYqaj6Umgm
l1kOFN4HsqTSKViXeTrP0DGZ+NQn9fo0E0qyyY6/YwKw0/FAa3xQu1oYH+w2inzJ
RbCHfSf4z49O8M3T7e6dskBj/YoKlRhYmazQrhZa3ixt2zwQuMH1L0DAnPY02U1y
BeSEAlLpFI8vCSk5S0LEVOntABEBAAGJAjYEGAEIACAWIQTROjDvo4JKw0FiOhaZ
JZE7D9rdtQUCXG+8iQIbDAAKCRCZJZE7D9rdtcY+D/9xykYgmOd09n6E2BjrV7H+
CtTq4iF/Y+HhbMtmlon1F2nNmWP0i2l0HonTaQRfCXcpXJYjQQX9SDD3Bb8Qkdxr
Bl3pMiixsbWyupQ8UxgEdK3mAfgnOxEilwlHB0vAhB2OX6zZVVH6g37+gJMiwOZf
zISDQH1FI6feheYAqU8AVM3RE33K16fhslQEg5Gi87f8jXyVT01qwPNysOfRBB2u
j8uJoeSKXwbHaTzzzlK1XzpPz3jCvy3QNZPMVi53KvEIzCKtBmrlgYbKKRLH2rMr
C9DxbXihvnNyIyQT6VQCbC9m7qNwrcriE/TahCPy1GP9ZUT4RiF3oy7lDDlk+9Jo
qh+LxbOw/UlEwgu7gtfcjfLK4yyLN1EjkCtGZIk5RHrA0fHYaRmjP82/h9QHIp8J
bBO08eDanPC64PwLMLymW7GoU+afetjn/LzP02TjxuO55ZHn8UaG2Cxx0nlipm0n
FXSect9nr/MiLRb+C3o0M4dZ/51IPl3BuhhBirKPe3li3ieaVQkZYnY4KhML2aj0
A9H479fStEg1AlsISFH2wol7Gw3WP8zk58NqRF7l1h5XtMQ8sOsVVzqyOHwIr482
UaY2AgdLgCCiVrHk4KzXxi9jA4vY5xWyU5SU2kEYJha5qAi8AzBWBvLrD/3YEdy/
4oe2jMt7+puZ672u9RNjYg==
=tNAP
-----END PGP PUBLIC KEY BLOCK-----

1
depot/trimpim/download Normal file
View File

@@ -0,0 +1 @@
https://s3.eu-central-1.amazonaws.com/dev.depot.gapfruit.com

18
depot/trimpim/pubkey Normal file
View File

@@ -0,0 +1,18 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFrq0AsBCACyr5B8jH93vUYAspNeiiNd+e71gwA0ftJQJPMp+Fyr+02gI68W
OZmxndHTDIuZkGsgRBkaeeHVbkXi0Br90oZClZKRkhseXgx5gcsvt6FsuakFwf21
MNLYWNiKZhvntdJl7HYTxQ3rx3wMnYOyFhQRORQdSQS3i53CXoT7l+biJGH2ylnu
AfOL5kOP60wrkP+S8tXZRmvXdhHMEy1sqKZoCuo7mEUmZnA4AL/A8n98jDSXw/bP
xAMRSedqN4VAgTRBtgZTCDOU19Q0aRV/eEUsuZTHEU3qhdbHcrmXB2reiRjL+Ol8
EY1Alb+p0c1SM1CmEKpSlpsjDJvzOSgPJuxtABEBAAG0MXRyaW1waW0tZ2l0bGFi
LXN0YWdpbmcgPHBpcm1pbi5kdXNzQGdhcGZydWl0LmNvbT6JAU4EEwEIADgWIQRm
OLnH3fFNXDibg3lDqO6DjZnR1QUCWurQCwIbAwULCQgHAgYVCgkICwIEFgIDAQIe
AQIXgAAKCRBDqO6DjZnR1YNiB/45yYuznT9vi4o/NX1excQKA253CRXhPZii+gCn
FIQk8dAO80fymdH51+h4WR2i1Vwgqrpfoss8dnZ/2BCseOlYbTco0NFISOKcwrTM
ia/R8M4hOk3pAr/+5g5jKijQtYW1P156nJkINsHfxS15lfJwZkiP+FsSz4eV3Qrd
RmBNrlZnUgV87O0my1gDoYwtP95D8qTErB28wQeBXSqoLxu1AJl5KqrFi4nAEgmj
ZYk3abmyYV4KNQGzp3ju0BHdcW8dC/arvAfFJQPc24dH7STHC5ZvF6lQS9gDjDpS
dgtpVymFUkxm9E7z34atXfZgtv3eSy5t8sJv8F0+j+qxiNWd
=Wf/A
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -1,789 +0,0 @@
====================================
Design of the Genode OS Architecture
====================================
Norman Feske and Christian Helmuth
Abstract
########
In the software world, high complexity of a problem solution comes along with a
high risk for bugs and vulnerabilities.
This correlation is particularly perturbing for todays commodity operating
systems with their tremendous complexity.
The numerous approaches to increase the user's confidence in the correct
functioning of software comprise exhaustive tests, code auditing, static code
analysis, and formal verification.
Such quality-assurance measures are either rather shallow or they scale badly
with increasing complexity.
The operating-system design presented in this document focuses on the root of the
problem by providing means to minimize the underlying system complexity for
each security-sensitive application individually.
On the other hand, we want to enable multiple applications to execute on the
system at the same time whereas each application may have different functional
requirements from the operating system.
Todays operating systems provide a functional superset of the requirements of
all applications and thus, violate the principle of minimalism for each single
application.
We resolve the conflict between the principle of minimalism and the versatility
of the operating system by decomposing the operating system into small
components and by providing a way to execute those components isolated and
independent from each other.
Components can be device drivers, protocol stacks such as file systems and
network stacks, native applications, and containers for executing legacy
software.
Each application depends only on the functionality of a bounded set of
components that we call _application-specific_trusted_computing_base_(TCB)_.
If the TCBs of two applications are executed completely _isolated_ and
_independent_ from each other, we consider both TCBs as minimal.
In practice however, we want to share physical resources between multiple applications
without sacrificing their independence.
Therefore, the operating-system design has to enable the assignment of physical
resources to each application and its TCB to maintain independence from other
applications.
Furthermore, rather than living in complete isolation, components require to
communicate with each other to cooperate.
The operating-system design must enable components to create other components
and get them to know each other while maintaining isolation from uninvolved
parts of the system.
First, we narrow our goals and pose our mayor challenges in Section [Goals and Challenges].
Section [Interfaces and Mechanisms] introduces our fundamental concepts and
protocols that apply to each component in the system.
In Section [Core - the root of the process tree], we present the one component
that is mandatory part of each TCB, enables the bootstrapping of the system,
and provides abstractions for the lowest-level resources.
We exercise the composition of the presented mechanisms by the means of process
creation in Section [Process creation].
;Section [Framework infrastructure]
Goals and Challenges
####################
The Genode architecture is designed to accommodate the following types
of components in a secure manner concurrently on one machine:
:Device drivers:
Device drivers translate the facilities of raw physical devices to
device-class-specific interfaces to be used by other components.
They contain no security policies and provide their services
to only one client component per device.
:Services that multiplex resources:
To make one physical resource (e.g., a device) usable by multiple
components at the same time, the physical resource must be translated
to multiple virtual resources. For example, a
frame buffer provided by a device driver can only be used by one
client at the same time. A window system multiplexes this physical
resource to make it available to multiple clients. Other examples
are an audio mixer or a virtual network hub.
In contrast to a device driver, a _resource multiplexer_ deals with multiple
clients and therefore, plays a crucial role for maintaining the independence
and isolation of its clients from each other.
:Protocol stacks:
Protocol stacks translate low-level protocols to a higher and more applicable
level.
For example, a file system translates a block-device protocol to a file
abstraction, a TCP/IP stack translates network packets to a socket
abstraction, or a widget set maps high-level GUI elements to pixels.
Compared to resource multiplexers, protocol stacks are typically an
order of magnitude more complex.
Protocol stacks may also act as resource multiplexers. In this case however,
high complexity puts the independence and isolation of multiple
clients at a high risk.
Therefore, our design should enable the instantiation of protocol stacks per
application.
For example, instead of letting a security-sensitive application share one
TCP/IP stack with multiple other (untrusted) applications, it could use a
dedicated instance of a TCP/IP stack to increase its independence and
isolation from the other applications.
:Containers for executing legacy software:
A _legacy container_ provides an environment for the execution of existing
legacy software. This can be achieved by the means of a virtual machine
(e.g., a Java VM, a virtual PC), a compatible programming API (e.g., POSIX,
Qt), a language environment (e.g., LISP), or a script interpreter.
In the majority of cases, we regard legacy software as an untrusted black box.
One particular example for legacy software are untrusted legacy device drivers.
In this case, the container has to protect the physical hardware from
potentially malicious device accesses by the untrusted driver.
Legacy software may be extremely complex and resource demanding, for example
the Firefox web browser executed on top of the X window system and the Linux
kernel inside a virtualized PC.
In this case, the legacy container may locally implement sophisticated
resource-management techniques such as virtual memory.
:Small custom security-sensitive applications:
Alongside legacy software, small custom applications implement crucial
security-sensitive functionality.
In contrast to legacy software, which we mostly regard as untrusted anyway,
a low TCB complexity for custom applications is of extreme importance.
Given the special liability of such an application, it is very carefully
designed to have low complexity and require as little infrastructure as
possible.
A typical example is a cryptographic component that protects credentials
of the user.
Such an application does not require swapping (virtual memory), a POSIX API,
or a complete C library.
Instead, the main objectives of such an application are to avoid as much as
possible code from being included in its TCB and to keep its requirements at
a minimum.
Our design must be able to create and destroy subsystems that are composed of
multiple such components.
The _isolation_ requirement as stated in the introduction raises the
question of how to organize the locality of name spaces and how to distribute
access from components to other components within the system.
The _independence_ requirement demands the assignment of physical resources
to components such that different applications do not interfere.
Instead of managing access control and physical resources from a central
place, we desire a distributed way for applying policy for trading and revocating
resources and for delegating rights.
Interfaces and Mechanisms
#########################
The system is structured as a tree.
The nodes of the tree are processes.
A node, for which sub-nodes exist, is called the _parent_ of these sub-nodes
(_children_).
The parent creates children out of its own resources and defines
their execution environment.
Each process can announce services to its parent.
The parent, in turn, can mediate such a service to its other children.
When a child is created, its parent provides the initial contact to the
outer world via the following interface:
! void exit(int exit_value);
!
! Session_capability session(String service_name,
! String args);
!
! void close(Session_capability session_cap);
!
! int announce(String service_name,
! Root_capability service_root_cap);
!
! int transfer_quota(Session_capability to_session_cap,
! String amount);
:'exit': is called by a child to request its own termination.
:'session': is called by a child to request a connection to the specified
service as known by its parent whereas 'service_name' is the name
of the desired service _interface_.
The way of resolving or even denying a 'session' request depends on
the policy of the parent.
The 'args' parameter contains construction arguments for the session
to be created.
In particular, 'args' contains a specification of resources that the
process is willing to donate to the server during the session lifetime.
:'close': is called by a child to inform its parent that the specified
session is no longer needed.
The parent should close the session and hand back donated
resources to the child.
:'announce': is called by a child to register a locally implemented
service at its parent. Hence, this child is a server.
:'transfer_quota': enables a child to extend its resource donation
to the server that provides the specified session.
We provide a detailed description and motivation for the different functions
in Sections [Servers] and [Quota].
Servers
=======
Each process may implement services and announce them via the 'announce'
function of the parent interface.
When announcing a service, the server specifies a _root_ capability for
the implemented service.
The interface of the root capability enables the parent to create, configure,
and close sessions of the service:
! Session_capability session(String args);
!
! int transfer_quota(Session_capability to_session_cap,
! String amount);
!
! void close(Session_capability session_cap);
[image announce 60%]
Announcement of a service by a child (server).
Colored circles at the edge of a component represent remotely accessible
objects. Small circles inside a component represent a reference (capability)
to a remote object. A cross-component reference to a remote object is
illustrated by a dashed arrow. An opaque arrow symbolizes a RPC call/return.
Figure [announce] illustrates an announcement of a service.
Initially, each child has a capability to its parent.
After Child1 announces its service "Service", its parent knows the
root capability of this service under the local name 'srv1_r' and stores
the root capability with the announced service name in its _root_list_.
The root capability is intended to be used and kept by the parent only.
[image request 60%]
Service request by a client.
When a parent calls the 'session' function of the root interface of a server
child, the server creates a new client session and returns the corresponding
'client_session' capability.
This session capability provides the actual service-specific interface.
The parent can use it directly or it may pass it to other processes, in
particular to another child that requested the session.
In Figure [request], Child2 initiates the creation of a "Service" session
by a 'session' call at its parent capability (1).
The parent uses its root list to look up the root capability that matches the
service name "Service" (2) and calls the 'session' function at the
server (3).
Child1 being the server creates a new session ('session1') and returns the
session capability as result of the 'session' call (4).
The parent now knows the new session under the local name 'srv1_s1' (5) and
passes the session capability as return value of Child2's initial 'session'
call (6).
The parent maintains a _session_list_, which stores the interrelation between
children and their created sessions.
Now, Child2 has a direct communication channel to 'session1' provided by
the server (Child1) (7).
The 'close' function of the root interface instructs the server to
destroy the specified session and to release all session-specific resources.
; Mittels 'set_quota' kann der Parent einen Dienst anweisen, die Ressourcennutzung
; für eine angegebene 'client_session' zu begrenzen. Eine nähere Beschreibung des
; Ressourcen-Accountings erfolgt in Kapitel [Quota].
[image twolevels 80%]
Announcement and request of a service in a subsystem.
For simplicity, parent capabilities are not displayed.
Even though the prior examples involved only one parent,
the announce-request mechanism can be used recursively for tree
structures of any depth and thus allow for partitioning
the system into subsystems that can cooperate with each other whereas
parents are always in complete control over the communication
and resource usage of their children (and their subsystems).
Figure [twolevels] depicts a nested subsystem on the left.
Child1 announces its service named "Service" at its parent that, in turn,
announces a service named "Service" at the Grandparent.
The service names do not need to be identical.
Their meaning spans to their immediate parent only and there
may be a name remapping on each hierarchy level.
Each parent can decide itself whether to further announce
services of their children to the outer world or not.
The parent can announce Child1's service to the grandparent
by creating a new root capability to a local service that forwards
session-creation and closing requests to Child1.
Both Parent and Grandparent keep their local root lists.
In a second step, Parent2 initiates the creation of a session to
the service by issuing a 'session' request at the Grandparent (1).
Grandparent uses its root list to look up the service-providing child (from
Grandparent's local view) Parent1 (2).
Parent1 in turn, implements the service not by itself but delegates
the 'session' request to Child1 by calling the 'session' function
of the actual "Service" root interface (3).
The session capability, created by Child1 (4), can now be passed to Parent2
as return value of nested 'session' calls (5, 6).
Each involved node keeps the local knowledge about the created session
such that later, the session can be closed in the same nested fashion.
Quota
=====
Each process that provides services to other processes consumes resources on
behalf of it clients.
Such a server requires memory to maintain session-specific state, processing
time to perform the actual service function, and eventually further system
resources (e.g., bus bandwidth) dependent on client requests.
To avoid denial-of-service problems, a server must not allocate such
resources from its own budget but let the client pay.
Therefore, a mechanism for donating resource quotas from the client to the
server is required.
Both client and server may be arbitrary nodes in the process tree.
In the following, we examine the trading of resource quotas within
the recursive system structure using memory as an example.
When creating a child, the parent assigns a part of its own memory quota
to the new child.
During the lifetime of the child, the parent can further transfer
quota back and forth between the child's and its own account.
Because the parent creates its children out of its own resources,
it has a natural interest to correctly manage child quotas.
When a child requests a session to a service, it can bind a part
of its quota to the new session by specifying a resource donation
as an argument.
When receiving a session request, the parent has to distinct
three different cases, dependent on where the corresponding server
resides:
:Parent provides service:
If the parent provides the requested services by itself,
it transfers the donated amount of memory quota from the
requesting child's account to its own account to compensate
the session-specific memory allocation on behalf of its own
child.
:Server is another child:
If there exists a matching entry in the parent's root list,
the requested service is provided by another child (or a
node within the child subsystem). In this case, the parent
transfers the donated memory quota from the requesting child
to the service-providing child.
:Delegation to grandparent:
The parent may decide to delegate the session request to
its own parent because the requested service is provided by
a lower node of the process tree.
Thus, the parent will request a session on behalf of its child.
The grandparent neither knows nor cares about the actual
origin of the request and will simply decrease the memory
quota of the parent.
For this reason, the parent transfers the donated memory
quota from the requesting child to its own account before
calling the grandparent.
This algorithm works recursively.
Once, the server receives the session request, it checks if
the donated memory quota suffices for storing the session-specific
data and, on success, creates the session.
If the initial quota donation turns out to be too scarce during
the lifetime of a session, the client may make further donations
via the 'transfer_quota' function of the parent interface that
works analogously.
If a child requests to close a session, the parent must distinguish
the three cases as above.
Once, the server receives the session-close request from its parent,
it is responsible to release all resources that were used for this session.
After the server releases the session-specific resources, the
server's quota can be decreased to the prior state.
However, an ill-behaving server may fail to release those resources by malice
or caused by a bug.
If the misbehaving service was provided by the parent himself,
it has the full authority to not hand back session-quota to
its child.
If the misbehaving service was provided by the grandparent,
the parent (and its whole subsystem) has to subordinate.
If, however, the service was provided by another child and the
child refuses to release resources, decreasing its quota after
closing the session will fail.
It is up to the policy of the parent to handle such a failure either by
punishing it (e.g., killing the misbehaving server) or by granting more of its
own quota.
Generally, misbehavior is against the server's own interests and
each server would obey the parent's 'close' request to avoid intervention.
Successive policy management
============================
For supporting a high variety of security policies for access control, we
require a way to bind properties and restrictions to sessions. For example,
a file service may want to restrict the access to files according to an
access-control policy that is specific for each client session.
On session creation, the 'session' call takes an 'args' argument that can be
used for that purpose. It is a list of tag-value pairs describing the session
properties. By convention, the list is ordered by attribute priority starting
with the most important property.
The server uses these 'args' as construction arguments for the new
session and enforces the security policy as expressed by 'args' accordingly.
Whereas the client defines its desired session-construction arguments, each
node that is incorporated in the session creation can alter these arguments in
any way and may add further properties.
This effectively enables each parent to impose any desired restrictions to
sessions created by its children.
This concept works recursively and enables each node in the process hierarchy
to control exactly the properties that it knows and cares about. As a side
note, the specification of resource donations as described in the Section
[Quota] is performed with the same mechanism. A resource donation is a property
of a session.
[image incremental_restrictions]
Successive application of policies at the creation time of a new session.
Figure [incremental_restrictions] shows an example scenario. A user
application issues the creation of a new session to the 'GUI' server and
specifies its wish for reading user input and using the string "Terminal" as
window label (1).
The parent of the user application is the user manager that introduces
user identities into the system and wants to ensure that each displayed window
gets tagged with the user and the executed program. Therefore, it overrides the
'label' attribute with more accurate information (2). Note that the modified
argument is now the head of the argument list.
The parent of the user manager, in turn, implements further policies. In the
example, Init's policy prohibits the user-manager subtree from reading
input (for example to disable access to the system beyond official working hours)
by redefining the 'input' attribute and leaving all other attributes unchanged (3).
The actual GUI server observes the final result of the successively changed
session-construction arguments (4) and it is responsible for enforcing the specified
policy for the lifetime of the session.
Once a session has been established, its properties are fixed and cannot be changed.
Core - the root of the process tree
###################################
Core is the first user-level program that takes control when starting up the
system. It has access to the raw physical resources and converts them to
abstractions that enable multiple programs to use these resources.
In particular, core converts the physical address space to higher-level
containers called _dataspaces_.
A dataspace represents a contiguous physical address space region with an
arbitrary size (at page-size granularity).
Multiple processes can make the same dataspace accessible in their
local address spaces.
The system on top of core never deals with physical memory pages but
uses this uniform abstraction to work with memory, memory-mapped I/O
regions, and ROM areas.
*Note:* _Using only contiguous dataspaces may lead to fragmentation of the_
_physical address space. This property is, however, only required by_
_a few rare cases (e.g., DMA transfers). Therefore, later versions of the_
_design will support non-contiguous dataspaces._
Furthermore, core provides all prerequisites to bootstrap the process tree.
These prerequisites comprise services for creating processes and threads,
for allocating memory, for accessing boot-time-present files, and for managing
address-space layouts.
Core is almost free from policy. There are no configuration options.
The only policy of core is the startup of the init process to which core
grants all available resources.
In the following, we explain the session interfaces of core's services in
detail.
RAM - allocator for physical memory
===================================
A RAM session is a quota-bounded allocator of blocks from physical memory.
There are no RAM-specific session-construction arguments.
Immediately after the creation of a RAM session, its quota is zero.
To make the RAM session functional, it must be loaded with quota from
another already existing RAM session, which we call the _reference account_.
The reference account of a RAM session can be defined initially via:
!int ref_account(Ram_session_capability ram_session_cap);
Once the reference account is defined, quota can be transferred back and
forth between the reference account and the new RAM session with:
!int transfer_quota(Ram_session_capability ram_session_cap,
! size_t amount);
Provided, the RAM session has enough quota, a dataspace of a given size
can be allocated with:
!Ram_dataspace_capability alloc(size_t size);
The result value of 'alloc' is a capability to the RAM-dataspace
object implemented in core. This capability can be communicated to other
processes and can be used to make the dataspace's physical-memory region
accessible from these processes.
An allocated dataspace can be released with:
!void free(Ram_dataspace_capability ds_cap);
The 'alloc' and 'free' calls track the used-quota information of the RAM
session accordingly.
Current statistical information about the quota limit and the
used quota can be retrieved by:
!size_t quota();
!size_t used();
Closing a RAM session implicitly destroys all allocated dataspaces.
ROM - boot-time-file access
===========================
A ROM session represents a boot-time-present read-only file. This may be a
module provided by the boot loader or a part of a static ROM image. On session
construction, a file identifier must be specified as a session argument using the
tag 'filename'. The available filenames are not fixed but depend on the actual
deployment. On some platforms, core may provide logical files for special memory
objects such as the GRUB multiboot info structure or a kernel info page. The
ROM session enables the actual read access to the file by exporting the file as
dataspace:
!Rom_dataspace_capability dataspace();
IO_MEM - memory mapped I/O access
=================================
With IO_MEM, core provides a dataspace abstraction for non-memory parts of the
physical address space such as memory-mapped I/O regions or BIOS areas. In
contrast to a memory block that is used for storing information of which the
physical location in memory is of no matter, a non-memory object has a special
semantics attached to its location within the physical address space. Its
location is either fixed (by standard) or can be determined at runtime, for
example by scanning the PCI bus for PCI resources. If the physical location of
such a non-memory object is known, an IO_MEM session can be created by
specifying 'base' and 'size' as session-construction arguments.
The IO_MEM session then provides the specified physical memory area as
dataspace:
!Io_mem_dataspace_capability dataspace();
IO_PORT - access to I/O ports
=============================
For platforms that rely on I/O ports for device access, core's IO_PORT service
enables fine-grained assignment of port ranges to individual processes.
Each IO_PORT session corresponds to the exclusive access right to a
port range as specified with the 'io_port_base' and 'io_port_size'
session-construction arguments. Core creates the new IO_PORT session
only if the specified port range does not overlap with an already existing
session. This ensures that each I/O port is driven by only one
process at a time. The IO_PORT session interface resembles the
physical I/O port access instructions. Reading from an I/O port
can be performed via an 8bit, 16bit, or 32bit access:
!unsigned char inb(unsigned short address);
!unsigned short inw(unsigned short address);
!unsigned inl(unsigned short address);
Vice versa, there exist functions for writing to an I/O port via
an 8bit, 16bit, or 32bit access:
!void outb(unsigned short address, unsigned char value);
!void outw(unsigned short address, unsigned short value);
!void outl(unsigned short address, unsigned value);
The address argument of I/O-port access functions are absolute
port addresses that must be within the port range of the session.
IRQ - handling device interrupts
================================
The IRQ service of core provides processes with an interface to
device interrupts. Each IRQ session corresponds to an attached
interrupt. The physical interrupt number is specified via the
'irq_number' session-construction argument. A physical interrupt
number can be attached to only one session. The IRQ session
interface provides a blocking function to wait for the next
interrupt:
!void wait_for_irq();
While the 'wait_for_irq' function blocks, core unmasks the
interrupt corresponding to the IRQ session.
On function return, the corresponding interrupt line is masked
and acknowledged.
;*Note:* _The interface of the IRQ service is going to be changed_
;_with the planed addition of signals to the framework._
RM - managing address space layouts
===================================
RM is a _region manager_ service that allows for constructing address space
layouts (_region map_) from dataspaces and that provides support for assigning
region maps to processes by paging the process' threads.
Each RM session corresponds to one region map. After creating a new RM session,
dataspaces can be attached to the region map via:
!void *attach(Dataspace_capability ds_cap,
! size_t size=0, off_t offset=0,
! bool use_local_addr = false,
! addr_t local_addr = 0);
The 'attach' function inserts the specified dataspace into the region map and
returns the actually used start position within the region map.
By using the default arguments, the region manager chooses an appropriate
position that is large enough to hold the whole dataspace.
Alternatively, the caller of 'attach' can attach any sub-range of the dataspace
at a specified target position to the region map by enabling 'use_local_addr'
and specifying an argument for 'local_addr'. Note that the interface allows for the
same dataspace to be attached not only to multiple region maps but also multiple
times to the same region map.
As the counterpart to 'attach', 'detach' removes dataspaces from the region map:
!void detach(void *local_addr);
The region manager determines the dataspace at the specified 'local_addr' (not
necessarily the start address) and removes the whole dataspace from the region
map.
To enable the use of a RM session by a process, we must associate it with
each thread running in the process. The function
!Thread_capability add_client(Thread_capability thread);
returns a thread capability for a _pager_ that handles the page faults of the
specified 'thread' according to the region map.
With subsequent page faults caused by the thread, the address-space layout
described by the region map becomes valid for the process that is executing the
thread.
CPU - allocator for processing time
===================================
A CPU session is an allocator for processing time that allows for the creation,
the control, and the destruction of threads of execution.
There are no session arguments used.
The functionality of starting and killing threads is provided by two functions:
!Thread_capability create_thread(const char* name);
!void kill_thread(Thread_capability thread_cap);
The 'create_thread' function takes a symbolic thread name (that is only used
for debugging purposes) and returns a capability to the new thread.
Furthermore, the CPU session provides the following functions for operating
on threads:
!int set_pager(Thread_capability thread_cap,
! Thread_capability pager_cap);
!int cancel_blocking(Thread_capability thread_cap);
!int start(Thread_capability thread_cap,
! addr_t ip, addr_t sp);
!int state(Thread_capability thread,
! Thread_state *out_state);
The 'set_pager' function registers the thread's pager whereas 'pager_cap'
(obtained by calling 'add_client' at a RM session) refers to the RM session to
be used as the address-space layout.
For starting the actual execution of the thread, its initial instruction
pointer ('ip') and stack pointer ('sp') must be specified for the 'start'
operation.
In turn, the 'state' function provides the current thread state including
the current instruction pointer and stack pointer.
The 'cancel_blocking' function causes the specified thread to cancel a
currently executed blocking operation such as waiting for an incoming message
or acquiring a lock. This function is used by the framework for gracefully
destructing threads.
*Note:* _Future versions of the CPU service will provide means to further control the_
_thread during execution (e.g., pause, execution of only one instruction),_
_acquiring more comprehensive thread state (current registers), and configuring_
_scheduling parameters._
PD - providing protection domains
=================================
A PD session corresponds to a memory protection domain. Together
with one or more threads and an address-space layout (RM session), it forms a
process.
There are no session arguments. After session creation, the PD contains no
threads. Once a new thread has been created from a CPU session, it can be assigned
to the PD by calling:
! int bind_thread(Thread_capability thread);
CAP - allocator for capabilities
================================
A capability is a system-wide unique object identity that typically refers to a
remote object implemented by a service. For each object to be made remotely
accessible, the service creates a new capability associated with the local
object. CAP is a service to allocate and free capabilities:
! Capability alloc(Capability ep_cap);
! void free(Capability cap);
The 'alloc' function takes an entrypoint capability as argument, which is the
communication receiver for invocations of the new capability's RPC interface.
LOG - debug output facility
===========================
The LOG service is used by the lowest-level system components such as the init
process for printing debug output.
Each LOG session takes a 'label' string as session argument,
which is used to prefix the debug output of this session.
This enables developers to distinguish multiple producers of debug output.
The function
! size_t write(const char *string);
outputs the specified 'string' to the debug-output backend of core.
Process creation
################
The previous section presented the services implemented by core.
In this section, we show how to combine these basic mechanisms to create and
execute a process.
Process creation serves as a prime example for our general approach to first
provide very simple functional primitives and then solve complex problems using
a composition of these primitives.
We use slightly simplified pseudo code to illustrate this procedure.
The 'env()' object refers to the environment of the creating process, which
contains its RM session and RAM session.
:Obtaining the executable ELF binary:
If the binary is available as ROM object, we can access its data by creating
a ROM session with the binary's name as argument and attaching its dataspace
to our local address space:
!Rom_session_capability file_cap;
!file_cap = session("ROM", "filename=init");
!Rom_dataspace_capability ds_cap;
!ds_cap = Rom_session_client(file_cap).dataspace();
!
!void *elf_addr = env()->rm_session()->attach(ds_cap);
The variable 'elf_addr' now points to the start of the binary data.
:ELF binary decoding and creation of the new region map:
We create a new region map using the RM service:
!Rm_session_capability rm_cap;
!rm_cap = session("RM");
!Rm_session_client rsc(rm_cap);
Initially, this region map is empty.
The ELF binary contains CODE, DATA, and BSS sections.
For each section, we add a dataspace to the region map.
For read-only CODE and DATA sections, we attach the corresponding ranges of
the original ELF dataspace ('ds_cap'):
!rsc.attach(ds_cap, size, offset, true, addr);
The 'size' and 'offset' arguments specify the location of the section within
the ELF image. The 'addr' argument defines the desired start position at the
region map.
For each BSS and DATA section, we allocate a read-and-writeable RAM dataspace
!Ram_dataspace_capability rw_cap;
!rw_cap = env()->ram_session()->alloc(section_size);
and assign its initial content (zero for BSS sections, copy of ELF DATA sections).
!void *sec_addr = env()->rm_session()->attach(rw_cap);
! ... /* write to buffer at sec_addr */
!env()->rm_session()->detach(sec_addr);
After iterating through all ELF sections, the region map of the new process
is completely initialized.
:Creating the first thread:
For creating the main thread of the new process, we create a
new CPU session from which we allocate the thread:
!CPU_session_capability cpu_cap = session("CPU");
!Cpu_session_client csc(cpu_cap);
!Thread_capability thread_cap = csc.create_thread();
When the thread starts its execution and fetches its first instruction, it
will immediately trigger a page fault. Therefore, we need to assign a
page-fault handler (pager) to the thread. With resolving subsequent page faults, the
pager will populate the address space in which the thread is executed with
memory mappings according to a region map:
!Thread_capability pager_cap = rsc.add_client(thread_cap);
!csc.set_pager(thread_cap, pager_cap);
:Creating a protection domain:
The new process' protection domain corresponds to a PD session:
!Pd_session_capability pd_cap = session("PD");
!Pd_session_client pdsc(pd_cap);
:Assigning the first thread to the protection domain:
!pdsc.bind_thread(thread_cap);
:Starting the execution:
Now that we defined the relationship of the process' region map, its main
thread, and its address space, we can start the process by specifying the
initial instruction pointer and stack pointer as obtained from the ELF
binary.
!csc.start(thread_cap, ip, sp);
; supplying the parent capability to the new process

View File

@@ -16,26 +16,6 @@ research projects on Genode.
Applications and library infrastructure
#######################################
:Chrome web browser:
The Chrome web browser promises to address the most pressing security
concerns of web application by isolation measures, in particular the
sandboxing of plugins and the confinement of individual web applications. As
we demonstrated with the Genode Live CD 10.11, Genode facilitates a more
natural way to pursue such techniques compared with current commodity
operating systems. Furthermore, the use of Genode as base platform for Chrome
would strengthen the web-browser security by dwarfing its trusted computing
base by two orders of magnitude compared to the use of Linux as base
platform. This would allow Chrome to be considered as a secure interface to
the web for use cases in the high-assurance domain.
:Qemu or Virtual Box on Genode:
Using Genode as hosting platform for virtual machines running in Qemu or
Virtual Box would enable the execution of security-sensitive functions (for
example cryptography) with a minimally-complex trusted computing base
beside running Windows on the same machine.
:VNC server implementing Genode's framebuffer session interface:
With 'Input' and 'Framebuffer', Genode provides two low-level interfaces
@@ -48,23 +28,16 @@ Applications and library infrastructure
the network. One immediate application of this implementation is the remote
testing of graphical Genode applications running on a headless server.
:Tiled window manager:
:Interfacing with the SAFE network:
At Genode Labs, we pursue the goal to shape Genode into an general-purpose
operating system suitable for productive work. The feature set needed to
achieve this goal largely depends on the tools and applications daily used by
the Genode engineers. As one particularly important tool for being highly
productive, we identified a tiled user interface. Currently, all developers
at Genode Labs embrace either the Ion3 window manager or the tiled Terminator
terminal emulator. Hence, we desire to have a similar mode of user
interaction on Genode as well. The goal of this challenge is to identify the
most important usage patters and the implementation of a tiled GUI that
multiplexes the framebuffer into a set of tiled and tabbed virtual
framebuffers.
Related to this work, the low-level 'Framebuffer' and 'Input' interfaces
should be subject to a revision, for example for enabling the flexible change
of framebuffer sizes as needed by a tiled user interface.
The [https://safenetwork.org/ - SAFE network] is an attempt to fix many
shortcomings of the internet - in particular with respect to privacy and
freedom - at an architectural level. It is a peer-to-peer communication
and storage network that does not depend on single point of
failure or control. It is intriguing to explore the opportunity of
integrating support for the SAFE network not merely as an application but
integrated in the operating system, i.e., in the form of Genode components
or a set of Genode VFS plugins.
:Interactive sound switchbox based on Genode's Audio_out session interface:
@@ -80,34 +53,12 @@ Applications and library infrastructure
support for real-time priorities, this base techniques enable the creation of
flexible audio mixer / switchboard applications, which require dedicated
frameworks (e.g., Jack audio) on traditional operating systems. The goal of
this project is to create a show case implementation demonstrating the
this project is to create a showcase implementation demonstrating the
feasibility for creating high-quality audio applications on Genode.
Furthermore, we wish for feedback regarding the current design of our bulk
streaming interface when used for low-latency applications.
:PDF reader for E-Government use:
A facility for reading PDF and E-Book documents is one of the indispensable
features Genode has to provide to be considered for general-purpose
computing. The goal of this work is to identify a suitable open-source PDF
engine and port it as native application to Genode. The challenging part is
to keep the complexity of this application as low as possible in order to
enable the use of this application as a trusted document reader. Further
ideas envision the use of PDF files as medium for sensitive documents
combined with measures for protecting the integrity of the displayed
information. For example, when processing contracts or similar sensitive
documents in E-Government scenarios, the consumer of such documents expects
the correct display of all the information as expressed by the creator of the
document. In the event of a compromised PDF engine or a man-in-the middle
attacker manipulating the PDF file, the consumer of the document requires a
way to identify such security breaches. In this context, running the PDF
engine in a sandboxed Genode subsystem has two incentives. First, the attack
surface for manipulating the PDF engine gets dramatically reduced, and
second, the integrity of the result of the PDF engine can be measured by an
independent trusted component facilitating Genode secure GUI server
(Nitpicker).
:Graphical on-target IPC tracing tool using Qt4:
:Graphical on-target IPC tracing tool using Qt:
Analysing the interaction of components of a multi-server operating system
such as Genode is important to discover bottlenecks of the system and for
@@ -130,214 +81,92 @@ Applications and library infrastructure
communication and control flows between those processes, and to visualize the
interaction of threads with the kernel's scheduler.
Since Qt4 is available natively on Genode, the creation of both offline and
Since Qt is available natively on Genode, the creation of both offline and
on-target analysis tools has become feasible. The first step of this project
is creating an interactive on-target tool, that displays the interaction
of communicating threads as captured on the running system. The tool should
work on a selected kernel that provides a facility for tracing IPC messages.
The underlying light-weight tracing infrastructure is
[https://genode.org/documentation/release-notes/19.08#Tracinghttps://genode.org/documentation/release-notes/19.08#Tracing - already in place].
The Qt-based tracing tools would complement this infrastructure with
an interactive front end.
Application frameworks
######################
:Ports of popular software:
:Running the Meego application stack on Genode using Qt4:
Genode features a ports mechanism to cleanly integrate 3rd-party software.
Thanks to the C runtime, the flexible per-component VFS, the standard
C++ library, and the Noux runtime (for UNIX software), porting software
to Genode is relatively straight forward. The
[http://genode.org/documentation/developer-resources/porting - porting guide]
explains the typical steps. A wish list of software that we'd like to
have available on Genode is available at
[http://usr.sysret.de/jws/genode/porting_wishlist.html].
With Genode 11.02, Qt4 4.7.1 has become available. The most prominent feature
of this version is the new QML language to design GUIs using a declarative
language. This technique is targeted specifically to mobile applications and
other touch-based devices. The goal of this project is to run the Meego
application stack natively on Genode. First, the software components and
Meego-specific Linux customizations must be identified. For each such
component, it must be decided whether to port its code or to reimplement its
interface. The immediate goal of the first step is running one Meego example
application natively on Genode.
:Native Open-Street-Maps (OSM) client:
:Python Qt4 bindings:
With the Python interpreter and the port of the Qt4 framework, the principle
components for Python-based GUIs on Genode are available. However, the glue
between both components is missing. The incentive of this work is supplementing
our Python port with the modules needed for real applications and porting the
Qt4 bindings to Genode. This would bring Genode one step closer to executing
modern Python-based GUI applications (in particular KDE4 applications).
:Evaluation of porting GTK+ to Genode:
With Qt4, we have demonstrated the feasibility to run a highly-complex
application framework via Genode on a wide range of microkernels. That leaves
the question of looking into the other major toolkit in town, namely GTK+ as
used by Firefox and the Gnome desktop.
:Cairographics:
Cairo is a high-quality 2D vector graphics engine used by a large number of
open-source projects, in particular GTK+. Hence the port of Cairo is a
prerequisite for the GTK+ challenge. In addition, it would enable the
use of further libraries such as Poppler.
When using Sculpt OS, we regularly need to spawn a fully fledged web
browser in a virtual machine for using OSM or Google maps. The goal
of this project would be a native component that makes maps functionality
directly available on Genode, alleviating the urge to reach for a SaaS
product. The work would include a review of existing OSM clients regarding
their feature sets and the feasibility of porting them to Genode.
Depending on the outcome of this review, an existing application could
be ported or a new component could be developed, e.g., leveraging Genode's
Qt support.
Device drivers
##############
Application frameworks and runtime environments
###############################################
:Enhancing Gallium3D support:
:OpenJDK:
Genode 10.08 introduced Gallium3D including the GPU driver for Intel GMA
CPUs. With this initial version, we demonstrated that the powerful software
stack for running hardware-accelerated 3D applications can be deployed on
Genode. At the same time, it motivates us to reach out for even more
ambitious goals:
[http://openjdk.java.net/ - OpenJDK] is the reference implementation of the
Java programming language and hosts an enormous ecosystem of application
software.
First, the current approach executes the GPU driver alongside the complete
Gallium3D software stack and the application code in one address space. To
enable the use of multiple hardware-accelerated applications running at the
same time, the GPU driver must run separated from the Gallium3D code as done
on Linux. The preliminary interfaces for this decomposition are already in
place but there are several open questions. Most importantly, the page-fault
handling of buffer objects mapped in the application's address space.
Since
[https://genode.org/documentation/release-notes/19.02#Showcase_of_a_Java-based_network_appliance - version 19.02],
Genode features a port of OpenJDK that allows the use of Java for networking
applications.
Second, we'd like to complement our current Intel GMA GPU driver with
interrupt-based synchronization, namely vblank handling. This requires an
understanding of the Intel GMA interrupt code and the enhancement of our
driver environment.
The next step would be the creation of Genode-specific native classes that
bridge the gap between the Java world and Genode, in particular the glue
code to run graphical applications as clients of Genode's GUI server. Since
OpenJDK has been ported to numerous platforms (such as Haiku), there exists
a comforting number of implementations that can be taken as reference.
Third, we desire the use of further Gallium3D drivers, in particular the
Nouveau and r300 drivers. The basic approach to bring these drivers to Genode
is the same as for Intel GMA but the respective driver environments are yet
to be developed.
:Android's ART VM natively on Genode:
If you are interested in low-level graphics hacking, GPUs, and
high-performance graphics, this project is ideal to get you on track.
:Split USB core from USB device drivers:
Genode's current USB support is based on the Linux USB stack running as a
single process on Genode. This process includes the USB core logic, USB host
controller driver as well as the USB device drivers such as HID or USB
storage. This monolithic USB process is rather inflexible. Hence, we desire a
decomposition of this solution such that the USB host driver and each USB
device driver runs in a separate process.
:IOMMU support on the NOVA Hypervisor:
The NOVA hypervisor is the first open-source microkernel with thorough
support for IOMMUs, which principally enables the use of untrusted device
drivers alongside sensitive software on one machine. Without an IOMMU, each
device driver for a device that operates with DMA, is able to indirectly
access the whole physical memory through programming the device. With IOMMU,
the physical memory addressable by DMA operations can be restrained per
device. The goal of this challenge is to enhance Genode with I/O protection
when running on the NOVA kernel. This would clear the way towards reusing
complex untrusted device drivers running in dedicated device-driver OS
instances.
:I/O Kit:
I/O Kit is the device-driver framework as used by the Darwin operating
system, which forms the basis for Mac OS X. The port of I/O Kit would enable
the easy re-use of the library of I/O-Kit-based device drivers on Genode. As
foundation of this project, we recommend to use the DDE Kit API featured by
Genode.
:Support for multi-touch input devices:
The efforts towards enabling mobile application stacks such as Meego and
Android on Genode must be accompanied by a revision of Genode's 'Input'
session interface to accommodate multi-touch input devices. First, existing
APIs such as multi-touch support in X11, Qt4, and Android should be analysed.
Based on these findings, we expect a proposal for changing Genode's input
interface. The interface extension should be validated by a example driver
implementing the interface as well as an example applications.
System services
###############
:Copy-on-write memory manager:
Genode's managed dataspaces provide a generalized page-table concept,
enabling servers to provide on-demand paged memory objects (dataspaces) to
clients. This concept is showcased by the ISO9660 driver, which provides
on-demand paged ROM dataspaces to its clients. Depending on the access
pattern of the client, the ISO9660 server loads the used parts of the ROM
file from CDROM. Managed dataspaces principally allow for a wide variety of
interesting applications such as the transparent migration of non-local and
local memory in a NUMA system, sparse dataspaces, swapping, and copy-on-write
dataspaces. The goal of this project is a dataspace manager that implements
copy-on-write semantics combined with a merging technique optimizing the
memory footprint at runtime. Pages of two managed dataspaces that share the
same content should be provided via read-only page sharing. If one client
attempts to change the content of a shared page, a new physical copy of the
page get created. Vice versa, if the content of different pages converge, the
sharing should be re-established. This work is a follow-up of the diploma
thesis of Sebastian Sumpf
[http://os.inf.tu-dresden.de/papers_ps/sumpf-diplom.pdf - Cloning L4Linux].
On the course of this project, the managed dataspace concept of Genode
will be refined, in particular regarding the creation of read-only
dataspaces from read-write dataspaces.
:Using Haskell as systems-development language:
The goal of this project is the application of functional programming
i.e., Haskell, for the implementation of low-level Genode components.
Implementing critical functionalities in such a high-level language instead
of a classical systems language such as C or C++ would pave the way towards
analyzing such components with formal methods.
The use of Haskell for systems development was pioneered by the
[http://programatica.cs.pdx.edu/House/ - House Project]. A more recent
development is [http://halvm.org - HalVM] - a light-weight OS runtime for
Xen that is based on Haskell.
:Dbus emulation:
Dbus is a popular inter-process communication mechanism on Linux, which
enables user applications to respond to global system events and announce
state changes to other applications. It is extensively used by modern desktop
environments. To enable such applications to integrate well with Genode, a
Dbus emulation solution has to be developed.
:Wayland:
With the availability of Gallium3D on Genode, the prospect for incorporating
further projects of the Linux graphics ecosystem into Genode arises.
[http://wayland.freedesktop.org - Wayland] is a window server especially
designed to be used with Gallium3D. Its design has many similarities with
Genode's Nitpicker GUI server, in particular the decision to move window
handling policies to the client and thereby minimize the complexity of the
GUI server. Whereas Nitpicker was designed for high security, Wayland is
targeted to creating GUIs with fluid and tearless animations using
hardware-accelerated graphics. We believe that because of the many conceptual
parallels with Nitpicker, Wayland would fit very well into the Genode system.
However, as a prerequisite for this project, Genode's Gallium3D support must
be decomposed first. See the challenges regarding our Gallium3D support for
further information.
Runtime environments
####################
:Android's Dalvik VM natively on Genode:
Dalvik is a Java virtual machine that is used for executing applications on
Android. By running Dalvik directly on Genode, the Linux kernel could be
ART is a Java virtual machine that is used for executing applications on
Android. By running ART directly on Genode, the Linux kernel could be
removed from the trusted computing base of Android, facilitating the use of
this mobile OS in high-assurance settings.
:Vancouver VMM for Genode on the NOVA hypervisor:
:Go language runtime:
Vancouver is the user-level virtual-machine monitor accompanying the NOVA
hypervisor. It combines a VT-based CPU virtualization with a rich set of
device models to run unmodified guest operating systems at near-native
performance. Since NOVA is a supported base platform of Genode, running
Vancouver in the dynamic Genode environment has become feasible. By running
Vancouver on Genode instead of NOVA's original static userland would open up
new use cases where the combination of faithful virtualization with dynamic
applications is desired.
Go is a popular language in particular for web applications. In the past,
there were numerous attempts to make the Go runtime available on Genode
but so far, none of those undertakings have landed in the official
Genode source tree. To goal of this project is the hosting of
Go-written applications - in particular networking applications - as
Genode components. The topic comprises work on the tool-chain
and build-system integration, the porting the runtime libraries, and
the glue between the Go and Genode environments.
Genode 11.11 introduced the initial integration of Vancouver into Genode.
This version of Vancouver is able to bootstrap another kernel (e.g.,
Fiasco.OC) within the virtual machine. However, several pieces are missing
for reaching the goal of running a fully-fledged Linux OS as guest.
:Combination of CAmkES with Genode:
[https://wiki.sel4.systems/CAmkES - CAmkES] is a component framework for
seL4. In contrast to Genode, which is a dynamic system, CAmkES-based systems
are defined at design time and remain fixed at runtime. Hence, CAmkES and
Genode can be seen as the opposite ends of component-based used-land
architectures. The goal of this project is to build a bridge between
both projects with the potential to cross-pollinate the respective communities.
Among the principal approaches are embedding of a single CAmkES
component as a Genode component (e.g., an individual device driver),
the hosting of a dynamic Genode system as a component within a
CAmkES system, or the hosting of a CAmkES system composition as a Genode
subsystem.
:Runtime for the D programming language:
@@ -352,90 +181,63 @@ Runtime environments
programs, and interfacing D programs with other Genode components written in
C++.
:Using Haskell as systems-development language:
Platforms
#########
The goal of this project is the application of functional programming
i.e., Haskell, for the implementation of low-level Genode components.
Implementing critical functionalities in such a high-level language instead
of a classical systems language such as C or C++ would pave the way towards
analyzing such components with formal methods.
:Evaluation of MP scheduling models on different Genode base platforms:
The use of Haskell for systems development was pioneered by the
[http://programatica.cs.pdx.edu/House/ - House Project]. A more recent
development is [http://halvm.org - HalVM] - a light-weight OS runtime for
Xen that is based on Haskell.
Several of Genode's supported base platforms come with multi-processor
support, i.e., Linux, NOVA, L4ka::Pistachio, Codezero, and Fiasco.OC. Each of
these kernels follows a different approach for utilizing multiple CPUs. For
example, Linux and Codezero manage the association of threads with CPUs
largely transparent for user-level programs. In contrast, NOVA makes the use
of multiple CPUs explicit and constraints the modes of IPC interaction of
threads running on different CPUs. Furthermore, kernels differ with regard to
thread migration and scheduling. The goal of this project is to identify ways
to support the SMP features of the respective kernels at Genode's API level
such that SMP can be easily utilized by Genode programs in a largely kernel
agnostic way.
:Xlib compatibility:
:Microkernelizing Linux:
Developments like Wayland notwithstanding, most application software on
GNU/Linux systems is built on top of the Xlib programming interface.
However, only a few parts of this wide interface are actually used today.
I.e., modern applications generally deal with pixel buffers instead of
relying on graphical drawing primitives of the X protocol. Hence, it seems
feasible to reimplement the most important parts of the Xlib interface to
target Genode's native GUI interfaces (nitpicker) directly. This would
allow us to port popular application software to Sculpt OS without
changing the application code.
Thanks to Genode's generic interfaces for I/O access as provided by core, all
Genode device drivers including drivers ported from Linux and gPXE can be
executed as user-level components on all supported microkernels. However, so
far, we have not enabled the use of these device drivers on Linux as base
platform. The goal of this project is the systematic replacement of in-kernel
Linux device drivers by Genode processes running in user space, effectively
reducing the Linux kernel to a runtime for Genode's core process. But moving
drivers to Genode processes is just the beginning. By employing further
Genode functionality such as its native GUI, lwIP, and Noux, many protocol
stacks can effectively be removed from the Linux kernel.
:Bump-in-the-wire components for visualizing session interfaces:
The goal of this project is to evaluate how small the Linux kernel can get
when used as a microkernel.
Genode's session interfaces bear the potential for monitoring and
visualizing their use by plugging a graphical application
in-between any two components. For example, by intercepting block
requests issued by a block-session client to a block-device driver,
such a bump-in-the-wire component could visualize
the access patterns of a block device. Similar ideas could be pursued for
other session interfaces, like the audio-out (sound visualization) or NIC
session (live visualization of network communication).
:Support for the HelenOS/SPARTAN kernel:
The visualization of system behavior would offer valuable insights,
e.g., new opportunities for optimization. But more importantly, they
would be extremely fun to play with.
[http://www.helenos.org - HelenOS] is a microkernel-based multi-server OS
developed at the university of Prague. It is based on the SPARTAN microkernel,
which runs on a wide variety of CPU architectures including Sparc, MIPS, and
PowerPC. This broad platform support makes SPARTAN an interesting kernel to
look at alone. But a further motivation is the fact that SPARTAN does not
follow the classical L4 road, providing a kernel API that comes with an own
terminology and different kernel primitives. This makes the mapping of
SPARTAN's kernel API to Genode a challenging endeavour and would provide us
with feedback regarding the universality of Genode's internal interfaces.
Finally, this project has the potential to ignite a further collaboration
between the HelenOS and Genode communities.
:Support for the seL4 kernel:
Virtualization
##############
The seL4 kernel developed by NICTA and OK-Labs is the first formally verified
microkernel. It runs on the x86 and ARM architectures and supports the
execution of a paravirtualized version of Linux on top. Even though seL4 is
proprietary technology, a free binary release and the specification of the
kernel API has been published early 2011. Being a capability-based kernel,
seL4 is in the line of the current-generation L4 kernels alongside NOVA and
Fiasco.OC. Genode already supports the latter two kernel, which hints at the
feasibility to support seL4 as well. Currently, the seL4 kernel comes with a
rather static user land, which is far from utilizing the full potential of
the kernel with regard to dynamic resource management. By adapting Genode to
seL4, a rich dynamic application workload would become available to this
kernel, which could potentially spawn interest in extending the formal
verification efforts at NICTA to the Genode system executing dynamic
real-world applications.
:VirtualBox on top of KVM on Linux:
:Support for the Barrelfish kernel:
[http://barrelfish.org - `Barrelfish] is a so-called multi-kernel OS designed
for heterogeneous multi-processor systems. At its heart, it is a
microkernel-based multi-server OS. Its kernel provides different mechanisms
than L4-based kernels. Instead of managing threads in the kernel, there is a
mechanism for implementing preemptive multi-threading at user level.
Consequently, inter-process communication does not address threads but
protection domains. This makes the Barrelfish kernel a very interesting and
challenging target for running Genode.
:Support for the XNU kernel (Darwin):
XNU is the kernel used by Darwin and Mac OS X. It is derived from the
MACH microkernel and extended with a UNIX-like syscall API. Because the
kernel is used for Mac OS X, it could represent an industry-strength
base platform for Genode supporting all CPU features as used by Mac OS X.
Genode's version of VirtualBox replaces the original in-kernel VirtualBox
hypervisor by the virtualization mechanism of the NOVA hypervisor or the
Muen separation kernel. Those mechanisms look very similar the KVM
interface of the Linux kernel. It should in principle be possible to
re-target Genode's version of VirtualBox to KVM. This way, VirtualBox and
Qemu/KVM-based virtual machines could co-exist on the same system, which
is normally not possible. Also, complex Genode scenarios (like Turmvilla)
could be prototyped on GNU/Linux.
:Xen as kernel for Genode:
Using Xen as kernel for Genode would clear the way to remove the
overly complex Linux OS from the trusted computing base of Xen
guests OSes.
@@ -451,34 +253,163 @@ Platforms
example, Julian implemented a version of Genode's IPC framework that utilizes
Xen's communication mechanisms (event channels and shared memory).
:Linux process containers for supporting Genode`s resource trading:
:Genode as virtualization layer for Qubes OS:
Even though the Linux version of Genode is primarily meant as a development
platform, there exist interesting opportunities to explore when combining
Genode with Linux, in particular Linux' process containers.
Linux process containers provide a mechanism to partition physical resources,
foremost CPU time, between Linux processes. This raises the interesting
question of whether this mechanism could be used for a proper implementation
of Genode's resource trading on Linux.
[http://lwn.net/Articles/236038/ - Process containers introduction...]
[https://www.qubes-os.org/ - Qubes OS] is a desktop operating system
that follows the principle of security through compartmentalization.
In spirit, it is closely related to Genode. In contrast Genode's
clean-slate approach of building a fine-grained multi-component system,
Qubes employs Xen-based virtual machines as sandboxing mechanism. In
[https://blog.invisiblethings.org/2015/10/01/qubes-30.html - version 3.0],
Qubes introduced a Hypervisor Abstraction Layer, which decouples Qubes
from the underlying virtualization platform. This exploration project
pursues the goal of replacing Xen by Genode as virtualization layer
for Qubes.
:Qemu:
As we use Qemu as primary testing platform for most of the kernels, a port
of Qemu to Genode is needed in order to move our regular work flows to
Genode as development platform. The basic prerequisites namely libSDL and a
C runtime are already available such that this porting work seems to be
feasible. In our context, the ia32, amd64, and ARM platforms are of most
interest. Note that the project does not have the immediate goal of
using hardware-based virtualization. However, if there is interest,
the project bears the opportunity to explore the provisioning of the
KVM interface based on Genode's VFS plugin concept.
:Hardware-accelerated graphics for virtual machines:
In
[https://genode.org/documentation/release-notes/17.08#Hardware-accelerated_graphics_for_Intel_Gen-8_GPUs - Genode 17.08],
we introduced a GPU multiplexer for Intel Broadwell along with support
for Mesa-based 3D-accelerated applications.
While designing Genode's GPU-session interface, we also aimed at supporting
the hardware-accelerated graphics for Genode's virtual machine monitors like
VirtualBox or Seoul, but until now, we did not took the practical steps of
implementing a virtual GPU device model.
The goal of this project is the offering of a virtual GPU to a Linux guest
OS running on top of Genode's existing virtualization and driver
infrastructure.
Device drivers
##############
:Sound on the Raspberry Pi:
The goal of this project is a component that uses the Raspberry Pi's
PWM device to implement Genode's audio-out-session interface. Since
Genode's version of libSDL already supports this interface as audio
backend, the new driver will make the sound of all SDL-based games
available on the Raspberry Pi.
:Data Plane Development Kit (DPDK):
Genode utilizes the network device drivers of the iPXE project, which
perform reasonably well for everyday use cases but are obviously not
designated for high-performance networking.
The [http://dpdk.org/ - DPDK] is a vendor-supported suite of network device
drivers that is specifically developed for high-performance applications.
It presents an attractive alternative to iPXE-based drivers. This project
has the goal to make DPDK drivers available as a Genode component.
Platforms
#########
:Microkernelizing Linux:
Thanks to Genode's generic interfaces for I/O access as provided by core, all
Genode device drivers including drivers ported from Linux and gPXE can be
executed as user-level components on all supported microkernels. However, so
far, we have not enabled the use of these device drivers on Linux as base
platform. The goal of this project is the systematic replacement of in-kernel
Linux device drivers by Genode processes running in user space, effectively
reducing the Linux kernel to a runtime for Genode's core process. But moving
drivers to Genode processes is just the beginning. By employing further
Genode functionality such as its native GUI, lwIP, and Noux, many protocol
stacks can effectively be removed from the Linux kernel.
In 2018, Johannes Kliemann pursued this topic to a state where Genode
could be used as init process atop a customized Linux kernel.
[https://lists.genode.org/pipermail/users/2018-May/006066.html - His work]
included the execution of Genode's regular device drivers for VESA and
PS/2 as regular Genode components so that Genode's interactive demo
scenario ran happily on a laptop. At this time, however, only parts of
his results were merged into Genode's mainline.
The goal of this project is to follow up on Johannes' work, bring the
[https://github.com/genodelabs/genode/pull/2829 - remaining parts] into
shape for the inclusion into Genode, and address outstanding topics, in
particular the handling of DMA by user-level device drivers. Further down
the road, it would be tempting to explore the use of
[https://en.wikipedia.org/wiki/Seccomp - seccomp] as sandboxing mechanism
for Genode on Linux and the improvement of the Linux-specific implementation
of Genode's object-capability model.
:Support for the HelenOS/SPARTAN kernel:
[http://www.helenos.org - HelenOS] is a microkernel-based multi-server OS
developed at the university of Prague. It is based on the SPARTAN microkernel,
which runs on a wide variety of CPU architectures including Sparc, MIPS, and
PowerPC. This broad platform support makes SPARTAN an interesting kernel to
look at alone. But a further motivation is the fact that SPARTAN does not
follow the classical L4 road, providing a kernel API that comes with an own
terminology and different kernel primitives. This makes the mapping of
SPARTAN's kernel API to Genode a challenging endeavour and would provide us
with feedback regarding the universality of Genode's internal interfaces.
Finally, this project has the potential to ignite a further collaboration
between the HelenOS and Genode communities.
:Support for the XNU kernel (Darwin):
XNU is the kernel used by Darwin and Mac OS X. It is derived from the
MACH microkernel and extended with a UNIX-like syscall API. Because the
kernel is used for Mac OS X, it could represent an industry-strength
base platform for Genode supporting all CPU features as used by Mac OS X.
:Genode on the Librem5 phone hardware:
Even though there exists a great variety of ARM-based SoCs, Genode
primarily focuses on the NXP i.MX family because it is - in contrast
to most SoCs in the consumer space - very liberal in terms of
good-quality public documentation and reference code, and it scales
from industrial to end-user-facing use cases (multi-media).
The [https://puri.sm/products/librem-5/ - Librem5] project - with its
mission to build a trustworthy mobile phone - has chosen the i.MX family as
the basis for their product for likely the same reasons that attract us.
To goal of this work is bringing Genode to the Librem5 hardware.
For the Librem5 project, Genode could pave the ground towards new use cases
like high-security markets where a regular Linux-based OS would not be
accepted. For the Genode community, the Librem5 hardware could become an
attractive mobile platform for everyday use, similar to how we developers
use our Genode-based [https://genode.org/download/sculpt - Sculpt OS] on our
laptops.
System management
#################
:Remote management of Sculpt OS via Puppet:
[https://en.wikipedia.org/wiki/Puppet_(company)#Puppet - Puppet] is a
software-configuration management tool for administering a large amount
of machines from one central place. Genode's
[https://genode.org/download/sculpt - Sculpt OS] lends itself to such
an approach of remote configuration management by the means of the
"config" file system (for configuring components and deployments) and
the "report" file system (for obtaining the runtime state of components).
The project would explore the application of the Puppet approach and tools
to Sculpt OS.
Optimizations
#############
:Low-latency audio streaming:
Genode comes with an audio streaming interface called 'Audio_out' session.
It is based on a shared-memory packet stream accompanied with asynchronous
data-flow signals. For real-time audio processing involving chains of Genode
components, streams of audio data must be carried at low latency, imposing
constraints to buffer sizes and the modes of operation of the audio mixer and
audio drivers. The goal of this project is to create a holistic design of the
whole chain of audio processing, taking thread-scheduling into account. A
particular challenge is the mixed output of real-time (small buffer, low
latency) and non-real-time (larger buffer to compensate jitter, higher
latency) audio sources.
:De-privileging the VESA graphics driver:
The VESA graphics driver executes the graphics initialization code provided

View File

@@ -18,16 +18,15 @@ macros.
! COLOR_GREEN = 3
! };
:Meta-programming:
:Meta programming:
Use templates instead of pre-processor macros.
In contrast to macros, templates are type-safe
and fit well with the implementation syntax.
Use templates instead of pre-processor macros. In contrast to macros,
templates are type-safe and fit well with the implementation syntax.
:Conditional-code inclusion:
Please avoid C-hacker style '#ifdef CONFIG_PLATFROM' - '#endif'
constructs but instead, factor-out the encapsulated code into a
constructs. Instead, factor-out the encapsulated code into a
separate file and introduce a proper function interface.
The build process should then be used to select the appropriate
platform-specific files at compile time. Keep platform dependent
@@ -50,37 +49,50 @@ Header of each file
Identifiers
===========
* First character of class names uppercase, any other characters lowercase
* Function and variable names lower case
* 'Multi_word_identifiers' via underline
* 'CONSTANTS' upper case
* Private and protected members of a class begin with an '_'-character
* Accessor functions are named after their corresponding attributes:
* The first character of class names are uppercase, any other characters are
lowercase.
* Function and variable names are lower case.
* 'Multi_word_identifiers' use underline to separate words.
* 'CONSTANTS' and template arguments are upper case.
* Private and protected members of a class begin with an '_'-character.
* Accessor methods are named after their corresponding attributes:
! /**
! * Request private member variable
! */
! int value() { return _value; }
! int value() const { return _value; }
!
! /**
! * Set the private member variable
! */
! void value(int value) { _value = value; }
* Accessors that return a boolean value do not carry an 'is_' prefix. E.g.,
a method for requesting the validity of an object should be named
'valid()', not 'is_valid()'.
Indentation
===========
* Use one tab per indentation step. *Do not mix tabs and spaces!*
* Use no tabs except at the beginning of a line.
* Use spaces for alignment
* Use spaces for the alignment of continuation lines such as function
arguments that span multiple lines. The alignment spaces of such lines
should start after the (tab-indented) indentation level. For example:
! {
! <tab>function_with_many_arguments(arg1,
! <tab><--- spaces for aligment --->arg2,
! ...
! }
* Remove trailing spaces at the end of lines
See [http://web.archive.org/web/20050311153439/http://electroly.com/mt/archives/000002.html]
for a more detailed description.
This way, everyone can set his preferred tabsize in his editor
This way, each developer can set his preferred tab size in his editor
and the source code always looks good.
_Hint:_ In VIM, use the 'set list' and 'set listchars' commands to make tabs
and spaces visible.
Switch statements
~~~~~~~~~~~~~~~~~
@@ -128,13 +140,13 @@ Braces
! {
! public:
!
! void function(void)
! void method(void)
! {
! ...
! }
! };
except for single-line functions.
except for one-line functions.
* All other occurrences of open braces (for 'if', 'while', 'do', 'for',
'namespace', 'enum' etc.) are at the end of a line:
@@ -145,7 +157,8 @@ Braces
! ..
! }
* Surprisingly, one-line functions should be written on one line.
* One-line functions should be written on a single line as long as the line
length does not exceed approximately 80 characters.
Typically, this applies for accessor functions.
If slightly more space than one line is needed, indent as follows:
@@ -156,21 +169,22 @@ Braces
Comments
========
Function header
~~~~~~~~~~~~~~~
Function/method header
~~~~~~~~~~~~~~~~~~~~~~
Each public or protected (but no private) function in a header-file should be
Each public or protected (but no private) method in a header-file should be
prepended by a header as follows:
! /**
! * Short description
! *
! * \param a meaning of parameter a
! * \param b meaning of parameter b
! * \param c,d meaning of parameters c and d
! * \param a meaning of parameter a
! * \param b meaning of parameter b
! * \param c,d meaning of parameters c and d
! *
! * \return meaning of return value
! * \retval 0 meaning of the return value 0
! * \throw Exception_type meaning of the exception
! *
! * \return meaning of return value
! *
! * More detailed information about the function. This is optional.
! */

View File

@@ -28,7 +28,7 @@ of them is briefly characterized as follows:
via core's IO_MEM, IO_PORT, and IRQ services. The functionality of
the driver is made available to other system components by announcing
one of Genode's device-independent session interfaces, which are
'pci_session', 'framebuffer_session', 'input_session', 'block_session',
'platform_session', 'framebuffer_session', 'input_session', 'block_session',
'audio_out_session', 'log_session', 'nic_session', and 'timer_session'
(see 'os/include/' for the interface definitions). Those interfaces are
uniform across hardware platforms and kernel base platforms. Usually,
@@ -61,20 +61,31 @@ Device drivers
Device drivers usually reside in the 'src/drivers' subdirectory of source-code
repositories. The most predominant repositories hosting device drivers are
'os', 'linux_drivers', 'dde_ipxe', 'dde_linux'.
'os', 'dde_ipxe', 'dde_linux'.
Platform devices
================
:'os/src/drivers/platform/': Platform drivers for various ARM boards.
:'os/src/drivers/platform/': Platform drivers for various platforms.
On x86, the platform driver uses the PCI controller as found on x86 PC
hardware. A client can probe for a particular device and request information
about physical device resources (using the 'platform_device' interface). I/O
resources for MMIO regions, I/O ports, and interrupts can be requested by the
provided device abstraction.
:'os/src/drivers/pci':
Implements the PCI-session interface using the PCI controller as found on
x86 PC hardware. Using this interface, a client can probe for a particular
device and request information about physical device resources (using the
'pci_device' interface). These information are subsequently used to request
respective IO_MEM, IRQ, and IO_PORT sessions at core.
:'os/src/drivers/acpi':
On x86 platforms that use the APIC (namely Fiasco.OC, NOVA, and hw_x86_64)
this simple ACPI parser traverses the ACPI tables and reports device-resource
information (e.g., interrupt lines of PCI devices).
:'libports/src/app/acpica':
In addition to our ACPI base driver, the acpica component uses the
ACPICA library to provide access to dynamic functions like battery
states, events (e.g., notebook lid close and power buttons), as well
as reset and power off. The componenten reports ACPI events and
states as reports and itself responds to system state changes of
certain configuration ROMs.
UART devices
@@ -82,16 +93,16 @@ UART devices
The UART device drivers implement the UART-session interface.
:'os/src/drivers/uart/pl011':
:'os/src/drivers/uart/spec/pl011':
Driver for the PL011 UART as found on many ARM-based platforms.
:'os/src/drivers/uart/i8250':
:'os/src/drivers/uart/spec/i8250':
Driver for the i8250 UART as found on PC hardware.
:'os/src/drivers/uart/omap4':
:'os/src/drivers/uart/spec/omap4':
Driver for the UART as found on OMAP4-based hardware.
:'os/src/drivers/uart/exynos5':
:'os/src/drivers/uart/spec/exynos5':
Driver for the UART as found on Exynos-5-based hardware.
@@ -106,15 +117,11 @@ input-session interfaces respectively.
to resolve a dependency from an input session for scenarios where no user
input is required.
:'os/src/drivers/input/fiasco_ux':
Driver for the virtual hardware provided by the user-mode version of the
Fiasco kernel.
:'os/src/drivers/input/ps2/x86':
:'os/src/drivers/input/spec/ps2/x86':
Driver for the 'i8042' PS/2 controller as found in x86 PCs. It supports both
mouse (including ImPS/2, ExPS/2) and keyboard.
:'os/src/drivers/input/ps2/pl050':
:'os/src/drivers/input/spec/ps2/pl050':
Driver for the PL050 PS/2 controller as found on ARM platforms such as
VersatilePB. The physical base address used by the driver is obtained at
compile time from a header file called 'pl050_defs.h'. The version of the
@@ -122,32 +129,44 @@ input-session interfaces respectively.
is made available to the driver via the SPECS machinery of the Genode build
system.
:'os/src/drivers/input/spec/imx53':
Input driver for Egalaxy touchscreen and Freescale's MPR121
capacitative touch buttons on i.MX53.
:'libports/src/drivers/framebuffer/vesa':
Driver using VESA mode setting on x86 PCs. For more information, please refer
to the README file in the driver directory.
:'os/src/drivers/framebuffer/pl11x':
:'libports/src/drivers/framebuffer/boot':
Driver for boot-time initialized framebuffers (e.g., UEFI GOP)
discovered from the 'platform_info' ROM
:'os/src/drivers/framebuffer/spec/pl11x':
Driver for the PL110/PL111 LCD display.
:'os/src/drivers/framebuffer/omap4':
:'os/src/drivers/framebuffer/spec/omap4':
Driver for HDMI output on OMAP4 SoCs.
:'os/src/drivers/framebuffer/exynos5':
:'os/src/drivers/framebuffer/spec/exynos5':
Driver for HDMI output on Exynos-5 SoCs.
:'os/src/drivers/framebuffer/imx53':
:'os/src/drivers/framebuffer/spec/imx53':
Driver for LCD output on i.MX53 SoCs.
:'os/src/drivers/framebuffer/imx53':
Driver for touchscreen input on i.MX53 quick start board.
:'os/src/drivers/framebuffer/rpi':
:'os/src/drivers/framebuffer/spec/rpi':
Driver for the HDMI output of the Raspberry Pi.
:'os/src/drivers/framebuffer/sdl':
:'os/src/drivers/framebuffer/spec/sdl':
Serves as both framebuffer and input driver on Linux using libSDL. This
driver is only usable on the Linux base platform.
:'os/src/drivers/gpu/intel':
Intel Graphics GPU multiplexer for Broadwell and newer.
:'dde_linux/src/drivers/framebuffer/intel':
Framebuffer driver for Intel i915 compatible graphic cards based on
the Linux Intel KMS driver.
:'dde_linux/src/drivers/usb':
USB driver that makes USB HID and USB storage devices available as input
sessions and block session respectively. For examples of using this driver,
@@ -159,38 +178,36 @@ Timer drivers
=============
The timer driver located at 'os/src/drivers/timer' implements the timer-session
interface. Technically, it is is both a device driver (accessing a timer
interface. Technically, it is both a device driver (accessing a timer
device) and a resource multiplexer (supporting multiple timer-session clients
at the same time). Depending on the base platform, the implementation uses of
at the same time). Depending on the base platform, the implementation uses
different time sources. Time sources are either hardware timers, a time source
provided by the kernel, or a pseudo time source (busy):
:'nova': NOVA kernel semaphores as time source
:'codezero': busy time source
:'okl4_arm': busy time source
:'okl4_x86': PIT as time source
:'foc': IPC timeout as time source
:'fiasco': IPC timeout as time source
:'pistachio': IPC timeout as time source
:'linux': nanosleep as time source
:'nova': NOVA kernel semaphores
:'okl4_x86': Programmable Interval Timer (PIT) device
:'foc': IPC timeout
:'fiasco': IPC timeout
:'pistachio': Programmable Interval Timer (PIT) device
:'linux': nanosleep()
:'hw': kernel timer
:'sel4': PIT on x86, EPIT on Wandboard
Audio output drivers
====================
Audio drivers
=============
All audio-output drivers implement the audio session interface defined at
'os/include/audio_out_session/'.
Audio drivers implement the Audio_out session interface defined at
'os/include/audio_out_session/' for playback and optionally the audio_in
interface for recording.
:'os/src/drivers/audio_out/linux':
Uses ALSA as back-end on the Linux base platform.
:'os/src/drivers/audio/spec/linux':
Uses ALSA as back-end on the Linux base platform and supports only playback.
:'dde_oss/src/drivers/oss':
Sound drivers for the most common PC sound hardware, ported from the
Open Sound System project.
:'linux_drivers/src/drivers/audio_out':
Sound drivers for the most common PC sound hardware, ported from the Linux
kernel.
:'dde_bsd/src/drivers/audio':
Sound drivers ported from OpenBSD. Currently, the repository
includes support for Intel HD Audio as well as for Ensoniq AudioPCI
(ES1370) compatible sound cards.
Block drivers
@@ -199,26 +216,33 @@ Block drivers
All block drivers implement the block-session interface defined at
'os/include/block_session/'.
:'os/src/drivers/atapi':
Driver for ATAPI CD-ROM devices on x86 PCs.
:'os/src/drivers/sd_card/pl180':
:'os/src/drivers/sd_card/spec/pl180':
Driver for SD-cards connected via the PL180 device as found on the PBX-A9
platform.
:'os/src/drivers/sd_card/omap4':
:'os/src/drivers/sd_card/spec/omap4':
Driver for SD-cards connected to the SD-card controller of the OMAP4 SoC.
:'os/src/drivers/sd_card/exynos5':
:'os/src/drivers/sd_card/spec/exynos5':
Driver for SD-cards and eMMC connected to Exynos-5-based platforms.
:'linux_drivers/src/drivers/usb':
:'os/src/drivers/sd_card/spec/imx53':
Driver for SD-cards connected to the Freescale i.MX53 platform like the
Quick Start Board or the USB armory device.
:'os/src/drivers/sd_card/spec/rpi':
Driver for SD-cards connected to the Raspberry Pi.
:'dde_linux/src/drivers/usb':
USB driver that makes USB storage devices available as block sessions.
For an example of using this driver, refer to the run script at
'linux_drivers/run/usb_storage'.
'dde_linux/run/usb_storage'.
:'os/src/drivers/ahci':
Driver for SATA disks on x86 PCs.
Driver for SATA disks and CD-ROMs on x86 PCs.
:'os/src/drivers/usb_block':
USB Mass Storage Bulk-Only driver using the USB session interface.
Network interface drivers
@@ -227,34 +251,49 @@ Network interface drivers
All network interface drivers implement the NIC session interface
defined at 'os/include/nic_session'.
:'os/src/drivers/nic/linux':
:'os/src/drivers/nic/spec/linux':
Driver that uses a Linux tap device as back end. It is only useful on the
Linux base platform.
:'os/src/drivers/nic/lan9118':
:'os/src/drivers/nic/spec/lan9118':
Native device driver for the LAN9118 network adaptor as featured on the
PBX-A9 platform.
:'os/src/drivers/nic/gem':
Device driver for Cadence EMAC PS network adaptor as featured on the
Xilinx Zynq.
:'dde_ipxe/src/drivers/nic':
Device drivers ported from the iPXE project. Supported devices are Intel
E1000 and pcnet32.
:'linux_drivers/src/drivers/madwifi':
The MadWifi wireless stack ported from the Linux kernel.
:'dde_linux/src/drivers/wifi':
The wifi_drv component is a port of the Linux mac802.11 stack, including the
iwlwifi driver. It enables the use of Intel Wireless 6xxx and 7xxx cards.
:'dde_linux/src/drivers/usb':
For the OMAP4 platform, the USB driver contains the networking driver.
:'dde_linux/src/drivers/nic/fec':
Driver for ethernet NICs of the i.MX SoC family.
General-purpose I/O drivers
===========================
:'os/src/drivers/gpio/omap4':
:'os/src/drivers/gpio/spec/omap4':
Driver for accessing the GPIO pins of OMAP4 platforms.
:'os/src/drivers/gpio/imx53':
:'os/src/drivers/gpio/spec/imx53':
Driver for accessing the GPIO pins of i.MX53 platforms.
:'os/src/drivers/gpio/spec/rpi':
Driver for accessing the GPIO pins of Raspberry Pi platforms.
:'os/src/drivers/gpio/spec/exynos5':
Driver for accessing the GPIO pins of Exynos4 platforms, e.g.,
Odroid-X2.
Resource multiplexers
#####################
@@ -280,14 +319,14 @@ subdirectory of a source repository.
the physical network. DHCP requests originating from the virtual NIC sessions
are delegated to the physical network.
:Block: The block-device partition server at 'os/src/server/part_blk' reads
:Block: The block-device partition server at 'os/src/server/part_block' reads
the partition table of a block session and exports each partition found as
separate block session. For using this server, please refer to the run
script at 'os/run/part_blk'.
script at 'os/run/part_block'.
:File system: The FFAT file-system service allows multiple clients to
concurrently access the same FFAT-formatted block device. It is located
at 'libports/src/server/ffat_fs'.
:File system: The FAT file-system service allows multiple clients to
concurrently access the same FAT-formatted block device. It is located
at 'libports/src/server/fatfs_fs' and supports FAT, FAT32, and exFAT.
:Terminal: The terminal_mux service located at gems/src/server/terminal_mux
is able to provide multiple terminal sessions over one terminal-client
@@ -324,10 +363,6 @@ Separate components:
Provides each file contained in a tar file obtained via Genode's ROM session
as separate ROM session.
:'os/src/server/fs_rom':
Provides files stored in a file system as individual ROM sessions. Please
refer to 'os/src/server/fs_rom' for more information.
:'os/src/server/iso9660':
Provides each file of an ISO9660 file system accessed via a block session as
separate ROM session.
@@ -335,10 +370,6 @@ Separate components:
:'os/src/server/ram_fs':
A file-system implementation that keeps all data in memory.
:'os/src/server/tar_fs':
A read-only file-system implementation that reads data from a TAR archive,
which, in turn, is provided by a ROM service.
:'dde_rump/src/server/rump_fs':
A file-system server that contains various file-systems ported from the
NetBSD kernel.
@@ -351,13 +382,13 @@ Separate components:
A pseudo file system that can be used as a front end to core's TRACE
service.
:'os/src/server/rom_blk':
:'os/src/server/rom_block':
Provides the content of a ROM file as a block session, similar to the
loop-mount mechanism on Linux
:'os/src/server/ram_blk':
:'os/src/server/ram_block':
Provides the content of a RAM dataspace as a block session. In contrast
to 'rom_blk', this server provides a writeable block device.
to 'rom_block', this server provides a writeable block device.
:'os/src/server/terminal_log':
Adapter for forwarding LOG messages to a terminal session.
@@ -365,13 +396,26 @@ Separate components:
:'os/src/server/log_terminal':
Adapter for forwarding terminal output to a LOG session.
:'libports/src/server/fs_log':
:'os/src/server/fs_log':
Adapter that writes LOG messages to files on a file system.
:'demo/src/server/nitlog':
Provides a LOG session, printing log output on screen via a nitpicker
session.
:'os/src/app/rom_logger':
The rom_logger component requests a ROM session and writes the
content of the ROM dataspace to the LOG.
:'os/src/server/rom_filter':
The ROM filter provides a ROM module that depends on the content of
other ROM modules steered by the filter configuration, e.g., dynamic
switching between configuration variants dependent on the state of
the system.
:'os/src/server/vfs':
A file-system server using the VFS library and plugins as backend.
:'os/src/server/log_terminal':
Forwards terminal output to a LOG session.
@@ -390,7 +434,7 @@ Separate components:
The terminal crosslink service allows to terminal clients to talk to each
other.
:'gems/src/server/http_blk':
:'gems/src/server/http_block':
A block service that fetches a virtual block device over the network from
a HTTP server.
@@ -398,6 +442,7 @@ Separate components:
A ROM service that translates the 'File_system' session interface to the
'ROM' session' interface. Each request for a ROM file is handled by looking
up an equally named file on the file system.
Please refer to 'os/src/server/fs_rom' for more information.
:'os/src/server/dynamic_rom':
A simple ROM service that provides ROM modules that change in time according
@@ -407,26 +452,37 @@ Separate components:
A service that implements both the report session interface and the ROM
session interface. It reflects incoming reports as ROM modules.
:'os/src/server/fs_report':
Report server that writes reports to file-systems
:'os/src/server/clipboard':
This component is both a report service and a ROM service. The
clients of the report service can issue new clipboard content, which
is then propagated to the clients of the ROM service according to a
configurable information-flow policy.
:'ports/src/app/openvpn':
OpenVPN enables access to remote network resources through a secure tunnel
by providing an encrypted connection to a remote host. It is plugged between
NIC server (such as a network driver) and NIC client.
:'os/src/server/input_merger':
A component that merges input events from multiple sources into a single
stream.
:'libports/src/server/acpi_input':
A component that transforms ACPI events into Genode input events.
:'gems/src/server/nit_fader':
A wrapper for nitpicker's session interface that applies alpha-blending to
the of views a nitpicker client.
Libraries:
:'libports/lib/mk/libc':
C runtime ported from FreeBSD.
:'libports/lib/mk/libc_log':
Redirects the standard output of the libc to Genode's LOG session interface.
:'libports/lib/mk/libc_lwip_nic_dhcp':
Translates the BSD socket API to a NIC session using the lwIP stack.
:'dde_linux/lib/mk/libc_lxip':
Translates the BSD socket API to a NIC session using the Linux TCP/IP stack.
:'libports/lib/mk/libc_ffat':
:'libports/lib/mk/libc_fatfs':
Accesses files on a block device that contains a FAT32 file system.
:'libports/lib/mk/libc_fuse_exfat':
@@ -435,23 +491,12 @@ Libraries:
:'libports/lib/mk/libc_fuse_ext2':
Accesses files on a block device that contains an ext2 file system.
:'libports/lib/mk/libc_fs':
Allows libc-using programs to access the Genode file-system infrastructure
using the POSIX file API.
:'libports/lib/mk/libc_block':
Accesses a block session as a virtual block device.
:'libports/lib/mk/libc_terminal':
Connects the standard input and output from/to Genode's terminal session
interface.
:'libports/lib/mk/stdcxx':
Standard C++ library
:'libports/lib/mk/gallium' + 'linux_drivers/lib/mk/gpu_i915_drv':
Translates the OpenGL API to a framebuffer session using the MESA OpenGL
stack and the Intel GEM GPU driver.
:'libports/lib/mk/mesa_api':
Mesa OpenGL API with backends for software rasterization (egl_swrast)
and Intel Graphics (egl_i965)
:'libports/lib/mk/pthread':
Subset of the POSIX thread and semaphore API.
@@ -475,9 +520,6 @@ Libraries:
:'libports/lib/mk/lua':
Runtime for the Lua scripting language.
:'qt4':
Qt4 framework, using nitpicker session and NIC session as back end.
:'libports/lib/mk/qt5_*':
Qt5 framework, using nitpicker session and NIC session as back end.
@@ -485,6 +527,19 @@ Libraries:
A VFS plugin that makes a jitter-based random-number generator available
as a file within the process-local VFS.
:'libports/lib/mk/libarchive.mk':
Library providing a common interface to a variety of archive
formats.
:'libports/lib/mk/lz4.mk':
Library for processing LZ4 lossless compression archives.
:'libports/lib/mk/liblzma.mk':
Library for processing LZMA archives.
:'libports/lib/mk/libgcrypt.mk':
GnuPG library for OpenPGP processing, e.g., signature verification.
Applications
############
@@ -501,31 +556,31 @@ located in their respective directory.
:'demo/src/app/launchpad':
Graphical application for interactively starting and killing subsystems.
:'gems/app/launcher': Graphical launcher of Genode subsystems.
:'os/app/cli_monitor': Command-line-based launcher of Genode subsystems.
:'demo/src/app/scout':
Graphical hypertext browser used for Genode's default demonstration scenario.
:'libports/src/app/eglgears':
Example program for using OpenGL via the Gallium3D graphics stack.
:'libports/src/test/mesa_demo':
Example programs for using the Mesa OpenGL graphics stack.
:'ports/src/app/arora':
Arora is a Qt4-based web browser using the Webkit engine.
Arora is a Qt-based web browser using the Webkit engine.
:'ports/src/app/gdb_monitor':
Application that allows the debugging of a process via GDB over a remote
connection.
:'qt4/src/app/qt_launchpad':
Graphical application starter implemented using Qt4.
:'libports/src/app/qt5/qt_launchpad':
Graphical application starter implemented using Qt.
:'qt4/src/app/examples/':
Several example applications that come with Qt4.
:'libports/src/app/qt5/examples/':
Several example applications that come with Qt.
:'libports/src/app/qt5':
Qt5 examples including qt_launchpad and qt_avplay.
:'os/src/app/xvfb':
Is a proxy application that enables the integration of a virtual X server
into a Nitpicker session on the Linux base platform.
:'os/src/app/sequence':
Simple utility to serialize the execution of multiple components
:'ports/src/noux-pkg':
Ports of popular commandline-based Unix software such as VIM, bash,
@@ -537,6 +592,39 @@ located in their respective directory.
a file-system session to access the website content and the web-server
configuration.
:'os/src/app/trace_logger':
Convenient, runtime-configurable frontend to the tracing facility.
:'os/src/app/rom_reporter':
The ROM-reporter component requests a ROM session and reports the
content of the ROM dataspace to a report session with the same label
as the ROM session.
:'os/src/app/log_core':
Component transforming core and kernel output to Genode LOG output.
Package-management components
=============================
:'gems/src/app/depot_query':
Tool for querying subsystem information from a depot.
:'gems/src/app/depot_download_manager':
Tool for managing the download of depot content.
:'gems/src/app/depot_deploy':
Subsystem init configuration generator based on blueprints.
:'libports/src/app/fetchurl':
A runtime-configurable frontend to the libcURL library for
downloading content.
:'libports/src/app/extract':
Tool for extracting archives using libarchive.
:'ports/src/app/verify':
This component verifies detached OpenPGP signatures using libgcrypt.
Runtime environments
####################
@@ -545,14 +633,7 @@ Runtime environments
that enables the use of unmodified command-line based GNU software. For using
noux, refer to the run script 'ports/run/noux.run'.
:'ports-foc/src/l4linux': L4Linux is a paravirtualized Linux kernel that
enables the use of Linux-based OSes as subsystems on the Fiasco.OC kernel.
For using L4Linux, refer to the run script 'ports-foc/run/l4linux.run'.
:'ports-foc/src/l4android': L4Android is a variant of L4Linux that is able
to execute the Android software stack on top of the Fiasco.OC kernel.
:'ports/src/vancouver': Vancouver is a virtual-machine monitor developed for
:'ports/src/app/seoul': Seoul is a virtual-machine monitor developed for
the use with the NOVA platform. It virtualizes 32bit x86 PC hardware
including various peripherals.
@@ -562,3 +643,5 @@ Runtime environments
:'ports/src/app/dosbox': A port of DosBox for executing DOS software.
:'ports/src/virtualbox': VirtualBox running on top of the NOVA hypervisor.

View File

@@ -13,7 +13,7 @@ should be documented but isn't? Or the documentation contains errors with
regard to content or spelling? Please let us know by raising the issue at the
genode-main mailing list:
:[http://genode.org/community/mailing-lists - Genode mailing lists]:
:[https://genode.org/community/mailing-lists - Genode mailing lists]:
If you are interested in getting your hands dirty with working on the Genode
code base or authoring additional documentation, you are more than welcome.
@@ -31,9 +31,9 @@ Alternatively, you may like to have a look at our road map and future
challenges to see the big picture of our developments and to get inspiration
for your own activities:
:[http://genode.org/about/road-map]: Road Map
:[https://genode.org/about/road-map]: Road Map
:[http://genode.org/about/challenges]: Future Challenges
:[https://genode.org/about/challenges]: Future Challenges
Once you settled on a specific topic to work on, it is a good idea to get
acquainted with the work flow and tools used by the project. The following
@@ -81,7 +81,7 @@ Genode's source code follows certain time-tested conventions regarding the
coding style and code pattern, which are important to us. The coding style
is described in the following document:
:[http://genode.org/documentation/developer-resources/coding_style]:
:[https://genode.org/documentation/developer-resources/coding_style]:
Coding Style Guidelines
We know from experience that for new developers, adhering the coding style can
@@ -131,12 +131,12 @@ Genode Contributors Agreement
Before we will be able to incorporate your changes into Genode's mainline
development, we require your permission to use your code.
Genode is publicly licensed under the terms of the GNU GPL with Genode Labs
Genode is publicly licensed under the terms of the GNU AGPLv3 with Genode Labs
maintaining the right to also distribute derivates under different licenses or
update the public License (i.e., eventually switching from GPLv2 to GPLv3).
update the public License.
Contributions from outside Genode Labs can only be incorporated into Genode's
mainline development if each individual contributor explicitly grants the
permission to let Genode Labs redistribute his contributions under non-GPL
permission to let Genode Labs redistribute his contributions under non-AGPLv3
licenses. This permission is granted by signing the Genode Contributors
Agreement:
@@ -145,7 +145,7 @@ Agreement:
By signing the GCA, you don't lose any rights for your contribution. However,
you enable Genode Labs to license Genode (including your contributions) under
licenses other than the GPL. The GCA needs to be signed only once. The signed
licenses other than the AGPLv3. The GCA needs to be signed only once. The signed
GCA covers your future contributions. Of course, you may cancel this agreement
at your will. Please make sure that you are in the legal position to sign
the GCA (i.e., by making sure that your contribution to Genode is in line with

514
doc/depot.txt Normal file
View File

@@ -0,0 +1,514 @@
============================
Package management on Genode
============================
Norman Feske
Motivation and inspiration
##########################
The established system-integration work flow with Genode is based on
the 'run' tool, which automates the building, configuration, integration,
and testing of Genode-based systems. Whereas the run tool succeeds in
overcoming the challenges that come with Genode's diversity of kernels and
supported hardware platforms, its scalability is somewhat limited to
appliance-like system scenarios: The result of the integration process is
a system image with a certain feature set. Whenever requirements change,
the system image is replaced with a new created image that takes those
requirements into account. In practice, there are two limitations of this
system-integration approach:
First, since the run tool implicitly builds all components required for a
system scenario, the system integrator has to compile all components from
source. E.g., if a system includes a component based on Qt5, one needs to
compile the entire Qt5 application framework, which induces significant
overhead to the actual system-integration tasks of composing and configuring
components.
Second, general-purpose systems tend to become too complex and diverse to be
treated as system images. When looking at commodity OSes, each installation
differs with respect to the installed set of applications, user preferences,
used device drivers and system preferences. A system based on the run tool's
work flow would require the user to customize the run script of the system for
each tweak. To stay up to date, the user would need to re-create the
system image from time to time while manually maintaining any customizations.
In practice, this is a burden, very few end users are willing to endure.
The primary goal of Genode's package management is to overcome these
scalability limitations, in particular:
* Alleviating the need to build everything that goes into system scenarios
from scratch,
* Facilitating modular system compositions while abstracting from technical
details,
* On-target system update and system development,
* Assuring the user that system updates are safe to apply by providing the
ability to easily roll back the system or parts thereof to previous versions,
* Securing the integrity of the deployed software,
* Fostering a federalistic evolution of Genode systems,
* Low friction for existing developers.
The design of Genode's package-management concept is largely influenced by Git
as well as the [https://nixos.org/nix/ - Nix] package manager. In particular
the latter opened our eyes to discover the potential that lies beyond the
package management employed in state-of-the art commodity systems. Even though
we considered adapting Nix for Genode and actually conducted intensive
experiments in this direction (thanks to Emery Hemingway who pushed forward
this line of work), we settled on a custom solution that leverages Genode's
holistic view on all levels of the operating system including the build system
and tooling, source structure, ABI design, framework API, system
configuration, inter-component interaction, and the components itself. Whereby
Nix is designed for being used on top of Linux, Genode's whole-systems view
led us to simplifications that eliminated the needs for Nix' powerful features
like its custom description language.
Nomenclature
############
When speaking about "package management", one has to clarify what a "package"
in the context of an operating system represents. Traditionally, a package
is the unit of delivery of a bunch of "dumb" files, usually wrapped up in
a compressed archive. A package may depend on the presence of other
packages. Thereby, a dependency graph is formed. To express how packages fit
with each other, a package is usually accompanied with meta data
(description). Depending on the package manager, package descriptions follow
certain formalisms (e.g., package-description language) and express
more-or-less complex concepts such as versioning schemes or the distinction
between hard and soft dependencies.
Genode's package management does not follow this notion of a "package".
Instead of subsuming all deliverable content under one term, we distinguish
different kinds of content, each in a tailored and simple form. To avoid the
clash of the notions of the common meaning of a "package", we speak of
"archives" as the basic unit of delivery. The following subsections introduce
the different categories.
Archives are named with their version as suffix, appended via a slash. The
suffix is maintained by the author of the archive. The recommended naming
scheme is the use of the release date as version suffix, e.g.,
'report_rom/2017-05-14'.
Raw-data archives
=================
A raw-data archive contains arbitrary data that is - in contrast to executable
binaries - independent from the processor architecture. Examples are
configuration data, game assets, images, or fonts. The content of raw-data
archives is expected to be consumed by components at runtime. It is not
relevant for the build process for executable binaries. Each raw-data
archive contains merely a collection of data files. There is no meta data.
API archive
===========
An API archive has the structure of a Genode source-code repository. It may
contain all the typical content of such a source-code repository such as header
files (in the _include/_ subdirectory), source codes (in the _src/_
subdirectory), library-description files (in the _lib/mk/_ subdirectory), or
ABI symbols (_lib/symbols/_ subdirectory). At the top level, a LICENSE file is
expected that clarifies the license of the contained source code. There is no
meta data contained in an API archive.
An API archive is meant to provide _ingredients_ for building components. The
canonical example is the public programming interface of a library (header
files) and the library's binary interface in the form of an ABI-symbols file.
One API archive may contain the interfaces of multiple libraries. For example,
the interfaces of libc and libm may be contained in a single "libc" API
archive because they are closely related to each other. Conversely, an API
archive may contain a single header file only. The granularity of those
archives may vary. But they have in common that they are used at build time
only, not at runtime.
Source archive
==============
Like an API archive, a source archive has the structure of a Genode
source-tree repository and is expected to contain all the typical content of
such a source repository along with a LICENSE file. But unlike an API archive,
it contains descriptions of actual build targets in the form of Genode's usual
'target.mk' files.
In addition to the source code, a source archive contains a file
called 'used_apis', which contains a list of API-archive names with each
name on a separate line. For example, the 'used_apis' file of the 'report_rom'
source archive looks as follows:
! base/2017-05-14
! os/2017-05-13
! report_session/2017-05-13
The 'used_apis' file declares the APIs needed to incorporate into the build
process when building the source archive. Hence, they represent _build-time_
_dependencies_ on the specific API versions.
A source archive may be equipped with a top-level file called 'api' containing
the name of exactly one API archive. If present, it declares that the source
archive _implements_ the specified API. For example, the 'libc/2017-05-14'
source archive contains the actual source code of the libc and libm as well as
an 'api' file with the content 'libc/2017-04-13'. The latter refers to the API
implemented by this version of the libc source package (note the differing
versions of the API and source archives)
Binary archive
==============
A binary archive contains the build result of the equally-named source archive
when built for a particular architecture. That is, all files that would appear
at the _<build-dir>/bin/_ subdirectory when building all targets present in
the source archive. There is no meta data present in a binary archive.
A binary archive is created out of the content of its corresponding source
archive and all API archives listed in the source archive's 'used_apis' file.
Note that since a binary archive depends on only one source archive, which
has no further dependencies, all binary archives can be built independently
from each other.
For example, a libc-using application needs the source code of the
application as well as the libc's API archive (the libc's header file and
ABI) but it does not need the actual libc library to be present.
Package archive
===============
A package archive contains an 'archives' file with a list of archive names
that belong together at runtime. Each listed archive appears on a separate line.
For example, the 'archives' file of the package archive for the window
manager 'wm/2018-02-26' looks as follows:
! genodelabs/raw/wm/2018-02-14
! genodelabs/src/wm/2018-02-26
! genodelabs/src/report_rom/2018-02-26
! genodelabs/src/decorator/2018-02-26
! genodelabs/src/floating_window_layouter/2018-02-26
In contrast to the list of 'used_apis' of a source archive, the content of
the 'archives' file denotes the origin of the respective archives
("genodelabs"), the archive type, followed by the versioned name of the
archive.
An 'archives' file may specify raw archives, source archives, or package
archives (as type 'pkg'). It thereby allows the expression of _runtime
dependencies_. If a package archive lists another package archive, it inherits
the content of the listed archive. This way, a new package archive may easily
customize an existing package archive.
A package archive does not specify binary archives directly as they differ
between the architecture and are already referenced by the source archives.
In addition to an 'archives' file, a package archive is expected to contain
a 'README' file explaining the purpose of the collection.
Depot structure
###############
Archives are stored within a directory tree called _depot/_. The depot
is structured as follows:
! <user>/pubkey
! <user>/download
! <user>/src/<name>/<version>/
! <user>/api/<name>/<version>/
! <user>/raw/<name>/<version>/
! <user>/pkg/<name>/<version>/
! <user>/bin/<arch>/<src-name>/<src-version>/
The <user> stands for the origin of the contained archives. For example, the
official archives provided by Genode Labs reside in a _genodelabs/_
subdirectory. Within this directory, there is a 'pubkey' file with the
user's public key that is used to verify the integrity of archives downloaded
from the user. The file 'download' specifies the download location as an URL.
Subsuming archives in a subdirectory that correspond to their the origin
(user) serves two purposes. First, it provides a user-local name space for
versioning archives. E.g., there might be two versions of a
'nitpicker/2017-04-15' source archive, one by "genodelabs" and one by
"nfeske". However, since each version resides under its origin's subdirectory,
version-naming conflicts between different origins cannot happen. Second, by
allowing multiple archive origins in the depot side-by-side, package archives
may incorporate archives of different origins, which fosters the goal of a
federalistic development, where contributions of different origins can be
easily combined.
The actual archives are stored in the subdirectories named after the archive
types ('raw', 'api', 'src', 'bin', 'pkg'). Archives contained in the _bin/_
subdirectories are further subdivided in the various architectures (like
'x86_64', or 'arm_v7').
Depot management
################
The tools for managing the depot content reside under the _tool/depot/_
directory. When invoked without arguments, each tool prints a brief
description of the tool and its arguments.
Unless stated otherwise, the tools are able to consume any number of archives
as arguments. By default, they perform their work sequentially. This can be
changed by the '-j<N>' argument, where <N> denotes the desired level of
parallelization. For example, by specifying '-j4' to the _tool/depot/build_
tool, four concurrent jobs are executed during the creation of binary archives.
Downloading archives
====================
The depot can be populated with archives in two ways, either by creating
the content from locally available source codes as explained by Section
[Automated extraction of archives from the source tree], or by downloading
ready-to-use archives from a web server.
In order to download archives originating from a specific user, the depot's
corresponding user subdirectory must contain two files:
:_pubkey_: contains the public key of the GPG key pair used by the creator
(aka "user") of the to-be-downloaded archives for signing the archives. The
file contains the ASCII-armored version of the public key.
:_download_: contains the base URL of the web server where to fetch archives
from. The web server is expected to mirror the structure of the depot.
That is, the base URL is followed by a sub directory for the user,
which contains the archive-type-specific subdirectories.
If both the public key and the download locations are defined, the download
tool can be used as follows:
! ./tool/depot/download genodelabs/src/zlib/2018-01-10
The tool automatically downloads the specified archives and their
dependencies. For example, as the zlib depends on the libc API, the libc API
archive is downloaded as well. All archive types are accepted as arguments
including binary and package archives. Furthermore, it is possible to download
all binary archives referenced by a package archive. For example, the
following command downloads the window-manager (wm) package archive including
all binary archives for the 32-bit x86 architecture. Downloaded binary
archives are always accompanied with their corresponding source and used API
archives.
! ./tool/depot/download genodelabs/pkg/x86_64/wm/2018-02-26
Archive content is not downloaded directly to the depot. Instead, the
individual archives and signature files are downloaded to a quarantine area in
the form of a _public/_ directory located in the root of Genode's source tree.
As its name suggests, the _public/_ directory contains data that is imported
from or to-be exported to the public. The download tool populates it with the
downloaded archives in their compressed form accompanied with their
signatures.
The compressed archives are not extracted before their signature is checked
against the public key defined at _depot/<user>/pubkey_. If however the
signature is valid, the archive content is imported to the target destination
within the depot. This procedure ensures that depot content - whenever
downloaded - is blessed by a cryptographic signature of its creator.
Building binary archives from source archives
=============================================
With the depot populated with source and API archives, one can use the
_tool/depot/build_ tool to produce binary archives. The arguments have the
form '<user>/bin/<arch>/<src-name>' where '<arch>' stands for the targeted
CPU architecture. For example, the following command builds the 'zlib'
library for the 64-bit x86 architecture. It executes four concurrent jobs
during the build process.
! ./tool/depot/build genodelabs/bin/x86_64/zlib/2018-01-10 -j4
Note that the command expects a specific version of the source archive as
argument. The depot may contain several versions. So the user has to decide,
which one to build.
After the tool is finished, the freshly built binary archive can be found in
the depot within the _genodelabs/bin/<arch>/<src>/<version>/_ subdirectory.
Only the final result of the built process is preserved. In the example above,
that would be the _zlib.lib.so_ library.
For debugging purposes, it might be interesting to inspect the intermediate
state of the build. This is possible by adding 'KEEP_BUILD_DIR=1' as argument
to the build command. The binary's intermediate build directory can be
found besides the binary archive's location named with a '.build' suffix.
By default, the build tool won't attempt to rebuild a binary archive that is
already present in the depot. However, it is possible to force a rebuild via
the 'REBUILD=1' argument.
Publishing archives
===================
Archives located in the depot can be conveniently made available to the public
using the _tool/depot/publish_ tool. Given an archive path, the tool takes
care of determining all archives that are implicitly needed by the specified
one, wrapping the archive's content into compressed tar archives, and signing
those.
As a precondition, the tool requires you to possess the private key that
matches the _depot/<you>/pubkey_ file within your depot. The key pair should
be present in the key ring of your GNU privacy guard.
To publish archives, one needs to specify the specific version to publish.
For example:
! ./tool/depot/publish <you>/pkg/x86_64/wm/2018-02-26
The command checks that the specified archive and all dependencies are present
in the depot. It then proceeds with the archiving and signing operations. For
the latter, the pass phrase for your private key will be requested. The
publish tool prints the information about the processed archives, e.g.:
! publish /.../public/<you>/api/base/2018-02-26.tar.xz
! publish /.../public/<you>/api/framebuffer_session/2017-05-31.tar.xz
! publish /.../public/<you>/api/gems/2018-01-28.tar.xz
! publish /.../public/<you>/api/input_session/2018-01-05.tar.xz
! publish /.../public/<you>/api/nitpicker_gfx/2018-01-05.tar.xz
! publish /.../public/<you>/api/nitpicker_session/2018-01-05.tar.xz
! publish /.../public/<you>/api/os/2018-02-13.tar.xz
! publish /.../public/<you>/api/report_session/2018-01-05.tar.xz
! publish /.../public/<you>/api/scout_gfx/2018-01-05.tar.xz
! publish /.../public/<you>/bin/x86_64/decorator/2018-02-26.tar.xz
! publish /.../public/<you>/bin/x86_64/floating_window_layouter/2018-02-26.tar.xz
! publish /.../public/<you>/bin/x86_64/report_rom/2018-02-26.tar.xz
! publish /.../public/<you>/bin/x86_64/wm/2018-02-26.tar.xz
! publish /.../public/<you>/pkg/wm/2018-02-26.tar.xz
! publish /.../public/<you>/raw/wm/2018-02-14.tar.xz
! publish /.../public/<you>/src/decorator/2018-02-26.tar.xz
! publish /.../public/<you>/src/floating_window_layouter/2018-02-26.tar.xz
! publish /.../public/<you>/src/report_rom/2018-02-26.tar.xz
! publish /.../public/<you>/src/wm/2018-02-26.tar.xz
According to the output, the tool populates a directory called _public/_
at the root of the Genode source tree with the to-be-published archives.
The content of the _public/_ directory is now ready to be copied to a
web server, e.g., by using rsync.
Automated extraction of archives from the source tree
#####################################################
Genode users are expected to populate their local depot with content obtained
via the _tool/depot/download_ tool. However, Genode developers need a way to
create depot archives locally in order to make them available to users. Thanks
to the _tool/depot/extract_ tool, the assembly of archives does not need to be
a manual process. Instead, archives can be conveniently generated out of the
source codes present in the Genode source tree and the _contrib/_ directory.
However, the granularity of splitting source code into archives, the
definition of what a particular API entails, and the relationship between
archives must be augmented by the archive creator as this kind of information
is not present in the source tree as is. This is where so-called "archive
recipes" enter the picture. An archive recipe defines the content of an
archive. Such recipes can be located at an _recipes/_ subdirectory of any
source-code repository, similar to how port descriptions and run scripts
are organized. Each _recipe/_ directory contains subdirectories for the
archive types, which, in turn, contain a directory for each archive. The
latter is called a _recipe directory_.
Recipe directory
----------------
The recipe directory is named after the archive _omitting the archive version_
and contains at least one file named _hash_. This file defines the version
of the archive along with a hash value of the archive's content
separated by a space character. By tying the version name to a particular hash
value, the _extract_ tool is able to detect the appropriate points in time
whenever the version should be increased due to a change of the archive's
content.
API, source, and raw-data archive recipes
-----------------------------------------
Recipe directories for API, source, or raw-data archives contain a
_content.mk_ file that defines the archive content in the form of make
rules. The content.mk file is executed from the archive's location within
the depot. Hence, the contained rules can refer to archive-relative files as targets.
The first (default) rule of the content.mk file is executed with a customized
make environment:
:GENODE_DIR: A variable that holds the path to root of the Genode source tree,
:REP_DIR: A variable with the path to source code repository where the recipe
is located
:port_dir: A make function that returns the directory of a port within the
_contrib/_ directory. The function expects the location of the
corresponding port file as argument, for example, the 'zlib' recipe
residing in the _libports/_ repository may specify '$(REP_DIR)/ports/zlib'
to access the 3rd-party zlib source code.
Source archive recipes contain simplified versions of the 'used_apis' and
(for libraries) 'api' files as found in the archives. In contrast to the
depot's counterparts of these files, which contain version-suffixed names,
the files contained in recipe directories omit the version suffix. This
is possible because the extract tool always extracts the _current_ version
of a given archive from the source tree. This current version is already
defined in the corresponding recipe directory.
Package-archive recipes
-----------------------
The recipe directory for a package archive contains the verbatim content of
the to-be-created package archive except for the _archives_ file. All other
files are copied verbatim to the archive. The content of the recipe's
_archives_ file may omit the version information from the listed ingredients.
Furthermore, the user part of each entry can be left blank by using '_' as a
wildcard. When generating the package archive from the recipe, the extract
tool will replace this wildcard with the user that creates the archive.
Convenience front-end to the extract, build tools
#################################################
For developers, the work flow of interacting with the depot is most often the
combination of the _extract_ and _build_ tools whereas the latter expects
concrete version names as arguments. The _create_ tool accelerates this common
usage pattern by allowing the user to omit the version names. Operations
implicitly refer to the _current_ version of the archives as defined in
the recipes.
Furthermore, the _create_ tool is able to manage version updates for the
developer. If invoked with the argument 'UPDATE_VERSIONS=1', it automatically
updates hash files of the involved recipes by taking the current date as
version name. This is a valuable assistance in situations where a commonly
used API changes. In this case, the versions of the API and all dependent
archives must be increased, which would be a labour-intensive task otherwise.
If the depot already contains an archive of the current version, the create
tools won't re-create the depot archive by default. Local modifications of
the source code in the repository do not automatically result in a new archive.
To ensure that the depot archive is current, one can specify 'FORCE=1' to
the create tool. With this argument, existing depot archives are replaced by
freshly extracted ones and version updates are detected. When specified for
creating binary archives, 'FORCE=1' normally implies 'REBUILD=1'. To prevent
the superfluous rebuild of binary archives whose source versions remain
unchanged, 'FORCE=1' can be combined with the argument 'REBUILD='.
Accessing depot content from run scripts
########################################
The depot tools are not meant to replace the run tool but rather to complement
it. When both tools are combined, the run tool implicitly refers to "current"
archive versions as defined for the archive's corresponding recipes. This way,
the regular run-tool work flow can be maintained while attaining a
productivity boost by fetching content from the depot instead of building it.
Run scripts can use the 'import_from_depot' function to incorporate archive
content from the depot into a scenario. The function must be called after the
'create_boot_directory' function and takes any number of pkg, src, or raw
archives as arguments. An archive is specified as depot-relative path of the
form '<user>/<type>/name'. Run scripts may call 'import_from_depot'
repeatedly. Each argument can refer to a specific version of an archive or
just the version-less archive name. In the latter case, the current version
(as defined by a corresponding archive recipe in the source tree) is used.
If a 'src' archive is specified, the run tool integrates the content of
the corresponding binary archive into the scenario. The binary archives
are selected according the spec values as defined for the build directory.

View File

@@ -21,14 +21,22 @@ Quick start to build Genode for Linux
The best starting point for exploring Genode is to run it on Linux. Make sure
that your system satisfies the following requirements:
* GNU 'Make' version 3.81 or newer
* GNU Make version 3.81 or newer
* 'libSDL-dev'
* 'tclsh' and 'expect'
* 'byacc' (only needed for the L4/Fiasco kernel)
* 'qemu' and 'genisoimage' (for testing non-Linux platforms via Qemu)
* 'qemu' and 'xorriso' (for testing non-Linux platforms via Qemu)
Furthermore, you will need to install the official Genode toolchain, which
you can download at [http://genode.org/download/tool-chain].
For using the entire collection of ported 3rd-party software, the following
packages should be installed additionally: 'autoconf2.64', 'autogen', 'bison',
'flex', 'g++', 'git', 'gperf', 'libxml2-utils', 'subversion', and 'xsltproc'.
Your exploration of Genode starts with obtaining the source code of the
[https://sourceforge.net/projects/genode/files/latest/download - latest version]
of the framework. For detailed instructions and alternatives to the
download from Sourceforge please refer to [https://genode.org/download].
Furthermore, you will need to install the official Genode tool chain, which
you can download at [https://genode.org/download/tool-chain].
The Genode build system never touches the source tree but generates object
files, libraries, and programs in a dedicated build directory. We do not have a
@@ -36,18 +44,24 @@ build directory yet. For a quick start, let us create one for the Linux base
platform:
! cd <genode-dir>
! ./tool/create_builddir linux_x86 BUILD_DIR=build.lx
! ./tool/create_builddir x86_64
The new build directory is called 'build.lx' and configured for the 'linux_x86'
platform. To give Genode a try, build and execute a simple demo scenario via:
This creates a new build directory for building x86_64 binaries in './build'.
The build system creates unified binaries that work on the given
architecture independent from the underlying base platform, in this case Linux.
! cd build.lx
! make run/demo
To give Genode a try, build and execute a simple demo scenario via:
! cd build/x86_64
! make KERNEL=linux BOARD=linux run/demo
By invoking 'make' with the 'run/demo' argument, all components needed by the
demo scenario are built and the demo is executed. If you are interested in
looking behind the scenes of the demo scenario, please refer to
'doc/build_system.txt' and the run script at 'os/run/demo.run'.
demo scenario are built and the demo is executed. This includes all components
which are implicitly needed by the base platform. The base platform that the
components will be executed upon on is selected via the 'KERNEL' and 'BOARD'
variables. If you are interested in looking behind the scenes of the demo
scenario, please refer to 'doc/build_system.txt' and the run script at
'os/run/demo.run'.
Using platforms other than Linux
@@ -60,12 +74,11 @@ different kernels such as L4/Fiasco, L4ka::Pistachio, OKL4, and NOVA. Those
kernels largely differ in terms of feature sets, build systems, tools, and boot
concepts. To relieve you from dealing with those peculiarities, Genode provides
you with an unified way of using them. For each kernel platform, there exists
a dedicated directory called 'base-<platform>'. Within this directory, you will
find a 'Makefile', which automates the task of downloading the source codes of
the kernel and interfacing the kernel with Genode. Just change to the
respective 'base-<platform>' directory and issue:
a dedicated description file that enables the 'prepare_port' tool to fetch and
prepare the designated 3rd-party sources. Just issue the following command
within the toplevel directory of the Genode source tree:
! make prepare
! ./tool/ports/prepare_port <platform>
Note that each 'base-<platform>' directory comes with a 'README' file, which
you should revisit first when exploring the base platform. Additionally, most
@@ -73,30 +86,38 @@ you should revisit first when exploring the base platform. Additionally, most
respective 'doc/' subdirectories.
For the VESA driver on x86, the x86emu library is required and can be
downloaded and prepared by invoking the following command from within the
'libports' directory:
downloaded and prepared by again invoking the 3rd-party sources preparation
tool:
! make prepare PKG=x86emu
! ./tool/ports/prepare_port x86emu
On x86 base platforms the GRUB2 boot loader is required and can be
downloaded and prepared by invoking:
! ./tool/ports/prepare_port grub2
Now that the base platform is prepared, the 'create_builddir' tool can be used
to create a build directory for your platform of choice by giving the platform
as argument. To see the list of available platforms, execute 'create_builddir'
with no arguments.
to create a build directory for your architecture of choice by giving the
architecture as argument. To see the list of available architecture, execute
'create_builddir' with no arguments. Note, that not all kernels support all
architectures.
For example, to give the demo scenario a spin on the OKL4 kernel, the following
steps are required:
# Download the kernel:
! cd <genode-dir>
! make -C repos/base-okl4 prepare
! ./tool/ports/prepare_port okl4
# Create a build directory
! ./tool/create_builddir okl4_x86 BUILD_DIR=build.okl4
# Uncomment the following line in 'build.okl4/etc/build.conf'
! ./tool/create_builddir x86_32
# Uncomment the following line in 'x86_32/etc/build.conf'
! REPOSITORIES += $(GENODE_DIR)/repos/libports
# Build and execute the demo using Qemu
! make -C build.okl4 run/demo
! make -C build/x86_32 KERNEL=okl4 BOARD=pc run/demo
The procedure works analogously for the other base platforms.
The procedure works analogously for the other base platforms. You can, however,
reuse the already created build directory and skip its creation step if the
architecture matches.
How to proceed with exploring Genode
@@ -120,5 +141,5 @@ Please feel welcome to ask your questions and to join the discussions:
:Genode Mailing Lists:
[http://genode.org/community/mailing-lists]
[https://genode.org/community/mailing-lists]

File diff suppressed because it is too large Load Diff

View File

@@ -396,8 +396,8 @@ at _ports/run/dosbox.run_.
First, we specify the components that need to be built
! set build_components {
! core init drivers/audio_out drivers/framebuffer drivers/input
! drivers/pci drivers/timer server/tar_fs app/dosbox
! core init drivers/audio drivers/framebuffer drivers/input
! drivers/pci drivers/timer app/dosbox
! }
! build $build_components
@@ -429,7 +429,7 @@ Nextm we provide the scenario's configuration 'config':
! <default-route>
! <any-service> <parent/> <any-child/> </any-service>
! </default-route>
! <start name="audio_out_drv">
! <start name="audio_drv">
! <resource name="RAM" quantum="6M"/>}
! <provides><service name="Audio_out"/></provides>
! </start>
@@ -466,7 +466,7 @@ components and application of the scenario, including DosBox.
Thereafter we declare all boot modules:
! set boot_modules {
! core init timer audio_out_drv fb_drv ps2_drv ld.lib.so
! core init timer audio_drv fb_drv ps2_drv ld.lib.so
! libc.lib.so libm.lib.so
! lwip.lib.so libpng.lib.so stdcxx.lib.so sdl.lib.so
! pthread.lib.so zlib.lib.so dosbox dosbox.tar
@@ -826,12 +826,12 @@ Build rules for Noux packages are located in _<genode-dir>/ports/src/noux-pkgs_.
The _tar/target.mk_ corresponding to GNU tar looks like this:
! NOUX_CONFIGURE_ARGS = --bindir=/bin \
! --libexecdir=/libexec
! CONFIGURE_ARGS = --bindir=/bin \
! --libexecdir=/libexec
!
! include $(REP_DIR)/mk/noux.mk
The variable 'NOUX_CONFIGURE_ARGS' contains the options that are
The variable 'CONFIGURE_ARGS' contains the options that are
passed on to Autoconf's configure script. The Noux specific build
rules in _noux.mk_ always have to be included last.
@@ -1051,24 +1051,24 @@ porting a program to Noux:
! # while compiling (e.g. -DSSH_PATH) and in the end the $prefix and
! # $exec_prefix path differ.
!
! NOUX_CONFIGURE_ARGS += --disable-ip6 \
! […]
! --exec-prefix= \
! --bindir=/bin \
! --sbindir=/bin \
! --libexecdir=/bin
! CONFIGURE_ARGS += --disable-ip6 \
! […]
! --exec-prefix= \
! --bindir=/bin \
! --sbindir=/bin \
! --libexecdir=/bin
In addition to the normal configure options, we have to also define the
path prefixes. The OpenSSH build system embeds certain paths in the
ssh binary, which need to be changed for Noux.
! NOUX_INSTALL_TARGET = install
! INSTALL_TARGET = install
Normally the Noux build rules (_noux.mk_) execute 'make install-strip' to
explicitly install binaries that are stripped of their debug symbols. The
generated Makefile of OpenSSH does not use this target. It automatically
strips the binaries when executing 'make install'. Therefore, we set the
variable 'NOUX_INSTALL_TARGET' to override the default behaviour of the
variable 'INSTALL_TARGET' to override the default behaviour of the
Noux build rules.
! LIBS += libcrypto libssl zlib libc_resolv
@@ -1118,7 +1118,7 @@ script by providing dummy libraries:
! #
! Makefile: dummy_libs
!
! NOUX_LDFLAGS += -L$(PWD)
! LDFLAGS += -L$(PWD)
!
! dummy_libs: libz.a libcrypto.a libssl.a
!
@@ -1137,7 +1137,7 @@ Even though Genode encourages writing native device drivers, this task sometimes
becomes infeasible. Especially if there is no documentation available for a
certain device or if there are not enough programming resources at hand to
implement a fully fledged driver. Examples of ported drivers can be found in
the 'dde_linux', 'dde_oss', and 'dde_ipxe' repositories.
the 'dde_linux', 'dde_bsd', and 'dde_ipxe' repositories.
In this chapter we will exemplary discuss how to port a Linux driver for an ARM
based SoC to Genode. The goal is to execute driver code in user land directly on

View File

@@ -811,7 +811,7 @@ are mapped to VFS directories. For example
! ...
! <config>
! ...
! <libc> <vfs> <dir name="ram"> <fs label="ram" /> </vfs> </libc>
! <libc> <vfs> <dir name="ram"> <fs label="ram" /> </dir> </vfs> </libc>
! <share host="/ram/miezekatze" guest="miezekatze" />
! ...
! </config>

1047
doc/release_notes-14-11.txt Normal file

File diff suppressed because it is too large Load Diff

899
doc/release_notes-15-02.txt Normal file
View File

@@ -0,0 +1,899 @@
===============================================
Release notes for the Genode OS Framework 15.02
===============================================
Genode Labs
Genode's [http://genode.org/about/road-map - roadmap] for this year puts a
strong emphasis on the consolidation and cultivation of the existing feature
set. With the first release of the year, version 15.02 pays tribute to this
mission by stepping up to extensive and systematic automated testing. As
a precondition for scaling up Genode's test infrastructure, the release
features a highly modular tool kit for exercising system scenarios on a growing zoo
of test machines. Section [Modular tool kit for automated testing] explains
the new tools in detail. In the spirit of improving the existing feature
set, Genode 15.02 vastly improves the performance and stability of our version of
VirtualBox running on the NOVA microhypervisor, solves long-standing shortcomings
of memory management on machines with a lot of RAM, addresses NOVA-related
scalability limitations, stabilizes our Rump-kernel-based file-system server,
and refines the configuration interface of the Intel wireless driver.
As the most significant new feature, the new version introduces virtualization
support for ARM to our custom base-hw kernel. Section [Virtualization on ARM]
outlines the design and implementation of this feature, which was greatly
inspired by NOVA's virtualization architecture and has been developed over the
time span of more than a year.
With respect to platform support, we are happy to accommodate the upcoming
USB-Armory board, which is a computer in the form factor of a USB
stick especially geared towards security applications. Section
[Support for the USB-Armory board] covers the background and the current
state of this line of work.
Virtualization on ARM
#####################
The ARMv7 architecture of recent processors like Cortex-A7, Cortex-A15, or
Cortex-A17 CPUs support hardware extensions to facilitate virtualization of
guest operating systems. With the current release, we enable the use of these
virtualization extensions in our custom base-hw kernel when running on the
Cortex-A15-based Arndale board.
While integrating ARM's virtualization extension, we aimed to strictly follow
microkernel-construction principles. The primary design is inspired by the
[http://hypervisor.org/ - NOVA OS Virtualization Architecture]. It is based on a
microhypervisor that provides essential microkernel mechanisms along with
basic primitives to switch between virtual machines (VMs). On top of the
microhypervisor, classical OS services are implemented as
ordinary, unprivileged user-level components. Those services can be used by other
applications. Services may be shared between applications or instantiated
separately, according to security and safety needs. Correspondingly,
following the NOVA principles, each VM has its own associated virtual-machine
monitor (VMM) that runs as an unprivileged user-level component. VMM implementations
can range from simple ones that just emulate primary device requirements to highly
complex monitors including sophisticated device models, like VirtualBox. The
NOVA approach allows to decouple the TCB complexity of one VM with respect to
another, as well as with respect to all components not related to
virtualization at all.
Along those lines, we extended the base-hw kernel/core conglomerate with API
extensions that enable user-level VMM components to create and control virtual
machines.
Design
======
The ARM virtualization extensions are based on the so-called security
extensions, commonly known as
[http://genode.org/documentation/articles/trustzone - TrustZone].
The ARM designers did not follow the
Intel approach to split the CPU into a "root" and a "guest" world while having all prior
existing CPU modes available in both worlds. Instead, ARM added a new privilege level
to the non-secure side of TrustZone that sits underneath the ordinary kernel
and userland privilege levels. It is subjected to a hypervisor-like kernel. All
instructions used to prepare a VM's environment have to be executed in this so
called "hyp" mode. In hyp mode, some instructions
differ from their regular behaviour on the kernel-privilege level.
For this reason, prior-existing kernel code cannot simply be reused in
hyp mode without modifications.
The base-hw kernel is meant to execute Genode's core component on bare hardware.
Core, which is an ordinary user-level component, is
linked together with a slim kernel library that is executed in privileged kernel
mode. To enable ARM hardware virtualization, we pushed this approach
even further by executing core in three different privilege levels. Thereby,
core shares the same view on hardware resources and virtual memory across all
levels. A code path is executed on a higher privilege level only if the code
would fail to execute on a lower privilege level.
Following this approach, we were able to keep most of the existing kernel code
with no modifications.
[image avirt_overview]
Genode's ARM kernel (core) runs across all privilege levels
The hypervisor part of core is solely responsible to switch between VMs and the
host system. Therefore, it needs to load/store additional CPU state that
normally remains untouched during context switches of ordinary tasks. It also needs to
configure the VM's guest-physical to host-physical memory translations. Moreover, the
virtualization extensions of the ARMv7 architecture are not related to the CPU
cores only. The interrupt controller and the CPU-local timers are also
virtualization-aware. Therefore, the hypervisor has to load/store state specific
to those devices, too. Nevertheless, the hypervisor merely reloads those
devices. It does not interpret their state.
In contrast to the low-complexity hypervisor, a user-level VMM can be complex
without putting the system's security at risk. It contains potentially complex
device-emulation code and assigns hardware resources such as memory and
interrupts to the VM. The VMM is an ordinary user-level component running
unprivileged. Of course, as a plain user-level component, it is not able to
directly access hardware resources. Hence an interface between VMMs and the
kernel is needed to share the state of a virtual machine. In the past, we faced a similar
problem when building a VMM for our former TrustZone experiments. It was natural
to build upon the available solution and to extend it where necessary. Core
provides a so-called VM service. Each VM corresponds to a session of this
service. The session provides the following extended interface:
:CPU state:
The CPU-state function returns a dataspace containing the virtual machine's
state. The state is initialized by the VMM before bootstrapping the VM, gets updated
by the hypervisor whenever it switches away from the VM, and can be used by
the VMM to interpret the behavior of the guest OS. Moreover, the CPU state can be
updated after the virtual machine monitor emulated instructions
for the VM.
:Exception handler:
The second function is used to register a signal handler that gets informed
whenever the VM produces a virtualization fault.
:Run:
The run function starts or resumes the execution of the VM.
:Pause:
The pause function removes the VM from the kernel's scheduler.
:Attach:
This function attaches a given RAM dataspace to a designated area of the
guest-physical address space.
:Detach:
The detach function invalidates a designated area of the guest-physical
address space.
:Attach_pic: Tells the hypervisor to attach the CPU's virtual interface of the
virtualization-aware interrupt controller to a designated area of the
guest-physical address space.
Implementation
==============
By strictly following the micro-kernel construction principles when integrating the
hypervisor into the base-hw kernel, we reached a minimally invasive solution. In
doing so, we took the time to separate TrustZone-specific code that was formerly
an inherent part of the kernel on ARMv7 platforms. Now, TrustZone- and
virtualization-specific aspects are incorporated into the kernel only if
actually used. The change in complexity of the whole core component expressed in
lines of code is shown in the table below. As can be seen, the additional code in
the root of the trusted computing base when using virtualization is about 700-800
LOC.
Platform | with TrustZone, no VT | TrustZone/VT optional
-----------------------------------------------------------------
hw_arndale | 17970 LOC | 18730 LOC
----------------------------------------------------------------
hw_imx53_qsb | 17900 LOC | 17760 LOC
----------------------------------------------------------------
hw_imx53_qsb_tz | 18260 LOC | 18320 LOC
----------------------------------------------------------------
hw_rpi | 17500 LOC | 17430 LOC
----------------------------------------------------------------
hw_panda | 18040 LOC | 17880 LOC
----------------------------------------------------------------
hw_odroid_xu | 17980 LOC | 18050 LOC
Besides the VM world switch, we enabled support for the so-called "large
physical address extension" (LPAE), which is obligatory when using
virtualization. It allows for addressing a 40-bit instead of only 32-bit physical
address space. Moreover, to execute in hypervisor mode, the bootstrap code of
the kernel had to be set up properly. Hence, when booting on the Arndale board,
the kernel now prepares the non-secure TrustZone world first, and finally leaves the
secure world forever.
To test and showcase the ARM virtualization features integrated in base-hw, we
implemented a minimal, exemplary VMM. It can be found in
_repos/os/src/server/vmm_. The VMM emulates a simplified variant of ARM's
Versatile Express Cortex-A15 development platform. Currently, it only comprises
support for the CPU, the timer, the interrupt controller, and a UART device. It is
written in 1100 lines of C++ in addition to the base Genode libraries. The VMM
is able to boot a vanilla Linux kernel compiled with a slightly modified
standard configuration (no-SMP), and a device tree description stripped down to
the devices provided by the VMM. This release includes an automated run test that
executes the Linux kernel on top of the VMM on Genode. It can be started via:
! make run/vmm
[image avirt_screen]
Three Linux serial consoles running in parallel on top of Genode
Modular tool kit for automated testing
######################################
In
[http://genode.org/documentation/release-notes/13.05#Automated_quality-assurance_testing - Genode version 13.05],
we already introduced comprehensive support for the automated testing of
Genode scenarios. Since then, Genode Labs has significantly widened the scope
of its internal test infrastructure, both in terms of the coverage of the test
scenarios as well as the variety of the used hardware platforms.
The centerpiece of our test infrastructure is the so-called run tool. Steered
by a script (run script), it performs all the steps necessary to test drive
a Genode system scenario. Those steps are:
# *Building* the components of a scenario
# *Configuration* of the init component
# Assembly of the *boot directory*
# Creation of the *boot image*
# *Powering-on* the test machine
# *Loading* of the boot image
# Capturing the *LOG output*
# *Validation* of the scenario behavior
# *Powering-off* the test machine
Each of those steps depends on various parameters such as the
used kernel, the hardware platform used to run the scenario, the
way the test hardware is connected to the test infrastructure
(e.g., UART, AMT, JTAG, network), the way the test hardware is powered or
reseted, or the way of how the scenario is loaded into the test hardware.
Naturally, to accommodate the growing variety of combinations of those
parameters, the complexity of the run tool increased over time.
This growth of complexity prompted us to eventually turn the run tool into a
highly modular and extensible tool kit.
Originally, the run tool consisted of built-in rules that could be
extended and tweaked by a kernel-specific supplement called run environment.
The execution of a run script used to depend on the policies built into
the run tool, the used run environment, and optional configuration
parameters (run opts).
The new run tool kit replaces most of the formerly built-in policies by the
ability to select and configure different modules for the various steps.
The selection and configuration of the modules is expressed in the run-tool
configuration. There exist the following types of modules:
:boot-dir modules:
These modules contain the functionality to populate the boot directory
and are specific to each kernel. It is mandatory to always include the
module corresponding to the used kernel.
_(the available modules are: linux, hw, okl4, fiasco, pistachio, nova,_
_codezero, foc)_
:image modules:
These modules are used to wrap up all components used by the run script
in a specific format and thereby prepare them for execution.
Depending on the used kernel, different formats can be used. With these
modules, the creation of ISO and disk images is also handled.
_(the available modules are: uboot, disk, iso)_
:load modules:
These modules handle the way the components are transfered to the
target system. Depending on the used kernel there are various options
to pass on the components. For example, loading from TFTP or via JTAG is handled
by the modules of this category.
_(the available modules are: tftp, jtag, fastboot)_
:log modules:
These modules handle how the output of a currently executed run script
is captured.
_(the available modules are: qemu, linux, serial, amt)_
:power_on modules:
These modules are used for bringing the target system into a defined
state, e.g., by starting or rebooting the system.
_(the available modules are: qemu, linux, softreset, powerplug, amt)_
:power_off modules:
These modules are used for turning the target system off after the
execution of a run script.
_(the available modules are: powerplug)_
When executing a run script, only one module of each category must be used.
Each module has the form of a script snippet located under the
_tool/run/<step>/_
directory where _<step>_ is a subdirectory named after the module type.
Further instructions about the use of each module (e.g., additional
configuration arguments) can be found in the form of comments inside the
respective script snippets.
Thanks to this modular structure,
the extension of the tool kit comes down to adding a file at the corresponding
module-type subdirectory. This way, custom work flows (such as tunneling JTAG
over SSH) can be accommodated fairly easily.
Usage examples
==============
To execute a run script, a combination of modules may be used. The combination
is controlled via the RUN_OPT variable used by the build framework. Here are a
few common exemplary combinations:
Executing NOVA in Qemu:
!RUN_OPT = --include boot_dir/nova \
! --include power_on/qemu --include log/qemu --include image/iso
Executing NOVA on a real x86 machine using AMT for resetting the target system
and for capturing the serial output while loading the files via TFTP:
!RUN_OPT = --include boot_dir/nova \
! --include power_on/amt --power-on-amt-host 10.23.42.13 \
! --power-on-amt-password 'foo!' \
! --include load/tftp --load-tftp-base-dir /var/lib/tftpboot \
! --load-tftp-offset-dir /x86 \
! --include log/amt --log-amt-host 10.23.42.13 \
! --log-amt-password 'foo!'
Executing Fiasco.OC on a real x86 machine using AMT for resetting, USB serial
for output while loading the files via TFTP:
!RUN_OPT = --include boot_dir/foc \
! --include power_on/amt --amt-host 10.23.42.13 --amt-password 'foo!' \
! --include load/tftp --tftp-base-dir /var/lib/tftpboot \
! --tftp-offset-dir /x86 \
! --include log/serial --log-serial-cmd 'picocom -b 115200 /dev/ttyUSB0'
Executing base-hw on a Raspberry Pi using powerplug to reset the hardware,
JTAG to load the image and USB serial to capture the output:
!RUN_OPT = --include boot_dir/hw \
! --include power_on/powerplug --power-on-powerplug-ip 10.23.42.5 \
! --power-on-powerplug-user admin \
! --power-on-powerplug-password secret \
! --power-on-powerplug-port 1
! --include power_off/powerplug --power-off-powerplug-ip 10.23.42.5 \
! --power-off-powerplug-user admin \
! --power-off-powerplug-password secret \
! --power-off-powerplug-port 1
! --include load/jtag \
! --load-jtag-debugger /usr/share/openocd/scripts/interface/flyswatter2.cfg \
! --load-jtag-board /usr/share/openocd/scripts/interface/raspberrypi.cfg \
! --include log/serial --log-serial-cmd 'picocom -b 115200 /dev/ttyUSB0'
After the run script was executed successfully, the run tool will print the
string 'Run script execution successful.". This message can be used to check
for the successful completion of the run script when doing automated testing.
Meaningful default behaviour
============================
To maintain the ease of use of creating and using a build directory, the
'create_builddir' tool equips a freshly created build directory with a meaningful
default configuration that depends on the selected platform. For example, if
creating a build directory for the Linux base platform, RUN_OPT
is initially defined as
! RUN_OPT = --include boot_dir/linux \
! --include power_on/linux --include log/linux
Low-level OS infrastructure
###########################
Improved management of physical memory
======================================
On machines with a lot of memory, there exist constraints with regard to
the physical address ranges of memory:
* On platforms with a non-uniform memory architecture, subsystems should
preferably use memory that is local to the CPU cores the subsystem is using.
Otherwise the performance is impeded by costly memory accesses to
the memory of remote computing nodes.
* Unless an IOMMU is used, device drivers program physical addresses
into device registers to perform DMA operations. Legacy devices such as
USB UHCI controllers expect a 32-bit address. Consequently, the memory
used as DMA buffers for those devices must not be allocated above 4 GiB.
* When using an IOMMU on NOVA, Genode represents the address space
accessible by devices (by the means of DMA) using a so-called device PD
([http://genode.org/documentation/release-notes/13.02#DMA_protection_via_IOMMU]).
DMA transactions originating from PCI devices are subjected to the virtual
address space of the device PD.
All DMA buffers are identity-mapped with their physical addresses within
the device PD. On 32-bit systems with more than 3 GiB of memory, this
creates a problem. Because the device PD is a regular user-level component, the
upper 1 GiB of its virtual address space is preserved for the kernel. Since
no user-level memory objects can be attached to this
area, the physical address range to be used for DMA buffers is limited
to the lower 3 GiB.
Up to now, Genode components had no way to influence the allocation of
memory with respect to physical address ranges. To solve the problems outlined
above, we extended core's RAM services to take allocation constraints
as session arguments when a RAM session is created. All dataspaces created
from such a session are subjected to the specified constraints. In particular,
this change enables the AHCI/PCI driver to allocate DMA buffers at suitable
physical address ranges.
This innocent looking feature to constrain RAM allocations raises a problem
though: If any component is able to constrain RAM allocations in
arbitrary ways, it would become able to scan the physical address space for
allocated memory by successively opening RAM sessions with the constraints set
to an individual page and observe whether an allocation succeeds or not. Two
conspiring components could use this information to construct a covert storage
channel.
To prevent such an abuse, the init component filters out allocations
constrains from RAM-session requests unless explicitly permitted. The
permission is granted by supplementing the RAM resource assignment of
a component with a new 'constrain_phys' attribute. For example:
! <resource name="RAM" quantum="3M" constrain_phys="yes"/>
Init component
==============
Most of Genode's example scenarios in the form of run scripts support
different platforms. However, as the platform details vary, the run scripts
have to tweak the configuration of the init component according to the
features of the platform.
For example, when declaring an explicit route to a framebuffer driver named
"fb_drv", the run script won't work on Linux because on this platform, the
framebuffer driver is called "fb_sdl".
Another example is the role of the USB driver. Depending on the platform, the
USB driver is an input driver, a block driver, a networking driver, or a
combination of those.
Consequently, run scripts with support
for a great variety of platforms tend to become convoluted with
platform-specific conditionals.
To counter this problem, we enhanced init to support aliases for component
names. By defining the following aliases in the init configuration
! <alias name="nic_drv" child="usb_drv"/>
! <alias name="input_drv" child="usb_drv"/>
! <alias name="block_drv" child="usb_drv"/>
the USB driver becomes reachable for session requests routed to either "usb_drv",
"nic_drv", "input_drv", and "block_drv". Consequently, the routing
configuration of components that use either of those drivers does no longer
depend on any platform-intrinsic knowledge.
RTC session interface
=====================
Until now, the RTC session interface used an integer to return the current
time. Although this is preferable when performing time-related
calculations, a structured representation is more convenient to use, i.e., if
the whole purpose is showing the current time. This interface change is only
visible to components that use the RTC session directly.
Since the current OS API of Genode lacks time-related functions, most users
end up using the libc, which already converts the structured time stamp
internally, or provide their own time related functions.
Update of rump-kernel-based file systems
========================================
We updated the rump-kernel support to a newer rump-kernel version (as of mid of
January 2015). This way, Genode is able to benefit from upstream stability
improvements related to the memory management. Furthermore, we revised the
Genode backend to allow the rump_fs server to cope well with a large amount of
memory assigned to it. The latter is useful to utilize the block cache of the
NetBSD kernel.
Libraries and applications
##########################
As a stepping stone in the
[https://github.com/genodelabs/genode/issues/1399 - forthcoming community effort]
to bring the Nix package manager to Genode, ports of libbz2 and sqlite have
been added to the _repos/libports/_ repository.
Runtime environments
####################
VirtualBox on NOVA
==================
Whereas our previous efforts to run VirtualBox on Genode/NOVA were mostly
concerned with enabling principal functionality and with the addition of
features, we took the release cycle of Genode 15.02 as a chance to focus
on performance and stability improvements.
:Performance:
Our goal with VirtualBox on NOVA is to achieve a user experience
comparable to running VirtualBox on Linux. Our initial port of VirtualBox used
to cut a lot of corners with regards to performance and timing accuracy
because we had to concentrate on more fundamental issues of the porting
work first. Now, with the feature set settled, it was time to revisit
and solidify our interim solutions.
The first category of performance improvements is the handling of timing,
and virtual guest time in particular. In our original version,
we could observe a substantial drift of the guest time compared to the host time.
The drift is not merely inconvenient but may even irritate the guest OS
because it violates its assumptions about the behaviour of certain virtual devices.
The drift was caused by basing the timing on a simple jiffies counter
that was incremented by a thread after sleeping for a fixed period. Even
though the thread almost never executes, there is still a chance that it gets
preempted by the kernel and resumed only after the time slices of
concurrently running threads have elapsed. This can take tens of milliseconds.
During this time, the jiffies counter remains unchanged. We could
significantly reduce the drift by basing the timing on absolute time values
requested from the timer driver. Depending on the used guest OS, however,
there is still a residual inaccuracy left, which is subject to ongoing
investigations.
The second type of improvements is related to the handling of virtual
interrupts. In its original habitat, VirtualBox relies on so-called
external-interrupt virtualization events. If a host interrupt occurs while the
virtual machine is active, the virtualization event is forwarded by the
VirtualBox hypervisor to the virtual machine monitor (VMM).
On NOVA, however, the kernel does not propagate this
condition to the user-level VMM because the occurrence of host interrupts should
be of no matter to the VMM. In the event of a host interrupt, NOVA takes
a normal scheduling decision (eventually activating the user-level device driver
the interrupt belongs to) and leaves the virtual CPU (vCPU) in a runnable
state - to be rescheduled later. Once the interrupt is handled, the vCPU gets
resumed. The VMM remains out of the loop. Because the update of the VirtualBox
device models ultimately relies on the delivery of external-interrupt
virtualization events, the lack of this kind of event introduced huge delays
with respect to the update of device models and the injection of virtual
interrupts. We solved this problem by exploiting a VirtualBox-internal
mechanism called POKE. By setting the so-called POKE flag, an I/O thread is
able to express its wish to force the virtual machine into the VMM. We only
needed to find the right spots to set the POKE flag.
Another performance-related optimization is the caching of RTC time
information inside VirtualBox. The original version of the gettimeofday
function used by VirtualBox contacted the RTC server for obtaining the
wall-clock time on each call. After the update to VirtualBox 4.3, the rate of those
calls increased significantly. To reduce the costs of these calls, our
new version of gettimeofday combines infrequent calls to the RTC driver
with a component-local time source based on the jiffies mechanism mentioned above.
With these optimizations in place,
simple benchmarks like measuring the boot time of Window 7 or the time of
compiling Genode within a Debian VM suggest that our version of VirtualBox
has reached a performance that is roughly on par with the Linux version.
:Stability:
Since the upgrade to VirtualBox 4.3.16 in release 14.11, we fixed several
regression issues caused by the upgrade. Beside that, we completed the
support to route serial output of guests to Genode, lifted the restriction
to use just one fixed VESA mode, and enabled support for 32-bit Windows 8
guests on 64-bit Genode/NOVA. The 64-bit host restriction stems from
the fact that Windows 8 requires support for the non-executable bit (NX)
feature of page tables. The 32-bit version of the NOVA kernel does not leverage
the physical address extension (PAE) feature, which is a pre-requisite for
using NX on 32-bit.
In the course of the adaptation, our port of VirtualBox now evaluates the
PAE and HardwareVirtExUX XML tags of .vbox files:
!<VirtualBox xmlns=...>
! <Machine uuid=...>
! <Hardware ..>
! <CPU ...>
! <HardwareVirtExUX enabled="true"/>
! <PAE enabled="true"/>
! ...
The PAE tag specifies whether to report PAE capabilities to the guest
or not. The HardwareVirtExUx tag is used by our port to decide whether to stay
for non-paged x86 modes in Virtualbox's recompiler (REM) or not. Until now, we used REM
to emulate execution when the guest was running in real mode and protected mode
with paging disabled. However, newer Intel machines support the unrestricted guest
feature, which makes the usage of REM in non-paged modes not strictly
necessary anymore. Setting the HardwareVirtExUx tag to false accommodates
older machines with no support for the unrestricted-guest feature.
Device drivers
##############
iPXE-based network drivers
==========================
We enabled and tested the driver with Intel I218-LM and I218-V PCI devices.
Intel wireless stack
====================
In this release, several small issues regarding the wireless stack are fixed.
From now on, the driver only probes devices on the PCI bus that correspond to
the PCI_CLASS_NETWORK_OTHER device class. Prior to that, the driver probed all
devices attached to the bus resulting in problems with other devices, e.g.
the GPU, when accessing their extended PCI config space.
Since the driver uses cooperative scheduling internally, it must never block
or, in case it blocks, must schedule another task. Various sleep functions
lacked this scheduling call and are now fixed. Furthermore, a bug in the timer
implementation has been corrected, which caused the scheduling of wrong timeouts.
In addition to these fixes, patches for enabling the support for
Intel 7260 cards were incorporated.
Up to now, the configuration of the wireless driver was rather inconvenient because
it did not export any information to the system. The driver now creates two
distinct reports to communicate its state and information about the wireless
infrastructure to other components. The first one is a list of all available
access points. The following exemplary report shows its structure:
!<wlan_accesspoints>
! <accesspoint ssid="skynet" bssid="00:01:02:03:04:05" quality="40"/>
! <accesspoint ssid="foobar" bssid="01:02:03:04:05:06" quality="70" protection="WPA-PSK"/>
! <accesspoint ssid="foobar" bssid="01:02:03:04:05:07" quality="10" protection="WPA-PSK"/>
!</wlan_accesspoints>
Each '<accesspoint>' node has attributes that contain the SSID and the BSSID
of the access point as well as the link quality (signal strength). These
attributes are mandatory. If the network is protected, the node will also
have an attribute describing the type of protection in addition.
The second report provides information about the state of the connection
with the currently associated access point:
!<wlan_state>
! <accesspoint ssid="foobar" bssid="01:02:03:04:05:06" quality="70"
! protection="WPA-PSK" state="connected"/>
!</wlan_state>
Valid state values are 'connected', 'disconnected', 'connecting' and
'disconnecting'.
The driver obtains its configuration via a ROM module. This ROM
module contains the selected access point and can be updated during runtime.
To connect to an access point, a configuration like the following is used:
!<selected_accesspoint ssid="foobar" bssid="01:02:03:04:05:06"
! protection="WPA-PSK" psk="foobar123!"/>
To disconnect from an access point, an empty configuration can be set:
!<selected_accesspoint/>
For now, the prevalent WPA/WPA2 protection using a pre-shared key is supported.
Improved UART driver for Exynos5
================================
The UART driver for the Exynos5 SoC has been enhanced by enabling the RX
channel. This improvement was motivated by automated tests, where a run script
needs to interact with some component via a terminal connection.
Touchscreen support
===================
We enabled support of Wacom USB touchscreen devices via dde_linux - a port of
Linux USB driver to Genode. In order to make touchscreen coordinates
usable by Genode's input services, they must be calibrated
to screen-absolute coordinates. The screen resolution is not determined
automatically by the USB driver. It can, however, be configured as a sub
node of the '<hid>' XML tag of the USB driver's configuration:
!<start name="usb_drv">
! ...
! <config uhci=... ohci=... xhci=...>
! <hid>
! <screen width="1024" height="768"/>
! </hid>
! ...
USB session interface
=====================
We enhanced our USB driver with the support of remote USB sessions. This
feature makes it possible to implement USB-device drivers outside the USB
server using a native Genode API. The new USB session can be found under
_repos/os/include/usb_session_ and can be used to communicate with the USB
server, which merely acts as a host controller and HUB driver in this scenario.
Under _repos/os/include/usb_, there are a number of convenience
and wrapper functions that operate directly on top of a USB session. These
functions are meant to ease the task of USB-device-driver programming by hiding
most of the USB session management, like packet-stream handling.
We also added a USB terminal server, which exposes a Genode terminal session to
its clients and drives the popular PL2303 USB to UART adapters using the new
USB-session interface.
A practical use case for this component is the transmission of logging data on
systems where neither UART, AMT, nor JTAG are available. A run script
showcasing this feature can be found at _repos/dde_linux/run/usb_terminal.run_.
RTC proxy driver for Linux
==========================
There are a handful of run scripts that depend on the RTC service. So far,
it was not possible to run these tests on Linux due to the lack of an RTC
driver on this platform. To address this problem, we created a proxy driver
that uses the time() system call to provide a
reasonable base period on Linux.
Platforms
#########
Execution on bare hardware (base-hw)
====================================
Support for the USB-Armory board
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
With [https://www.crowdsupply.com/inverse-path/usb-armory - USB Armory],
there is an intriguing hardware platform for Genode on the horizon.
In short, USB Armory is a computer in the form factor of a USB
stick. It is meant for security applications such as VPNs,
authentication tokens, and encrypted storage. It is based on the
FreeScale i.MX53 SoC, which is well supported by Genode, i.e.,
Genode can be used as secure-world OS besides Linux running in the
normal world.
Apart from introducing a novel form factor, this project is
interesting because it strives to be an 100% open platform, which
includes hardware, software, and firmware. This motivated us to
bring Genode to this platform.
The underlying idea is to facilitate
[http://genode.org/documentation/articles/trustzone - ARM TrustZone] to
use Genode as a companion to a Linux-based OS on the platform.
Whereas Linux would run in the normal world of TrustZone, Genode runs
in the secure world. With Linux, the normal world will control the
communication over USB and provide a familiar environment to implement
USB-Armory applications. However, security-critical functions and data like
cryptographic keys will reside exclusively in the secure world. Even in
the event that Linux gets compromised, the credentials of the user
will stay protected.
The support of the USB Armory platform was added in two steps:
First, we enabled our base-hw kernel to run as TrustZone monitor with
Genode on the "secure side". Since the USB Armory is based on the
FreeScale i.MX53 SoC, which Genode already supported, this step went
relatively straight-forward.
Second, we enabled a recent version of the Linux kernel (3.18) to run in the
normal world. The normal world is supervised by a user-level Genode component
called tz_vmm (TrustZone Virtual Machine Monitor). The tz_vmm is, among
others, responsible for providing startup and hardware information to the
non-secure guest. The Linux kernel version we used previously as TrustZone
guest on i.MX53 boards expected this information to be communicated via
so-called ATAGs. The new version, however, expects this to be done via a
device tree blob. As a consequence, the tz_vmm had to be adapted to properly
load this blob into the non-secure RAM. The original USB-Armory device tree
was modified to blind out the RAM regions that get protected by the TrustZone
hardware. This way, Linux won't attempt to access them. Furthermore,
to keep basic user interaction simple, our device tree tells Linux to use the
same non-secure UART as Genode for console I/O.
The kernel itself received some modifications, for two reasons. First,
we don't want Linux to rely on resources that are protected to keep
the secure world secure. This is why the driver for the interrupt controller
that originally made use of the TrustZone interrupt configuration, had to be
adapted. Second, to prevent Linux from disturbing Genode activities, we
disabled most of the dynamic clock and power management as it may sporadically
gear down or even disable hardware that Genode relies on. Furthermore, we
disabled the Linux drivers for I2C interfaces and the GPIO configuration as
these are reserved for Genode.
IPC helping
~~~~~~~~~~~
In traditional L4 microkernels, scheduling parameters (like time-slice
length and priority) used to be bound to threads. Usually, those parameters
are defined at thread creation time. The initial version
of base-hw followed this traditional approach. However, it has a few problems:
* For most threads, the proper *choice of scheduling parameters* is very
difficult if not impossible. For example, the CPU-time demands of a
server thread may depend on the usage patterns of its clients. Most
theoretical work in the domain of scheduling presumes the knowledge of
job lengths in advance of computing a schedule. But in practice and in
particular in general-purpose computing, job lengths are hardly known a priori.
As a consequence, in most scenarios, scheduling parameters are
set to default values.
* With each thread being represented as an independent schedulable entity,
the kernel has to take a scheduling decision each time a thread performs an
IPC call because the calling thread gets blocked and the called thread
may get unblocked. In a microkernel-based system, those events occur at a
much higher rate than the duration of typical time slices, which puts the
scheduler in a *performance-critical* position.
* Regarding IPC calls, a synchronous flow of control along IPC call chains is
desired. Ideally, an IPC call should have the same characteristics as
a function call with respect to scheduling. When a client thread performs an
IPC call, it expects the server to immediately become active to
handle the request. But if the kernel treats each thread independently,
it may pick any other thread and thereby introduce *high latencies* into
IPC operations.
To counter those problems, the NOVA microhypervisor introduced a new approach
that decouples scheduling parameters from threads. Instead of selecting
threads for execution, the scheduler selects so-called scheduling contexts.
For a selected scheduling context, the kernel dynamically determines a
thread to execute by taking IPC relationships into account. When a thread
performs an IPC, the thread's scheduling context will be used to execute
the called server. In principle, a server does not need CPU time on its own
but always works with CPU resources provided by clients.
The new version of the base-hw kernel adapts NOVA's approach with slight
modifications. Each thread owns exactly one scheduling context for its entire
lifetime. However, by the means of "helping" during an IPC call, the caller
lends its scheduling context to the callee. Even if the callee is still busy
and cannot handle the IPC request right away, the caller helps because it
wants the callee to become available for its request as soon as
possible. Consequently, a thread has potentially many scheduling contexts at
its disposal, its own scheduling context plus all scheduling contexts
provisioned by helpers. This works transitively.
Purged outdated platforms
~~~~~~~~~~~~~~~~~~~~~~~~~
We removed the support for two stale platforms that remained unused for
more than a year, namely FreeScale i.MX31 and the TrustZone variant
of the Coretile Versatile Express board.
NOVA
====
On Genode/NOVA, we used to employ one pager thread in core for each thread
in the system. We were forced to do so because not every page
fault can be resolved immediately. In some situations, core asynchronously
propagates the fault to an external component for the resolution.
In the meantime, the
pager thread leaves the page fault unanswered. Unfortunately, the kernel
provides no mechanism to support this scenario besides just blocking the
pager thread using a semaphore. This, in turn, means that the pager thread is not
available for other page-fault requests. Ultimately, we had to setup a
dedicated pager per thread.
This implementation has the downside of "wasting" memory for a lot of
pager threads. Moreover, it becomes a denial-of-service vector as soon as more
threads get created than core can accommodate. The number of threads is
limited per address space - also for core - by the size of Genode's context
area, which typically means 256 threads.
To avoid the downsides mentioned, we extended the NOVA IPC reply syscall to
specify an optional semaphore capability. The NOVA kernel validates the
capability and blocks the faulting thread in the semaphore. The faulted thread
remains blocked even after the pager has replied to the fault message. But
the pager immediately becomes available for other
page-fault requests. With this change, it suffices to maintain only one pager
thread per CPU for all client threads.
The benefits are manifold. First, the base-nova implementation converges more
closely to other Genode base platforms. Second, core can not run out of threads
anymore as the number of threads in core is fixed for a given setup. And the
third benefit is that the helping mechanism of NOVA can be leveraged for
concurrently faulting threads.
Build system and tools
######################
Tools for convenient handling of port contrib directories
=========================================================
We supplemented our tools for the ports mechanism with two convenient
scripts:
:_tool/ports/shortcut_:
Creates a symbolic link from _contrib/<port-name>-<hash>_ to
_contrib/<port-name>_. This is useful when working on the third-party
code contained in the _contrib_ directory.
:_tool/ports/current_:
Prints the current contrib directory of a port. When switching
branches back and forth, the hash of the used port might change.
The script provides a shortcut to looking up the hash file for a
specific port within the repositories and printing its content.

1216
doc/release_notes-15-05.txt Normal file

File diff suppressed because it is too large Load Diff

791
doc/release_notes-15-08.txt Normal file
View File

@@ -0,0 +1,791 @@
===============================================
Release notes for the Genode OS Framework 15.08
===============================================
Genode Labs
The version 15.08 marks the beginning of Genode as day-to-day OS as one of the
project's core developers switched to using Genode/NOVA on his machine,
stressing the OS infrastructure we created over the course of the last seven
years. Thanks to components like VirtualBox, the Noux runtime for GNU software,
the Linux wireless stack and Rump-kernel-based file systems, the transition
went actually much smoother than expected. So other members of the team plan
to follow soon. Section [Genode as day-to-day operating system] gives an
overview of the taken approach. Genode's use as general-purpose OS provided
the incentive for most of the improvements featured by the current release,
starting with the addressing of the long-standing kernel-memory management
deficiencies of the NOVA kernel (Section [NOVA kernel-resource management]),
over enhancements of Genode's tracing and file-system facilities, to vast
improvements of the guest-host integration of VirtualBox when running on
Genode.
The release is accompanied with a second line of work led by our friends
at Codelabs: Enabling Genode to run on top of their Muen separation
kernel as described in Section [Genode on top of the Muen Separation Kernel].
Muen is a low-complexity kernel for the 64-bit x86 architecture that
statically partitions the machine into multiple domains. In contrast to
microkernels like the ones already supported by Genode, the assignment
of physical resources (such as memory, CPU time, and devices) happens at
system-integration time. Since an isolation kernel does not have to deal
with dynamic resource management at runtime, it is less complex than
a general-purpose microkernel. This makes it relatively easy to reason about
its strong isolation properties, which, in turn, makes it attractive for
high-assurance computing. With Genode being able to run within a Muen
domain, the rich component infrastructure of Genode can be combined with
the strong isolation guarantees of Muen.
Genode on top of the Muen Separation Kernel
###########################################
_This section was written by Adrian-Ken Rueegsegger and Reto Buerki who_
_conducted the described line of work independent from Genode Labs._
After completing our x86_64 port of the Genode base-hw kernel, which was
featured in the
[http://genode.org/documentation/release-notes/15.05#Principal_support_for_the_64-bit_x86_architecture - previous release (15.05)],
we immediately started working on our main goal: running a Genode system as
guest on the Muen Separation Kernel (SK). This would enable the Muen platform
to benefit from the rich ecosystem of Genode.
For those who have not read the 15.05 Genode release notes, [http://muen.sk - Muen]
is an Open-Source microkernel, which uses the [http://spark-2014.org/ - SPARK]
programming language to enable light-weight formal methods for high assurance.
The 64-bit x86 kernel, currently consisting of a little over 5'000 LOC, makes
extensive use of the latest Intel virtualization features and has been formally
proven to contain no runtime errors at the source-code level.
The new 'hw_x86_64_muen' platform, as the name implies, extends the 'hw_x86_64'
base-hw kernel by replacing the PIC and timer drivers with paravirtualized
variants.
In contrast to other kernels supported by Genode, the architecture with Muen is
different in the sense that the entire 'hw_x86_64_muen' Genode system runs as
guest VM in VMX non-root mode on the SK. From the perspective of Muen, Genode
is executed on top of the kernel like any other guest OS without special
privileges.
[image muen_system_overview]
Genode running on top of the Muen Separation Kernel alongside other subjects
This loose coupling of Muen and Genode base-hw enables the robust combination
of a static, low-complexity SK with a feature-rich and extensive OS framework.
The result is a flexible platform for the construction of component-based
high-assurance systems.
People interested in giving the 'hw_x86_64_muen' platform a spin can find a
small tutorial at _repos/base-hw/doc/x86_64_muen.txt_.
NOVA kernel-resource management
###############################
For several years, the NOVA kernel has served as Genode's primary base
platform on x86. The main reasons for this choice are: the kernel provides -
among the supported x86 kernels - the richest feature set like the support of
IOMMUs, virtualization, and SMP. It also offers a clean design and a stable
kernel interface. The available kernel-interface specification and the
readable and modern source base are a pleasure to work with. Hence, Genode
Labs is able to fully commit to the maintenance and further evolution of this
kernel.
Nevertheless, since the beginning, the vanilla kernel lacks one essential
feature to reliably host Genode as user-land, namely the proper management of
the memory used by the kernel itself (in short kernel-memory management). In
the past, we already extended the kernel to free up kernel resources when
destroying kernel objects, e.g., protection domains and page-tables, threads,
semaphores, and portals. Still, on Genode/NOVA, a component may trigger
arbitrary kernel-memory consumption during RPC by delegating memory,
capabilities, or by creating other components via Genode's core component. If
the kernel memory gets depleted, the kernel panics with an "Out of memory"
message and the entire Genode scenario stops.
In principal, the consumption of kernel memory can be deliberately provoked by
a misbehaving (greedy) component. But also during the regular day-to-day usage
of Genode, can such a situation occur when the system is used in a highly
dynamic fashion. For example, compiling and linking source code within the
noux environment constantly creates and destroys protection domains, threads,
and memory mappings. Our nightly test of compiling Genode within noux triggers
this condition every once in a while.
The main issue here is that the consumption of kernel memory is not accounted
by Genode. The kernel interface does not support such a feature. Kernels like
seL4 as well as Genode's custom base-hw kernel show how this problem can be
solved.
To improve the current situation - where the overall kernel memory is a fixed
amount - we extended NOVA in the following ways: First, the NOVA kernel
accounts any kernel memory consumption per protection domain. Second, each
process has a limited amount of kernel-memory quota it can use. Last, the
kernel detects when the quota limit of a protection domain is reached.
If the third condition occurs, the kernel stops the offending thread and
(optionally) notifies a handler thread. This so called out-of-memory (OOM)
handler thread receives information about the current situation and may
respond to it in the following ways:
* Stop the thread of the depleted protection domain, or
* Transfer kernel-memory quota between protection domains (upgrading the limit
if desired), or
* Free up kernel memory if possible, e.g., revoke memory delegations, which
can be re-created.
We implemented the steps above inside the NOVA kernel and extended Genode's
core component to handle such OOM situations. All system calls beside the IPC
call/reply may now return an error code upon depletion of the quota. Most of
these system calls can solely be performed by core and are handled inside
core's NOVA-specific platform code.
In the case of IPC call/reply operations, we desired to handle OOM cases
transparently to Genode user-level components. Therefore, each thread in
Genode/NOVA now gets constructed with an OOM IPC portal attached. This portal
is served by the pager thread in core and is traversed on OOM occurrences
during IPC operations. If a pager thread receives such an OOM IPC, it decodes
the involved IPC sender and IPC receiver and locates the appropriate
core-internal paging objects. The currently implemented out-of-memory policy
tries to upgrade the quota. If this is not possible, an attempt to revoke
memory mappings from the OOM-causing protection domain is made. This
implicitly frees-up some kernel memory (e.g., mapping nodes). If none of the
responses suffices, the handler stops the OOM-causing thread and writes a
message to the system log.
The current policy implementation constitutes a rather rough heuristic, which
may not suffice under all circumstances. In the future, we would like to
specify a distinct policy per component, e.g. depending on prior known memory
usage patterns. For example, some components follow well-known usage patterns
and therefore a fixed upper quota limit can be specified. Other components are
highly dynamic and desire quota upgrades on demand. There are many more
combinations imaginable.
Our current plan is to collect more experience over the next months with this
new kernel mechanism. Based on our observations, we may externalize such
policy decisions and possibly make them configurable per component.
The current implementation however, already avoids the situation that the
kernel goes out of service if a single component misbehaves
kernel-memory-wise.
Genode as day-to-day operating system
#####################################
At the beginning of June, Genode reached the probably most symbolic milestone
in the project's history: Norman - one of the core developers - replaced his
Linux-based working environment with a Genode-based system. This system is
composed of the following ingredients:
[image turmvilla_scenario]
The machine used is a Lenovo Thinkpad X201. We settled on this five-year-old
machine for several reasons. First, it is a very solid platform with a nice
form factor. Second, it features Intel's AMT (Active Management Technology),
which is handy to obtain low-level system logs in the case something goes
wrong. Third, refurbished machines of this type can be obtained for as little
as 200 EUR. Finally, an older machine reinforces the need for good performance
of the operating system. So it creates a natural incentive for Norman to find
and address performance bottlenecks.
Our modified version of the NOVA microhypervisor is the used kernel.
The user interface is based on our custom GUI stack including the nitpicker
GUI server as well as the window manager and its companion components
(decorator, layouter, pointer) we introduced in
[http://genode.org/documentation/release-notes/14.08#New_GUI_architecture - version 14.08].
The display is driven by the VESA driver. User input is handled by the PS/2
driver for handling the laptop keyboard and trackpoint, and the USB driver for
handling an externally connected keyboard and mouse.
Network connectivity is provided by our port of the Intel Wireless stack that
we introduced with the version
[http://genode.org/documentation/release-notes/14.11#Intel_wireless_stack - 14.11].
Our custom AHCI driver provides access to the physical hard disk. File-system
access is provided by our
[http://genode.org/documentation/release-notes/14.02#NetBSD_file_systems_using_rump_kernels - Rump-kernel-based file-system server].
A simple Genode shell called CLI monitor allows the user to start and kill
subsystems dynamically. Initially, the two most important subsystems are
VirtualBox and Noux.
VirtualBox executes a GNU/Linux-based guest OS that we refer to as "rich OS".
The rich OS serves as a migration path from GNU/Linux to Genode. It is used
for all tasks that cannot be accomplished directly on Genode yet. At the
beginning of the transition, the daily routine still very much depends on the
rich OS. By moving more and more functionality over to the Genode world, we
will eventually be able to make the rich OS obsolete step by step. Thanks to
VirtualBox' excellent host-guest-integration features, the VirtualBox window
can be dynamically resized and the guest mouse cursor integrates seamlessly
with Genode's pointer. VirtualBox is directly connected to the wireless
network driver. So common applications like Firefox can be used.
The noux runtime allows us to use command-line-based GNU software directly on
Genode. Coreutils and Bash are used for managing files. Vim is used for
editing files. Unlike the rich OS, the noux environment has access to the
Genode partition of the hard disk. In particular, it can be used to update the
Genode system. It has access to a number of pseudo files that contain status
information of the underlying components, e.g., the list of wireless access
points. Furthermore, it has limited access to the configuration interfaces of
the base components. For example, it can point the wireless driver to the
access point to use, or change the configuration of the nitpicker GUI server
at runtime.
As a bridge between the rich OS and the Genode world, we combine VirtualBox'
shared-folder mechanism with Genode's VFS infrastructure. The shared folder is
represented by a dedicated instance of a RAM file system, which is mounted in
both the VFS of VirtualBox and the VFS of noux.
As evidenced by Norman's use since June, the described system setup is
sufficient to be productive. So other members of the Genode team plan to
follow in his footsteps soon. At the same time, the continued use of the
system from day to day revealed a number of shortcomings, performance
limitations, and rough edges, which we eventually eliminated. It goes without
saying that this is an ongoing effort. Eating our own dog food forces us to
address the right issues to make the daily life more comfortable.
Feature-wise the switch to Genode motivated three developments, namely the
enhancement of Genode's CLI monitor, the improvement of the window manager,
and the creation of a CPU-load monitoring tool.
Interactive management of subsystem configurations
==================================================
The original version of CLI monitor obtained the configuration data of its
subsystems at start time via the Genode::config mechanism. But for managing
complex scenarios, the config node becomes very complex. Hence, it is
preferable to have a distinct file for each subsystem configuration.
The new version of CLI monitor scans the directory '/subsystems' for files
ending with ".subsystem". Each file has the same syntax as the formerly used
subsystem nodes. This change has the welcome implication that subsystem
configurations can be changed during the runtime of the CLI monitor, e.g., by
using a concurrently running instance of noux with access to the _subsystems/_
directory. This procedure has become an essential part of the daily work flow
as it enables the interactive evolution of the Genode system.
Window-management improvements
==============================
To make the window manager more flexible while reducing its complexity at the
same time, we removed the formerly built-in policy hosting the decorator and
layout components as children of the window manager. Those components are no
longer child components but siblings. The relationship of the components is
now solely expressed by the configuration of their common parent, i.e., init.
This change clears the way to dynamically replace those components during
runtime (e.g., switching between different decorators).
To improve the usability of the windowed GUI, we enabled the layouter to
raise windows on click and to let the keyboard focus follow the pointer.
Furthermore, the window manager, the decorator, and the floating window
layouter became able to propagate the usage of an alpha channel from the
client application to the decorator. This way, the decorator can paint the
decoration elements behind the affected windows, which would otherwise be
skipped. Consequently, partially transparent windows can be properly displayed.
CPU-load monitoring
===================
During daily system use, we started to wish to know in detail where the CPU
cycles are spent. For example, the access of a file by the rich OS involves
several components, including the guest OS itself, VirtualBox, rump_fs (file
system), part_blk (partition access), ahci_drv (SATA device access), core, and
NOVA. Investigating performance issues requires a holistic view of all those
components. For this reason, we enhanced our existing tracing infrastructure
(Section [Enhanced tracing facilities]) to allow the creation of CPU-load
monitoring tools. The first tool in this category is the graphical CPU-load
monitor located at _gems/app/cpu_load_display/_, which displays a timeline of
the CPU load where each thread is depicted with a different color. Thanks to
this tool, we have become able to explore performance issues in an interactive
way. In particular, it helped us to identify and resolve a long-standing
inaccuracy problem in our low-level timer service.
Base framework and low-level OS infrastructure
##############################################
Improved audio support
======================
In the previous release, we replaced our old audio driver with a new one that
provided the same audio-out session interface. Complementing the audio-out
session, we are now introducing a new audio-in session interface that can be
used to record audio frames. It is modeled after the audio-out interface in
the way how it handles the communication between the client and the server. It
uses shared memory in the form of the Audio_in::Stream to transport the frames
between the components. A server component captures frames and puts them into
a packet queue, which is embedded in the Audio_in::Stream. The server
allocates packets from this queue to store the recorded audio frames. If the
queue is already full, the server will override already allocated packets and
will notify the client by submitting an 'overrun' signal. The client has to
cope with this situation, e.g., by consuming packets more frequently. A client
can install a signal handler to respond to a progress signal, which is sent by
the server when a new Audio_in::Packet has been submitted to the packet queue.
For now, all audio-in server components only support one channel (left)
although the audio-in session interface principally supports multiple
channels.
The _dde_bsd_ audio_drv is the first and currently only audio driver component
that was extended to provide the audio-in session. To express this fact, the
driver was renamed from _audio_out_drv_ to _audio_drv_. In contrast to its
playback functionality, which is enabled by default, recording has to be
enabled explicitly by setting the configuration attribute 'recording' to
'yes'. If the need arises, playback may be disabled by setting 'playback' to
'no'. In addition, it is now possible to configure the driver by adjusting the
mixer in the driver's configuration node. For the time being, the interface as
employed by the original OpenBSD mixer utility is used.
The following snippet shows how to enable and configure recording on a
Thinkpad X220 where the headset instead of the internal microphone is used as
source:
! <start name="audio_drv">
! <resource name="RAM" quantum="8M"/>
! <provides>
! <service name="Audio_out"/>
! <service name="Audio_in"/>
! </provides>
! <config recording="yes">
! <mixer field="outputs.master" value="255"/>
! <mixer field="record.adc-0:1_source" value="sel2"/>
! <mixer field="record.adc-0:1" value="255"/>
! </config>
! </start>
In addition to selecting the recording source, the playback as well as the
recording volume are raised to the maximum. Information about all available
mixers and settings in general may be obtained by specifying the 'verbose'
attribute in the config node.
The enriched driver is accompanied by a simple monitor application, which
directly plays back all recorded audio frames and shows how to use the
audio-in session. It can be tested by executing the
_repos/dde_bsd/run/audio_in.run_ run script.
There are also changes to the audio-out session itself. The length of a period
was reduced from 2048 to 512 samples to accommodate for a lower latency when
mixing audio-out packets. A method for invalidating all packets in the queue
was also added.
File-system infrastructure
==========================
Unlike traditional operating systems that rely on a global name space for
files, each Genode component has a distinct view on files. Many low-level
components do not even have the notion of files. Whereas traditional operating
systems rely on a virtual file system (VFS) implemented in the OS kernel,
Genode's VFS has the form of a library that can optionally be linked to a
component. The implementation of this library originated from the noux runtime
introduced in version
[http://genode.org/documentation/release-notes/11.02#Noux_-_an_execution_environment_for_the_GNU_userland - 11.02],
and was later integrated into our C runtime in version
[http://genode.org/documentation/release-notes/14.05#Per-process_virtual_file_systems - 14.05].
With the current release, we take the VFS a step further by making it
available to components without a C runtime. Thereby, low-complexity
security-sensitive components such as CLI monitor become able to benefit from
the powerful VFS infrastructure.
The VFS itself received a welcome improvement in the form of private RAM file
systems. A need for process-local storage motivated a conversion of the
existing ram_fs server component to an embeddable VFS file system. This
addition to the set of VFS plugins enables components to use temporary file
systems without relying on the resources of an external component.
Unified networking components
=============================
Having had a good experience with our Block::Driver implementation, which
wraps the block-session interface and takes care of the packet-stream
handling, thus easing the implementation of driver and other block components,
we observed that this approach did not provide enough flexibility for
NIC-session servers. For example, NIC servers are bi-directional and when a
network packet arrives the server has to make sure that there are enough
resources available to dispatch the network packet to the client. This has to
be done because the server must never block, e.g., by waiting for allocations
to succeed or for an empty spot in the packet queue of a client. Therefore,
such a non-blocking NIC server needs to validate all preconditions for
dispatching the packet in advance and, if they cannot be met, drop the network
packet.
In order to implement this kind of behavior, NIC-session servers must have
direct access to the actual NIC session. For this reason, we removed the
Nic::Driver interface from Genode and added a Nic::Session_component that
offers common basic packet-stream-signal dispatch functionality. Servers may
now inherit from this component and implement their own policy.
We adjusted all servers that implement NIC sessions to the new interface
(dde_ipxe, wifi, usb, nic_bridge, OpenVPN, ...), and thereby unified all
networking components within Genode.
Enhanced tracing facilities
===========================
Recent Genode-based system scenarios like the one described in Section
[Genode as day-to-day operating system] consist of dozens of components that
interact with each other. For reasoning about the behaviour of such scenarios
and identifying effective optimization vectors, tools for gathering a holistic
view of the system are highly desired.
With the introduction of our light-weight
[http://genode.org/documentation/release-notes/13.08#Light-weight_event_tracing - event-tracing facility]
in version 13.08, we laid the foundation for such tools. The current release
extends core's TRACE service with the ability to obtain statistics about CPU
utilization. More specifically, it enables clients of core's TRACE service to
obtain the execution times of trace subjects (i.e., threads). The execution
time is delivered as part of the 'Subject_info' structure. In addition to the
execution time, the structure delivers the information about the affinity of
the subject with a physical CPU.
At the current stage, the feature is available solely on NOVA since this is
our kernel of choice for using Genode as our day-to-day OS. On all other base
platforms, the returned execution times are 0. To give a complete picture of
the system's threads, the kernel's idle threads (one per CPU) are featured as
trace subjects as well. Of course, idle threads cannot be traced but their
corresponding trace subjects allow TRACE clients to obtain the idle time of
each CPU.
By obtaining the trace-subject information in periodic intervals, a TRACE
client is able to gather statistics about the CPU utilization attributed to
the individual threads present (or no longer present) in the system. One
instance of such a tool is the new trace-subject reporter located at
_os/src/app/trace_subject_reporter_. It acts as a TRACE client, which delivers
the gathered trace-subject information in the form of XML-formatted data to a
report session. This information, in turn, can be consumed by a separate
component that analyses the data. In contrast to the low-complexity
trace-subject reporter, which requires access to the privileged TRACE services
of core, the (potentially complex) analysing component does not require access
to core's TRACE service. So it isn't as critical as the trace-subject monitor.
The first representative of a consumer of trace-subject reports is the
CPU-load display mentioned in Section [CPU-load monitoring] and depicted in
Figure [nano3d].
In addition to the CPU-monitoring additions, the tracing facilities received
minor refinements. Up to now, it was not possible to trace threads that use a
CPU session other than the component's initial one. A specific example is
VirtualBox, which employs several CPU sessions, one for each priority. This
problem has been solved by associating the event logger of each thread with
its actual CPU session. Consequently, the tracing mechanism has become able to
trace VirtualBox, which is pivotal for our further optimizations.
Low-complexity software rendering functions
===========================================
Our ambition to use Genode as our day-to-day OS raises the need for custom
graphical applications. Granted, it is principally possible to base such
applications on Qt5, which is readily available to native Genode components.
However, for certain applications like status displays, we prefer to avoid the
dependency on an overly complex GUI tool kit. To accommodate such
applications, Genode hosts a small collection of low-complexity graphics
functions called painters. All of Genode's low-complexity graphical components
such as nitpicker, launchpad, window decorator, or the terminal are based on
this infrastructure.
With the current release, we extend the collection with two new painters
located at _gems/include/polygon_gfx_. Both draw convex polygons with an
arbitrary number of points. The shaded-polygon painter interpolates the color
and alpha values whereas the textured-polygon painter applies a texture to the
polygon. The painters are accompanied by simplistic 3D routines located at
_gems/include/nano3d/_ and a corresponding example (_gems/run/nano3d.run_).
[image nano3d]
With the nano3d demo and our new CPU load display, the screenshot above shows
two applications that make use of the new graphics operations.
Device drivers
##############
Completing the transition to the new platform driver
====================================================
Until now, the platform driver on x86-based machines was formed by the ACPI
and PCI drivers. The ACPI driver originally executed the PCI driver as a slave
(child) service. The ACPI driver parsed the ACPI tables and provided the
relevant information as configuration during the PCI-driver startup. We
changed this close coupling to the more modern and commonly used
[http://genode.org/documentation/release-notes/14.02#New_session_interface_for_status_reporting - report_rom mechanism].
When the new ACPI driver finishes the ACPI table parsing, it provides the
information via a report to any interested and registered components. The
report contains among other the IRQ re-routing information. The PCI driver is
a component, which - according to its session routing configuration - plays
the role of a consumer of the ACPI report.
With this change of interaction of ACPI and PCI driver, the policy for devices
must be configured solely at the PCI driver and not at the ACPI driver. The
syntax, however, stayed the same as introduced with release 15.05.
Finally, the PCI driver 'pci_drv' got renamed to 'platform_drv' as already
used on most ARM platforms. All files and session interfaces containing
PCI/pci in the names were renamed to Platform/platform. The x86 platform
interfaces moved to _repos/os/include/platform/x86/_ and the implementation of
the platform driver to _repos/os/src/drivers/platform/x86/_.
An example x86 platform configuration snippet looks like this:
!<start name="acpi_drv" >
! <resource .../>
! <route>
! ...
! <service name="Report"> <child name="acpi_report_rom"/> </service>
! </route>
!</start>
!
!<start name="acpi_report_rom" >
! <binary name="report_rom"/>
! <resource .../>
! <provides> <service name="ROM" /> <service name="Report" /> </provides>
! <config>
! <rom> <policy label="platform_drv -> acpi" report="acpi_drv -> acpi"/> </rom>
! </config>
! <route> ... </route>
!</start>
!
!<start name="platform_drv" >
! <resource name="RAM" quantum="3M" constrain_phys="yes"/>
! <provides> <service name="Platform"/> </provides>
! <route>
! <service name="ROM">
! <if-arg key="label" value="acpi"/> <child name="acpi_report_rom"/>
! </service>
! ...
! </route>
! <config>
! <policy label="ps2_drv"> <device name="PS2"/> </policy>
! <policy label="nic_drv"> <pci class="ETHERNET"/> </policy>
! <policy label="fb_drv"> <pci class="VGA"/> </policy>
! <policy label="wifi_drv"> <pci class="WIFI"/> </policy>
! <policy label="usb_drv"> <pci class="USB"/> </policy>
! <policy label="ahci_drv"> <pci class="AHCI"/> </policy>
! <policy label="audio_drv"> <pci class="AUDIO"/> <pci class="HDAUDIO"/> </policy>
! </config>
!</start>
In order to unify and simplify the writing of run scripts, we added the
commonly used platform configuration to the file
_repos/base/run/platform_drv.inc_. This file may be included by any test run
script in order to setup a default platform driver configuration.
In addition, the snippet provides the following functions:
'append_platform_drv_build_components', 'append_platform_drv_config' and
'append_platform_drv_boot_modules'. The functions add necessary information to
the 'build_components', 'config' and 'boot_modules' run variables. The
_platform_drv.inc_ also contains the distinction between various ARM/x86
platforms and includes the necessary pieces. Hence, run scripts are largely
relieved from platform-specific peculiarities.
The body of an example run script looks like this:
! set build_components { ... }
!
! source ${genode_dir}/repos/base/run/platform_drv.inc
! append_platform_drv_build_components
!
! build $build_components
!
! create_boot_directory
!
! set config { ... }
!
! append_platform_drv_config
!
! append config { ... }
!
! install_config $config
!
! append_platform_drv_boot_modules
!
! build_boot_image $boot_modules
!
! run_genode_until ...
BCM57cxx network cards
======================
During Hack'n Hike 2015, we had access to a server that featured a Broadcom
network card. Therefore Guido Witmond performed the first steps to enable
Broadcom's BCM 57cxx cards. With this preliminary work in place, we were
quickly able to perform the additional steps required to add BCM 57cxx support
to Genode.
VESA driver refinements
=======================
The VESA driver now reports the frame buffer's line width instead of the
visible width to the client. This fixes a possible distortion if these widths
differ, at the cost that content in the right-most area might be invisible in
such cases.
VirtualBox
##########
Policy-based mouse pointer
==========================
In the previous release, we implemented support for the transparent
integration of the guest mouse pointer with nitpicker via the VirtualBox guest
additions and the vbox_pointer component, which is capable of rendering
guest-provided mouse-pointer shapes. Now, we extended vbox_pointer by a
policy-based configuration that allows the selection of ROMs containing the
actual mouse shape based on the nitpicker session label or domain. With this
feature in place, it is possible to integrate several VirtualBox instances as
well as dedicated pointer shapes for specific components. To see the improved
vbox_pointer in action give _run/vbox_pointer_ a shot.
Dynamic adaptation to screen size changes
=========================================
VirtualBox now notifies the guest operating system about screen-size changes
(for example if the user resizes a window, which shows the guest frame
buffer). The VirtualBox guest additions can use this information to adapt the
guest frame buffer to the new size.
SMP support
===========
Guest operating systems can now use multiple virtual CPUs, which are mapped to
multiple host CPUs. The number of virtual CPUs can be configured in the
'.vbox' file.
Preliminary audio support
=========================
At some point, the use of VirtualBox as a stop-gap solution for using Genode
as everyday OS raises the need to handle audio. With this release, we address
this matter by enabling preliminary audio support in our VirtualBox port. A
back end that uses the audio-out and audio-in sessions to playback and record
sound samples has been added. It disguises itself as the OSS back end that is
already used by vanilla VirtualBox. Since Genode pretends to be FreeBSD in the
eyes of VirtualBox (because Genode's libc is based on FreeBSD's libc), the
provisioning of an implementation of the OSS back end as used on FreeBSD host
systems is the most natural approach. The audio support is complemented by
adding the necessary device models for the virtual HDA as well as the AC97
devices to our VirtualBox port.
For now, it is vital to have the guest OS configure the virtual device in a
way that considers the current implementation. For example, we cannot
guarantee distortion-free playback or recording if the guest OS uses a period
that is too short, typically 10ms or less. There are also remaining issues
with the mixing/filtering code in VirtualBox. Therefore, we bypass it to
achieve better audio quality. As a consequence, the device model of the VM has
to use the same sample rate as is used by the audio-out and audio-in sessions
(44.1kHz).
Enabling audio support is done be adding
! <AudioAdapter controller="HDA" driver="OSS" enabled="true"/>
to the .vbox file manually or configuring the VM accordingly by using the GUI.
Platforms
#########
Execution on bare hardware (base-hw)
====================================
Bender chain loader on base-hw x86_64
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
On Intel platforms, we use the Bender chain loader from the
[https://github.com/alex-ab/morbo - Morbo multiboot suite] to detect available
COM ports of PCI plug-in cards, the AMT SOL device, or as fall back the
default comport 1. The loader stores the I/O port information of the detected
cards into the BIOS data area (BDA), from where it is retrieved by core on
boot and subsequently used for logging. With this release, we added the BDA
parsing to base-hw on x86-64 and enabled the feature in the run tool. As a
prerequisite, we had to fix an issue in bender triggered by the loading of
only one (large) multi-boot kernel. Consequently, its binary in
_tool/boot/bender_ was updated.
Revised page-table handling
~~~~~~~~~~~~~~~~~~~~~~~~~~~
One of the main advantages of the base-hw platform is that the memory trading
concept of Genode is universally applied even with regard to kernel objects.
For instance, whenever a component wants to create a thread, it pays for the
thread's stack, UTCB, and for the corresponding kernel object. The same
applies to objects needed to manage the virtual address space of a component
with the single exception of page tables.
Normally, when the quota, which was donated by a component to a specific
service, runs out, the component receives an exception the next time it tries
to invoke the service. The component can respond by upgrading the respective
session quota. However, in the context of page-fault resolution, this is
particularly difficult to do. The allocation and thereby the shortage of
memory becomes evident only when the client produces a page fault. Therefore,
there is no way to inform the component to upgrade its session quota before
resolving the fault.
Instead of designing a sophisticated protocol between core and the other
components to solve this problem, we decided to simplify the current
page-fault resolution by using a static set of page-tables per component.
Formerly, page tables were dynamically allocated from core's memory allocator.
Now, an array of page tables gets allocated during construction of a
protection domain. When a component runs out of page tables, all of its
mappings get flushed, and the page tables are populated from scratch. This
change greatly simplifies the page-table handling inside of base-hw.
Dynamic interrupt mode setting on x86_64
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
On x86-based hardware, user-level device drivers have become able to specify
the trigger mode and polarity of the interrupts when requesting an IRQ
session. On ARM, those session parameters are ignored. This change enables the
x86_64 platform to support devices, which use arbitrary trigger modes and
polarity settings, e.g., AHCI on QEMU and real hardware.
Fiasco.OC
=========
Genode's device-driver support when using the Fiasco.OC kernel as base
platform received an upgrade.
First, principle support for the Raspberry Pi was added. To make this platform
useful in practice, a working USB driver is important. I.e., the network
interface is connected via USB. Hence the USB driver got enabled for
Fiasco.OC, too. As a result, Genode's software stack can now be used on the
Raspberry Pi by using either our custom base-hw kernel or Fiasco.OC.
Second, support for the Odroid-X2 platform using the Exynos4412 SoC was added,
which includes the drivers for clock management (CMU), power management
(PMU) as well as USB.
Thanks to Reinier Millo Sánchez and Alexy Gallardo Segura for having
contributed this line of work.
Removal of deprecated features
##############################
We dropped the support for the *ARM Versatile Express* board from the Genode
source tree to relieve our automated testing infrastructure from supporting a
platform that remained unused for more than two years.
The device driver environment kit (DDE Kit) was originally intended as a
common API among the execution environments of ported user-level device
drivers. However, over the course of the past years, we found that this
approach could not fulfill its promise while introducing a number of new
problems. We reported our experiences in the release notes of versions
[http://genode.org/documentation/release-notes/12.05#Re-approaching_the_Linux_device-driver_environment - 12.05] and
[http://genode.org/documentation/release-notes/14.11#Roundup - 14.11].
To be able to remove the DDE-Kit API, we reworked the USB driver, our port of
the Linux TCP/IP stack, and the wireless driver accordingly.

1429
doc/release_notes-15-11.txt Normal file

File diff suppressed because it is too large Load Diff

652
doc/release_notes-16-02.txt Normal file
View File

@@ -0,0 +1,652 @@
===============================================
Release notes for the Genode OS Framework 16.02
===============================================
Genode Labs
With version 16.02, we add RISC-V to Genode's supported CPU architectures,
enable the secure pass-through of individual USB devices to virtual machines,
and update the support for the Muen and seL4 kernels.
Trustworthy hardware becomes an increasingly pressing problem. With each new
generation of today's commodity hardware comes a dramatic increase of
complexity, the addition of proprietary companion processors, and opaque
firmware blobs. Even with a perfectly secure operating system, the user's
privacy and security remains at risk as there is no way to assess the
trustworthiness of our underlying hardware. RISC-V is a new hardware
architecture that tries to overcome this problem by the means of open source
and transparency. It is designed to scale from micro controllers to
general-purpose computers, and to be both synthesizable as FPGA softcores and
implementable in ASICs. The prospect of a scalable and trustworthy open-source
hardware platform motivated us to add RISC-V to Genode's supported CPU
architectures. Section [New support for the RISC-V CPU architecture] gives a
brief overview of this line of work.
Thanks to the growing number of our regular developers using Genode as day to
day OS, we create a natural incentive to address typical desktop-OS work
flows. In particular, the new version comes with the ability to assign
individual USB devices to VirtualBox instances. Conceptually, this looks like
a relatively straight-forward feature. But as discussed in Section
[Assignment of USB devices to virtual machines], we had to overcome a number of
challenging problems caused by the inherently dynamic nature of USB-device
hot-plugging. Also on the account of day-to-day computing, the GUI stack
received welcomed usability improvements like keyboard shortcuts for certain
window-management operations.
With respect to Genode's underlying base platforms, we are happy to announce
the updates of the Muen and seL4 kernels. The Muen separation kernel received
an update to version 0.7, which accommodates Genode's regular work flows (via
run scripts) much better than the previous version. As described in Section
[Muen separation kernel], this change clears the way to subject Muen to
Genode's regular automated tests. The seL4 kernel represents an exciting
playground as a future base platform for Genode. We have updated the kernel to
version 2.1, which prompted us to fundamentally revisit the low-level resource
management of Genode on this kernel. A summary of this undertaking is presented
in Section [seL4 version 2.1].
According to the [http:/about/road-map - road map], we originally planned to
revise the framework API in this release. Even though this topic is
[https://github.com/genodelabs/genode/issues/1832 - very actively pursued], we
decided to not rush it. We find it important to provide a smooth migration path
from the old API to the new one. Determining the best path is actually trickier
than revising the API, though. To let our decisions settle a bit, we postpone
the transition to the upcoming release.
Assignment of USB devices to virtual machines
#############################################
As a migration strategy for running Genode on a daily basis, using VirtualBox
to execute a feature-rich OS is vital. In release
[http://genode.org/documentation/release-notes/15.05#USB-device_pass-through_support - 15.05],
we added USB pass-through support to VirtualBox by enabling its integrated USB
proxy service. Since we use the open-source edition of VirtualBox, we were
merely able to use the OHCI device model and were therefore limited to using
USB 1.x devices in low and full speed mode only. To make matters worse, when
using the OHCI controller model, it is difficult if not impossible to access
USB mass-storage devices. Usually, VirtualBox facilitates the EHCI or xHCI
device models for the pass-through of storage devices. Unfortunately, those
models are only available as a proprietary extension, which cannot be used by
our VirtualBox port.
Having support for the pass-through of high-speed and super-speed USB devices
is a must in such controller models. Therefore, we either have to implement
these models ourselves or port existing ones from another VMM or emulator to
fill the gap. We went for porting existing models first because device-model
development from scratch could end up being time consuming if we want to
guarantee them to work with a variety of different OS drivers.
QEMU xHCI device model
----------------------
QEMU features a NEC xHCI (UPD720200) device model that works well with Windows
guests. For this reason, we decided to give porting this device model a shot.
We applied the DDE approach and started by creating a QEMU emulation
environment so that only the bare minimum amount of source code needed to be
taken from the QEMU sources. It came down to a handful of source files, mainly
the USB core and the xHCI device model files. We iteratively extended the
emulation environment until the QEMU sources compiled and linked fine. One
particular cumbersome issue we had to overcome was the emulation of the QEMU
Object Model. Since QEMU is written in C, it uses its own object model to
implement inheritance. This object model is used throughout QEMU. We took the
easy way out and just used a C++ wrapper class that contains all QEMU objects
that are used in the USB subsystem.
The next step was to develop a USB host device model. This model connects a
USB device attached to Genode's USB host-controller driver to the xHCI device
model. Lucky for us, QEMU already contains a USB host device model that uses
libusb, which we could use as blueprint. We implemented a USB host device that
leverages Genode's custom USB session interface. This host device reacts to a
USB device report coming from another component such as the host-controller
driver. It tries to claim all devices it finds in that report and then creates
a QEMU USB device for each of them that is attached to the xHCI device model.
The xHCI device model needs infrastructure that normally is provided by QEMU
itself such as a timer queue and PCI device handling. We introduced a QEMU
USB controller interface _repos/libports/include/qemu/usb.h_ whose back-end
library interface has to be implemented by a component, i.e. the VMM, that
wants to use the library.
In the end, this work resulted in a small library that contains the xHCI
device model and works in a standalone way. All required resources have to be
provided by the component using the library. This makes it easy to integrate
the library in different VMMs because the user of the library is not forced to
employ the library in a certain way but free to use it any way he chooses.
xHCI device model wrapper in VirtualBox
---------------------------------------
We implemented an xHCI device model _repos/port/src/virtualbox/devxhci.cc_ in
VirtualBox that merely wraps the QEMU USB library and provides the back-end
functionality required by the library to glue QEMU's xHCI device model to
VirtualBox. For now, this device is always part of a VM because there is
currently no way to disable it from within the VirtualBox configuration
front end. Therefore, it is necessary to always give VirtualBox access to a
_usb_devices_ ROM module.
We removed the afore mentioned USB proxy service from our VirtualBox port
because it became redundant with the advent of our xHCI device model.
USB device report filter
------------------------
With the xHCI support in VirtualBox in place, we had to come up with a
mechanism to select, which USB devices it may access. Since USB devices are
usually hot-plugged by the user of the system, we need to be able to configure
the access permissions dynamically at run-time. On this account, we created a
component that intercepts the report from the USB host-controller driver. On
the one hand, this USB device report-filter component screens the device
report coming from the USB host-controller driver by checking each reported
device against a given white list of devices. Only approved devices are
reported to a consumer of the report, i.e. VirtualBox. On the other hand, this
component generates a new configuration for the USB host-controller driver.
The configuration has to be changed each time the filter component finds a
suitable device because the driver will hand out access to a given device to a
client only if there is a valid policy. As we do not know in advance, which
devices might be plugged in, this policy must be maintained dynamically. The
report filter will send the device report only if the host-controller driver
has changed its configuration. This ensures that a matching policy will be in
effect at the time when the client component tries to access the device.
The configuration of the report-filter component can also be changed at run
time.
See _repos/os/src/app/usb_report_filter/README_ for more details on how the
USB device report filter may be configured.
Example configuration
---------------------
The following figure illustrates the interplay and configuration of the
involved components:
[image qemu_xhci]
When the user plugs in a USB device, the USB host-controller driver generates
a device report that is consumed by the USB device report-filter component
(1). The filter component then examines the report and checks if it contains a
device it should report to its report consumer. It then reconfigures the
host-controller driver (2). Afterwards it sends a report to its consumer (3).
The consumer, in this case a VMM, then accesses the USB device (4).
New support for the RISC-V CPU architecture
###########################################
We became aware of [http://riscv.org - RISC-V] when attending several talks
about the project at [https://fosdem.org - FOSDEM] in 2015. RISC-V aims to be
an open-source hardware architecture and is now complemented by many projects
that target the release of real hardware or ASICs (for example,
[http://lowrisc.org - the LowRISC project]). We have experience with various
major CPU architectures and many systems on a chip and, therefore, embrace a
sharp eye on certain platform properties. Intel's ME and ARM's Trustzone
practically lock out operating systems of certain hardware and firmware
features. The true nature of these mechanisms becomes increasingly dubious,
especially when trying to build a secure open-source operating system. Intel's
AMT technology for instance comes with a complete TCP/IP stack that intercepts
packets from the integrated NIC and a VNC server that can magically expose a
mouse and a keyboard at the USB controller. If you are interested in more
details about this topic
[http://blog.invisiblethings.org/papers/2015/x86_harmful.pdf - Intel x86 considered harmful]
by Joanna Rutkowska is a very good read. We decided to have a deeper look at
the RISC-V architecture as an alternative open hardware platform. Especially,
since the LowRISC project promises a completely open system on chip, including
the peripherals.
RISC-V comes with a lot of optional features, so it can cover a large field of
applications reaching from simple I/O processors to general-purpose computing.
For example, there are 64 and 32 bit ISA (instruction set architecture)
versions, three page table formats with the option to omit paging at all, up
to four privilege modes, and a minimal integer core ISA (I). Everything else,
like multiplication and division (M), atomic instructions (A), and floating
point support (F) are subject to ISA extensions and are completely optional
for a specific hardware implementation.
For Genode, we chose to add the RISC-V support to our custom _base-hw_ kernel.
Since Genode may be used as a general purpose OS, we implemented the kernel
using the 64 bit RISC-V version, the Sv39 three-level page table format, and
the so-called general-purpose extension (G), which is the abbreviation for the
IAMF extensions. The current implementation provides the kernel and the
necessary adaptations of the user level part of core.
For testing, we used the RISC-V instruction emulator called
[https://github.com/riscv/riscv-isa-sim - Spike]. There also exists a RISC-V
implementation for various Zynq FPGAs. Genode's Zynq board support has kindly
been added and contributed by Mark Vels.
In the current state, basic Genode applications including core, init, and
components that use shared libraries can be executed on top of our RISC-V
port. We did not enable the libc and postponed further activity as the
platform currently does not specify the interaction with peripherals.
Steps to test Genode on RISC-V
------------------------------
# Building the instruction emulator
! # download the front end server
! git clone https://github.com/ssumpf/riscv-fesvr.git
!
! # build the front end server
! cd riscv-fesvr
! mkdir build
! cd build
! export RISCV=<installation path>
! ../configure --prefix=$RISCV
! (sudo) make install
!
! # download the instruction emulator
! cd ../../
! git clone https://github.com/ssumpf/riscv-isa-sim.git
! cd riscv-isa-sim
!
! # build the emulator
! mkdir build
! cd build
! ../configure --prefix=$RISCV --with-fesvr=$RISCV
! (sudo) make install
!
! # add $RISCV/bin to path
! export PATH=$RISCV/bin:$PATH
# Building Genode and running a test scenario
! # download Genode
! cd ../../
! git clone https://github.com/genodelabs/genode.git
!
! # build the Genode tool chain
! cd genode
! ./tool/tool_chain riscv
!
! # create RISC-V build directory
! ./tool/create_builddir hw_riscv
! cd build/hw_riscv
!
! # build and execute the printf run script
! make run/printf
GUI stack usability improvements
################################
Motivated by the daily use of Genode as desktop OS by an increasingly number
of developers, the window-layouter component of the
[http://genode.org/documentation/release-notes/15.11#GUI_stack - GUI stack]
received welcomed usability improvements.
Configurable window placement
-----------------------------
The policy of the window layouter can be adjusted via its configuration. For
a given window label, the window's initial position and its maximized state
can be defined as follows:
! <config>
! <policy label="mupdf" maximized="yes"/>
! <policy label="nit_fb" xpos="50" ypos="50"/>
! </config>
Keyboard shortcuts
------------------
The window layouter has become able to respond to key sequences. However,
normally, the layouter is not a regular nitpicker client but receives only
those input events that refer to the window decorations. It never owns the
keyboard focus. In order to propagate global key sequences to the layouter,
nitpicker must be explicitly configured to direct key sequences initiated with
certain keys to the decorator. For example, the following nitpicker
configuration routes key sequences starting with the left windows key to the
decorator. The window manager, in turn, forwards those events to the layouter.
! <start name="nitpicker">
! ...
! <config>
! ...
! <global-key name="KEY_LEFTMETA" label="wm -> decorator" />
! ...
! </config>
! ...
! </start>
The response of the window layouter to key sequences can be expressed in the
layouter configuration as follows:
! <config>
! <press key="KEY_LEFTMETA">
! <press key="KEY_TAB" action="next_window">
! <release key="KEY_TAB">
! <release key="KEY_LEFTMETA" action="raise_window"/>
! </release>
! </press>
! <press key="KEY_LEFTSHIFT">
! <press key="KEY_TAB" action="prev_window">
! <release key="KEY_TAB">
! <release key="KEY_LEFTMETA" action="raise_window"/>
! </release>
! </press>
! </press>
! <press key="KEY_ENTER" action="toggle_fullscreen"/>
! </press>
! </config>
Each '<press>' node defines the policy when the specified 'key' is pressed.
It can be equipped with an 'action' attribute that triggers a window action.
The supported window actions are:
:next_window: Focus the next window in the focus history.
:prev_window: Focus the previous window in the focus history.
:raise_window: Bring the focused window to the front.
:toggle_fullscreen: Maximize/unmaximize the focused window.
By nesting '<press>' nodes, actions can be tied to key sequences. In the
example above, the 'next_window' action is executed only if TAB is pressed
while the left windows-key is kept pressed. Furthermore, key sequences can
contain specific release events. In the example above, the release of the left
windows key brings the focused window to front, but only if TAB was pressed
before.
Device drivers
##############
USB host-controller driver enhancements
=======================================
The _usb_drv_ component now solely uses a policy to grant other components
access to USB devices exposed by its raw interface (USB session). On the basis
of the 'label' attribute, it will choose a pre-configured device that is
identified by either the 'bus' and 'dev' or the 'vendor' and 'product'
attribute tuple. To accommodate policy decisions made at run time, the USB
driver is now able to reload its configuration on demand. The USB device
report now contains a 'bus' and a 'dev' attribute as well in order to identify
a USB device more precisely. In addition to that, there is also a generated
'label' attribute in form of 'usb-<bus>-<dev>' that may be used to form
policies while configuring the system dynamically, e.g., when using the
_usb_report_filter_ component.
USB mass-storage driver
=======================
Up to now, access to USB storage devices was provided by the USB
host-controller driver only. However, its ability to do so is limited. E.g.,
it only supports one storage device and the storage device cannot be changed
at run-time. With this release we add a USB mass-storage driver that supports
UMS bulk-only devices that use the SCSI Block Commands set (direct-access).
This is still most common for USB sticks. Devices using different command
sets, e.g SD/HC devices or some external disc drives, will not work properly
if at all. The driver uses the USB session interface to access the USB device
and provides its service as block session to its client.
This component is part of the first step providing the ability to mount and
use USB sticks dynamically when using Genode as a general purpose OS. In the
future, the _usb_drv_ component should solely be the host-controller driver
while other tasks are handled by dedicated USB driver components such as this
one.
Audio output on Linux
=====================
The audio-out driver for Linux was modernized by replacing its multi-threaded
architecture by an event-driven architecture using Genode's server API. In
addition, the playback is now driven by a timer. For now it is a periodic
timer that triggers every 11 ms which is roughly the current audio-out period.
The driver now also behaves like the other BSD-based audio-out driver, i.e.,
it always advances the play pointer. That is vital for the audio-out stack
above the driver to work properly (e.g., the mixer).
Libraries and applications
##########################
New Genode-world repository
===========================
With a growing number of users and contributors comes the desire to bring more
and more existing software to Genode. Most of such libraries and applications,
however, are outside of the scope of Genode as an OS framework. In contrast to
device drivers, protocol stacks, and low-level OS services, which we subject
to our regular automated tests, most 3rd-party software is pretty independent
from Genode. The attempt to integrate the growing pool of such diverse
software into the main repository does not scale.
For this reason, we introduce the new
[https://github.com/genodelabs/genode-world - Genode World] repository, which
is the designated place for hosting ported applications, libraries, and games.
To use it, you first need to obtain a clone of Genode:
! git clone https://github.com/genodelabs/genode.git genode
Now, clone the _genode-world.git_ repository to _genode/repos/world:_
! git clone https://github.com/genodelabs/genode-world.git genode/repos/world
By placing the _world_ repository under the _repos/_ directory, Genode's tools
will automatically incorporate the ports provided by the _world_ repository.
For building software of the _world_ repository, the build-directory
configuration _etc/build.conf_ must be extended with the following line:
! REPOSITORIES += $(GENODE_DIR)/repos/world
*Word of caution*
In contrast to the components found in the mainline Genode repository, the
components within the _world_ repository are not subjected to the regular
quality-assurance measures of Genode Labs. Hence, problems are to be expected.
If you encounter bugs, build problems, or stability issues, please report them
to the [https://github.com/genodelabs/genode-world/issues - issue tracker] or
the [http://genode.org/community/mailing-lists - mailing list].
Updated 3rd-party software
==========================
The following 3rd-party code packages of the _ports_ and _libports_
repositories have been ported or updated:
* Lynx 2.8.8rel.2 (noux package)
* OpenSSH 7.1p1 (noux package)
* tar-1.27 (noux package)
* libssh 0.7.2
* Lighttpd 1.4.38
Platforms
#########
Execution on bare hardware (base-hw)
====================================
Within the last months, the initialization code of our custom kernel got
re-arranged to simplify the addition of new architectures, e.g., the RISC-V
port (Section [New support for the RISC-V CPU architecture]) while also making
its implementation leaner. A positive side effect of this work was the
generalization of multi-processor and L2-cache support for ARM's Cortex-A9
CPUs. For instance, the Wandboard (Freescale i.MX6 SoC) is now driven with all
four cores, and its memory can be accessed with full speed.
Besides those feature additions, we fixed an extremely rare and tricky race
condition in the implementation of the kernel-protected capabilities,
introduced in release 15.05. A capability's lifetime within a component is
tracked by a reference-counting like mechanism that is under control of the
component itself. When the kernel transfered a capability to a component, and
the very same capability was deleted within the component simultaneously, the
received capability was marked as invalid, which led to diverse, sporadic
faults. This deficit in the capabilities reference-counting is solved with the
current release.
Muen separation kernel
======================
Build integration
-----------------
Building Genode scenarios running on top of the
[http://muen.sk - Muen separation kernel] has been greatly simplified by
properly integrating the Muen system build process into the Genode build system.
As described in the
[http://genode.org/documentation/release-notes/15.08#Genode_on_top_of_the_Muen_Separation_Kernel - 15.08 release notes],
the architecture with Muen is different since the entire hw_x86_64_muen Genode
system runs as a guest VM on top of the separation kernel. This means that the
Genode base-hw image must itself be packaged into the final Muen system image
as an additional step after the Genode system build.
The packaging process of a Muen system image is performed by the new
_image/muen_ run-tool plugin, which processes the following RUN_OPT parameters.
:--image-muen-external-build:
Muen system is built automatically or externally
:--image-muen-system:
Muen system policy
:--image-muen-components:
Muen system components required for the given system policy
:--image-muen-hardware:
Muen target hardware platform
:--image-muen-gnat-path:
Path to GNAT toolchain
:--image-muen-spark-path:
Path to SPARK toolchain
The options are automatically added to the _etc/build.conf_ file for the
hw_x86_64_muen base-hw platform. The
[http://genode.org/documentation/platforms/muen - documentation] has been
updated to reflect the new, simplified build process.
A port file was added to facilitate the download of the Muen sources v0.7 and
to check the required dependencies.
Using the new _image/muen_ script in combination with iPXE allows to run the
Genode test suite via the autopilot tool.
MSI support
-----------
Muen employs Intel VT-d interrupt remapping (IR) besides DMA remapping for
secure device assignment. As a consequence, PCI devices using Message Signaled
Interrupts (MSI) must be programmed to trigger requests in remappable format
(see Intel VT-d specification, Section 5.1.2.2 for further details).
To enable the use of MSIs with the base-hw kernel, a platform-specific
function has been introduced that returns the necessary MSI parameters for a
given PCI device. If either the platform or the specific device does not
support MSI, the function returns false.
On hw_x86_64_muen, the function consults the Muen subject info page to supply
the appropriate information to the IRQ session. This allows Genode device
drivers to transparently use MSIs for passed-through PCI devices.
seL4 version 2.1
================
By the end of 2015, the [http://sel4.systems/ - seL4 kernel] version 2.0 was
published. With the current release, we update Genode's preliminary support
for this kernel from the experimental branch of one year ago to the master
branch of version 2.1. Note that this line of work is still considered as an
exploration. As of now, there is still a way to go until we can leverage seL4
as a fully featured base platform. Under the hood of Genode, the transition to
the version 2.1 master branch had the following implications.
In contrast to the experimental branch, the seL4 master branch has no way to
manually define the allocation of kernel objects within untyped memory ranges.
Instead, the kernel maintains a built-in allocation policy. This policy rules
out the deallocation of once-used parts of untyped memory. The only way to
reuse memory is to revoke the entire untyped memory range. Consequently, we
cannot share a large untyped memory range for kernel objects of different
protection domains. In order to reuse memory at a reasonably fine granularity,
we need to split the initial untyped memory ranges into small chunks that can
be individually revoked. Those chunks are called "untyped pages". An untyped
page is a 4 KiB untyped memory region.
The bootstrapping of core has to employ a two-stage allocation approach now.
For creating the initial kernel objects for core, which remain static during
the entire lifetime of the system, kernel objects are created directly out of
the initial untyped memory regions as reported by the kernel. The so-called
"initial untyped pool" keeps track of the consumption of those untyped memory
ranges by mimicking the kernel's internal allocation policy. Kernel objects
created this way can be of any size. For example the CNode, which is used to
store page-frame capabilities is 16 MiB in size. Also, core's CSpace uses a
relatively large CNode.
After the initial setup phase, all remaining untyped memory is turned into
untyped pages. From this point on, newly created kernel objects cannot exceed
4 KiB in size because one kernel object cannot span multiple untyped memory
regions. The capability selectors for untyped pages are organized similarly to
those of page-frame capabilities. There is a new 2nd-level CNode
(UNTYPED_CORE_CNODE) that is dimensioned according to the maximum amount of
physical memory (1M entries, each entry representing 4 KiB). The CNode is
organized such that an index into the CNode directly corresponds to the
physical frame number of the underlying memory. This way, we can easily
determine an untyped page selector for any physical addresses, i.e., for
revoking the kernel objects allocated at a specific physical page. The
downside is the need for another 16 MiB chunk of meta data. Also, we need to
keep in mind that this approach won't scale to 64-bit systems. We will
eventually need to replace the PHYS_CORE_CNODE and UNTYPED_CORE_CNODE by CNode
hierarchies to model a sparsely populated CNode. The following figure
illustrates the layout of core's capability space.
[image sel4_core_cspace_master]
Organization of core's capability space on seL4
For each protection domain, core maintains a so-called VM CSpace that holds
capability selectors for page frames and page tables. The size constraint of
kernel objects has the immediate implication that the VM CSpaces of protection
domains must be organized via several levels of CNodes. I.e., as the top-level
CNode of core has a size of 2^12, the remaining 20 PD-specific CSpace address
bits are organized as a 2nd-level 2^4 padding CNode, a 3rd-level 2^8 CNode,
and several 4th-level 2^8 leaf CNodes. The latter contain the actual selectors
for the page tables and page-table entries of the respective PD.
As another slight difference from the experimental branch, the master branch
requires the explicit assignment of page directories to an ASID pool.
Functionality-wise the update to version 2.1 brings no changes. The
preliminary support is still limited to Genode's most fundamental mechanisms
like the bootstrapping, the creation of protection domains, the execution of
threads, and inter-component communication. User-level device drivers are not
supported yet. Such functional improvements are scheduled for Genode 16.08.
Linux
=====
We started to experience crashes of our dynamic linker (ldso) when using
Genode's _base-linux_ platform on recent Linux kernels. Ldso is primarily a
shared object, which is linked to dynamic binaries. But ldso is also an
executable, which, once started loads the dynamically-linked binary along with
all shared libraries required by the binary. Up to now, ldso had to be loaded
at a link address defined at compilation time, which we enforced through
linker-script magic. Unfortunately, this does not work any longer on recent
Linux versions. The kernel notices that ldso is a shared object and loads it
at an arbitrary (randomized) address, which ultimately results in a
segmentation fault during ldso initialization. We found a fix for this issue
by marking ldso as an executable in the ELF header. But since ldso is linked
to all dynamic binaries (it contains Genode's base libraries) the GNU linker
then refused to link because ldso was not marked as a shared object.
Therefore, we decided to implement true self relocation within ldso. This
feature only works on Genode's base-linux platform as it requires some
symbol-address magic.

1315
doc/release_notes-16-05.txt Normal file

File diff suppressed because it is too large Load Diff

1126
doc/release_notes-16-08.txt Normal file

File diff suppressed because it is too large Load Diff

729
doc/release_notes-16-11.txt Normal file
View File

@@ -0,0 +1,729 @@
===============================================
Release notes for the Genode OS Framework 16.11
===============================================
Genode Labs
In contrast to most parts of the framework, the fundamental low-level
protocols, which define the interaction between parent and child components
have remained unchanged since the very first Genode version. From this
interplay, the entire architecture follows. That said, certain initial design
choices were not perfect. They partially resulted from limitations of the
kernels we used during Genode's early years and from our pre-occupation with a
certain style of programming. Over the years, the drawbacks inherent in our
original design became more and more clear and we drafted rough plans to
overcome them. However, reworking the fundamental protocols of a system that
already accommodates hundreds of component implementations cannot be taken
lightly. Because of this discomfort, we repeatedly deferred the topic -
until now. With the rapidly growing workloads carried by Genode, we
deliberately decided to address long-standing deficiencies rather than adding
the features we originally planned according to the
[https://genode.org/about/road-map - road map].
Section [Asynchronous parent-child interactions] presents the reworking of
Genode's component interplay at the lowest level. With this change in place,
we feel much more comfortable to scale up our workloads in the upcoming
releases.
Functionality-wise, the most prominent topic of the current release is the
vastly improved NIC-routing component. Since we introduced the first version
of the NIC router in the previous release, we took an iterative approach to
shape the component according to its most prominent use cases. Section
[Further improved virtual networking] summarizes the changes and the
motivation behind them.
Even though we added support for seL4 in the previous release, the NOVA
hypervisor is still our go-to kernel for x86-based hardware because of its
feature set. For this reason, we continuously improve this kernel and the
NOVA-specific components like VirtualBox. Section [NOVA hypervisor] covers
the introduction of an asynchronous map operation to NOVA.
Further topics of the current release range from added smart-card support,
over a new timeout API, to a VFS-based time-based password generator. With
respect to the road map, we postponed most topics originally planned. In
particular, we intended to enable the use of Genode on top of Xen by following
the footsteps of the existing Muen support - using our custom
base-hw kernel within a Xen DomU domain. However, before proceeding this
route, we decided to modernize the kernel design, in particular with respect
to bootstrapping and address-space management. Some parts of this line of work
are already present in the current release, for example the unification of the
boot-module handling as explained in Section
[Unified handling of boot modules].
Asynchronous parent-child interactions
######################################
When Genode was born in 2006, the L4 microkernels of the time universally
lacked an asynchronous inter-process-communication (IPC) mechanism.
Consequently, we designed the first version of Genode with the presumption
that components had to interact solely synchronously. To us, this seemed to be
the "right" way because the synchronous low-footprint IPC was presumably the
key for L4's good performance. It felt natural to leverage this benefit to the
maximum extent possible.
To illustrate the implications of this line of thinking for Genode, let's take
a look at a simple scenario where a parent component hosts two children and one
child provides a service to the other child.
[image simple_scenario]
During the creation of a session, the kernel's IPC mechanism serves three
purposes. First, it is used to communicate information between different
protection domains, in this case the parent, the client, and the server.
Second, it implicitly dictates the flow of control between the involved
parties because the caller blocks until the callee replies to the IPC call.
Third, the IPC is the mechanism to delegate authority (like the authority to
access the server's session object) between protection domains. The latter is
realized with the kernel's ability to carry capabilities as IPC message
payload. If this sounds a bit too abstract, please consider reviewing Section
3.1. "Capability-based security" of the
[https://genode.org/documentation/genode-foundations-16-05.pdf - Genode Foundations].
Using solely a synchronous IPC mechanism, the sequence of establishing a
session in the given scenario is as follows. In the context of Genode,
we usually refer to synchronous IPC as RPC (remote procedure call).
[image sync_session_seq]
The sequence looks straightforward:
# The client issues an RPC call to its parent, requesting a session for a
service of the given type while also passing a number of session-construction
arguments along with the request.
# Given the service name as provided with the session request, the parent
determines the server to ask for a new session. It requests a session
on behalf of the client by performing an RPC call to the server's prior
registered "root" capability. This capability refers to an interface for
creating and closing sessions.
# The server responds to the invocation of its root interface by creating
a new session object along with a session capability.
Whereas the session object is local to the server, the corresponding
session capability can be passed (delegated) to other components.
Each component in possession of the session capability is able to interact
with the server's corresponding session object via RPC calls.
The server returns the session capability to the parent as the result of the
parent's RPC call.
# The parent forwards the session capability to the client as the result of
the client's original RPC call.
Even though the simplicity of this protocol seems nice, it has inherent
limitations:
First, as the parent performs a synchronous RPC call to the server on behalf
of the client, it must trust the server to eventually respond to the RPC call.
If the server doesn't, the parent may block forever. In contrast to the client
that actually uses the service and thereby relies on the liveliness of the
server, the parent should not need to trust the server to be responsive. To
deal with the risk of an unresponsive server, Genode's existing runtime
environments (like the init component), maintain a dedicated thread for each
child. The session requests originating from a child are handled by the
corresponding parent-local child thread. In the worst case - if the server
fails to respond - only a single child thread stays blocked but the other
parts of the runtime environment remain unaffected. Consequently, runtime
environments have to be multi-threaded components. This, in turn, comes at the
cost of added complexity, in particular the need for error-prone inter-thread
synchronization.
Second, the approach keeps the parent's state implicitly stored in the stacks
of the parent's threads. This becomes a problem in dynamic runtime
environments that need to kill subsystems at arbitrary times. E.g., imagine
the situation where the client component is to be destroyed while the parent's
call to the server's root interface is still pending. The safe destruction of
the child - including its associated parent-local child thread - requires the
parent to abort the RPC call, which is a complex and - again - error-prone
operation.
Third, even though not inherent to synchronous RPC, Genode's original design
facilitated the use of a session capability as argument for requesting the
parent to close a specific session. However, the use of capabilities as
re-identifiable tokens is not well supported by most kernels, including seL4
([http://sel4.systems/pipermail/devel/2014-November/000114.html - discussion]
on the seL4 mailing list).
Asynchronous communication throughout Genode
--------------------------------------------
In 2008, we acknowledged the sole reliance on synchronous RPC as too limiting
and introduced an
[https://genode.org/documentation/release-notes/8.11#Asynchronous_notifications - API for asynchronous notifications].
On the traditional L4 kernels, we implemented the API by using Genode's
core component as a proxy for signal delivery. The use of asynchronous
notifications soon became natural and wide-spread throughout Genode. Today,
most session interfaces combine three forms of inter-component communication,
namely synchronous RPC calls, asynchronous notifications, and shared memory.
The new Genode API introduced in
[https://genode.org/documentation/release-notes/16.05#The_great_API_renovation - version 16.05]
further cultivated the modeling of Genode components as single-threaded state
machines instead of multi-threaded programs.
Still, until now, the most fundamental mechanism of Genode - the protocol
between parent and child components - has remained synchronous. The reasons
are twofold. First, our workaround for realizing runtime environments in a
multi-threaded way worked too well. So we were not constantly bothered by this
design problem. Second and more importantly, redesigning the fundamental
mechanism of the framework while not breaking the more than 300 existing
components is quite scary. But in anticipation of the rapidly scaling
workloads imposed on Genode, we had to take on the problem sooner or later.
We figured that now - with the modernized framework API in place - it's the
right time. From redesigning the interplay of parent and child components, we
will become able to create single-threaded runtime environments that behave
completely deterministically while consuming less resources than
multi-threaded programs. By the explicit enumeration of possible states, we
greatly ease the validation/evaluation of such crucial components.
New session-creation procedure
------------------------------
Following the asynchronous approach, the sequence of creating a session now
looks as follows:
[image async_session_seq]
The dotted lines are asynchronous notifications, which have fire-and-forget
semantics. A component that triggers a signal does not block.
The following points are worth noting:
* Sessions are identified via IDs, which are plain numbers as opposed to
capabilities. The IDs as seen by the client and server belong to different
ID name spaces.
IDs of sessions requested by the client are allocated by the client. IDs
of sessions requested at the server are allocated by the parent.
* The parent does no longer need to perform RPC calls to any of its children.
Hence, the need for multiple threads in runtime environments disappears.
* Each activation of the parent merely applies a state change of the session's
meta data structures maintained at the parent, which capture the entire
state of session requests. There is no hidden state stored on the parent's
stack.
* The information about pending session requests is communicated from the
parent to the server via a ROM session. At startup, the server requests
a ROM session for the ROM module "session_requests" from its parent. The
parent implements this ROM session locally. Since ROM sessions support
versions, the parent can post version updates of the "session_requests"
ROM with the regular mechanisms already present in Genode.
* The involved parties can potentially run in parallel.
Outcome and current state
-------------------------
Intuitively, the sequence of steps required to establish a session has
become more complicated. However, for the users of the framework, the entire
procedure is completely transparent. With a few tricks, we were actually able
to implement this fundamental change while keeping almost all existing
components untouched. One trick is the introduction of a server-local proxy
mechanism, which translates the requests obtained from the "session_requests"
ROM to component-local RPC calls on the server's root interface. So from the
perspective of an existing server component, a session request still looks
like a synchronous RPC request from the outside. Of course, the proxy is meant
as an intermediate solution until we have crafted a convenient front-end API
for the asynchronous mode of operation.
Even though the biggest share of components remains unaffected by the change,
this is not true for all components. In particular, runtime environments had
to be reworked, in some cases quite fundamentally. These include core, init,
noux, the loader, GDB monitor, launcher, CLI monitor, and the platform driver.
The change does not only affect the interplay between components but also
required a reconsideration of the child-creation procedure.
Besides the architectural improvement, this line of work had two welcome
effects.
First, in contrast to the original design, which relied on capabilities as
re-identifiable tokens, the new version greatly alleviates the need for
re-identifying capabilities on seL4. So we are able to eliminate a
long-standing problem with Genode on this kernel.
Second, the work called for new data structures for the safe interaction with
ID spaces (_base/id_space.h_) and object registries (_base/registry.h_). Those
data structures will possibly be useful in a lot of places that currently use
plain (and fairly unsafe) AVL trees or lists.
At the API level, the change is almost transparent to regular components,
except for two details. The upgrading of session quota is no longer
possible by a mere RPC call to the parent. Instead, 'Connection' objects
received a new 'upgrade_ram' method that must be used instead. Speaking
of 'Connection' objects, we had to remove the (fairly obscure) 'KEEP_OPEN'
feature, which is conceptually incompatible with the new design.
Further improved virtual networking
###################################
The
[https://genode.org/documentation/release-notes/16.08#Virtual_networking_and_support_for_TOR - previous release]
introduced the NIC router - a component that individually routes IP
packets between multiple NIC sessions, translates between different IP
subnets, and also supports port forwarding and NAT. For the first version of
the NIC router, we focused on the technical realization. Now, besides
some optimization and restructuring, we took the chance to polish the
configuration interface of the component. The goal was to make the interface
more intuitive and reduce pitfalls to a minimum. Roughly speaking, the
handling of the NIC router became more tailored to its/our typical use cases.
Let's create a practical setup to explain the changes in detail. Assume that
there are two virtual subnets 192.168.1.0/24 and 192.168.2.0/24 within our
Genode system. They connect as Virtnet A and B to the router. The standard
gateway of the virtual networks is the NIC router with IP 192.168.*.1 . The
router's uplink, on the other hand, is connected to the NIC driver. It
interfaces the machine with our real-world home network 10.0.2.0/24. The home
network is connected to the internet through its standard gateway 10.0.2.1.
[image nic_router_basic]
The basic router configuration for this setup without any routing rules would
be as follows:
! <policy label_prefix="virtnet_a" domain="virtnet_a" />
! <policy label_prefix="virtnet_b" domain="virtnet_b" />
!
! <domain name="uplink" interface="10.0.2.55/24" gateway="10.0.2.1" />
! <domain name="virtnet_a" interface="192.168.1.1/24" />
! <domain name="virtnet_b" interface="192.168.2.1/24" />
The first thing to notice is the changed usage of the policy tag. Previously,
the policy label - normally solely designated to correlate sessions with
configuration domains - was misused also as unique peer identifier in the
routing rules. This approach disregarded advanced label-matching techniques
such as the 'label_prefix' used above. Now, the whole NIC-router-specific
enhancement of the policy tag moved to the new '<domain>' tag, leaving the
policy tag only with its original purpose to select policies. Note that even
if this modification gives the impression, the router is not yet capable of
handling multiple NIC sessions at one domain at a time.
In the domain tag, the 'interface' attribute replaces the old policy attribute
named 'src'. That means, it tells the router which IP identity to use when
talking as itself to the domain. But in addition to that, the 'interface'
attribute also defines which subnet this identity and the domain belong to.
This reflects a basic decision we made during the reworking process: The new
NIC router is aware of subnets. Sessions of the same subnet have the same
configuration domain. We came to this conclusion as it solves some fundamental
problems with the old version. First, the equivalence of domain and subnet
enables us to link a default gateway to a subnet by adding the 'gateway'
attribute to the domain tag. In our example, this is done in the uplink
domain. The 'gateway' attribute is optional for a domain and replaces the
former 'via' attributes of the different routing rules. It is more efficient
and natural to have this value set only once at the corresponding subnet than
having it scattered all over the routing rules of the remote domains as done
before. If a domain has no default gateway, it drops all packets with a
foreign recipient.
The second advantage of a domain being equivalent to a subnet is that handling
ARP broadcasts becomes easy. It can be excluded that such ARP broadcasts
concern sessions outside the source domain anymore. And as sessions in the
same domain are not distinguishable to the routing, the broadcast can be sent
to all of them without breaking any rules.
Now, let's enhance our example by some routing rules. One pretty complicated
thing to do with the old NIC router was port forwarding. You had to combine
different routing rules, explicitly enable the back routing at the remote
side, and take care that NAT was applied - a lot of opportunities for
mistakes. With the new version, it became easier. Let's assume we have an HTTP
server in Virtnet A and an NTP server in Virtnet B. We want the NIC router to
act as proxy for their services in our home network.
[image nic_router_servers]
In order to achieve this, the uplink domain must be enhanced by two rules:
! <policy label_prefix="virtnet_a" domain="virtnet_a" />
! <policy label_prefix="virtnet_b" domain="virtnet_b" />
!
! <domain name="uplink" interface="10.0.2.55/24" gateway="10.0.2.1" />
! <tcp-forward port="443" domain="virtnet_a" to="192.168.1.2" />
! <udp-forward port="123" domain="virtnet_b" to="192.168.2.2" />
! </domain>
!
! <domain name="virtnet_a" interface="192.168.1.1/24" />
! <domain name="virtnet_b" interface="192.168.2.1/24" />
The TCP forwarding rule for port 443 (HTTP+TLS/SSL) redirects to IP address
192.168.1.2 in Virtnet A and the UDP forwarding rule for port 123 (NTP)
redirects to IP address 192.168.2.2 in Virtnet B. The Virtnet domains remain
empty as the router keeps track of the redirected transfers and routes back
reply packets automatically. Also automatically, the router applies NAT for the
server as it is in the nature of port forwarding.
Next, we add some clients to Virtnet B that like to talk to our home network
and the internet. We want them to be hidden via NAT when they do so. For
internet communication, they shall furthermore be limited to HTTP+TLS/SSL and
IMAP+TLS/SSL.
[image nic_router_client]
This is what the router configuration looks now:
! <policy label_prefix="virtnet_a" domain="virtnet_a" />
! <policy label_prefix="virtnet_b" domain="virtnet_b" />
!
! <domain name="uplink" interface="10.0.2.55/24" gateway="10.0.2.1" />
! <tcp-forward port="443" domain="virtnet_a" to="192.168.1.2" />
! <udp-forward port="123" domain="virtnet_b" to="192.168.2.2" />
! <nat domain="virtnet_b" tcp-ports="1000" udp-ports="1000">
! </domain>
!
! <domain name="virtnet_a" interface="192.168.1.1/24" />
! <domain name="virtnet_b" interface="192.168.2.1/24" >
! <tcp dst="10.0.2.0/24"> <permit-any domain="uplink" /> </tcp>
! <udp dst="10.0.2.0/24"> <permit-any domain="uplink" /> </udp>
! <tcp dst="0.0.0.0/0">
! <permit port="443" domain="uplink" />
! <permit port="993" domain="uplink" />
! </tcp>
! </domain>
There are several new tag types. One of them is the NAT configuration for
Virtnet B in the uplink domain. In contrast to the former NIC-router version
where NAT settings were part of the source domain, NAT is now configured in
the target domain with a sub-tag for each source. This has the advantage
of supporting heterogeneous NAT configurations for a packet source depending
on which domain it talks to. Besides, it is more intuitive to read. Apart from
that, the NAT settings haven't changed.
Furthermore, there are the new TCP and UDP tags in the Virtnet-B domain. The
first two of them have a 'permit-any' sub-tag. With this combination, we open
all ports to IP addresses of the 10.0.2.0/24 subnet, our home network, and
route them to the uplink domain. TCP packets that don't match these first two
rules may fall back to the third. This TCP rule doesn't have all ports opened
but only 443 (HTTP+TLS/SSL) and 993 (IMAP+TLS/SSL). Both ports are again bound
to the uplink domain. As the IP filter 0.0.0.0/0 of the surrounding rule isn't
restrictive, we now also route packets to a foreign destination. The NIC
router redirects such packets to the default gateway of our home network.
Compared to the old router version where IP and UDP/TCP routing had to be
combined for this purpose, the new TCP and UDP rules with their
port-permission sub-rules have some notable advantages. Like port-forwarding
rules, TCP and UDP rules always imply link-state tracking in order to route
back reply packets automatically. This can be seen also in our example as no
further routing rules had to be added to the uplink domain. This aspect is
clear from the outermost rule and not dependent on sub-rules anymore.
Furthermore, the strict separation of UDP and TCP routing prevents
configuration faults and increases readability. Last but not least, the
'permit-any' rule allows something new. Opening all ports for an address range
was previously only possible without link-state tracking as it could be
expressed only on the IP level.
At this point, we have thoroughly discussed the layer-3 routing abilities of
the new NIC router and our focus has indeed moved more into this direction.
Even though IP routing is still available, we found that it should be more
clearly separated from the rest. To illustrate this feature, we enhance our
example again. We want the Virtnets to be allowed to communicate to each other
without any restrictions. For that purpose, we add two more rules to the
router configuration:
! <policy label_prefix="virtnet_a" domain="virtnet_a" />
! <policy label_prefix="virtnet_b" domain="virtnet_b" />
!
! <domain name="uplink" interface="10.0.2.55/24" gateway="10.0.2.1" />
! <tcp-forward port="443" domain="virtnet_a" to="192.168.1.2" />
! <udp-forward port="123" domain="virtnet_b" to="192.168.2.2" />
! <nat domain="virtnet_b" tcp-ports="1000" udp-ports="1000">
! </domain>
!
! <domain name="virtnet_a" interface="192.168.1.1/24" />
! <ip dst="192.168.2.0/24" domain="virtnet_b"/>
! </domain>
!
! <domain name="virtnet_b" interface="192.168.2.1/24" >
! <tcp dst="10.0.2.0/24"> <permit-any domain="uplink" /> </tcp>
! <udp dst="10.0.2.0/24"> <permit-any domain="uplink" /> </udp>
! <tcp dst="0.0.0.0/0">
! <permit port="443" domain="uplink" />
! <permit port="993" domain="uplink" />
! </tcp>
! <ip dst="192.168.1.0/24" domain="virtnet_a"/>
! </domain>
As you can see, each of the new IP rules in the Virtnet domains match the
addresses of the opposite subnet and route to the corresponding domain. As
mentioned, the new IP rules and UDP/TCP rules are not combined anymore to
clearly distinguish IP routing from layer-3 routing because this decision has
far-reaching effects. First, in contrast to UDP and TCP routing, IP routing is
stateless. Thus, for each IP routing rule one has to be sure to have a
back-routing rule at the remote domain or else bidirectional communication
won't happen. And second, NAT does not apply to IP-routed packets. So, if
you're not aware of such packets, you may unintentionally reveal information
about a private network.
For more details on the new NIC router, you may refer to the comprehensive
documentation in the _repos/os/src/server/nic_router/README_ file and the
basic NIC-router test at _libports/run/nic_router.run_ .
Base framework
##############
Improved RPC mechanism
======================
Since we introduced Genode's current API for synchronous RPCs in
[https://genode.org/documentation/release-notes/11.05#New_API_for_type-safe_inter-process_communication - version 11.05],
inter-component communication within Genode has become almost a child's play.
The RPC framework leverages the C++ type system and templates to a great
effect. In contrast to the traditional use of IDL compilers, the interaction
with RPC objects provided by other components is robust and natural because
no language boundaries need to be crossed.
Still, a few differences between RPC calls and regular function calls remain.
In particular, there exist a few restrictions with regard to the types of
RPC function arguments. Those types did not just need to be POD (plain old
data) types but they had to be default-constructible, too. Whereas the former
restriction still applies (non-POD objects that include references or
vtables cannot be used as arguments), the latter limitation has been lifted
now. Generally, non-default-constructible types are a way to attain
simpler code because the special case of an "invalid" object does not need
to be considered. I.e., values of such types can be kept as constants as
opposed to variables. If an object exists (as equivalent to successful
instantiation), it is valid. With the improved RPC mechanism, the RPC
framework does no longer stay in the way in this respect.
Thanks to Edgard Schmidt for this welcome contribution!
Unification and tightening of session labels
============================================
In Genode, each session requested by a client component is labeled according
to the components that intermediate the session request. The client can
optionally specify a label of choice along with the session request. Its
parent prefixes the client-provided label by a label of its own. If the
session request is further passed to the parent's parent, the grandparent
prepends its own label. This works recursively. Consequently, the final label
as seen by the server is the product of the labeling policies of all
components on the route of the session request.
The label is used for two purposes. First, the server uses the label as
a key for a server-side policy selection. E.g., depending on the session label
received by the disk-partition server, the server decides which partition to
hand out to the client. Second, the label is used by intermediate components
to take session-routing decisions. E.g., based on the label of a file-system
session request, a parent component may route the request to one of several
file-system servers.
Originally, Genode did not impose a specific way of how labels are formed.
It was up to each intermediate component to filter the label of a session
request in any way desired. However, in practice, this freedom remained unused
and the very simple successive prefixing of labels prevails in all our use
cases. Each intermediate node concatenates its own label in front of the label
supplied by the originator of the session request. The different parts of the
label are separated with the character sequence '" -> "'. Some corner cases
were handles specially for aesthetic reasons. For example, if a client
provided no label, the parent would skip the pending separator. That said,
since each intermediate component had to provide the labeling policy, not all
components were consistent in these respects. Since we found no use for
arbitrary labeling policies, we decided to make the only prominent way of
session labeling mandatory for all intermediate components. We thereby removed
the aesthetically motivated corner cases and possible ambiguities. I.e., with
the original policy, it was not possible to distinguish a unlabeled session
requested by a client from a labeled session requested by the client's parent.
As a consequence, the stricter labeling must now be considered wherever
a precise label was specified as a key for a session route or a server-side
policy selection. The simplest way to adapt those cases is to use a
'label_prefix' instead of the 'label' attribute. Alternatively, the
'label' attribute may used by appending '" -> "' (note the whitespace).
Transition to new framework API
===============================
Since we fundamentally revised Genode's API in
[http://genode.org/documentation/release-notes/16.05#The_great_API_renovation - version 16.05],
we gradually adapt our existing components. Given that Genode comes with
over 300 components, this is no small feat. But with 30 percent of the
components converted, we already made substantial progress.
In some respects, the conversion is actually nearly complete. In particular,
the move away from format-string-based text output to our new type-safe output
facility has been applied to almost all components now. The former 'PDBG'
macro that is quite useful for temporary debug messages has been replaced with
a new version that must be manually included via the _base/debug.h_ header
file. Like the regular log functions, the new PDBG facility uses the type-safe
text-output facility.
Minor API adjustments
---------------------
While applying Genode's new API, we refined the API in the following respects:
We added a dedicated 'String' constructor overload to better accommodate
string literals. This overload covers the common case for initializing a
string from a literal without employing the 'Output' mechanism. This way, such
strings can by constructed without calling virtual functions, which in turn
makes the 'String' usable during the self-relocation phase of the dynamic
linker.
Up till now, several Genode components still rely on the use of 'snprintf'
whenever strings must be assembled out of smaller pieces. As we like to shun
format strings from Genode altogether, we needed an alternative mechanism.
Since we introduced the new type-safe text-output facilities in Genode 16.05,
there is an obvious solution: Let the 'String' constructor accept an arbitrary
list of arguments, which are turned into their respective textual
representation and appear concatenated in the resulting string. Consequently,
strings can be assembled with the same flexibility as log output. For the
construction of 'String' objects from character buffers of a known size, the
'Cstring' utility can be used, which takes a 'char const *' and an optional
length as arguments.
Several low-level types received support for the new output facilities, e.g.,
'Xml_node' or the network-related headers in _os/net/_.
In anticipation of the forthcoming package-management infrastructure, we try
to unify Genode's executable binaries across kernels and architectures
wherever reasonable. Of course, the latter is not possible with respect to the
used instructions. But unifying symbol information is deemed worthwhile. For
this reason, we changed the 'Genode::size_t' type to be always defined as an
'unsigned' 'long'. This is in contrast to GCC's built-in '__SIZE_TYPE__',
which is defined as 'unsigned int' on 32-bit architectures but 'unsigned long'
on 64-bit architectures.
OS-level infrastructure and device drivers
##########################################
New timeout-handing API
=======================
The new timeout API offers tools for easily multiplexing a single time
source among different timeouts. In general, the time source can be
implemented individually but we expect that the most prominent use case will
be the multiplexing of timer sessions. Thus, the timeout library also provides
a convenience tool for this use case. A library-usage example can be found
under _os/src/test/timeout_. If you're interested in implementing
your own time source, you can find an example at _os/include/os/timer.h_ .
Support for smart cards
=======================
We ported the [http://pcsclite.alioth.debian.org/pcsclite.html - PC/SC Lite]
library to Genode, which provides a commonly used API for communicating with
smart cards. It supports USB smart card readers, using the
[http://pcsclite.alioth.debian.org/ccid.html - CCID] library as driver.
The CCID driver itself requires [http://libusb.info - libusb] to access the
USB device.
Vanilla PC/SC Lite is structured as a client-server architecture, consisting
of the 'pcscd' daemon, which runs on a privileged user account and manages all
card reader devices, and one or more non-privileged client applications, which
communicate with pcscd to access the card readers. On Genode, pcscd's role as
privileged device manager is not really needed, since the devices can also be
managed using Genode's configuration mechanisms. For this reason, we merged
the part of pcscd which implements the API with the pcsc-lite client library.
In the current state, a Genode application using PC/SC Lite can access a single
card reader device, which is selected using its USB product ID and vendor ID in
the application's configuration and in the policy of the USB driver.
More configuration details can be found in the README files of the PC/SC Lite,
CCID, and libusb libraries in the libports repository and in the accompanying
_smartcard.run_ script.
Libraries and applications
##########################
Time-based password generation
==============================
A time-based one-time password authentication client that adheres to the
Google Authenticator standard has been introduced into the
[https://github.com/genodelabs/genode-world - world repository].
Single use, time-based passwords are commonly used as an additional
authentication step for web-based services. In this scheme, a user generates
and presents a six digit passcode to a service generated using a shared secret
and a timestamp. This short passcode length makes manual entry convenient so
that the shared secret may be stored on a separate device than the service
client, such as a smartphone, layering the security properties of both
devices.
The 'gtotp' VFS plugin provides these passcodes by embedding the generator as
a special file in the file-system layer of a component. This approach provides
readily available passcodes for programmatic and manual use without enlarging
the code base to encompass a GUI, command-line, or networked interface.
At the time of this release, the common use case is to manually retrieve codes
for clients running in VirtualBox by reading special files with an isolated
instance of the Noux runtime. Storing the shared secret on the same device
contradicts the recommendations of the standard but the trade-off is that the
software stack required to host the shared secret is significantly smaller
than that found on a mobile device.
Random number generator testing
===============================
No random number generator can be proved to be good, but empirical statistical
tests can prove that some are bad. A port of the TestU01 RNG test suite is
provided in the world repository. The TestU01 batteries give independent
assurance of the fitness of Genode's CPU jitter based RNG and are available
for testing future physical and non-phyical RNGs.
VirtualBox on top on the NOVA hypervisor
########################################
Both VirtualBox-based virtual machine monitors on Genode got updated to the
latest revision as provided by Oracle, namely 4.3.40 and 5.1.10 - mainly to
stay close to the upstream versions.
Platforms
#########
Unified handling of boot modules
================================
Until now, the way of passing boot modules from the boot procedure to the core
component, which core provides as ROM modules, varied from platform to
platform. Either we used a multiboot-compliant bootloader that accepts
multiple modules, or the platform provided some specific way of linking binary
modules together with the kernel, e.g., the Elfweaver tool of OKL4.
By unifying the boot-module handover, we further reduce platform specific core
code. Thereby, maintenance costs are decreased, and code analysis becomes
easier. With this new solution, when issuing to build the core component:
! make core
within the build system, only a core library gets built. Not until all
binaries needed by a run-script are available, a final image is linked
together using the core library and all additional binaries. The core
component now can access its ROM modules directly via addresses contained in
its binary. As a side effect of this change, there is no core binary in the
'bin' or 'core' directory of the corresponding build directory available
anymore. Instead, you will find the core binary with no ROM modules, but
including debug information under 'var/run/*.core' within your build
directory. The concrete name depends on the name of the run-script.
The new approach is used on all platforms except Linux where the ROM modules
still need to be accessed via the file-system.
NOVA hypervisor
===============
We extended the kernel to support the asynchronous delegation of kernel
resources. Up to now, resources could only be delegated during RPC or during
the initial protection-domain construction. With this extension, the
construction and setup of new protection domains, threads, and especially
virtual CPUs for the VirtualBox VMM became more straightforward and several
quirks inside the 'core' component could be dropped. The added kernel syscall
expects the NOVA-kernel capabilities of the source and target protection
domains, which effectively renders the operation solely available to 'core' -
as only holder of the NOVA protection domain capabilities.
Additionally, we changed the CPU ID enumeration in Genode/NOVA to a
predictable order. The lower CPU IDs used via the Genode 'Cpu_session'
interface now correspond to the first hyper-thread of all physical CPU cores.
For example, on a quad-core machine with hyper-threading enabled Genode's CPU
IDs 0-3 refer to the first hyper-threads of all physical cores and IDs 4-7 to
the second hyper-threads.

1044
doc/release_notes-17-02.txt Normal file

File diff suppressed because it is too large Load Diff

1033
doc/release_notes-17-05.txt Normal file

File diff suppressed because it is too large Load Diff

651
doc/release_notes-17-08.txt Normal file
View File

@@ -0,0 +1,651 @@
===============================================
Release notes for the Genode OS Framework 17.08
===============================================
Genode Labs
The flagship feature of Genode 17.08 has been in the works for more than a
year: The support for hardware-accelerated graphics on Intel Gen-8 GPUs. This
is an especially challenging topic because it is riddled with terminology,
involves highly complex software stacks, carries a twisted history with it,
and remains to be a moving target. It took up a lot of patience to build up a
profound understanding of the existing driver architectures and the mechanisms
offered by modern graphics hardware. On the other hand, with the proliferation
of hardware-based sandboxing features like virtual GPU memory and hardware
contexts, we found that now is the perfect time for a clean-slate design of a
microkernelized GPU driver.
Section [Hardware-accelerated graphics for Intel Gen-8 GPUs] introduces this
work, which includes our new GPU multiplexer as well as the integration with
the client-side Mesa protocol stack.
The second focus of the current release is the extension of Genode's supported
base platforms. Most prominently, we upgrade the seL4 kernel to version 6.0
while extending the architecture support from 32-bit x86 to ARM and 64-bit
x86 (Section [The seL4 kernel on ARM and 64-bit x86 hardware]). To bring
Genode closer to cloud-computing scenarios, we added basic support for
executing Genode scenarios as Xen DomU domains (Section [Genode as Xen DomU]).
Furthermore, the Muen separation kernel has been updated to a current version.
As a cross-kernel effort, there is work under way to boot Genode-based
systems via UEFI, currently addressing the NOVA, base-hw, and seL4 kernels.
Among the many other functional additions are a new VFS plugin for accessing
FAT file systems, new components like _sequence_ and _fs_report_ that aid new
system compositions, and our evolving custom package-management
infrastructure.
Hardware-accelerated graphics for Intel Gen-8 GPUs
##################################################
The ability to leverage hardware-accelerated graphics is generally taken for
granted in modern commodity operating systems. The user experience of
modern desktop environments, web-browser performance, and obviously games
depend on it. On the other hand, the benefit of hardware-accelerated graphics
comes at the expense of tremendous added complexity in the lower software
stack, in particular in system components that need to be ultimately trusted.
For example, with circa 100 thousand lines of code, the Intel GPU driver in
the Linux kernel is an order of magnitude more complex than a complete modern
microkernel. In a monolithic-kernel-based system, this complexity is
generally neglected because the kernel is complex anyway. But in
microkernel-based scenarios optimized for a trusted computing base in the
order of a few ten thousand lines of code, it becomes unacceptable.
Fortunately, recent generations of graphics hardware provide a number of
hardware features that promise to solve this conflict, which prompted us to
investigate the use of these features for Genode.
During this year's Hack'n'Hike event, we ported the ioquake3 engine to Genode.
As preliminary requirement, we had to resurrect OpenGL support in our aging
graphics stack and enable support for current Intel HD Graphics devices (IGD).
We started by updating Mesa from the old 7.8.x to a more recent 11.2.2 release.
Since we focused mainly on supporting Intel devices, we dropped support for the
Gallium back end as Intel still uses the old DRI infrastructure. This decision,
however, also influenced the choice of the software rendering back end. Rather
than retaining the softpipe implementation, we now use swrast. In addition, we
changed the available OpenGL implementation from OpenGL ES 2.x to the fully
fledged OpenGL 4.5 profile, including the corresponding shader language
version. As with the previous Mesa port, EGL serves as front end API for
system integration and loads a DRI back-end driver (i965 or swrast). EGL
always requests the back-end driver 'egl_drv.lib.so' in form of a shared
object. Genode's relabeling features are used to select the proper back end
via a route configuration. The following snippet illustrates such a
configuration for software rendering:
! <start name="gears" caps="200">
! <resource name="RAM" quantum="32M"/>"
! <route>
! <service name="ROM" label="egl_drv.lib.so">
! <parent label="egl_swrast.lib.so"/>
! </service>
! <any-service> <parent/> <any-child/> </any-service>
! </route>
! </start>
With the graphics-stack front end in place, it was time to take care of the
GPU driver. In our case this meant implementing the DRM interface in our
ported version of the Intel i915 DRM driver. Up to now, this driver was solely
used for mode setting while we completely omitted supporting the render
engine.
[image mesa_genode]
With this new and adapted software stack, we successfully could play ioquake3
on top of Genode with a reasonable performance in 1080p on a Thinkpad X250.
During this work, we gathered valuable insights into the architecture of a
modern 3D-graphics software stack as well as into recent Intel HD Graphics
hardware. We found that the Intel-specific Mesa driver itself is far more
complex than its kernel counter part. The DRM driver is mainly concerned with
resource and execution management whereas the Mesa driver programs the GPU.
For example, amongst others, Mesa compiles the OpenGL shaders into a
GPU-specific machine code that is passed on to the kernel for execution.
While inspecting the DRM driver, it became obvious that one of the reasons for
its complexity is the need to support a variety of different HD Graphics
generations as well as different features driven by software-usage patterns.
For our security related use cases, it is important to offer a clear isolation
and separation mechanism per client. Hardware features provided by modern
Intel GPUs like per-process graphics translation tables (PPGTT) and hardware
contexts that are unique for each client make it possible to fulfill these
requirements.
By focusing on this particular feature set and thus limiting the supported
hardware generations, the development of a maintainable GPU multiplexer for
Genode became feasible. After all, we strive to keep all Genode components as
low complex as possible, especially resource multiplexers like such a GPU
multiplexer.
[image intel_gpu_drv]
This image shows multiple GPU-session clients and the resources they are
using. The fence registers as well as the aperture is partitioned between
them, the PPGTT is backed by the system memory, and the contexts are located
in disjoint GGTT regions.
Within four months, we implemented an experimental GPU multiplexer for Intel
HD Graphics Gen8 (Broadwell class) devices. We started out defining a GPU
session interface that is sufficient to implement the API used by the DRM
library. For each session, the driver creates a context consisting of a
hardware context, a set of page tables (PPGTT), and a part of the aperture.
The client may use the session to allocate and map memory buffers used by the
GPU. Each buffer is always eagerly mapped 1:1 into the PPGTT by using the
local virtual address of the client. Special memory buffers like an image
buffer are additionally mapped through the aperture to make use of the
hardware-provided de-tiling mechanism. As is essential in Genode components,
the client must donate all resources that the driver might need to fulfill the
request, i.e., quota for memory and capability allocations. Clients may
request the execution of their workload by submitting an execution buffer. The
GPU multiplexer will then enqueue the request and schedule all pending
requests sequentially. Once the request is completed, the client is notified
via a completion signal.
[image multi_gl]
Example scenario of multiple OpenGL programs that use the new GPU multiplexer
for hardware-accelerated rendering.
We consider this first version of the GPU driver as experimental. As of now,
it only manages the render engine of the GPU. Mode-setting or rather display
handling must be performed by another component. Currently, the VESA driver is
used for this purpose. It also lacks any power-management functionality and
permanently keeps the GPU awake. Both limitations will be addressed in future
releases and support for Gen9+ (Skylake) and newer devices might be added.
In its current incarnation, the GPU multiplexer component consists of about
4,200 lines of code whereas the Mesa DRI i965 driver complements the driver at
the client side with about 78,000 lines of code.
The seL4 kernel on ARM and 64-bit x86 hardware
##############################################
With the 16.08 release, we brought the seL4 support to a level to be
considered being on par with the other supported kernels. At the time,
Genode's use of seL4 was limited to 32-bit x86 platforms.
In the current release, we extend the platform support to ARM and 64-bit x86.
We started this line of work with an incremental kernel upgrade from version
3.2.0 to 5.2.0 and finally to seL4 6.0. Through these upgrades, we were able
to drop several Genode-specific seL4 patches, which were required in the 16.08
release. One major improvement of version 6.0 compared to earlier versions is
the handling of device-memory announcements by the kernel to Genode's roottask
_core_.
With the kernel update in place, we inspected the x86-specific part thoroughly
while splitting and separating it properly into architecture-agnostic and
architecture-dependent parts. Upon this work, we added the
architecture-specific counterparts for x86_64 and ARM. One major work item was
to make the page-table handling in Genode's core aware and generic enough to
handle the different page-table sizes of the three architectures.
For the ARM support, we decided to enable the i.MX6 FreeScale based SoC,
namely the Wandboard Quad board. Since the seL4 kernel interface provides no
timeout support, we revived a user-level timer driver that we originally
developed for our custom base-hw kernel: The so-called EPIT timer, which is
part of most i.MX SoCs.
We finished the essential work for the mentioned three platforms in
less time than expected and, thereby, had spare time to address additional
features.
First, we enabled multiprocessor support for Genode/seL4 on x86 and
thread-priority support for all seL4 platforms. Additionally, we were able to
utilize the seL4 benchmark interface for Genode's trace infrastructure in
order to obtain utilization information about threads and CPUs. The Genode
components _top_ (text-based) and _cpu_load_monitor_ (graphical) are now
usable on Genode/seL4.
Finally, as we are currently exploring the support for booting various kernels
via UEFI on x86, we took the chance to investigate the steps needed to boot
seL4 via UEFI. UEFI firmware does not always provide a compatibility support
module (CSM) for legacy BIOS boot support. Hence, we extended the seL4 kernel
for Genode according to the Multiboot2 specification, which enables us to
start Genode/seL4 together with GRUB2 - as an UEFI capable bootloader - on
machines missing CSM support.
Base framework and OS-level infrastructure
##########################################
Simplified IOMMU handling
=========================
When IOMMUs are used on x86, all host memory targeted via direct memory
accesses (DMA) by devices must eagerly be registered in the respective I/O
page table of the device. Up to now, Genode supports IOMMUs on NOVA only. On
this kernel, a device protection domain is represented as a regular protection
domain with its virtual memory layout being used for both the CPU's MMU and
the device. Traditionally, mappings into such virtual memory spaces are
inserted on demand as responses to page faults. However, as there are no page
faults for DMA transactions, DMA buffers must always be eagerly mapped. The
so-called device PD hid this gap for NOVA. In anticipation of adding IOMMU
support for more kernels, we desired to generalize the device-PD mechanism by
introducing an explicit way to trigger the insertion of DMA memory into the
proper page tables.
We extended the PD-session interface by a 'map' function, which takes a
virtual memory region of the PD's virtual address space as argument. The page
frames of the previously attached dataspaces are added eagerly by core to the
IOMMU page-tables. With this explicit 'map' support, we were able to replace
the Genode/NOVA-specific device-PD implementation with a generic one, which
will easily accommodate other kernels in the future.
New report server for capturing reports to files
================================================
The report session is a simple mechanism for components to publish structured
data without the complexity of a file-system layer. In the simplest case, a
client component will produce a report and communicate it directly to a
component acting as a server. The disadvantage is that the report client
becomes reliant on the liveliness and presence of the consumer component. So
in the more robust case, the _report_rom_ component acts as the server hosting
the report service as well as a ROM service for components consuming reports.
The _report_rom_ server permits ROM access only to clients matching an
explicit configuration policy. This is good for security but opaque to a user.
Reports can only be read where an explicit policy is in place and only a
single report session can report to an active ROM session.
The new _fs_report_ component is a friendlier and more flexible report server.
Reports are written to a file system using a file and directory hierarchy that
expresses session routing. This allows for intuitive report inspection and
injection via a file system. When used with the _ram_fs_ and _fs_rom_ servers,
it can also replicate the functionality of _report_rom_.
New runtime environment for starting components sequentially
============================================================
The _init_ component is a prime example of software with an emphasis on
function over features. It is the fundamental building block for combining
components yet its behavior is simple and without heuristics. Like other
contemporary init managers, it starts components in parallel, but to a more
extreme degree in that it has no concept of "runlevels" or "targets", all
components are started as soon as possible. The concrete sequence of execution
is instead determined by when server components make service announcements and
how quickly they respond to client requests.
In some cases, the execution of one component must not occur until the
execution of another component ends, be it that the first produces output that
is consumed by the second, or that the two contend for a service that cannot
be multiplexed. Init contains no provisions to enforce ordering. But we are
free to define new behaviors in other management components.
The solution to the problem of ordering is the _sequence_ component. Sequence
walks a list of children and executes them in order, one at a time. With only
one child active, there is no need for any local resource or routing
management. By applying the same session label transformations as init,
external routing and policy handling are unchanged.
An example of ordering a producer and consumer within an init configuration
follows:
! <start name="sequence">
! <resource name="RAM" quantum="128M"/>
! <config>
! <start name="producer">
! <config .. />
! </start>
! <start name="consumer">
! <config .. />
! </start>
! </config>
! <route>
! <service name="LOG" label_prefix="producer">
! <child name="log_a"/> </service>
! <service name="LOG" label_prefix="consumer">
! <child name="log_b"/> </service>
! <any-service> <parent/> <any-child/> </any-service>
! </route>
! </start>
Support for boot-time initialized frame buffer
==============================================
UEFI-based systems do not carry along legacy BIOS infrastructure, on which
our generic VESA driver depends. Hence, when booting via UEFI, one has to use
either a hardware-specific driver like our Intel-FB driver or - alternatively -
facilitate generic UEFI mechanisms.
Instead of booting in VGA text mode and leaving the switch to a graphics mode
(via real-mode SVGA BIOS subroutines) to the booted OS, UEFI employs the
so-called graphics output protocol as a means to setup a reasonable default
graphics mode prior booting the operating system. In order to produce
graphical output, the operating system merely has to know the physical address
and layout of the frame buffer. Genode's core exposes this information as the
_platform_info_ ROM module. The new _fb_boot_drv_ driver picks up this
information to provide a Genode framebuffer session interface. Hence, on
UEFI-based systems, it can be used as a drop-in replacement for the VESA
driver. In contrast to the VESA driver, however, it is not able to switch
graphics modes at runtime.
The new component is located at _os/src/drivers/framebuffer/boot/_. Thanks
to Johannes Kliemann for this contribution.
Extended non-blocking operation of the VFS
==========================================
In
[https://genode.org/documentation/release-notes/17.02#VFS_support_for_asynchronous_I_O_and_reconfiguration - version 17.02],
we added support for non-blocking reads from the VFS in the form of the
'read_ready()', 'queue_read()', and 'complete_read()' functions. Since then,
it has become obvious that blocking within the VFS is not only problematic in
the VFS server itself when multiple clients are connected, but also when the
VFS is deployed in a multi-threaded environment and a VFS plugin needs to
reliably wait for I/O-completion signals.
For this reason, we reworked the interface of the VFS even more towards
non-blocking operation and adapted the existing users of the VFS accordingly.
The most important changes are:
* Directories are now created and opened with the 'opendir()' function and
the directory entries are read with the 'queue_read()' and 'complete_read()'
functions.
* Symbolic links are now created and opened with the 'openlink()' function and
the link target is read with the 'queue_read()' and 'complete_read()'
functions and written with the 'write()' function.
* The 'write()' function does not wait for signals anymore. This can have the
effect that data written by a VFS library user has not been processed by a
file-system server when the library user asks for the size of the file or
closes it (both done with RPC functions at the file-system server). For this
reason, a user of the VFS library should request synchronization before
calling 'stat()' or 'close()'. To make sure that a file-system server has
processed all write request packets that a client submitted prior the
synchronization request, synchronization is now requested at the file-system
server with a synchronization packet instead of an RPC function. Because of
this change, the synchronization interface of the VFS library has been split
into the 'queue_sync()' and 'complete_sync()' functions.
Making block sessions read-only by default
==========================================
Genode server components are expected to apply the safest and strictest
behavior when exposing cross-component state or persistent data. In practice
block and file-system servers only allow access to clients with explicitly
configured local policies. The file-system servers enforce an additional
provision that sessions are implicitly read-only unless overridden by policy.
This release introduces a similar restriction to the AHCI driver and partition
multiplexer. Clients of these servers require an affirmative 'writeable'
attribute on policies to permit the writing of blocks. Write permission at
these servers may also be revoked by components that forward block-session
requests by placing 'writeable="no"' into session-request arguments.
All users of _ahci_drv_ and _part_blk_ are advised that this change may break
existing configurations without explicit 'writeable' policies.
Refined time handling
=====================
Release 17.05 introduced a
[https://genode.org/documentation/release-notes/17.05#New_API_for_user-level_timing - new API for user-level timing]
named _timeout framework_. Together with this new framework came a
comprehensive test that stresses all aspects of the interface. During the past
few months, this test has turned out to be an enrichment for Genode far beyond
its original scope. As the test significantly raised the standards in
user-level timing, it also sharpened our view on the measurement precision of
various timer drivers and timestamps, which act as input for the framework.
This revealed several problems previously unidentified. For instance, we
improved the accuracy and stability of the time values provided by the drivers
for the Raspberry-Pi timer, the Cortex-A9 timer, the PIT, and the LAPIC. We
also were able to further optimize the calibration of the TSC in the NOVA
kernel.
Additionally, the test also helped us to refine the timeout framework itself.
The initial calibration of the framework - that previously took about 1.5
seconds - is now performed much quicker. This makes microseconds-precise time
available immediately after the timer connection switched to the modern
fine-grained mode of operation, which is a prerequisite for hardware drivers
that need such precision during their early initialization phase. The
calculations inside the framework also became more flexible to better fit the
characteristics of all the hardware and kernels Genode supports.
Finally, we were able to extend the application of the timeout framework. Most
notably, our C runtime uses it as timing source to the benefit of all
libc-using components. Another noteworthy case is the USB driver on the
Raspberry Pi. It previously couldn't rely on the default Genode timing but
required a local hardware timer to reach the precision that the host
controller expected from software. With the timeout framework, this workaround
could be removed from the driver.
FatFS-based VFS plugin
======================
Genode has supported VFAT file-systems since the 9.11 release when the
[http://elm-chan.org/fsw/ff/00index_e.html - FatFS] library was first ported.
The 11.08 release fit the library into the libc plugin architecture and
in 12.08 FatFS was used in the _ffat_fs_ file-system server. Now, the 17.08
release revisits FatFS to mold the library into the newer and more flexible
VFS plugin system. The _vfs_fatfs_ plugin may be fitted into the VFS server or
used directly by arbitrary components linked to the VFS library. As the
collection of VFS plugins in combination with the VFS file-system server has a
lower net maintenance cost than multiple file-system servers, the _ffat_fs_
server will be retired in a future release.
Enhanced GUI primitives
=======================
Even though we consider Qt5 as the go-to solution for creating advanced
graphical user interfaces on top of Genode, we also continue to explore an
alternative approach that facilitates Genode's component architecture to an
extreme degree. The so-called menu-view component takes an XML description of
a dialog as input and produces rendered pixels as output. It also gives
feedback to user input such as the hovered widget at a given pointer position.
The menu view does not implement any application logic but is meant to be
embedded as a child component into the actual application. This approach
relieves the application from the complexity (and potential bugs) of widget
rendering. It also reinforces a rigid separation of a view and its underlying
data model.
The menu view was first introduced in
[https://genode.org/documentation/release-notes/14.11#New_menu_view_application - version 14.11].
The current release improves it in the following ways:
* The new '<float>' widget aligns a child widget within a
larger parent widget by specifying the boolean attributes 'north', 'south',
'east', and 'west'. If none is specified, the child is centered. If opposite
attributes are specified, the child is stretched.
* A new '<depgraph>' widget arranges child widgets in the form of a
dependency graph, which will be the cornerstone for Genode's upcoming
interactive component-composition feature. As a prerequisite for
implementing the depgraph widget, Genode's set of basic graphical primitives
received new operations for drawing sub-pixel-accurate anti-aliased lines
and bezier curves.
* All geometric changes of the widget layout are animated now. This includes
structural changes of the new '<depgraph>' widget.
[image depgraph]
The menu-view component is illustrated by the run script at
_gems/run/menu_view.run_.
C runtime
=========
The growing number of ported applications used on Genode is accompanied by the
requirement of extensive POSIX compatibility of our C runtime. Therefore, we
enhanced our implementation by half a dozen features (e.g., O_ACCMODE
tracking) during the past release cycle. We thank the contributors of patches
and test cases and will continue our efforts to accommodate more ported
open-source components in the future.
Libraries and applications
##########################
Mesa adjustments
================
The Mesa update required the adaption of all components that use OpenGL.
In particular that means the Qt5 framework. Furthermore, we also enabled
OpenGL support in our SDL1 port.
As playground, there are a few OpenGL examples. The demos are located under
_repos/libports/src/test/mesa_demos_, which use the EGLUT bindings. There
are also some SDL based examples in the world repository under
_repos/world/src/test/sdl_opengl_.
Package management
==================
The previous release featured the initial version of Genode's
[https://genode.org/documentation/release-notes/17.05#Package_management - custom package-management tools].
Since then, we continued this line of work in three directions.
First, we refined the depot tools and the integration of the depot with our
custom work-flow ("run") tool. One important refinement is a simplification of
the depot's directory layout for library binaries. We found that the initial
version implied unwelcome complexities down the road. Instead of placing
library binaries in a directory named after their API, they are now placed
directly in the architecture directory along with regular binaries.
Second, driven by the proliferated use of the depot by more and more run
scripts, we enhanced the depot with new depot recipes as needed.
Third, we took the first steps to use the depot on-target. The experimentation
with on-target depots is eased by the new 'create_tar_from_depot_binaries'
function of the run tool, which allows one to assemble a new depot in the form
of a tar archive out of a subset of packages. Furthermore, the new
_depot_query_ component is able to scan an on-target depot for runtime
descriptions and returns all the information needed to start a subsystem based
on the depot content. The concept is exemplified by the new
_gems/run/depot_deploy.run_ script, which executes the "fs_report" test case
supplied via a depot package.
Platforms
#########
Genode as Xen DomU
==================
We want to widen the application scope of Genode by enabling users to easily
deploy Genode scenarios on Xen-based cloud platforms.
As a first step towards this goal, we enhanced our run tool to support running
Genode scenarios as a local Xen DomU, managed from within the Genode build
system on Linux running as Xen Dom0.
The Xen DomU runs in HVM mode (full virtualization) and loads Genode from an
ISO image. Serial log output is printed to the text console and graphical
output is shown in an SDL window.
To use this new target platform, the following run options should be defined in
the 'build/x86_*/etc/build.conf' file:
! RUN_OPT = --include boot_dir/$(KERNEL)
! RUN_OPT += --include image/iso
! RUN_OPT += --include power_on/xen
! RUN_OPT += --include log/xen
! RUN_OPT += --include power_off/xen
The Xen DomU is managed using the 'xl' command line tool and it is possible to
add configuration options in the 'xen_args' variable of a run script. Common
options are:
* Disabling the graphical output:
! append xen_args { sdl="0" }
* Configuring a network device:
! append xen_args { vif=\["model=e1000,mac=02:00:00:00:01:01,bridge=xenbr0"\] }
* Configuring USB input devices:
! append xen_args { usbdevice=\["mouse","keyboard"\] }
Note that the 'xl' tool requires super-user permissions. Interactive
password input can be complicated in combination with 'expect' and is not
practical for automated tests. For this reason, the current implementation
assumes that no password input is needed when running 'sudo xl', which can
be achieved by creating a file '/etc/sudoers.d/xl' with the content
! user ALL=(root) NOPASSWD: /usr/sbin/xl
where 'user' is the Linux user name.
Execution on bare hardware (base-hw)
====================================
UEFI support
------------
Analogously to our work on the seL4 and NOVA kernels in this release, we
extended our base-hw kernel to become a Multiboot2 compliant kernel. When used
together with GRUB2, it can be started on x86 UEFI machines missing legacy
BIOS support (i.e., CSM).
RISC-V
------
With Genode version 17.05, we updated base-hw's RISC-V support to privileged
ISA revision 1.9.1. Unfortunately, this implied that dynamic linking was not
supported on the RISC-V architecture anymore. Since dynamic linking is now
required for almost all Genode applications by default, this became a severe
limitation. Therefore, we revisited our RISC-V implementation - in particular
the kernel entry code - to lift the limitation of being able to execute only
statically linked binaries.
Additionally, we integrated the Berkeley Boot Loader (BBL), which bootstraps
the system and implements the machine mode, more closely into our build
infrastructure. We also added a new timer implementation to base-hw by using
the _set timeout SBI_ call of BBL.
What still remains missing is proper FPU support. While we are building the
Genode tool chain with soft float support, we still encounter occasions where
FPU code is generated, which in turn triggers compile time errors. We will
have to investigate this behavior more thoroughly, but ultimately we want to
add FPU support for RISC-V to our kernel and enable hardware floating point in
the tool chain.
Muen separation kernel
======================
Besides updating the Muen port to the latest kernel version as of end of June,
Muen has been added to Genode's automated testing infrastructure. This
includes the revived support for VirtualBox 4 on top of this kernel.
NOVA microhypervisor
====================
The current release extends NOVA to become a Multiboot2 compliant kernel. Used
together with GRUB2, NOVA can now be started on x86 UEFI machines missing
legacy BIOS support (called CSM).
GRUB2 provides the initial ACPI RSDP (Root System Description Pointer) to a
Multiboot2 kernel. The RSDP contains vital information required to bootstrap
the kernel and the operating system in general on today's x86 machines. To
make this information available to the user-level ACPI and ACPICA drivers, the
kernel propagates the RSDP to Genode's core, which - in turn - exposes it to
the user land as part of the _platform_info_ ROM module.
In order to ease the setup of an UEFI bootable image, we added a new image
module to our run-tool infrastructure. The run option 'image/uefi' can be used
instead of 'image/iso' in order to create a raw image that contains a EFI
system partition in a GUID partition table (GPT). The image is equipped by the
new 'image/uefi' module with the GRUB2 boot loader, a GRUB2 configuration, and
the corresponding Genode run scenario. The final image can be copied with 'dd'
to a bootable USB stick. Additionally, we added support to boot such an image
on Qemu leveraging [http://www.tianocore.org - TianoCore's] UEFI firmware.
As a side project, minor virtualization support for AMD has been added to
Virtualbox 4 and to the NOVA kernel on Genode. This enables us to run a 32-bit
Windows 7 VM on a 32-bit Genode/NOVA host on an (oldish) AMD Phenom II X4 test
machine.

703
doc/release_notes-17-11.txt Normal file
View File

@@ -0,0 +1,703 @@
===============================================
Release notes for the Genode OS Framework 17.11
===============================================
Genode Labs
In contrast to most releases, which are focused on one or two major themes,
the development during the release cycle of version 17.11 was almost entirely
driven by the practical use of Genode as a day-to-day OS by the entire staff
of Genode Labs. The basis of this endeavor is an evolving general-purpose
system scenario - dubbed "sculpt" - that is planned as an official feature
for the next release 18.02. The name "sculpt" hints at the approach to start
with a minimalistic generic live system that can be interactively shaped
into a desktop scenario by the user without any reboot. This is made possible
by combining Genode's unique dynamic reconfiguration concept with the
recently introduced package management, our custom GUI stack, and the many
ready-to-use device-driver components that we developed over the past years.
By stressing Genode in such a dynamic and interactive fashion, we identified
and smoothened many rough edges and usability shortcomings, ranging from the
use of client-provided pointer shapes, the proper handling of keyboard
modifiers, mouse acceleration, over the configuration of the user-level
networking facilities, to improvements of the file-system support. Since the
sculpt scenario is based on Genode's custom package-management concept
introduced in
[https://genode.org/documentation/release-notes/17.05#Package_management - version 17.05],
it motivated the packaging of all components required by this system scenario.
Altogether, there are now over 150 ready-to-use depot archives available.
At the platform level, the release unifies the boot concept across all
supported x86 microkernels and offers the option to boot 64-bit kernels via
UEFI. For both UEFI and legacy boot, Genode consistently uses GRUB2 now.
Feature-wise, the most prominent topics are the native support of game-console
emulators based on libretro, the ability to resize libSDL-based applications
like avplay, and the further cultivation of Nim as implementation language
for native Genode components.
Base framework and OS-level infrastructure
##########################################
Virtual file system and C runtime
=================================
The VFS and C runtime received improvements in several respects. First, we
reintegrated the resolver library back into the libc library as it is an
essential feature for network applications. The former split was an ancient
artifact we implemented when integrating the lxip network stack as an optional
alternative to lwip. Speaking of ancient features, we also remove the rcmd
code from libc. This feature for remote-shell access is not used in modern
environments. The VFS server was adjusted to handle incomplete calls to
'stat()' correctly.
NIC-router improvements
=======================
Genode's user-level network-routing component was originally introduced in
[https://genode.org/documentation/release-notes/16.08#Virtual_networking_and_support_for_TOR - version 16.08]
and refined in
[https://genode.org/documentation/release-notes/16.11#Further_improved_virtual_networking - version 16.11].
In the current release, the NIC router has received two minor improvements
regarding MAC addresses and ARP handling. In addition, it now has the ability
to act as DHCP server or client for each configured domain.
Let's first have a look at the minor changes. The MAC addresses that the NIC
router allocates on behalf of its NIC clients are now of the proper type:
"local" and "individual" and this way, conform to the ARP protocol. The NIC
router now also considers ARP requests for foreign IP addresses coming from a
domain. If there is no gateway configured for the domain, the NIC router
itself jumps in as gateway and answers those requests with its IP address.
Thus, if you have an individual gateway in a subnet behind the NIC router,
make sure to have the gateway attribute in the according '<domain>' tag set.
The new DHCP server functionality is activated for a domain by the new
'<dhcp-server>' sub-tag of the '<domain>' tag:
! <domain name="vbox" interface="10.0.1.1/24">
! <dhcp-server ip_first="10.0.1.80"
! ip_last="10.0.1.100"
! ip_lease_time_sec="3600"
! dns_server="10.0.0.2"/>
! ...
! </domain>
The attributes 'ip_first' and 'ip_last' define the available IPv4 address
range whereas the lifetime of an IPv4 address assignment is defined by the
'ip_lease_time_sec' attribute in seconds. The 'dns_server' attribute is
optional and declares the IPv4 address the NIC router shall state in the
DNS-server option of DHCP. The DNS server may be located within a foreign
subnet.
When used as a DHCP server, the NIC router provides the following DHCP options
to its clients: message type, server IP (set to the NIC routers IP), subnet
mask, IP lease time, router IP (set to the NIC routers IP), DNS server (if
configured), and broadcast address.
If you want the NIC router to act as DHCP client at a domain, simply omit the
interface attribute in the '<domain>' tag. In this case, the router tries to
dynamically receive and maintain an IP configuration for the affected domain.
Make sure that your DHCP server provides the following DHCP option fields to
the NIC router: message type, server IP, subnet mask, IP lease time, and
router IP.
Also note that the NIC router drops all packets not related to its DHCP client
functionality at a domain that (currently) has no IP configuration. As soon as
the domain achieves to get a valid IP configuration, the router switches to
the normal behavior.
New driver-manager subsystem
============================
In traditional Genode system scenarios, the selection and configuration of the
used device drivers are defined at system-integration time. This approach
works fine whenever the hardware platform targeted by a given scenario and the
use case of the scenario is well known in advance. But it does not scale up to
general-purpose computing where one system image must be usable on diverse
machines, and the concrete use cases are up to the end user.
The new _driver-manager_ subsystem composes existing Genode components within
a dynamic subsystem. It spawns and configures device drivers that are
fundamental for an interactive system on demand. When integrated as a
building block in a Genode system, it provides the following feature set:
* It contains the ACPI-discovery component and the platform driver.
* It hosts and automatically configures the USB driver such that USB storage
and vendor-specific devices become available to user-specific driver
components residing outside the drivers subsystem (e.g., a VirtualBox
instance that drives an individual USB stick). The list of present USB
devices and the current USB-driver configuration are provided as a
'usb_devices' and 'usb_drv.config' report respectively. Furthermore, the USB
driver is configured to drive human input devices (HID) and provides the
event stream as an input service.
* It spawns the AHCI driver and produces a list of present devices as a
'block_devices' report.
* It hosts a PS/2 driver as well as an input-filter that incorporates the
input-event streams originating from the PS/2 and USB HID drivers. The
default configuration generates character events based on a configurable
keyboard layout and key repeat, and includes scroll-wheel emulation and
pointer acceleration for a PS/2 mouse (or, more importantly, the trackpoint
of Lenovo laptops).
* It responds to changes of the 'capslock' and 'numlock' states, which are
managed outside of the driver subsystem. Both states are consumed by the USB
and PS/2 drivers to drive the keyboard-indicator LEDs. The 'numlock' state
is furthermore used to toggle key re-mappings performed by the input filter.
The 'capslock' state is incorporated into the modifier state as processed by
the input-filter's character generator.
The new subsystem comes in the form of a depot package, which depends on all
required components. Internally, it employs a dynamic init instance as a tool
to start and manage driver components on demand. The actual management
component is a simple program of about 500 lines of code that merely consumes
reports and produces configurations. It is so simple that it does not even
perform any dynamic memory allocation.
The new subsystem is present in the _gems_ repository and illustrated by the
_gems/run/driver_manager.run_ script. It is also used as one cornerstone of
the forthcoming general-purpose "sculpt" scenario mentioned in the
introduction.
Configuration changes of acpica and platform driver
===================================================
Up to now, the acpica application was started up-front in most scenarios to
get exclusive access to all PCI devices during initialization. Afterwards
the platform driver took over the device access and announced the platform
service. With the upcoming "sculpt" scenario, the desire arose to start the
acpica application at a later stage, when the platform driver is already
running. We adjusted the acpica and platform driver configuration slightly to
cover this use case also.
New ROM-filter abilities
========================
The ROM-filter component is able to transform XML data from multiple ROM
modules into a new ROM module. It is prominently used to generate component
configurations depending on global system state. The current release makes
this tool more flexible by allowing verbatim copies of input content into
the output XML node as well as the use of input content as attribute values.
New user-input processing capabilities
======================================
In [https://genode.org/documentation/release-notes/17.02#Input-event_filter - version 17.02],
we introduced a modular input-processing component called _input-filter_.
The current release adds the following features to this component:
:incorporating modifier state from external ROMs:
By adding a '<rom name="...">' node into '<modN>' node of a chargen-filter,
it is now possible to incorporate the content of the given ROM module into
the modifier state. If the ROM module contains a top-level node with the
attribute 'enabled' set to "yes", the modifier is enabled. This is useful
for handling a system-global capslock state.
:scroll-wheel emulation:
The new '<button-scroll>' filter turns relative motion events into wheel
events while a special button (i.e., the middle mouse button) is pressed.
The button and rate of generated wheel events can be configured per axis via
the sub nodes '<vertical>' and '<horizontal>'. The button of each axis can
be specified via the 'button' attribute. By default, "BTN_MIDDLE" is used.
The rate of generated wheel events can be defined by the 'speed_percent'
attribute. A value of "100" uses relative motion vectors directly as wheel
motion vectors. In practice, this results in overly fast wheel motion. By
lowering the value, the rate can be reduced to practical levels. By
specifying a negative value, the direction of the generated wheel motion can
be inverted.
The consumed relative motion events are filtered out from the event stream
such that pointer movements are inhibited while the wheel emulation is
active. All other events are passed along unmodified.
:pointer acceleration:
The new '<accelerate>' filter applies acceleration to relative motion
values. The 'max' attribute defines the maximum value added to the incoming
motion values. The 'sensitivity_percent' attribute scales incoming motion
values before applying the (potentially non-linear) acceleration function.
The 'curve' attribute defines the degree of non-linearity of the
acceleration. The value "0" corresponds to a linear function whereas the
maximum value "255" applies a curved function. The default value is "127".
Keyboard-LED support for PS/2 and USB HID
=========================================
Both the PS/2 and the USB drivers have gained the new '<config>' attributes
'capslock_led="no"', 'numlock_led="no"', and 'scrlock_led="no"' (with their
default values shown). The attributes can have the values "no" (LED is turned
off), "yes" (LED is turned on), or "rom". In the latter case, the driver reads
the LED state from a dedicated ROM module called "capslock", "numlock", or
"scrlock" respectively. The ROM module is expected to have a top-level XML
node with the attribute 'enabled' set to "yes" or "no". The drivers reflect
this state information by driving the corresponding keyboard-mode indicator
LEDs.
Revised Nitpicker GUI server
============================
Driven by use cases like the "sculpt" scenario mentioned in the introduction,
the Nitpicker GUI server and its helper components received an overhaul.
Besides modernizing the implementation according to our today's best
practices, we succeeded in removing the focus handling as the last remaining
builtin policy from the GUI server to an external component, thereby making
the GUI server much more flexible. This line of work is complemented with
an improved way of supporting client-provided pointer shapes, and a new
general component for handling global keys.
Supplementing user-activity information to the hover report
-----------------------------------------------------------
Nitpicker's existing "hover" report features the information of the currently
hovered client (e.g., the client's label and domain). In the new version, the
report also features the information whether or not the user has actively
moved the pointer during the last half second. This is analogous to how the
"focus" report features user-activity information about recent key
press/release activity. When combined, the "hover" and "focus" reports provide
a way to detect the absence of user activity, e.g., to implement a lock screen
or screen saver. If both reports have no 'active' attribute, such a component
can schedule a timer. Whenever either of both reports shows an 'active'
attribute, the timer is reset. The lock screen becomes active once the timeout
triggers.
Key-state reporting
-------------------
For debugging purposes or for implementing global key combinations, Nitpicker
now offers "keystate" reports. The report is updated each time, the user
presses or releases a key. It lists all currently pressed keys along with the
key count as observed by Nitpicker.
Report last clicked-on client
-----------------------------
The new 'clicked' report features the information about the client, on which
the user actively clicked most recently. It is useful to implement a
click-to-focus policy outside of Nitpicker.
Externalizing Nitpicker's focus policy
--------------------------------------
Traditionally, Nitpicker had a builtin policy about the input focus, which
ensured that only the user can change the focus. The input focus is changed
whenever the user clicks on an unfocused view. If permitted by the policy of
the domain, the clicked-on client receives the focus. The policy configuration
allows one to define domains that never receive any focus, domains that
receive the focus only temporarily while the button is kept pressed (the
so-called "transient focus"), or domains that can receive the regular input
focus.
However, there are situations where this builtin policy stands in the way. For
example, in a scenario based on virtual consoles, the user wants to be able to
switch virtual consoles via keyboard shortcuts and expects the input focus to
match the currently visible console regardless of any mouse clicks. Another
example is the change of the input focus via key combinations like alt-tab.
As an alternative to the builtin policy, the new version of Nitpicker is able
to respond to an externally provided "focus" state in the form of a ROM
session. This state is driven by a dedicated component, like the new
_nit_focus_ component that implements the traditional click-to-focus policy.
By supplying the focus as a ROM session to Nitpicker, it becomes easy to
globally overwrite the focus if needed. One particular example is a lock
screen that should capture the focus when becoming active, and yield the focus
to the original owner when becoming inactive.
The new explicit focus handling can be activated by setting the '<config>'
attribute 'focus' to the value "rom". Further down the road, we plan to make
this option the default, with the ultimate goal to remove the original builtin
policy.
Generalized global-key handling
-------------------------------
The new _global_keys_handler_ component replaces the former _xray-trigger_
component. It transforms a stream of Nitpicker input events to state reports.
The states and the ways of how the user input affects these states is
configurable. Examples for such states are the system-global capslock and
numlock states, or the Nitpicker X-ray mode activated by a global
secure-attention key. The configuration looks as follows:
! <config>
! <bool name="xray" initial="no"/>
!
! <press name="KEY_F1" bool="xray" change="on"/>
! <release name="KEY_F1" bool="xray" change="off"/>
! <press name="KEY_F2" bool="xray" change="toggle"/>
!
! <report name="xray" delay_ms="125">
! <hovered domain="panel"/>
! <bool name="xray"/>
! </report>
! </config>
A '<bool>' node declares a boolean state variable with the given name and its
initial value (default is "no"). There may be any number of such variables.
The '<press>' and '<release>' nodes define how key events affect the state
variables. Each of those nodes refers to a specific state variable via the
'bool' attribute, and the operation as the 'change' attribute. Possible
'change' attribute values are "on", "off", and "toggle".
The '<report>' node defines a state-dependent report with the name as
specified in the 'name' attribute. The report-generation rate can be
artificially limited by the 'delay_ms' attribute. If specified, the report is
not issued immediately on a state change but after the specified amount of
milliseconds. The '<report>' node contains a number of conditions. Whenever
one of those conditions is true, a report of the following form is generated:
! <xray enabled="yes"/>
Otherwise, the report's 'enabled' attribute has the value "no". Possible
conditions are '<bool>' and '<hovered>'. The '<bool>' condition is true if the
named boolean state variable has the value true. The '<hovered>' condition is
true if the currently hovered Nitpicker client belongs to the domain as
specified in the 'domain' attribute. The latter information is obtained from a
ROM module named "hover", which corresponds to Nitpicker's hover reports.
To use the global-keys-handler in practice, one needs to configure the
Nitpicker GUI server such that the press/release events of the global keys of
interest are routed to the global-keys-handler. This can be achieved by
Nitpicker's '<global-key>' configuration nodes. For example:
! <global-key name="KEY_F1" label="global_keys_handler -> input" />
! <global-key name="KEY_F2" label="global_keys_handler -> input" />
More flexible geometry definitions of nit_fb instances
------------------------------------------------------
The _nit_fb_ component translates the Nitpicker session interface into the
low-level input and framebuffer session interfaces such that raw framebuffer
clients can be hosted as Nitpicker applications. The position and size of such
an application is configurable.
The new 'origin' attribute denotes the coordinate origin of the values
specified in the 'xpos' and 'ypos' attributes. Supported origins are
"top_left", "top_right", "bottom_left", and "bottom_right". This attribute
allows one to align a Nitpicker view at any of the four screen corners.
The 'width' and 'height' attribute values can now be negative. If so, they are
relative to the physical screen size. E.g., when using a screen size of
640x480, the effective width for a 'width' attribute value of "-100" would be
640 - 100 = 540.
Simplified handling of client-provided pointer shapes
-----------------------------------------------------
The _pointer_ component that accompanies Nitpicker by default shows a static
pointer shape only. In advanced scenarios, for example when multiple instances
of VirtualBox are present on one screen, it is desired to show the shape
provided by the currently hovered guest OS. This was accomplished by a
special _vbox_pointer_ component with access to both the client-provided
shape and Nitpicker's hover report. Whereas this component sufficed for
relatively static scenarios, the pointer's policy configuration became rather
difficult in dynamic scenarios where the labels of the displayed VMs or
applications are unknown at system-integration time.
The new version simplifies the shape handling by letting the pointer component
play the role of a "Report" service that consumes "shape" reports. This way,
the pointer implicitly knowns the label of the shape-providing client. It
matches the labels of its report clients against the currently hovered client
as obtained from Nitpicker's hover report. If there is a match, the pointer
displays the matching client-provided shape. Since the new component is
generically applicable, e.g., not only for VirtualBox-provided shapes but also
for Qt5-provided shapes (Section [Displaying of Qt5's custom pointer shapes]),
it has become Nitpicker's default pointer component.
USB-driver support for RNDIS
============================
In this release, support for Microsoft's proprietary RNDIS protocol was
enabled in our Linux-based USB network driver. Thereby it is possible to use
the network sharing ("tethering") features provided by many Android devices.
The driver was tested using devices from different vendors.
Since the RNDIS driver is based on the 'cdc_ether' driver (the open protocol
alternative phone vendors should be using), it had to be enabled as well.
Due to lack of any devices supporting CDC, while enabled, the driver could not
be tested and must be considered experimental for now.
The porting and enabling of the driver was done by Alexander Senier from
[https://componolit.com - Componolit]. Thanks for this welcome contribution!
Refined Rump-kernel-based file-system support
=============================================
We extended the 'rump_fs' file-system server with the ability to mount and
unmount the underlying file system on demand. The server will mount the file
system on the first established session request and in return will unmount the
file system when the last session is closed. In case all clients are shut down
before the server is stopped, this prevents leaving the file system marked as
dirty. Even if the file system itself is in a clean state, the dirty bit might
otherwise trigger a false negative result when performing a file-system check.
In release [https://genode.org/documentation/release-notes/14.02 - 14.02], we
added a e2fsprogs Noux port. Since the use of the VFS library within libc,
Noux is not strictly needed anymore for running tools like the e2fsprogs
utilities. On the contrary, it increases the complexity of a file-system
management mechanism needlessly. With this release, we introduce a port of the
'e2fsck' tool from e2fsprogs to Genode that does not depend on Noux. It can be
used by a management component to check an ext2 file-system prior to starting
'rump_fs' and in case of errors to attempt to fix them automatically.
Additionally, we significantly stripped down Genode's version of the Rump
kernel. By integrating Rump directly into Genode's build system, compiling and
checking out required Rump sources only, we were able to reduce the compile
time of 'rump_fs' and the source archive size (from about 700 MiB to about 10
MiB).
Runtime environments and programming languages
##############################################
Genode components based on the Nim language
===========================================
Support for the [https://nim-lang.org/ - Nim] programming language was
introduced in the [https://genode.org/documentation/release-notes/17.05 - 17.05]
release and during this release period, our understanding of Nim, its idiom,
and its interaction with the Genode framework progressed to a point where
native components can be reasonably implemented using the language.
The 'hotkey_edit' component in the world repository toggles XML sections in
and out of a file managed by 'xml_editor' when triggered by key input events.
The component is written in Nim, acts as a "Nitpicker", "Input", "Report",
and "ROM" client, and follows the Genode paradigm of a state-machine driven by
asynchronous signalling. The application specific source is also less than one
hundred lines of code.
To enable client usage of Genode services the respective 'Client' or
'Connection' C++ classes are wrapped as Nim objects by taking advantage of the
Genode 'Constructible' class to be able to manually invoke constructors during
object initialization. Wrapping service classes and their methods is currently
done by hand, but changes to service interfaces are so gradual that it is more
effective than automated code generation. Signal handling is achieved using
anonymous procedures and happens when the thread of execution winds back to
the initial entrypoint. This approach is just the same as for components that
are linked to the 'libc' library, and contrasted with components linked to the
'posix' library. The Nim language has no conventions for a special "main"
procedure like C or Go, so signals handlers are dispatched by default after
all top-level statements have been executed.
The language has experimentally proven to be flexible enough to implement RPC
servers, but more experience is required to determine if a garbage-collected
language can manage to abide by transient RAM resource quotas, as any
multi-session server must do to reliably serve an indefinite number of
clients. The standard language runtime also depends on the 'libc' library,
which is relatively expensive and complicated for typical native components.
This dependency also prevents the implementation of VFS plugins in Nim, which
must be available as the C runtime is initialized. Removing the dependency is
certainly possible, but it remains an open question of whether it is practical
to maintain such radical changes.
To experiment with the Nim language, a recent release or development version
of the compiler is required. To this end, the Genode toolchain uses a custom
compiler by default. A script is provided to build the recommended version at
_tool/tool_chain_nim_.
GDB-based debugging of server components
========================================
We adapted the 'gdb_monitor' component to the asynchronous session-creation
procedure introduced in Genode release
[https://genode.org/documentation/release-notes/16.11#New_session-creation_procedure - 16.11].
The current release makes it possible to debug components that implement
Genode services.
Applications and libraries
##########################
Displaying of Qt5's custom pointer shapes
=========================================
Qt applications often make use of custom mouse-pointer shapes, for example
when a text input field is hovered. We enabled this feature for our Qt5 port
by letting Qt report its custom pointer shapes to the newly enhanced pointer
component described in Section
[Simplified handling of client-provided pointer shapes]. The use of the new
feature is illustrated in the _qt5_calculatorform.run_ script. Note the
rewriting of the 'shape' session label.
Qt5-based virtual keyboard
==========================
Genode supports user input with keyboard and mouse attached via PS/2 and USB
as well as USB touch panels. The current release brings an option for Qt5
applications to support textual-information input in situations where a
hardware keyboard is missing. The Qt5 input stack was extended for platform
input contexts and the accompanied example _run/qt5_virtualkeyboard.run_
showcases the feature.
[image virtual_keyboard]
Thanks to Johannes Kliemann for his contribution!
Resizable libSDL-based applications like avplay
===============================================
There are quite a few ports of SDL-based software available on Genode that
work well when executed in isolation, e.g., a game running in full screen
directly in the frame buffer. However, when running in a common desktop
scenario, the fixed size of the frame buffer used in Genode's SDL video back
end is a noticeable limitation. So, in addition to removing the usage of
deprecated APIs in the SDL back ends, we lifted this limitation as well.
Removing the usage of the deprecated APIs, which rely on a global environment,
led to the addition of the Genode-specific initialization function
'sdl_init_genode' that has to be called prior to 'SDL_Init'. For that purpose,
we introduce a stub library 'sdlmain'. In accordance to the posix library, it
handles command-line argument parsing, proper SDL initializing, and the call
to SDL's 'main' function. For interacting with the Genode API, we might have
to execute signal handlers, e.g., whenever a framebuffer mode change signal is
received. This is complicated from within a thread that is running libc code,
which is true for most if not all SDL-based components. Therefor and because
those components come with their own event loop, that polls SDL for events, we
start the 'main' function in its own thread. The main entrypoint of the
component does all the signal handling and the dispatcher flag signals in a
way that SDL can transform them into SDL_Events and inject them into the event
loop.
This changes enable the seamless resizing of a running avplay instance.
Front end for the Libretro API
==============================
A component that has been in the world repository for almost a year has been
refactored and is ready for mention. The 'retro_frontend' is a native front
end to games implemented as "Libretro cores".
[https://libretro.com - Libretro] is an API that exposes generic
audio/video/input callbacks from a dynamic library to a front end. The front
end handles video output, audio output, input, and the application's life
cycle. This novel arrangement is intended to minimize the effort of porting
games to different platforms and to increase future backwards compatibility.
On Genode, these cores are executed frame-by-frame as compelled by the front
end rather than by a main loop within the game. Game assets are loaded as
configured in a general manner at the front end and multiple input devices can
be managed and mapped into cores. This in effect moves the platform
abstraction layer tighter around the game engine and relinquished more control
and configuration to a native layer provided by the user. Documentation on
using the front end can be found in the world repository along with examples
for emulating a few game consoles.
Platforms
#########
UEFI boot, consistent use of GRUB2 on x86
=========================================
With the previous release, we already added support for GRUB2 when booting in
UEFI mode. However, for non-UEFI boots, we still relied on GRUB-0.97 and
ISOLINUX from the Syslinux Project as boot loaders.
With the experiences gained from GRUB2, we decided to modernize our bootloader
chain for x86. With this release, we solely use GRUB2 during all x86 boots.
For ISO creation, we now leverage the images - shipped by GRUB2 -
'embedded.img' and 'eltorito.img', together with the 'xorriso' tool. Due to
this change, we were able to remove the ISOLINUX binaries and eltorito files
of ancient GRUB1.
The final GRUB2 binaries are now integrated as external Genode port, which
can be installed by invoking:
! tool/ports/prepare_port grub2
The 'grub2' port contains the GRUB2 binaries. Additionally, the port contains
the instructions and the references to the git source code of GRUB2 used to
generate the bootloader binaries. With the information provided within the
port, one can easily reproduce the GRUB2 builds if desired.
Enabling MMU-based threat mitigations by default
================================================
With this release, we enabled support to leverage non-executable memory on
Genode. On hardware and kernels supporting this feature, it is now enabled by
default.
On ARM this feature is available to all supported kernels, namely our own
hw kernel, seL4, and Fiasco.OC.
On x86 the 64bit kernels hw, NOVA, and Fiasco.OC support this feature.
SeL4 currently misses support on x86. The remaining x86 32bit kernels (i.e.,
OKL4, Pistachio and Fiasco) don't offer non-executable memory support, since
they do not configure the page-tables in the PAE (physical address extension)
format, which is required by non-executable memory.
Updated seL4 to kernel branch 7.0
=================================
In the previous releases, we extended our seL4 support and thereby collected a
patch series for the seL4 kernel, e.g. UEFI boot support. We submitted the
patches to the seL4 developers who integrated most of our changes into the
seL4 7.0 kernel release.
Additionally to the update, we extended the UEFI framebuffer support for the
seL4 kernel so that our simple boot framebuffer driver may now utilize the
graphics device if setup by GRUB2 during UEFI boot. The patches to the kernel
got submitted to the seL4 maintainers for review and for inclusion.
Execution on bare hardware (base-hw)
====================================
During the previous releases, several preparation steps were made to enable
the execution of Genode's core as privileged code inside the protection domain
of each component. With this release, we pushed the genesis of the base-hw
core component and its kernel library to finally achieve that goal. Now, the
virtual address space of each component is split into a privileged and an
unprivileged part. The privileged part is shared between all components and
does not vary when switching between different protection domains.
Nonetheless, it is accessible by the privileged threads of core and the kernel
library's context only. The advantages of this approach are less context
switch overhead and less complex assembler code with respect to the
platform-specific exception and system call entry path.
Improved offline validation of Genode configurations
====================================================
Genode's configuration is based on XML and gets validated by xmllint during
each run tool invocation. Up to now, we used xmllint to check for a valid XML
syntax.
With this release, we added an additional semantic check for Genode's 'init'
component. The check determines whether the XML nodes and attributes are known
and understood by 'init'. This check is performed on each run tool invocation
at integration time. The XML schema file is located in
! tool/run/genode.xsd
and gets applied by xmllint.

898
doc/release_notes-18-02.txt Normal file
View File

@@ -0,0 +1,898 @@
===============================================
Release notes for the Genode OS Framework 18.02
===============================================
Genode Labs
After being developed for over a decade, Genode remained a mystery for many
people who looked at the project from a distance as it does not seem to fit
any established category of software. In 2018 - declared as the Year of Sculpt
on our [https://genode.org/about/road-map - roadmap] - this will hopefully
change. Genode 18.02 features the first revision of Sculpt, which is a
Genode-based operating system for general-purpose computing. After being used
as day-to-day OS by the entire team of Genode Labs for several months, we feel
that the time is right to share the system with a broader audience (Section
[Sculpt for Early Adopters]).
One fundamental feature of Sculpt is the ability to install and deploy
software from within the running operating system, which is universally
expected from any modern general-purpose OS. Section
[On-target package installation and deployment] presents Genode's unique
take on the topic of software installation and deployment.
Besides Sculpt, the current release has no shortage of other improvements.
Genode's growing arsenal of 3rd-party software received profound updates and
additions, including VirtualBox, Muen, seL4, several GNU packages, and
libraries. Also the user-level networking stack - including the Linux-based
LxIP stack and our custom NIC-router component - received a lot of attention.
Thanks to the added network driver for i.MX-based hardware, this networking
infrastructure becomes usable on embedded platforms based on this SoC.
Furthermore, the current release continues the cultivation of the Nim
programming language for Genode components.
Sculpt for Early Adopters
#########################
The current release features the first revision of Sculpt, which is a
Genode-based operating system for general-purpose computing. This initial
version is called Sculpt for Early Adopters (EA). Its target audience are
enthusiasts who are already familiar with Genode and are eager to use a
Genode-based operating system on their machines. As outlined on the
[https://genode.org/about/road-map - roadmap], later versions will become
increasingly approachable.
[image sculpt_overview]
Please refer to the official
[https://genode.org/documentation/articles/sculpt-ea - Sculpt documentation]
to step right into the adventure.
On-target package installation and deployment
#############################################
In May last year, we introduced the package-management concept for Genode to
pursue two goals. First, to overcome the naturally limited scalability of
composing Genode systems solely from source. This limit became evident in
complex system scenarios that incorporate a huge amount of 3rd party software.
Thanks to the introduced _depot_ concept and its integration in Genode's
workflow - in particular the run tool - the work of system integration became
much more structured (by caring about packages instead of individual build
targets), robust (by avoiding conditions in run scripts), and quick (by the
accelerated test cycle when using pre-built packages).
The second goal is the ability to update and extend a running Genode system on
the fly. We are happy to have reached this goal with the current release. As
exemplified by the Sculpt scenario, packages cannot only be used as building
blocks for system images but also as subsystems dynamically installed and
deployed on target. Even though installation and deployment are closely
related topics, both involve distinct challenges, which allow Genode to shine.
Installation / update
=====================
In traditional operating systems, the installation and update of system
software is the job of privileged programs. For example, a package manager in
a GNU/Linux system is typically executed with root privileges. This is
troublesome because the functionality of such a program is extremely complex.
In particular it is exposed to the network and has to parse content
originating from potentially untrusted parties. Therefore, potential software
vulnerabilities should be expected. However, in modern OSes, these programs
are just assumed to behave correctly. If this overly optimistic assumption
doesn't hold, the entire system is at risk.
Genode helps us to mitigate this problem by modelling each installation step
as a distinct component composition where each component has a well-defined
and extremely narrow role. The installation is an iterative sequence that
is orchestrated by the so-called download-manager component
(Figure [depot_download]).
[image depot_download]
Initially, the download manager receives a list of content to be installed
into the local depot, which is stored on the file system. The depot may
already be populated with (portions of) this content. In the first step, the
download manager must determine the parts that are missing. To do that, it
does not access the file system directly but instead hands over this task to a
disposable helper component called _depot-query_ that is spawned within a
dynamic init instance. This indirection has two benefits. First, the download
manager is not bothered with the complexity of accessing the file system. It
does not even have any notion of files. Second, the download manager is
effectively shielded from the file system. Should the file system misbehave,
the liveliness of the download manager remains unaffected.
[image depot_download_query_deps]
The depot-query component reports its findings to a report session. The report
eventually reaches the download manager as an updated ROM module. Given the
list of missing content, the download manager has to determine the information
of where to obtain the content from and the public key of the content creator.
This information is contained within the depot. So the download manager issues
another request to the depot-query component in order to obtain it.
[image depot_download_query_url]
Once the depot-query component has responded, the download manager knows what
content to get, where to get it, and how to verify it. To download the
content, it changes the dynamic init instance as follows.
[image depot_download_fetch]
The depot-query component is now gone. Actually, the entire depot has moved
out of sight. Instead, a fresh _fetchurl_ component is spawned. This component
is connected to the network as well as the writeable download directory
_public/_. Internally, fetchurl employs a complex software stack, which
includes the C runtime, curl, libssl, and libssh. Hence, we expect this
component to be vulnerable. Since it is facing the network, we assume that
vulnerabilities are exploitable. In the worst case where the component is
completely in the hands of an attacker, it may write wrong content into the
_public/_ location. But compared to executing curl or wget as root on a
traditional Unix system, the reach of an attack is quite limited. For example,
the mere existence of the download manager remains completely out of view of
fetchurl. However, the content of _public/_ must not be trusted. To reinforce
trust in the downloaded content, the content is accompanied with cryptographic
signatures created by the content creator. Before we touch the content, we
first check its authenticity. To perform this verification step, the download
manager reshapes the dynamic init instance as follows.
[image depot_download_verify]
Note that fetchurl exists no more and network connectivity is cut, effectively
disposing any form of malware that might have infected fetchurl. Next a new
_verify_ component enters the picture. It is configured with a list of content
to check, the signatures of the content, and the public key of the content's
presumed creator. Since it accesses the _public/_ location exclusively, it is
not prone to any potential time-of-check to time-of-use problems during the
verification. Under the hood, the _verify_ component employs a hugely complex
implementation based on GnuPG. It would be naive to fully trust this code.
However, when embedded in our scenario, the reach of a bug is limited because
the verify component has no access to any mutable system state. It could
merely give the wrong answer (which is of course bad but there is no way we
can magically solve this).
Knowing that the downloaded content is indeed the same content as intended
by the creator, it is time for extraction. For this step, the download
manager - again - reshapes the dynamic init instance:
[image depot_download_extract]
This time, both the _public/_ location as well as the trusted _depot/_ are
visible and a new _extract_ component is spawned. As the depot may host
content from multiple sources, which potentially distrust each other, the
content of each content provider resides in a dedicated subdirectory within
the depot. Instead of handing over access to the entire depot to the extract
tool, we mediate the file-system access via a _chroot_ component that limits
the view to the depot-provider's respective subdirectory. In the worst case
where a misbehaving content provider delivers a forged (but correctly signed)
archive to exploit a vulnerability of the extract component, the reach of the
attack remains limited to the content provider's space within the depot.
After the extraction step has completed, the depot is populated with the new
content, which may - in turn - include new dependency information. At this
point, the download manager starts a new iteration. This iterative process
terminates as soon as the depot-query component signals that no content of
the software installation is missing.
The bottom line here is that we are able to use complex and useful software
like curl, libarchive, liblzma, and GnuPG while largely distrusting it. In
contrast to this software that sums up to hundreds of thousand lines of code,
the download manager comprises less than 1000 lines of code. The software
installation procedure described above is implemented by the 'depot_download'
subsystem hosted in the gems repository and illustrated by an equally named
run script. It also forms the basis of the install/update mechanism of the
Sculpt scenario.
Deployment
==========
Once software has entered the system in the form of depot content, the
remaining question is how to turn this content into running subsystems. The
answer is given by the following illustration.
[image sculpt_deploy_runtime]
Like for the installation process described above, the scenario employs a
dynamic init instance that is accompanied by an orchestrating component. The
latter is called _depot-deploy_. The depot-deploy component queries
information from the depot using the same depot-query component that was used
during the installation. Based on the returned _blueprint_ information for the
to-be-deployed subsystems, it generates the configuration for the dynamic init
instance. The subsystems hosted within this init instance access the depot
content via mere ROM sessions as provided by the FS-ROM component. This makes
the use of the depot transparent to the hosted subsystems.
The depot-deploy component is located in the gems repository and accompanied
by a same-named run script. More importantly, it is featured in the deploy
runtime of the Sculpt system.
Base framework and OS-level infrastructure
##########################################
Increased default warning level
===============================
For building Genode components written in C++, the compiler flags -Wextra,
-Weffc++, and -Werror are now enabled in addition to -Wall by default.
If this strict warning level is inapplicable for a given component or
library, it is possible to explicitly disable the strictness in the
respective build-description file by adding the following line:
! CC_CXX_WARN_STRICT =
We adjusted almost all the code of the base, base-<kernel>, os, and demo
repositories to comply with this new warning level. For most components
hosted in the higher-level repositories (libports, ports, dde_*, gems),
the strictness is disabled as of now and will be enabled component-wise
wherever feasible.
While adjusting our code base, we identified the following patterns worth
mentioning:
* A class with virtual functions can no longer publicly inherit base
classes without a vtable. The inherited object may either be moved
to a member variable, or inherited privately. The latter would be
used for classes that inherit 'List::Element' or 'Avl_node'. In order
to enable the 'List' and 'Avl_tree' to access the meta data, the
'List' must become a friend.
* Instead of adding a virtual destructor to abstract base classes,
we inherit the new 'Interface' class, which contains a virtual
destructor. This way, single-line abstract base classes can stay
as compact as they are. The 'Interface' utility resides in
_base/include/util/interface.h_.
* With the new warning level, all member variables must be explicitly
initialized. Basic types may be initialized with '='. All other types
are initialized with braces '{ ... }' or as class initializers. If
basic types and non-basic types appear in a row, it is nice to only
use the brace syntax (also for basic types) and align the braces.
* If a class contains pointers as members, it must now also provide a
copy constructor and assignment operator. In most cases, one
would make them private, effectively disallowing the objects to be
copied. Unfortunately, this warning cannot be fixed by inheriting
our existing 'Noncopyable' class (the compiler fails to detect that
the inheriting class cannot be copied and still gives the error).
For now, we have to manually add declarations for both the copy
constructor and the assignment operator as private class members.
Those declarations should be prepended with a comment like this:
! /*
! * Noncopyable
! */
! Thread(Thread const &);
! Thread &operator = (Thread const &);
In the future, we plan to revisit these occurrences and try to replace
the pointers with references. In the presence of at least one
reference member, the compiler would no longer implicitly generate
a copy constructor. So we could remove the manual declaration.
The following caveats are expected, even if you disable the strictness
in your component:
* If your component has a class called 'Interface', it may collide with
the new 'Genode::Interface' class. You may have to disambiguate the
names.
* The 'Genode::Rpc_client' is no longer a 'Genode::Capability'. Hence,
classes inherited from 'Genode::Rpc_client' cannot refer to a
'Capability' but must refer to 'Genode::Capability'.
* The 'Surface' class is no longer copyable, which led to API
changes of users of this class. E.g., the 'Nitpicker_buffer'
utility does no longer offer accessors for the contained surfaces
but a new 'apply_to_surface' method that takes a lambda function as
argument.
Init
====
Init selects session routes based on the requested service and the client's
label. The latter can be matched as 'label' (exact match), 'label_prefix', or
'label_suffix' (either end of the label matches). With the new version, these
options are complemented with an additional 'label_last' attribute that covers
the prominent case where the last part of the label identifies a requested
resource at the server. A typical example is the routing of a ROM session
based on the name of the requested ROM module.
Reflecting the core log to the application level
================================================
Core records now log messages in a ring buffer and exports this
memory as ROM named 'core_log'. User applications may monitor this ring buffer
and present or transfer the content as appropriate. The example component in
_repos/os/src/app/log_core_ transforms the content into normal log
messages, which may be routed to graphical terminals or stored on
file systems, e.g. by using the fs_log server.
NIC-router improvements
=======================
During the past three months, the NIC router has received several improvements
that were mainly inspired by our daily experience with the component as part
of our Sculpt based working environments.
The most notable new feature is the support for multiple NIC sessions at one
domain. If multiple NIC-session clients connect to one domain, the NIC router
acts as a simple hub between them. I.e., for every packet that is routed to
the domain, each connected session receives a copy of the packet. The same
applies for domain-local packets, meaning packets that target an IP address
inside the IP subnet of the domain they came from. This domain-local
forwarding applies before considering any other routing rules. So, in other
words, it is not possible to route such traffic to another domain.
Furthermore, the logging features of the NIC router were improved. First, the
router is now capable of periodically sending a report via Genode's report
session. This can be activated by adding the new '<report>' node to the router
configuration:
! <config>
! <report interval_sec="5" bytes="yes" config="yes">
! ...
! </config>
So far, the report provides per-domain information about the amount of sent
and received data ('bytes' attribute) and the current IPv4 configuration like
IP address, subnet mask, and gateway address ('config' attribute).
Second, there is a new verbosity option in the '<config>' node:
! <config verbose_domain_state="yes">
When this option is set, the NIC router will output a short message to the log
for each general state change of a domain. Currently, this includes the
IP-configuration state (IP address, subnet mask, gateway address) and the
number of connected NIC sessions. This is a useful addition because the
purpose of the regular verbose option is to give a very deep insight into
almost every activity of the router, which is vital for debugging
sophisticated problems but normally floods the log. Therefore, the regular
verbose option is not viable for complex setups like a Sculpt desktop
environment. In such a context, the new domain-state verbosity is pretty
discreet but already gives a good hint on why, for instance, packets get
dropped despite the routing rules being correct.
Last but not least, the timeout configuration of the NIC router has been
reworked and now allows for a much more precise adaption to the network
environment. The former 'rtt_sec' attribute of the '<config>' node has been
replaced by the following new attributes (default values shown):
! <config dhcp_discover_timeout_sec="10"
! dhcp_request_timeout_sec="10"
! dhcp_offer_timeout_sec="10"
! udp_idle_timeout_sec="30"
! tcp_idle_timeout_sec="600"
! tcp_max_segm_lifetime_sec="30">
Details about the new attributes can be found in the
_os/src/server/nic_router/README_ file. The default values should be
appropriate for the common use case so that specifying them is normally not
necessary.
New watch mechanism for file-system session
===========================================
The file-system session already provided a way for watching files or
directories for changes. However, the original mechanism was arguably hard to
use. In addition to opening the to-be-watched file-system node, the client had
to submit a so-called content-changed request into the session's request
queue. In turn, the server delivered the change notification by acknowledging
this request.
The new mechanism is much less bureaucratic. A file or directory can be
watched by opening a watch handle rather than submitting a 'CONTENT_CHANGED'
packet to the server. Whenever a change happens at a node with an open watch
handle, a CONTENT_CHANGED packet will be sent from the server to the client.
This serializes the registration with other handle operations and separates
I/O handle state from notification handle state.
C runtime
=========
We changed libc's handling of 'clock_gettime' to be explicitly configurable
rather than relying on built-in heuristics. With the new version, the libc
opens a timer session as a time source only if the 'rtc' attribute of the
'<libc>' configuration node is defined. If not configured, 'clock_gettime'
returns 0.
This change may require the adjustment of components that implicitly rely on
the libc as time source. To enable such a component to use relative time
(based on a timer session) but no wall-clock time, one can manually provide a
pseudo real-time clock value as follows:
! <vfs>
! <dir name="dev">
! <log/> <null/> <inline name="rtc">2000-01-01 00:00</inline>
! </dir>
! </vfs>
! <libc stdout="/dev/log" stderr="/dev/log" rtc="/dev/rtc"/>
GUI stack and terminal improvements
===================================
Nit-FB improvements
-------------------
The nit_fb component provides a framebuffer and input service while using the
nitpicker GUI server as back end. The new version adds the 'initial_width' and
'initial_height' attributes, which accommodate the use case where nit_fb is
used in a dynamic fashion like as a client of a window system. Here, the
initial dimensions define the initial window size but - in contrast to the
existing 'width' and 'height' attributes - the actual size can change
afterwards.
Terminal resizing
-----------------
The terminal-session interface gained the ability to propagate resize events
from the server to the client. The new version of the graphical terminal uses
this mechanism to support window resizing as well as dynamically changing the
font size. At the client side, noux has become able to reflect terminal-size
changes to noux applications. Applications based on ncurses (e.g., vim) are
able to gracefully respond to such changes now.
Using chroot to enforce read-only file-system access
====================================================
By placing a chroot component in-between a file-system client and server, the
client's view on the file system can be limited to a specific directory. With
the current release, chroot can additionally be used to restrict a writeable
file-system session to become read-only. This is accomplished by the new
'writeable' attribute of chroot's policy nodes. By default, it is set to "no".
API changes
===========
Noncopyable AVL node/tree
-------------------------
Copying an AVL node generally violates the integrity of the corresponding
tree. To rule out subtle bugs where AVL nodes are accidentally copied, AVL
nodes are no longer copyable.
New 'Buffered_xml' utility
--------------------------
The 'Buffered_xml' utility located at _os/buffered_xml.h_ simplifies the
implementation of dynamically reconfigurable components that need to keep a
verbatim copy of certain parts of their configuration during configuration
updates.
New 'List_model' utility
------------------------
More and more components respond to dynamic configuration updates. For most
components, such updates are quite simple: replace an old internal state by a
new one. But in cases like init, menu_view, or window decorator, a
differential update is in order. Until now, each of these components employed
custom code for this task. As this code is not trivial, a common solution is
preferable. This solution comes in the form of the new 'List_model' utility
located at _base/include/util/list_model.h_. It introduces a light-weight
formalism to feed a component-internal data model from an externally-provided
XML structure.
Dynamically expandable reporter utility
---------------------------------------
In many cases, components that generate reports don't explicitly handle the
situation where the default buffer size of 4096 bytes is exceeded by the
report. This problem is easy to miss because reports are often small at
testing time but become larger when deployed in complex scenarios. In most
cases, the best way to handle an 'Xml_generator::Buffer_exceeded' exception is
upgrading the report session. The new 'Expanding_reporter' that accompanies
the original 'Reporter' in _os/reporter.h_ eases the handling of this common
case.
Languages and runtime environments
##################################
Nim programming language
========================
A new Nim library for constructing Genode servers is now available in the
World repository. This module provides utilities for the asynchronous
session-creation procedure introduced in the
[https://genode.org/documentation/release-notes/16.11#New_session-creation_procedure - 16.11]
release. Some introductory code snippets are provided here for the
adventurous.
An example of server creation using the 'genodeservers' module:
! import romclient, genodeservers
!
! var
! sessionsRom = newRomClient "session_requests"
! # synchronously open a ROM client to the parent
! romContent = sessionsRom.stream.readAll()
! # copy the ROM content to a heap string
! requestsParser = initSessionRequestsParser(romContent)
! # a state machine for parsing 'session_requests' XML
!
! for id, service, label in requestsParser.create:
! # the `create` iterator provider for the parser
! # hides the details of parsing the XML data
! discard txBufSize = requestsParser.argInt "tx_buf_size"
! # extract typed session arguments from the current parser state
! discard label.lastLabelElement()
! # label handling utilities are provided
! if service == "MyService":
! myCreateSessionProc(id, label)
!
This module streamlines the handling of session metadata, but the developer
must still provide hand-crafted wrappers over the C++ methods for managing
RPC objects and passing session capabilities to the parent. Most notoriously
a global pointer symbol, `genodeEnv`, is used to expose the component
environment object. In the future, this will be replaced by a typed object
passed from runtime to an application entry procedure.
! type MySessionCapability {.
! importcpp: "My_session::Session_capability",
! header: "my_session/capability.h".}
! # import a capability type
!
! type MyNativeSessionBase {.
! importcpp: "My_session::Session_rpc_object",
! header: "my_session/rpc_object.h".}
! # import C++ session RPC object
!
! type MyNativeSession = Constructible[MyNativeSessionBase]
! # apply the C++ Constructible template to defer calling
! # the object constructor
!
! proc construct(cppObj: MyNativeSession) {.
! importcpp: "#.construct(*genodeEnv)".}
! # call the C++ constructor, passing the global Genode::Env
!
! proc manage(cppObj: MyNativeSession): MySessionCapability {.
! importcpp: "genodeEnv->ep().manage(*#)".}
! # call a method from the gobal Env, dereferencing
! # thru the Constructible template
!
! type MyNimSessionObj = ref object
! cppImpl: MyNativeSession
! cap: MySessionCapability
! id: SessionId
! # C++ RPC objects are best kept in native
! # reference-counted Nim objects
!
! proc manage(obj: MyNimSessionObj) =
! obj.cppImpl.construct() # call our wrapped constructor
! GC_ref(obj)
! # manually increase the reference count on our session
! # object to prevent the component entrypoint from
! # referencing an RPC object that has been lost and
! # freed from the heap
! obj.cap = obj.cppImpl.manage() # store our capability
!
! proc myCreateSessionProc(id: SessionId): MyNimSessionObj =
! result = new MyNimSessionObj
! # create our object on the heap
! result.manage()
! # construct and manage our RPC object
! result.id = id
! # store the session id from our parent
Procedures for calling Nim code from an RPC object, dissolving
and destructing RPC objects, and managing the session lifetime
are exercises left to the reader.
Updated VirtualBox
==================
Our VirtualBox port got updated from version 5.1.22 to version 5.1.32 in order
to leverage the security updates and improved audio support. Additionally the
boot time of Linux guests got improved by adjusting our custom virtualization
back end.
Libraries and applications
##########################
New trace-logging component
===========================
The new trace-logger component can be used to easily gather, process, and
export different types of tracing data. Furthermore, it marks the next step
towards a user framework that makes access to Genode's manifold tracing
abilities
([https://genode.org/documentation/release-notes/13.08#Light-weight_event_tracing - 13.08],
[https://genode.org/documentation/release-notes/13.11#Improved_event_tracing - 13.11],
[https://genode.org/documentation/release-notes/15.08#Enhanced_tracing_facilities - 15.08])
intuitive and convenient.
The component can filter the available tracing subjects according to session
label policies and thread names. The processing of the tracing data can then
be configured for each selected subject individually, for groups of subjects,
or for all subjects together. The resulting data is exported as log output.
This is an example configuration of the trace logger, which shows the default
value for each attribute (except policy.thread and policy.label):
! <config verbose="no"
! session_ram="10M"
! session_arg_buffer="4K"
! session_parent_levels="0"
! period_sec="5"
! activity="no"
! affinity="no"
! default_policy="null"
! default_buffer="4K">
!
! <policy label="init -> timer" />
! <policy label_suffix=" -> ram_fs" />
! <policy label_prefix="init -> encryption -> "
! thread="worker"
! policy="null"
! buffer="4K" />
! </config>
The most important features so far when it comes to processing the traced
data are:
* Trace CPU activity and affinity ('activity' and 'affinity' attribute),
* Install individual policies for the creation of further tracing data
('policy' attributes) for instance, 'rpc_name' for a log of issued RPC calls),
* Dimensioning the subject-local trace buffers and the frequency of Trace Logger
data examination ('buffer' and 'period' attributes), and
* Configure the session to the Tracing server ('session' attributes).
A comprehensive documentation of the trace-logger component can be found in
_os/src/app/trace_logger/README_. An example of how to use the component is
given through the run script _os/run/trace_logger.run_.
New component for extracting archives
=====================================
The new 'extract' component located at _libports/src/app/extract_ extracts
the content of an arbitrary number of tar.xz archives according to its
configuration. It is used by the depot-download subsystem described in
Section [On-target package installation and deployment]. The component
is accompanied by the run script _libports/run/extract.run_ that illustrates
its use.
New signature-checking tool based on GnuPG
==========================================
The on-target installation of software packages requires a way to verify
cryptographic signatures of downloaded content within a Genode system.
The new 'verify' component located at _ports/src/app/verify_ facilitates the
code of GnuPG to verify detached OpenPGP signatures against public keys.
Since GnuPG depends on libgcrypt and libgpg-error, ports of those libraries
were added to the libports repository. The component comes with the run
script _ports/run/verify.run_ that demonstrates its usage.
Fetchurl component for downloading files
========================================
Fetchurl is a component for downloading files from the network, based
on the curl library. It used to reside in the genode-world repository.
Since it has become a mandatory part of Genode's on-target software
installation mechanism, we have moved it to the _libports_ repository now.
Besides this relocation, fetchurl received a welcome modernization. In
particular, the new version uses the modern socket-fs infrastructure of
the libc instead of relying on the deprecated libc_lwip plugin as a hard-wired
dependency.
New interactive FLIF image viewer
=================================
A simple image viewing application for the FLIF lossless image format was
written from scratch using the FLIF reference decoder library. The viewer can
be used to interactively view a directory of images and supports animation of
GIF-like FLIF files.
Ported 3rd-party software
=========================
With the current release, the following 3rd-party software becomes available
on Genode:
:[https://www.libarchive.org/ - libarchive]: is a library for uncompressing
and extracting various archive formats. It nicely wraps format-specific
libraries like zlib behind a unified and easy-to-use API. The port can
be found in the _libports_ repository.
:[https://lz4.github.io/lz4/ - lz4] and [https://tukaani.org/xz/ - liblzma]:
implement modern compression algorithms as supported by libarchive.
Thanks to Ben Larson for contributing the port of these libraries.
:[https://www.tcl.tk/ - Tcl]: is used as scripting language for various
Genode tools. With the new 'check_abi' tool described in Section
[Automated ABI consistency checks], the Tcl shell 'tclsh' has become
a dependency of the build system. Therefore, we made 'tclsh' available as
noux package. Note, however, that this port comprises solely the
functionality needed for simple scripting.
:[http://flif.info/ - FLIF]: is a library for the Free Lossless Image
Format. Thanks to Emery Hemingway for making it available in the
genode-world repository.
:[https://github.com/json-c/json-c/wiki - JSON-C]:
is a library for processing JSON-formatted data. Thanks to
Johannes Kliemann for contributing the port to the genode-world
repository.
:[https://www.nlnetlabs.nl/projects/ldns/ - Drill (ldns)]:
provides a utility for DNS testing. Thanks to Emery Hemingway for adding it
to the genode-world repository as a side activity of improving Genode's
network stack.
Updated packages for the Noux runtime environment
=================================================
The current release updates the following noux packages: less (version 487),
grep (version 3.1), coreutils (version 8.29), tar (version 1.30), findutils
(version 4.6), which (version 2.21), sed (version 4.4), and bash (version
4.4.18). Thanks to Hinnerk van Bruinehsen for this welcome contribution.
Device drivers
##############
Ethernet-driver for i.MX-based Wandboard
========================================
The current release contains a port of the Linux kernel driver for the
Ethernet card family originally produced by Freescale. We followed our
established approach to tailor an independent device-driver environment (DDE)
for the specific driver. To profit from synergies with the existing drivers of
the _dde_linux_ repository, we took the Linux kernel 4.4.3 as reference.
For now the current version is limited to support the Wandboard Quad as this
is the i.MX-based board that is nightly tested by our infrastructure. The
support of other boards using the same IP core is planned for future releases.
The driver can be found in _dde_linux/src/drivers/nic/fec_. To test the driver,
no further configuration is needed and you can have a look at one of the
automatic network tests, like _lwip.run_, as a reference.
Platforms
#########
Execution on bare hardware (base-hw)
====================================
Thanks to Johannes Schlatow from the TU Braunschweig, the support of the
Zynq-7000 boards by our base-hw kernel got extended. It is now possible to use
all CPU cores instead of only the primary one.
Updated Muen separation kernel
==============================
The Muen SK port has been updated to the latest development version 0.9. The
most notable features and improvements are the Crash Audit facility and support
for MirageOS/Solo5 subjects which may be executed alongside Genode/base-hw.
Thanks to this feature, the Muen project has reached a milestone by
self-hosting the [https://muen.sk] website on a Muen system. Currently, the
network driver is provided by a Linux subject but with some work it should be
possible to replace it with a Genode/base-hw nic_drv in the future.
Further details regarding Muen v0.9 can be found in the project's release
notes [https://groups.google.com/forum/#!topic/muen-dev/FPL9sc4yaBE].
Updated seL4 kernel
===================
Our remaining patches regarding UEFI framebuffer support got integrated into
the upstream codebase of the seL4 kernel. Hence, we updated our seL4 port to
the upstream version containing our patches.
Build system and tools
######################
Package management
==================
The package-management tools introduced last year have become a vital part
of Genode's workflow.
:Package management documentation:
[https://genode.org/documentation/developer-resources/package_management]
Prompted by the development of the on-target installation and deployment
mechanism featured in the current release, the tools received the following
refinements:
:Use of tar.xz as archive format: This change significantly reduces the size of
published depot content compared to the previously used tar.gz format.
:Subdirectories for archive versions:
In the original version of the depot layout, archives were named as
'<archive-name>-<version>'. Hence, the depot - in particular the download
location - had directories that grew in two dimensions. First, when new
archives were added. Second, when new versions of existing archives were
added (usually corresponding to Genode's release cycle). In the mid-term,
this would have resulted in a huge number of directory entries, e.g., in the
_src/_ subdirectory. To avoid this problem, the new version uses the scheme
'<archive-name>/<version>' instead. This way, at the _src/_ level, each
archive has one subdirectory (the number of subdirectories corresponds to
the number of archives). Inside the subdirectory, there is one entry per
version.
:Controlled rebuild of binary archives:
When calling the depot/create tool for a binary archive with 'FORCE=1', the
underlying source archives are re-extracted and the binary archive is
rebuilt. This is usually done after local changes in the source tree to
apply version updates to depot archives as needed. However, the implicit
rebuild is superfluous whenever the source-version remains the same. This is
particular inconvenient when re-creating pkg archives that refer to a large
number of src archives. Here, all binaries referenced by the pkg archive are
rebuilt each time. The new 'REBUILD' argument allows the user to skip
superfluous rebuilds in such situations. Normally, 'FORCE=1' implies
'REBUILD=1'. However, by explicitly specifying 'REBUILD=', existing binary
archives whose versions remain unchanged are kept instead of being rebuilt.
Offline validation of XML configurations
========================================
The _tool/run_ tool now automatically checks configurations against
target-specific XML schemes. Each component may define a configuration
scheme-file in its _target.mk_ file as follows:
! CONFIG_XSD = my_config.xsd
When the run tool checks the configuration of an instance of Genode's init
component, it additionally iterates through all start nodes of this
configuration. For each start node, it checks whether the according component
provides a configuration-scheme file and, if so, applies it to the
configuration inside the start node. This is done recursively. I.e., also the
child configurations of a sub-init of a sub-init ... of the top-level init
are covered this way.
Whenever the run tool detects an error in one of the checked configurations,
it stops and points out the location of the error. By now, there exist
configuration schemes for the init, the NIC router, and the trace logger
components. Our intention is that every component that interprets its
configuration will eventually be accompanied by such a scheme - not only to
validate actual configuration input but also to serve as documentation for
users of the component.
Automated ABI consistency checks
================================
In [https://genode.org/documentation/release-notes/17.02#Genode_Application_Binary_Interface - version 17.02],
we introduced a kernel-agnostic ABI, which ultimately paved the ground for
Genode's package management. For the time being, the ABI is not set in stone.
It is expected to evolve for some time until it hopefully approaches ABI
stability in the mid term. Whenever Genode's API changes, the ABI may be
affected. For example, symbol sizes may grow. Until now, side effects on the
ABI had to be curated manually. In practice, however, such side effects are
too easy to miss. Therefore, the current release adds a mandatory ABI checking
step to the build process. A new _tool/check_abi_ tool is invoked whenever a
shared object is built. It reports flaws in the ABI definition (such as
duplicated symbols) as well as inconsistencies between a shared object and its
ABI.

766
doc/release_notes-18-05.txt Normal file
View File

@@ -0,0 +1,766 @@
===============================================
Release notes for the Genode OS Framework 18.05
===============================================
Genode Labs
The driver behind the release 18.05 is the rapid evolution of the Sculpt
general-purpose OS. Following the initial version from February, which was
targeted at early adopters, the new Sculpt for The Curious (TC) introduces a
much more welcoming and empowering user experience (Section
[Sculpt for The Curious]).
It goes without saying that the interactive and dynamic nature of the Sculpt
scenario puts a lot more pressure on Genode's components compared to static
workloads. For example, Sculpt calls for the dynamic adjustment of user-level
network routing, the dynamic detection and management of partitions and file
systems, the support of USB storage devices from diverse vendors, and a way to
adapt the visual appearance to a great variety of screen resolutions. Most
improvements described below are our responses to these challenges.
That said, the release is not short of new features either. E.g., it features
the initial port of OpenJDK's HotSpot VM for executing Java programs on Genode
directly (Section [Java language support]), improves the support for the NXP
i.MX family of SoCs (Section [NXP i.MX SoC]), and enhances the VFS with new
plugins for copy-on-write and the auditing of file accesses
(Section [New VFS plugins]).
The release is complemented by the annual update of the Genode Foundations
book (PDF), which covers the fundamentals of the framework in great detail
(Section [New revision of the Genode Foundations book]).
Sculpt for The Curious
######################
With Sculpt for The Curious (TC), Genode 18.05 features the second revision of
the Sculpt general-purpose OS. Compared to the initial version for Early
Adopters (EA), it features a new interactive system-management component that
streamlines common tasks like the management of storage devices, or
configuring the network connectivity. The highlights of the new version of the
base system image are:
* Live-customization of almost all aspects of the system,
* The ability to install and run software in memory only,
* Hotplugging of USB storage devices,
* New support for NVMe storage devices in addition to SATA disks,
* Interactive network configuration including Wifi connectivity,
* Interactive management and inspection of storage devices and partitions,
* The option to host a complete and customized Sculpt installation on a
USB stick,
* Automated on-demand installation of software packages with visual feedback,
* Scalable fonts that are automatically adjusted to the screen resolution, and
* UEFI boot supported by default.
The base image is extensible by downloadable software packages that may
originate from different sources, safeguarded by cryptographic signatures.
It contains several example subsystems as a starting point:
* Basic GUI components like a window manager, a scalable backdrop, a
font server, and a simple software-rendering demo,
* A light-weight noux runtime for executing command-line-based software
such as GNU coreutils, bash, and vim.
* A package for downloading the installer and a suitable virtual-machine
configuration for Debian Linux,
* VirtualBox running Debian Linux,
* An example for running libretro-based games,
* A disposable VM that runs Firefox on TinyCore Linux, executed either in
VirtualBox or the light-weight Seoul virtual-machine monitor,
* A Qt5-based text editor.
Please refer to the updated
[https://genode.org/documentation/articles/sculpt-tc - Sculpt documentation]
to explore Sculpt TC.
The Sculpt version included with the current release requires the user to
build a boot image by hand. Following the steps described in the
documentation, this procedure takes a few minutes. We plan to provide
downloadable boot images a few weeks down the road once Sculpt TC received
intensive day-to-day testing by the early adopters. Your feedback is very
welcome!
New revision of the Genode Foundations book
###########################################
The "Genode Foundations" book received its annual revision, which reflects
the evolution of the framework over the past year. Specifically, the changes
since the last year's edition are:
: <div class="visualClear"><!-- --></div>
: <p>
: <div style="clear: both; float: left; margin-right:20px;">
: <a class="internal-link" href="https://genode.org">
: <img class="image-inline" src="http://genode.org/documentation/genode-foundations-title.png">
: </a>
: </div>
: </p>
* Changed boot-loader infrastructure on PC hardware
* Package management
* Structural changes of Genode's custom base-hw kernel
* API improvements: Unicode handling, support for XML-based data models,
timeout-handling API
: <div class="visualClear"><!-- --></div>
To examine the changes in detail, please refer to the book's
[https://github.com/nfeske/genode-manual/commits/master - revision history].
Storage infrastructure
######################
VFS library and plugin interface
================================
The VFS (Virtual-File-System) library was expanded to meet new requirements
for the Sculpt scenario. The traditional file-system medium for component
state and configuration sculpting is the *ram_fs* server, but with the
limitation that files stored in the server are ephemeral. Any changes to
the initial state are lost when a system is shut down or the *ram_fs* server
is restarted. Now that persistent storage is usually served by a VFS plugin
hosted by the VFS server, it was a natural progression to introduce a means
for indicating VFS changes with 'File_system' session notifications. To this
end the VFS server was amended to send session notifications, and notification
support was added to the Rump and FatFs VFS plugins, allowing Ext2 and FAT
file-systems to host dynamic component state and configuration information.
Using the VFS for serving font data produced from files stored in the VFS made
it practical to allow VFS plugins to introspect the file system. Plugins now
have the means to access arbitrary paths from the file-system root or they may
host and expose their own internal file systems.
While the core of the VFS library is small compared to contemporaries in other
operating systems, the moment came to promote the VFS from a static to a
shared library. Components that use the C runtime have always loaded the VFS
dynamically as a subsystem of _libc.lib.so_, but native components carried the
bulk of its implementation. The VFS library is now provided as a shared
library and is included with the front-end server in the _src/vfs_ depot
archive. This change affects components that have been rebuilt against the
shared library but do not have their ROM policies updated to allow access to
the _vfs.lib.so_ ROM.
New VFS plugins
===============
File-system introspection has made two additional plugins possible, the *audit*
and *cow* plugins.
The *audit* plugin logs VFS paths as they are accessed to a dedicated LOG
session. This is useful for finding the files required by third-party
components without relying on documentation or auditing source code.
The *cow* plugin emulates copy-on-write behavior by copying the contents of
files lying in a read-only path to a read-write path as they are opened. This
plugin is considered a proof-of-concept and under-performing, but opens a way
of experimenting with seeding user-managed file-systems from immutable
file-system archives.
Plugins of this kind are most appropriately instantiated in the VFS server
with policies to restrict the intended components into paths provided by the
plugins. This prevents a component from escaping the effect of the plugin. An
example of "auditing" a libc component follows:
! <start name="audit_fs">
! <binary name="vfs"/>
! <config>
! <vfs>
! <dir name="data"> <!-- source files -->
! <tar "data.tar"/>
! <ram/>
! </dir>
! <dir name="audit"> <!-- virtual path that captures /data -->
! <audit path="/data"/>
! </dir>
! </vfs>
! <!-- route into virtual audit path -->
! <policy label_suffix="audit" root="/audit" writeable="yes"/>
! </config>
! </start>
!
! <start name="app">
! <config>
! <libc stdout="/log" stderr="/log"/>
! <vfs>
! <log/>
! <fs label="audit"/>
! </vfs>
! </config>
! </start>
Improved disk-partition discovery and access
============================================
The 'part_blk' component, which parses the partition table on a block device
and provides access to each partition through a block session, was extended to
make it easier to implement a management component on top of it. It now
features additional attributes in its report. For one the block size of each
partition as well as the type of the file system on the partition are
reported. The file system probing implementation is minimal and only contains
file systems that are commonly used on Genode systems, i.e., FAT32 and Ext2.
Furthermore, on GPT formatted disks, each partition has an 'expandable'
attribute that contains the number of blocks by which the partition can be
grown. The following exemplary report illustrates the adjustments:
!<partitions type="gpt" total_blocks="500118192" gpt_total="500118125" gpt_used="302254080">
! <partition number="1" name="BIOS boot partition"
! type="21686148-6449-6e6f-744e-656564454649" guid="db0701aa-02ae-474d-92d0-82738bfce5d2"
! start="2048" length="2048" block_size="512"/>
! <partition number="2" name="EFI System"
! type="c12a7328-f81f-11d2-ba4b-00a0c93ec93b" guid="74e43226-2afb-4575-bdda-83bf72f5a6e7"
! start="4096" length="262144" block_size="512" file_system="FAT32"/>
! <partition number="3" name="GENODE"
! type="0fc63daf-8483-4772-8e79-3d69d8477de4" guid="a950091d-87ba-4800-85bf-7b6a58abe6d5"
! start="235147264" length="67108864" block_size="512" file_system="Ext2"
! expandable="197862064"/>
!</partitions>
The heuristics of how the component probes the partition table were also
loosened. Instead of explicitly enabling support for GPT, the component will
now always try to parse the MBR as well as the GPT. It will bail out if both
are considered valid since using GPT/MBR hybrid tables is not supported and it
should be up to the user to make an educated decision. In cases where there is
no partition table, a 'partitions' report of 'type="disk"' will be generated
in which the complete disk is presented as partition number '0'. This is
needed as compatibility fallback for Sculpt EA installations.
Creating and modifying GUID partition tables
============================================
Part of the enhancements of Sculpt TC is the ability to manipulate the block
device used by Sculpt. We implemented a component called 'gpt_write', which
can create and modify a GPT and its entries. It considers alignment
constraints to make better use of 512e devices. It will, however, not perform
any boundary checking. It does not handle overlapping partitions and only when
applying a partition, it makes sure that the partition will fit. The following
configuration illustrates its operation:
!<start name="gpt_write">
! <resource name="RAM" quantum="2M"/>
! <config verbose="yes" initialize="yes" align="4K">
! <actions>
! <add entry="1" type="BIOS" label="GRUB BIOS" start="2048" size="1M"/>
! <add entry="2" type="EFI" label="EFI System" start="4096" size="16M"/>
! <add entry="3" type="Linux" label="GENODE" start="36864" size="128M"/>
! <add type="BDP" label="FAT32 Data" size="max"/>
! <delete entry="1"/>
! <delete label="FAT32 Data"/>
! <modify label="GENODE" new_label="GENODE*" new_size="max"/>
! </actions>
! </config>
!</start>
Please read _repos/gems/src/app/gpt_write/README_ for more detailed information
on how to use the component and feel free to check out the run script
_repos/gems/run/gpt_write.run_.
User-level networking
#####################
NIC router
==========
The NIC router has received major improvements that were mainly motivated by
our daily experience with the Sculpt scenario where the router serves as NAPT
component in front of the virtual machines that host our work OS's. In this
role, it is subject to a permanent load driven by real-world tasks.
Furthermore, it has to have a user interface that makes it a pleasant
experience to deploy in a dynamic environment. This led to our primary goal:
We had to overcome the need to restart the NIC router, and thereby all
components that depend on it, whenever its configuration changes and while
doing so, not to interrupt the communication of its client unnecessarily.
We managed to make the NIC router fully re-configurable at runtime in a way
that it always tries to keep as much state information as possible throughout
the process. This means that network communication going through the NIC
router is not affected by a configuration update unless the configuration
change affects parts that were involved in an existing communication channel.
One prerequisite for this feature was that NIC session clients can connect at
any time to the NIC router regardless of whether there is a matching domain
for the session or not. As long as a session has no domain, the NIC router
does not send any packet to it and drops all packets coming from it. But, at
least, the session and the corresponding client component stay alive, even if
their already assigned domain disappears with a new configuration.
At the uplink, in contrast, the lifetime of the session remains bound to the
lifetime of the domain. The uplink domain-tag received a new attribute
named 'label' (only considered at the domain-tag of the uplink). It denotes
the label of the uplink session. With these two particularities of the uplink
domain, one can now easily switch between different NIC session servers. The
NIC router will close and request the corresponding NIC session with the
current 'label' value if the 'domain' node is removed/added or the label
changes. Thereby, the NIC router can now be used to dynamically switch between
network interfaces like wireless and wired adapters.
Furthermore, we improved the NIC router's ability to handle DNS server
information. Domains can wait for the DNS server info of the DHCP client of
another domain. This is done with the new attribute 'dns_server_from' in the
'<dhcp_server>' tag. Each time the DNS server info of the remote domain
changes, the DHCP server with the 'dns_server_from' attribute will toggle the
link state of each session at its domain. This can be used by clients as a
hint to request their DHCP info anew from the NIC router and thereby receive
the updated DNS server information.
When it comes to protocols, the most notable change is that the NIC router now
also supports routing and NAPT for ICMP. With the new '<icmp>' sub node of the
'<domain>' tag, ICMP routes to other domains can be created. Instead of ports,
the ICMP IDs are used for NAPT. Similar to the 'udp-ports' and 'tcp-ports'
attributes, the size of the ID space for each NAPT client is configured via
the new 'icmp-ids' attribute in the '<nat>' tag.
Last but not least, the following small features were also added to the NIC
router:
:Attribute 'verbose_packets' for the '<config>' and the '<domain>' node:
Toggles the logging of most important protocol header fields globally or
domain-locally. The 'verbose' attribute does not affect this kind of debug
output anymore.
:Report DNS server info:
If the 'config' attribute in the '<report>' node is enabled, the NIC router
will now also report the DNS server info for each domain.
:Attribute 'config_triggers' in the '<report>' node:
Toggles whether the NIC router immediately sends a report whenever the IPv4
configuration of a domain changes, regardless of any timeouts.
:IPv4 point-to-point support:
If a domain receives an IP configuration with a subnet mask of
255.255.255.255 it will switch to point-to-point IPv4 (requires a valid
gateway address at the domain).
:ICMP destination unreachable on non-routable packets:
The NIC router now responds with an ICMP "destination unreachable" packet to
packets that are not routable at an interface with a domain.
For more information, have a look at the _os/src/server/nic_router/README_
file. Examples can be found in the run scripts
_dde_linux/run/nic_router_uplinks.run_,
_libports/run/nic_router_dyn_config.run_, and _os/run/ping_nic_router.run_.
NIC dump
========
The output level of the NIC dump component can now be configured per protocol
by using the protocol names as attributes: 'eth', 'arp', 'ipv4', 'dhcp',
'udp', 'icmp', and 'tcp'.
The available debug levels are:
:no: Do not print out this protocol.
:name: Print only the protocol name.
:default: Print a short summary of the most important header values.
:all: Print all available header values.
Additionally, you can set a default debug level for protocols that are not
configured using the 'default' attribute.
For more information, please refer to _os/src/server/nic_dump/README_.
GUI stack
#########
With Sculpt becoming more and more end-user oriented, Genode's GUI stack came
into focus. It was time to reconsider several interim solutions that worked
well in the past but would not scale up to a modern general-purpose OS. Two
concrete examples are the support of scalable fonts and Unicode characters. In
the past, Genode used to restrict textual output to the Latin-1 character set
and employed pixel-based fonts only. The current release overcomes these
limitations by featuring completely new text-output facilities.
UTF-8 support and improved text rendering
=========================================
The UTF-8 text encoding overcomes the severely limited code-point range of the
ASCII and Latin-1 character sets by representing characters by a varying
number of bytes. Today, UTF-8 is generally considered as the standard encoding
for text. The new UTF-8 decoder at _os/util/utf8.h_ clears the path for
Genode's native GUI components to follow suit. The first beneficiary is
Genode's graphical terminal, which has become able to display Unicode
characters and pass user input as UTF-8-encoded data to its terminal-session
client.
Terminal enhancements
=====================
Speaking of the graphical terminal, the current incarnation got a welcome
overhaul. First, we reduced its complexity by removing obsolete features like
built-in keyboard-layout handling, which are no longer needed when combining
the terminal with our modern input-filter component. Furthermore, the terminal
has become dynamically resizeable, forwarding screen-size changes to the
terminal client. Should the client be a Noux runtime, such a change is
reflected to the running application as a SIG_WINCH signal. The application -
e.g., Vim - responds to the signal by requesting the new terminal size.
Finally, the terminal protocol was changed from 'linux' escape sequences to
'screen' escape sequences in the anticipation of making the terminal more
flexible in the future.
Text rendering
==============
Throughout Genode, many GUI components reused the text-output utilities
of the nitpicker GUI server. These utilities, however, relied on a simple
pixel font format. To make the text output more flexible, nitpicker's text
painter located at _nitpicker_gfx/text_painter.h_ has been replaced by a
completely new implementation that decouples the font format from the
glyph rendering and takes UTF-8 strings as input. In the process, the glyph
rendering got a lot more sophisticated, supporting horizontal sub-pixel
positioning and filtering.
Font-format support
===================
To remove the omnipresent use of fixed-size pixel fonts throughout Genode,
the following new components entered the picture:
First, the new 'ttf_font' library implements nitpicker's font interface by
using the TrueType renderer of the STB single-header library.
Second, the new 'vfs_ttf' VFS plugin uses the 'ttf_font' library to export a
rendered TrueType font as a virtual file system. The various font properties
as well as the actual glyph images become accessible as regular files. This
way, an application that needs to draw text can read the glyph data directly
from its VFS instead of depending on a font-rendering library.
Third, the new 'Vfs_font' utility located at _gems/include/gems/vfs_font.h_
implements nitpicker's font interface by obtaining the glyphs from the
component-local VFS. It is complemented by the 'Cached_font' utility, which
implements an LRU glyph cache.
With this infrastructure in place, several existing GUI components could
be updated, most prominently the graphical terminal and the menu-view
widget-rendering engine. By facilitating the VFS as interface for propagating
glyph data, components no longer need to manage fonts and their configuration
individually. They just access their VFS. When integrating the component into
a scenario, one can decide whether to mount a font-rendering library directly
at the component, or - alternatively - route a file-system session to a
central font server. The latter is just a regular VFS server with the fonts
mounted as pseudo file systems. Since the glyph renderer is a VFS plugin, it
could be replaced by another implementation in the future without touching any
component.
Modernized API for input-event processing
=========================================
Genode's input-session interface changed very little over the years. Even
though it received evolutionary enhancements from time to time, its design
resembled a traditional C-style interface from the medieval era. We found that
the interface left too much room for interpretation. In particular, the meta
data per event type was defined in a rather ad-hoc way, which raised
uncertainties. For example, is a button-press event accompanied with a
positional value or not? To remove these uncertainties, the current release
replaces the 'Input::Event', with a new implementation that facilitates a safe
way of accessing event meta data. Besides this design change, there is one
noteworthy semantic change as well. With the new interface, symbolic character
information are provided along with their corresponding press events rather
than as distinct events, which - according to our practical findings - greatly
simplifies the consumer side of the 'Input::Event' interface.
Improved keyboard-focus handling
================================
The nitpicker GUI server multiplexes one screen among multiple GUI clients in
a secure way. One aspect remained underdeveloped so far, which is the keyboard
focus handling. Nitpicker's 'Session:focus' call previously triggered a one-off
focus change at call time. This focus change did not pass the same code paths
as a focus change triggered by a "focus" ROM update, which led to
inconsistencies.
The new version changes the implementation of 'Session::focus' such that the
relationship of the caller and the focused session is preserved beyond the
call time. Whenever the calling session is focused in the future, the
specified session will receive the focus instead. So 'Session::focus' no
longer represents a single operation but propagates the information about the
inter-session relationship. This information is taken into account whenever
the focus is evaluated regardless of how the change is triggered. This makes
the focus handling in scenarios like the window manager more robust.
Device drivers
##############
NVMe storage devices
====================
Since NVMe devices have become common in contemporary systems, it is time to
provide a driver for such devices on Genode. With this release, we introduce a
component that is able to drive consumer-grade NVMe storage devices, i.e.,
there is no support for namespace management or other enterprise-grade
features. For now, to keep things simple, the driver uses the device in an
old-fashioned way and uses only one I/O queue with at most 128 entries. That
is to say it does not exploit the parallelism necessary to unlock the full
potential of NVMe storage. Nonetheless, it performs well. The following
snippet illustrates its configuration:
!<start name="nvme_drv">
! <resource name="ram" quantum="8M"/>
! <provides><service name="Block"/></provides>
! <config>
! <report namespace="yes"/>
! <policy label_prefix="client1" writeable="yes"/>
! </config>
!</start>
The component will generate a report, which contains all active namespaces, if
reporting is enabled by setting the 'namespace' attribute of the '<report>'
node to 'yes'. A report may look like the following example:
!<controller model="QEMU NVMe Ctrl" serial="FNRD">
! <namespace id="1" block_count="32768" block_size="512"/>
!</controller>
For an example on how to integrate this component, please have a look at the
_repos/os/run/nvme.run_ script.
While implementing the NVMe driver, a new component for testing block-sessions
was used. In contrast to the already existing 'blk_bench' and 'blk_cli'
components, it features a variety of different test patterns, which can be
selected in its configuration and can be used to test a block component more
thoroughly. For more information please refer to
_repos/os/src/app/block_tester/README_
NXP i.MX SoC
============
We extended the Linux kernel driver port for Ethernet cards found in NXP i.MX
SoC, which was introduced in the previous release. Now does it not only
support i.MX6Q SoC based boards like the Wandboard, but the i.MX53 and i.MX6SX
SoC as well. The new driver was successfully tested with the i.MX53 Quick
Start Board and the Nitrogen6 SOLOX. The latter board even contains two
Ethernet cards. But due to technical limitations of the board design, the same
driver instance has to be used for both cards. Currently, the driver is
tweaked to run on different boards via its configuration ROM. When no
configuration is provided, it appropriates the values for successfully
executing on the Wandboard. The following is an example configuration for the
i.MX53:
! <config>
! <card name="fec0" type="fsl,imx25-fec" mii="rmii" irq="87" mmio="0x63fec000"/>
! </config>
As a side effect of enabling networking on the Nitrogen6 SOLOX, support for
GPIO based signals has been added to the framework too. The existing GPIO
driver for i.MX53 SoC got extended to additionally support the i.MX6 family.
There are some known limitations when using different drivers like Ethernet
and SD-card drivers on the Wandboard right now. At the moment, those drivers
adjust clock parameters and I/O pin configurations independently from each
other, which can lead to inconsistencies. We plan to address those issues with
the implementation of a platform driver for the i.MX6 SoC family.
Improved USB-storage driver
===========================
We improved the stability of the USB-storage driver (usb_block_drv) and
made it compatible with a lot more devices as the driver has become a pivotal
ingredient of the Sculpt scenario. Due to the changes, the way the driver
operates has changed. On the one hand, now it first tries to use 10-byte
Command Descriptor Blocks (CDB) in its SCSI layer and will only switch to
16-byte CDBs when it encounters a device whose blocks cannot be completely
accessed via the former descriptor size. On the other hand, because some
tested devices stopped working after issuing a USB device reset, the reset was
made optional. By setting the 'reset_device' attribute in the '<config>' node
to 'yes', the driver is instructed to perform the USB device reset.
Libraries and applications
##########################
Packaged Qt5 framework
======================
We created package recipes for all previously ported Qt5 libraries and their
dependencies and adapted the run scripts accordingly. Please note that the
host tools needed for building Qt applications (moc, rcc, uic) are not built
automatically anymore, but need to be built and installed manually with the
new 'tool/tool_chain_qt5' script.
Java language support
=====================
Over the course of the past year, we started to look into Java support for
Genode with the ultimate goal of porting an existing Java Virtual Machine
(JVM), which translates and executes Java byte code, to Genode. After
investigating possible JVM candidates, it became obvious that
[http://openjdk.java.net - OpenJDK] is the only viable option when looking for
a functional, maintained, feature complete, and open-source Java SDK.
Therefore, we decided upon OpenJDK version 9 and started to port OpenJDK's
HotSpot virtual machine.
In the first step, we followed the approach to enable HotSpot's internal
Just-in Time (JIT) compiler, which translates byte code into machine code and
is the option with the most to offer performance wise. But we also wanted
support for ARM platforms and soon realized, there was almost no JIT compiler
support for ARM other than for Linux. The Linux version is deeply integrated
into the Linux system libraries (e.g., glibc), which makes it very hard to
bring the compiler onto Genode. For example, Genode uses FreeBSD's libc and
that would now have to offer glibc semantics.
After additional research, we found the so-called interpreter version of the
HotSpot VM. This version does not compile byte code, but interprets and
emulates the code at runtime. It is of course slower than the JIT compiler
version, but also machine-architecture independent, so the same HotSpot VM can
be compiled for x86 and ARM platforms. With the JVM running on Genode, we
added networking and file-system access support via Genode's VFS layer. Note,
there is no graphical toolkit support as of now, but most standard library
classes should work. Also, the byte code has to be compiled on a different
host system (e.g., Linux, *BSD) as of now, since we did not bring the Java
compiler to Genode.
To give Java a spin, a run script can be found under _ports/run/java.run_.
Ada language support
====================
Support for components and libraries written in the Ada/SPARK programming
language experienced a rework with the final goal of seamless integration with
the base framework. We added a new _ada_ library, which contains a (currently
minimal) runtime taken from the sources of our GCC port and thus is always
consistent with the tool chain in use. It is built as a shared library
_ada.lib.so_ that needs to be added to the list of boot modules.
The example in _libports/src/test/ada_ showcases the implementation of an Ada
component using a custom library _test-ada_, which is also implemented in Ada.
Seoul VMM on NOVA
=================
The Seoul/Vancouver VMM - introduced to Genode with release 11.11 - received
some renovations to be able to run recent Linux VMs. Namely the output of the
guest during early boot is now visible and the network models got revised.
Additionally, the Seoul VMM has been packaged and can be used in Sculpt.
Ported software
===============
The [https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Daemon+-+Stubby - Stubby]
DNS daemon has been ported to begin experimentations with DNS as a native
service. There is a tendency for DNS configuration frameworks to diverge
between operating systems and releases, an inconvenience that is magnified
when maintaining virtual machines. Name-server configuration via DHCP has been
the only constant, so hosting DNS natively and configuring virtual-machines
with the *nic_router* DHCP server presents itself as a viable solution to the
guest resolver quagmire. Expect DNS services in later Sculpt releases.
Platforms
#########
Accessing PCI via ECAM/MMCONF
=============================
The platform driver on x86 is trusted with guarding access to PCI
devices. Up to now, I/O ports have been used to configure the PCI subsystem.
On modern x86 architectures, PCI devices can be configured by using Memory
Mapped I/O (MMIO). This method was introduced with PCI Express and is called
Enhanced Configuration Access Mechanism (ECAM). For Each PCI device a separate
4 KiB MMIO page exists to serves as the configuration interface between OS and
PCI device.
The exact location of all the 4K MMIO pages of the PCI devices is machine
specific and must be determined during the bootstrap phase. The ACPI driver on
Genode is in charge of this procedure and reports the location of the
ECAM/MMCONF region to the platform driver via the 'acpi' ROM.
Besides using a modern PCI interface, switching to ECAM/MMCON served to ease
the execution of Genode/hw on top of the Muen separation kernel.
Kernel-agnostic platform-information handling
=============================================
Up to now, special kernel-specific information was propagated to components
such as Virtualbox, the Seoul VMM, and the timer by reusing the
kernel-provided data structures. For Genode/NOVA, the hypervisor info page
(HIP) was exported as an ordinary Genode ROM. With the rise of Sculpt and the
packaging of components in a - as far as possible - kernel-independent way,
the propagation of kernel-specific information became a stumbling block.
With this release we abandon the 'hypervisor_info_page' ROM of Genode/NOVA and
replace it with a Genode ROM called 'platform_info'. The 'platform_info' ROM
is planned to contain solely information about the host hardware, which may
not be gathered otherwise by Genode components. In the current state it
contains information required by VMMs, namely whether AMD SVM or Intel VMX is
available and usable. Additionally, the ROM contains information about the
frequency of the time stamp counter.
Updated seL4 kernel to version 9.0.1
====================================
Thanks to Hinnerk van Bruinehsen, the seL4 version used by Genode has been
updated to 9.0.1.
Updated Muen separation kernel
==============================
With the addition of memory-mapped access to the PCI config-space in Genode,
base-hw subjects on Muen now only see the effectively assigned physical
devices. This makes it possible to run Genode in parallel with other subjects
and to pass-through different PCI devices for each instance.
The Muen update also brings a much simplified subject info structure plus some
tweaks to the Muen system policy XML format to facilitate easier integration
of new hardware platform specifications.
Build system and tools
######################
Validating 3rd-party code downloads via SHA256
==============================================
This release removes support for verifying source code of third-party ports
with the SHA1 hash algorithm. Last year, SHA1 was banished as a credible
cryptographic hash function after the demonstration of a full collision
attack. Since the
[https://genode.org/documentation/release-notes/14.05 - 14.05 release],
port files have been verified using SHA1, this release replaces all file
digests with SHA256 digests. Any port definitions maintained in external
repositories are required to make these replacements as well. No collisions
have been discovered against source code archives but nonetheless there is an
obligation to widen our margin of safety.
Creating GPT-based disk images by default
=========================================
Up to now Genode's run tool was able to create x86 bootable images in three
flavours:
* Either as ISO bootable by BIOS legacy - 'image/iso', or as
* GPT partitioned disk image only bootable by UEFI - 'image/uefi', or as
* MBR partitioned disk image only bootable by BIOS legacy - 'image/disk'.
With Sculpt came the demand to have a single image type that is in principle
bootable by both UEFI and BIOS legacy. Additionally with Sculpt, we began to
prefer working with GPT partitioned devices.
In the light of the new demands, we changed the 'image/disk' run tool support
to create a GPT partitioned disk image bootable by a legacy BIOS and by UEFI.

1075
doc/release_notes-18-08.txt Normal file

File diff suppressed because it is too large Load Diff

1107
doc/release_notes-18-11.txt Normal file

File diff suppressed because it is too large Load Diff

836
doc/release_notes-19-02.txt Normal file
View File

@@ -0,0 +1,836 @@
===============================================
Release notes for the Genode OS Framework 19.02
===============================================
Genode Labs
In our [https://genode.org/about/road-map - road map] for 2019, we stated
our goal to make Genode more relevant and appealing for a broader community.
The current release takes a big leap towards that goal: It opens up Sculpt
OS for 3rd-party software providers, introduces a federated blogging
platform about Genode-related topics, and makes the world's
[https://www.tiobe.com/tiobe-index/ - most popular] programming language
(Java) available to Genode users.
With the 4th stage of the evolution of Sculpt OS - themed as "community
experience" (CE) - Genode's custom general-purpose OS introduces a novel and
simple way for users to discover software, and for software providers to
announce software. There is no middle man like an app store or a distribution!
We hope that this federated model of software provisioning and deployment will
have a vitalizing effect on the community around Genode. On a practical level,
the interactivity of the new version is a playful and fun experience. Section
[Sculpt OS as a community experience (CE)] gives a rough overview about
*Sculpt CE*. A ready-to-use disk image will be released mid of March.
When speaking of "software providers", we don't think of anonymous
repositories. Software - and Free Software in particular - is developed and
provided by individuals after all. So in our federated way of software
distribution, we want to highlight this individuality. For this reason, we
launched a new blogging platform for Genode-related stories called
[https://genodians.org - Genodians.org], which gives everyone who is
enthusiastic about Genode - users and developers alike - a platform to express
ideas, announce software, or share practical tips and tricks. As explained in
the [https://genodians.org/nfeske/2019-01-07-welcome - initial posting],
*Genodians.org* is - in the spirit of Sculpt's software distribution model -
also organized in a federated way. The content is hosted and remains
completely under control by the respective authors. The website merely
aggregates and presents the content. It goes without saying that Genodians.org
is based on Genode. The system image that contains the entire web appliance -
from the kernel over the content management to the web server - is contained
in a 8 MiB disk image.
Section [Genodians.org as a showcase of a Genode-based web appliance] goes
into more detail.
We identified the support of popular programming languages as one key aspect
to attract a broader community. With the current release, our port of
*OpenJDK* (Section [Java]) for both 64-bit x86 and 32-bit ARM has reached a
mature state suitable for the creation of web services. This paves the way
towards quite exciting new system creations, like the *Boot2Java* system
presented in Section [Showcase of a Java-based network appliance].
On the account of programming-language support, we are happy to announce
a vastly improved runtime support for *Ada* and *SPARK* (Section
[Ada and SPARK] as well as the initial support for OCaml (Section [OCaml]).
Besides the work on shiny features, the current release cycle included a
profound *spring cleanup* described in Section
[Base framework and OS-level infrastructure].
It thereby finalizes the huge API modernization initiated almost three years
ago.
Sculpt OS as a community experience (CE)
########################################
When we laid out the road map for Sculpt OS a little more than one year ago,
we envisioned four stages of development. Sculpt EA was geared towards
die-hard early adopters facilitating the live editing of the system using a
text editor. Sculpt TC was targeted at "the curious" and included a graphical
user interface for common administrative tasks. Sculpt VC introduced the
visual composition of the system using an interactive graph. Even though
Sculpt already allowed for the installation of components from different
software providers at this stage, it offered no simple means to discover
software and the installation still required the manual editing of "launcher"
text files.
The final - community experience - stage of the plan ought to foster the
federated provisioning of software. Software providers should have the ability
to announce new packages. Conversely, users should be able to "subscribe" to
such announcements, similar how one would subscribe to an RSS feed. Once
software is discovered in this way, it should take only a few clicks to
install and integrate it into the running Sculpt system. No command-line
interface should stand in the way of discovery.
Sculpt CE is the realization of this idea.
For Sculpt users, the discovery starts at the '+' menu. In contrast to Sculpt
VC where the menu offered a rather long list of components to choose from, the
menu now offers nothing to be excited about.
[image sculpt_ce_menu]
However, at the very bottom, there is a new menu entry "Depot ...", which
leads to a sub menu with a list of enabled software providers. If connected to
the network, it also shows an entry named "Selection ...".
[image sculpt_ce_menu_depot]
The "Selection" sub menu allows the user to enable software providers.
[image sculpt_ce_selection]
When clicking on one of the checkboxes, the package index of the provider is
downloaded and the checkbox is highlighted. In the example, "nfeske" is
already enabled.
By clicking on the top-left triangle, one can always go one menu up. Back in
the depot menu, selecting a software provider will now display the index of
available packages. When selecting a new package, it can be installed via a
single click:
[image sculpt_ce_install]
Once the package is installed, the menu takes the user to a dialog for
integrating the package as a new component into the running Sculpt system. For
each resource required by the package, the user can decide how to connect it.
For example, the file system to be mounted at _/config/_ of a fresh
noux-system instance can be routed to any file system service the user wishes.
The noux-system won't know which file system is selected. It will just work
with it.
[image sculpt_ce_routes]
As soon as all routes are defined, the dialog presents a button for adding the
component to the system.
Using this interactive work flow, the discovery of software and its
integration becomes a rather playful process.
To make a once composed system permanent, one can use the inspect window to
copy the _/config/managed/deploy_ file to the _config/19.02/_ directory of your
Genode partition. This way, the deployment configuration will take effect
immediately at boot time.
Genode 19.02 comes with Sculpt CE included. As usual, we will take a bit
of time following the release for thorough testing and refining before
announcing an updated disk image mid March. We would greatly appreciate
your feedback during this phase! For baking a fresh Sculpt image, please
refer to the
[https://genode.org/documentation/articles/sculpt-vc - documentation]
of Sculpt VC, but using the Git tag '19.02' instead of 'sculpt_vc'.
Announcing software packages
----------------------------
The community experience of Sculpt CE will ultimately depend on the
participation of software providers. To become listed in the selection dialog
mentioned above, you may consider including your public key and download
location at the Genode repository at
[https://github.com/genodelabs/genode/tree/master/depot - /depot/].
For the announcement of packages, a software provider can publish so-called
"index" files for a particular Sculpt version in the software provider's
depot. E.g., the index of packages supported on Sculpt 19.02 would be located
at _index/19.02_ within the depot. Like any other depot content, index files
are digitally signed. An example index for the software provider "nfeske"
would look as follows:
! <index>
! <index name="GUI">
! <pkg path="nfeske/pkg/sticks_blue_backdrop/2019-02-22"
! info="default desktop background"/>
! <pkg path="nfeske/pkg/themed_wm/2019-02-26"
! info="ready-to-use window manager"/>
! </index>
! <pkg path="nfeske/pkg/nano3d/2019-02-22"
! info="simple software-rendering demo"/>
! </index>
Each '<pkg>' node refers to a package with a concrete version and a short
description. By nesting '<index>' nodes, software categories can be defined.
Index files can be published like any other depot content using the
_depot/publish_ tool, which takes care about compressing and digitally signing
the published information:
! ./tool/depot/publish nfeske/index/19.02
To ease the updating of the index with current package versions, the
_sculpt.run_ script creates the _depot/index/<version>_ file from the input
found in _repos/gems/run/sculpt/index_. The latter file is void of any version
numbers.
For any questions about the process, please consult the Genode
[https://genode.org/community/mailing-lists - mailing list].
Showcase of a Java-based network appliance
##########################################
With OpenJDK in good shape (Section [Java]), we have created a Genode scenario
that demonstrates JVM's ability to execute well on embedded hardware. As
target platform, we choose an ARM (i.MX 6) based SoC with two integrated
network interface controllers. In the scenario, the Genode system boots
directly into a Java application, which in turn spawns two HTTP server
instances where each instance communicates through a dedicated NIC. Both
server instances run as one Java program.
[image java_nic_filter]
The Java application (a JAR file) is loaded from the board's SD card, and
therefore, can easily be replaced. If you are interested in Java and ARM SoC,
the full details and a step by step instruction can be found at our
[https://genodians.org/ssumpf/2019-02-27-java-19-02 - Genodians.org] site.
Genodians.org as a showcase of a Genode-based web appliance
###########################################################
[https://genodians.org - Genodians.org] is our take on a federated blogging
platform about Genode-related topics. It does not host the actual content
but rather aggregates content hosted elsewhere.
[image genodians]
The site periodically fetches content in the form of zip archives containing
raw text and PNG images, extracts the archives, and transforms the text into
HTML using a custom static site generator. The result of the transformation
process is served by the lighttpd web server.
This system is based on Genode and can be found here:
:Genodians.org repository:
[https://github.com/genodelabs/genodians.org]
A few noteworthy technical points about the site:
* The periodic process of downloading, extracting, and transforming content
is realized via the 'fetchurl', 'extract', and 'sequence' components.
* The textual content uses the markup of the
[https://github.com/nfeske/gosh - GOSH]
text processing tool, which is similar to
[https://daringfireball.net/projects/markdown/ - Markdown].
* The custom static site generator consists of a plain makefile and a few GOSH
style files. The makefile is executed within a noux instance, which is
Genode's custom Unix runtime environment. It is re-spawned for each
iteration. As GOSH is written in Tcl, the tclsh is used within the noux
environment.
* The lighttpd web server uses a statically supplied SSL certificate.
* The most time-consuming part of creating Genodians.org was the CSS
definition.
* The entire system image is about *8 MiB* in size. It includes the following
ingredients:
* Kernel (e.g., NOVA),
* Basic Genode components such as init, NIC router, the VFS server,
* Network driver (based on iPXE),
* Linux TCP/IP stack as a library,
* Curl, libssh, libssl, libcrypto, lighttpd
(for downloading and serving content),
* libarchive, zlib, liblzma (for extracting the downloaded content)
* Noux, coreutils (stripped down), bash, GNU make, and tclsh (for
transforming text into HTML)
More information about the site's inner working will be posted in a series
of articles - guess where? - at Genodians.org!
Base framework and OS-level infrastructure
##########################################
Removal of deprecated APIs
==========================
Almost three years ago -
with [https://genode.org/documentation/release-notes/16.05 - version 16.05] -
we started the transition to Genode's modern API. One year later - in
[https://genode.org/documentation/release-notes/17.05#Completed_component_transition_to_the_modern_API - version 17.05],
we announced the completion of this transition but we retained the deprecated
APIs to accommodate Genode users that picked up the new API only gradually.
With the current release, we finally drop the deprecated APIs along with a
couple of other legacies:
* The _base/timed_semaphore.h_ has been removed. In hindsight, officially
providing this utility was a big mistake because it lured developers into
a wrong direction. In fact, we found that there is no legitimate use of it
when a component is designed in a clean way. If a component relies on a
timed semaphore, it should better be redesigned. There are two noteworthy
places where a timed semaphore is still used as a band-aid solution:
the 'pthread_cond_wait' implementation of the libc, and DDE for rump
kernels. Those places now host a private copy of the timed semaphore, but
should ultimately be reworked.
* The header _base/printf.h_ has been removed along with the log back end
for 'printf'. The 'Console' with the format-string parser is still there
along with 'snprintf.h' because the latter is still used at a few places,
most prominently the 'Connection' classes.
* The notion of a 'Ram_session' exists no more since the former RAM-session
interface was merged into the PD-session interface in
[https://genode.org/documentation/release-notes/16.05#Consolidation_of_core_s_SIGNAL__CAP__RM__and_PD_services - version 16.05].
Still, the types were preserved (by typedefs to 'Pd_session') to keep up
API compatibility. Those last traces of 'Ram_session' are gone now. The
'Env::ram()' accessor returns the 'Ram_allocator' interface, which is a
subset of the 'Pd_session' interface.
* The use of the global 'Genode::env()' accessor function is not possible
anymore.
* The old 'Child_policy::resolve_session_request' interface that returned
a 'Service' instead of a 'Route' has been removed.
* Boolean accessor methods are no longer prefixed with 'is_'. E.g., instead
of 'is_valid()', use 'valid()'.
* All connection constructors need the 'Env' as argument.
* The 'Reporter' constructor needs an 'Env' argument now because the
reporter creates a report connection.
* The old notion of 'Signal_dispatcher' is gone. For receiving
asynchronous notifications, the 'Signal_handler' interface must be used.
* Transitional headers like _os/server.h_, _cap_session/_,
_volatile_object.h_, _os/attached*_dataspace.h_, and
_signal_rpc_dispatcher.h_ have been removed.
* The distinction between 'Thread_state' and 'Thread_state_base' does
not exist anymore. Only 'Thread_state' prevails.
* The header _cpu_thread/capability.h_ along with the type definition of
'Cpu_thread_capability' has been removed. Use the type
'Thread_capability' defined in cpu_session/cpu_session.h instead.
* The _os/ram_session_guard.h_ has been removed.
Use 'Constrained_ram_allocator' provided by _base/ram_allocator.h_ instead.
Source-tree reorganization
==========================
Timer moved from os to base repository
--------------------------------------
Traditionally, the user-level timer was hosted at the os repository at
_drivers/timer/_. However, since the timer and timeout handling have become
part of the base library (the dynamic linker), the component naturally belongs
to the base repository. It is now located at _base/src/timer/_ and
_base-<kernel>/src/timer/_ respectively.
Note that this change affects include paths for the former
_include/os/timer/_, _include/os/alarm.h_, and _include/os/duration.h_
headers. Those can now be found in _include/base/_.
Consistent naming of block components
-------------------------------------
Regarding the naming of files and APIs, Genode follows the convention of
avoiding abbreviations. Most components follow this convention, with the block
servers being the exception to the rule. Those were named "part_blk" or
"rom_blk". With the current release, we removed this inconsistency by renaming
those offenders, changing "blk" to "block". Closely related, abbreviations
like "cli" and "srv" have been replaced by "client" and "server".
Improved API safety
===================
XML-parsing API
---------------
Genode consistently uses XML for component configurations and for reports
generated by components. The latter are often consumed by other components.
This puts the XML parser into a prominent position. Genode's XML parser
comes in the form of the 'Xml_node' class. Since it was introduced before the
age of modern C++, it offers several risky "C-ish" methods, in particular
accessors that return pointers, raising memory-safety concerns. To promote a
safe programming style, the following parts of the interface are subject to
change now:
* The 'Xml_node::addr', 'Xml_node::content_addr', and 'Xml_node::content_base'
accessors will be removed because it is all too easy to store the returned
pointers and forget about the lifetime of the originating 'Xml_node' object.
Fortunately, in practice, those methods are rarely used because information
is typically represented in attributes, not as node content. However, to
still support the access to the raw content, the new
'Xml_node::with_raw_node', 'Xml_node::with_raw_content', and
'Xml_attribute::with_raw_value' methods call a functor taking the raw byte
buffer and size as arguments. This way, the lifetime of the pointer is
naturally bound to the scope of the functor.
* The new 'with_sub_node' method calls a functor with the specified
sub node as argument and thereby reduces the need for the traditional
'Xml_node::sub_node' method, which returns an 'Xml_node'.
The latter is risky because an 'Xml_node' contains a pointer to the actual
data. In contrast, the lifetime of the 'Xml_node' processed via the new
'Xml_node::with_sub_node' is naturally bound to the scope of the passed
functor.
* The 'Xml_attribute::value' and 'Xml_node::value' methods now take an
argument of type 'T &out' instead of 'T *out', which eliminates the
uncertainty of a possible nullptr argument.
The original interface will still be available for a while but it will
eventually be removed.
Simplified session-policy handling
----------------------------------
Most server components make use of the 'Session_policy' utility for selecting
a client policy depending on the session label. However, the pattern of its
use remained a bit inconsistent across components, in particular the handling
of the case where no policy could be found. Some components outright
denied the session where others implemented a fallback to a built-in default
policy. This inconsistency is now removed.
Following the principle of deny-by-default the absence of a matching policy
denies the session request. Since the 'Session_policy::No_policy_defined'
exception is a typedef to the 'Genode::Service_denied' exception, a server
does not need to explicitly handle it, which simplifies the implementation.
With this change, the 'No_policy_defined' case is always an error case. Hence,
the new version of 'Session_policy' prints a error message, which relieves the
server developer from implementing diagnostics in the server code.
As a consequence of this change, scenarios that used to rely on the
policy-fallback approach of some servers - notably the NIC bridge, window
manager, the window decorators - need a slight adaption: To enable the
fallback to a default policy, a '<default-policy>' node must be explicitly
specified in the server's configuration.
Removed pointers from Genode::Fifo interface
--------------------------------------------
To make the use of the 'Genode::Fifo' data structure more safe, all methods
that return pointers have been replaced by methods that call a functor with
a reference as argument.
New server-side block-request stream API
----------------------------------------
The current block-component API (_os/include/block/_) was designed at a time
long before Genode's modern component API was introduced. Back then, the use
of blocking calls was prevalent. Today, we design components to work
asynchronously. The original block-server API was successively enhanced to
allow the implementation of asynchronous block servers but it remained "upside
down" while growing more complicated than it should be.
To simplify the implementation and verification of block servers, the current
release introduces a modern API that will eventually replace the original
block-component API. The new API is called *block-request stream* and can be
found at
[https://github.com/genodelabs/genode/blob/master/repos/os/include/block/request_stream.h - os/include/block/request_stream.h].
It is designed with the following considerations:
* It anticipates the asynchronous operation of block servers by default.
Using the new API, such servers - in particular block-device drivers - can
be implemented as state machines triggered by client requests and device
interrupts.
* It reinforces the memory safety of the server code by not returning any
pointers or references.
* It relieves the server developers from handling special cases (like a
congested acknowledgement queue) while being flexible enough to accommodate
different categories of components like drivers, resource multiplexers
(part_block), and bump-in-the-wire components in a natural way.
* It naturally supports the batching of requests as well as zero-copy
(device DMA directly into the client's communication buffer).
The use of the new API is illustrated by the artificial test at
[https://github.com/genodelabs/genode/blob/master/repos/os/src/test/block_request_stream/main.cc - os/src/test/block_request_stream/].
We plan to successively migrate all existing block servers to this new API
and will remove the traditional block-component API eventually.
GUI stack
=========
Motivated by our work on Sculpt as described in Section
[Sculpt OS as a community experience (CE)], Genode's GUI stack received
the following improvements:
Window management
~~~~~~~~~~~~~~~~~
To improve the visual appearance of Sculpt's administrative GUI, the *themed*
*decorator* was enhanced with an option to disable decorations based on the
window label. By setting the 'decoration' attribute of a '<policy>' node to
"no", matching windows appear without any border, which is desirable for
Sculpt's component graph.
Furthermore, the themed decorator accepts the '<policy>' attribute
'motion=<number>'. The default value is 0. If a value higher than 0 is
specified, window-geometry changes are applied as an animation where the
<number> denotes the number of animation steps. This feature is used for
smoothing the placement of Sculpt's component graph.
The *motif* *decorator* - which is a nice alternative to the themed decorator -
is now giving visual feedback to mouse clicks. For example, while the user
drags a window by clicking on the window title, the title bar appears as
pressed, which creates an improved sense of responsiveness.
Unified shape-report routing
----------------------------
Applications propagate custom mouse-cursor shapes by issuing "shape" reports
towards the pointer component. The pointer component correlates the session
labels of the incoming shape reports with the label of nitpicker's currently
hovered client. Hence, an application's shape report session should take the
same route as its nitpicker session.
The presence of the window manager as an intermediary of the nitpicker session
breaks this rule. Consequently, rather awkward label-rewriting magic was
required when routing shape reports originating from windowed applications. To
make the shape reporting more natural, the window manager has become able to
proxy shape reports on behalf of its clients. When routing a shape through the
window manager, the labels of both the nitpicker sessions as well as the shape
report sessions contain the intermediary "wm ->" part.
Unicode support for the graphical terminal
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The terminal has been changed to represent characters as 16-bit codepoints
internally. It thereby became able to display a much larger variety of
international characters when using a suitable font. Unicodes are sent through
the terminal session via bursts of UTF-8 bytes now.
As a collateral change, the generic 'Codepoint' class became printable via
Genode's 'Output' interface. This way, a codepoint can easily be serialized
into UTF-8 bytes.
Programming languages
#####################
Ada and SPARK
=============
_The work described within this section was contributed by_
_[https://componolit.com - Componolit]. Thanks to Alexander Senier_
_and Johannes Kliemann for the fantastic collaboration!_
The integration of SPARK/Ada programs was improved greatly and the Ada runtime
was renamed to 'spark'. This emphasizes its main purpose: trusted components
that can be formally verified. A more feature-rich runtime based on 'libc' was
added to genode-world under the name 'ada'.
Build system integration
------------------------
Up until now, the (deprecated) 'gnatmake' tool was used to build Ada object
files. This was unfavorable for two reasons: First, multiple invocations of
gnatmake would sporadically corrupt the compiler-generated Ada linker files
('.ali') and break parallel builds. Second, Ada dependency information did not
get propagated into Genode's build system such that certain source changes
failed to trigger a rebuild.
For these reasons the 'gnatmake' tool has been dropped in favor of regular
compiler calls as done for all other languages. To facilitate consistent
rebuilds on source-code changes, the
[https://github.com/Componolit/ali2dep - ali2dep] tool was created. From an
'.ali' file, it produces '.d' files suitable for direct inclusion into
Genode's build system.
Until the integration into the toolchain, 'ali2dep' support needs to be
enabled through the 'CUSTOM_ALI2DEP' variable (absolute path or command name
if the command is in 'PATH'). By default, a warning about the absence of the
tool is emitted and dependency information is not generated. You can add this
variable to the 'etc/tools.conf' of your build directory as follows:
! CUSTOM_ALI2DEP = /path/to/ali2dep
Elaboration code
----------------
Previously, Ada programs that required elaboration code to be run were
unsupported on Genode. With this release, Ada programs are bound using
'gnatbind', which results in elaboration code being generated. An additional
benefit comes in the form of proper error messages at compile time if, for
example, source code is missing or outdated.
To run an Ada main program with elaboration, calls to 'adainit()' and
'adafinal()', generated by the binder, need to be added to your
component-construction code:
! extern "C" void _ada_main(void);
! extern "C" void adainit();
! extern "C" void adafinal();
!
! void Component::construct(Genode::Env &env)
! {
! adainit();
! _ada_main();
! adafinal();
! env.parent().exit(0);
! }
Note, that the name of the Ada main program ('_ada_main()') in this example
depends on the name of your main procedure.
Debug output
------------
Support for 'GNAT.IO' was added to the runtime. 'GNAT.IO' is a stripped-down
text I/O facility, which we map to a terminal session on Genode. Only output
is supported at the moment. A pointer to a terminal session has to be provided
to the ADA runtime in order to use 'GNAT.IO'. Please refer to
_repos/libports/src/test/gnatio/_ as an example.
Unit testing
------------
To facilitate test-driven development of Ada components, the
[https://www.adacore.com/documentation/aunit-cookbook - AUnit] unit testing
framework was ported to Genode. It is located in the genode-world repository
whereas a usage example can be found at 'src/test/aunit'. Note that the full
Ada runtime ('ada') is required as the framework uses features not present in
the SPARK runtime.
Java
====
Since Genode release
[https://genode.org/documentation/release-notes/18.11#Java_language_runtime - 18.11],
we continued our effort to enable the just-in-time (JIT) compiler for OpenJDK.
We are happy to announce that we were able to achieve this goal. The JIT
compiler is now enabled as default for both x86 (64 bit) and ARM (32 bit),
which significantly improves the performance of the Java virtual machine for
these architectures.
Additionally, we even further improved JVM's performance by taking advantage
of more aggressive compiler optimizations. This triggered some unidentified
bugs and led to a greatly enhanced stability of OpenJDK.
For a small hello world example we offer a simple run script:
! make run/java
For a more complex scenario please refer to Section
[Showcase of a Java-based network appliance].
Nim
===
Support for Nim has been removed from the Genode build system to encourage
building Nim components out-of-tree using the Nimble package manager.
The compatibility of the base system with the Nim runtime will be monitored
and improved regardless of this change.
OCaml
=====
A proof-of-concept port of the OCaml bytecode interpreter has been placed
in the world repository. This allows simple programs that are compiled to the
bytecode instructions to be executed and is a first step in supporting the
OCaml language. This interpreter does not yet include the standard library.
Therefore only language primitives are available. Porting the standard library
appears to simply be a matter of defining a build process. The greatest
hurdle to porting existing OCaml applications would seem to be finding a path
into the workflow of the OPAM package tooling.
Libraries and applications
##########################
New utility for taking screenshots
==================================
The flif_caputure screenshot utility has been added to the world repository.
This utility implements a framebuffer and input service which it proxies to
its parent. When the utility observes the *PrtSc* key, it captures the content
of the framebuffer and writes it to the file system in the FLIF image format,
FLIF being chosen primarily for its uncomplicated API. To use the utility in
practice, the common case would be to run it as a client of the default window
manager with a second window manager stack running as a client of the capture
utility. This allows capture behavior and scope to remain simple and explicit.
The background story behind the tool is covered by a dedicated
[https://genodians.org/ehmry/2019-01-31-flif_capture - posting] at Genodians.org.
Growing use of the Genode-World repository
==========================================
The [https://github.com/genodelabs/genode-world - Genode-World] repository
contains software that is not strictly part of the official Genode OS
framework but rather supplemental. In particular, it contains ports of
3rd-party software to Genode. The pool of ported software is steadily growing,
which moves the world repository more and more into the spotlight of Genode
users. For example, among a variety of games and experimental components, our
port of OpenJDK ([Java]) is also hosted there. To acknowledge the growing
importance of the world repository, we added the building of all world depot
archives to our nightly build tests.
With this baseline of quality assurance in place, it was a good time to move
supplemental software such as Dosbox, FUSE, libav, libSDL, and its companion
libraries from the Genode repository to the Genode-World repository. Speaking
of libSDL, as part of the curation of the world content, the library back end
of libSDL has been changed to the direct use of the nitpicker session
interface instead of the lower-level framebuffer and input interfaces. Thanks
to this change, many scenarios could be greatly simplified, in particular
packages designated for the use in Sculpt OS.
Updated or removed 3rd-party software
=====================================
The following 3rd-party software received an update:
* OpenSSL updated to version 1.0.2q with 'SSL_CONF_*' enabled,
as needed by lighttpd's mod_openssl.
* Lighttpd updated to version 1.4.52, with TLS enabled.
* libpng updated to version 1.6.36
* jbig2dec updated to version 0.15
Removal of VirtualBox 4
-----------------------
All regular users of Genode's VirtualBox port migrated to version 5 a long
time ago. Version 4 was still maintained because this is the only version
supported on the Muen separation kernel. However, since the focus of the Muen
developers recently moved towards the use of nested virtualization, our
version of VirtualBox 4 is no longer vital for Muen. So we could remove it.
Platforms
#########
Board support for i.MX6 Quad Sabrelite and Nitrogen6 SoloX
==========================================================
In 2018, we extended our device-driver support for NXP i.MX 5 and 6 based ARM
platforms. This year, we continue our commitment to this platform with
additional support for the NXP reference board i.MX6 Quad Sabrelite and the
Nitrogen6 SoloX, which features dual Gigabit Ethernet.
Resizeable virtual framebuffer on Linux
=======================================
When executing Genode on Linux, we use a libSDL-based pseudo driver for
running graphical scenarios. This *fb_sdl* server has now been enhanced with
the ability to resize the SDL window. Such a resize event is translated into
Genode's framebuffer resize protocol. Thereby, the resizing of the host window
looks like a mode change to Genode's GUI stack. This greatly eases the testing
of the mode-change handling of components like the nitpicker GUI server.
Tooling and build system
########################
Enforced 'override' annotations
-------------------------------
The '-Wsuggest-override' warning complains about implementations of virtual
functions that lack the override keyword. If the implementation of a virtual
method is marked as 'override' the compiler checks for a matching virtual
method in the base class. If there is no such method, the implementation
unexpectedly diverged from the interface.
An interface may change over time, which is especially troublesome when it
contains a default implementation of a virtual method. Without 'override'
annotations, the compiler will silently add the outdated implementation of the
derived class as an overload of the interface's default implementation, which
introduces a subtle but potentially serious bug.
To rule out such bugs in the future, we made 'override' annotations mandatory
when using the default strict warning level.
Generalized use of the depot by run scripts
-------------------------------------------
With more and more run scripts using archives out of Genode's depot, we gained
experience with typical usage patterns. In particular, we found the universal
use of the configurable depot user preferable over the hard-wiring of
'genodelabs'. Hence the 'depot_user' function has become a built-in function
of the run tool.
Repeat mode for the depot-autopilot test environment
----------------------------------------------------
The _depot_autopilot.run_ script now supports the environment variable
'TEST_REPEAT' with the possible values 'until_forever' and 'until_failed'.
When specified, the tests are run in a loop. The latter argument is
particularly useful for reproducing sporadic errors.
New run script to execute a single test w/o the depot
-----------------------------------------------------
The new _os/run/test.run_ script allows for the quick execution of an
individual test from the build directory while side-stepping the depot.
It expects a 'PKG' variable specifying the test package. E.g.,
! make run/test KERNEL=nova PKG=test-xml_node
Note that it does not cover all test packages right now.
The tool and its limitations are explained in more detail by a dedicated
[https://genodians.org/nfeske/2019-02-05-shortcut-for-testing - posting]
at Genodians.org.
Support for undefined-behavior sanitizer
----------------------------------------
The
[https://developers.redhat.com/blog/2014/10/16/gcc-undefined-behavior-sanitizer-ubsan/ - UndefinedBehaviorSanitizer]
(UBSan), also described in the
[https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html - GCC documentation],
can detect undefined behavior while a program is running.
With the current release, this diagnostic feature of GCC becomes available for
analyzing Genode components. By specifying 'SANITIZE_UNDEFINED = yes' in a
'target.mk' file, the '-fsanitize=undefined' compiler flag is enabled and the
program is linked with libubsan and libsanitizer_common. The program has to
call 'env.exec_static_constructors()' and 'sanitizer_init(env)' upon startup
to initialize the sanitizer libraries. Whenever undefined behavior is detected
while the program is running, a "runtime error:" message including the source
code location of the error is printed to the log.

886
doc/release_notes-19-05.txt Normal file
View File

@@ -0,0 +1,886 @@
===============================================
Release notes for the Genode OS Framework 19.05
===============================================
Genode Labs
The Genode release 19.05 is primarily focused on platform support.
It adds compatibility with the 64-bit ARM architecture (AARCH64),
comes with improvements of the various kernels targeted by the framework,
and extends the list of supported hardware. The increased diversity of base
platforms calls for unifications to keep the hardware and kernel landscape
manageable.
On that account, Genode uses one reference tool chain across all kernels
and CPU architectures. The current release upgrades this tool chain to
*GCC 8.3* with C++17 enabled by default
(Section [Tool chain based on GCC 8.3.0 and binutils 2.32]).
To increase the velocity of Genode system scenarios across different boards
of a given CPU architecture, the release introduces the notion
of *board and kernel-agnostic build directories* presented in Section
[Unified build directories for ARM]. Once built for one particular
CPU architecture, the same binaries can be deployed at any supported board or
kernel without recompilation. This vastly accelerates the workflow when
targeting multiple boards and emulators at once.
As another major unification effort, the current release introduces a new
*kernel-agnostic virtualization* interface. Up until now, virtualization
used to be inherently tied to a specific kernel. Thanks to the new interface,
however, one virtual machine monitor implementation can be combined with
kernels as different as NOVA, seL4, or Fiasco.OC. No recompilation needed.
As outlined in Section [Kernel-agnostic virtual-machine monitors], Genode
has now become able to run the Seoul VMM on all those kernels, while
VirtualBox is planned to follow.
On our [https://genode.org/about/road-map - road map], we originally
planned several user-facing features related to Sculpt OS. However, in the
light of the major platform efforts, we decided to defer those topics instead
of rushing them.
That said, the release is not without new features. For example, our port
of *OpenJDK* has become able to host the Spring framework and the Tomcat web
server, there are welcome improvements of the *package-management tooling*,
and we added new options for user-level networking.
Finally, version 19.05 is accompanied with the annual revision of the *Genode*
*Foundations book* (Section [New revision of the Genode Foundations book]),
which is now available as an online version in addition to the regular PDF
document.
Kernel-agnostic virtual-machine monitors
########################################
Since the introduction of Genode's
[https://genode.org/documentation/release-notes/17.02#Genode_Application_Binary_Interface - Application Binary Interface]
in the 17.02 release,
Genode components can be assembled once for a given hardware platform and
executed without further adjustments on all the supported kernels. However, at
that time, the supported virtual machine monitors - a port of VirtualBox 4 & 5,
Seoul, and our
[https://genode.org/documentation/articles/arm_virtualization - custom VMM] -
remained kernel specific.
Of course, last remaining bastions tempt to be taken! So last year, we started
the venture to unify our virtualization interface across different kernels.
Starting point was the already existing Genode VM interface of our custom VMM
on ARM. We took it and extended the interface with caution to the x86 world.
Having an eye on the requirements of our already supported VMMs on NOVA(x86),
namely VirtualBox and Seoul, the VM interface got extended with missing
features like multiple vCPU support and specific VM handlers per vCPU.
In parallel, we started to investigate the other x86 microkernels with regard
to hardware-assisted virtualization features, namely seL4 and Fiasco.OC.
Over several weeks, we iteratively extended the interface. On the one hand
we familiarized ourself with the kernel interfaces of seL4 & Fiasco.OC while
on the other hand considered known requirements of the NOVA microhypervisor.
Additionally, we kept our custom VMM for ARM still compatible with the new VM
interface.
During this time, it became apparent that the control flow on a VM resume/pause
and a VM event(exit) are different between seL4/Fiasco.OC and NOVA/base-hw.
For seL4 and Fiasco.OC, a VM is resumed by making a blocking syscall on the
kernel. On a VM event, the blocking syscall would return. Logically, on both
kernels the VMM 'calls' into the VM.
On base-hw and NOVA, it is the other way around. Whenever a VM causes a VM
event, the kernels set up either an asynchronous notification (base-hw) or a
synchronous IPC call (NOVA) to the VMM. In both cases the VMM executes a prior
registered VM event handler as response.
Upon return of the VM event handler, the kernel resumes the VM. Logically, on
NOVA and base-hw the VM 'calls' into the VMM. The following two figures
contrast the different flows of control between a user-level virtual machine
monitor and the respective kernels.
[image vm_seq_foc_sel4]
Control flow of handling virtualization events on Fiasco.OC and seL4
[image vm_seq_nova_hw]
Control flow of handling virtualization events on NOVA and the base-hw kernel
Hiding this differences behind a common VM interface was the challenge we were
faced, accepted, and won. Finally, at one point in December we had all 3
x86 kernels running with a test VMM - without re-compilation. The toy VMM
(vmm_x86.run) runs multiple vCPUs on multiple physical CPUs and tests several
VM events/exits.
After this major breakthrough, we spent the days left before Christmas to
adjust the Seoul VMM to the new VM interface, freeing it from the ties to the
NOVA kernel. The choice to start with Seoul stems from the fact that it is -
compared to VirtualBox - much smaller and therefore easier to debug if things
go wrong in the beginning. After one week, the Seoul VMM became in principle
kernel independent and worked again on NOVA. After some more days, it started
to hobble on seL4 and Fiasco.OC as well.
With the New Year, VirtualBox was the next target where all NOVA kernel
specific calls were replaced with the new Genode VM interface. Mid of January,
the work showed first results by having a prototype running simple VMs on NOVA
again. At this point, it became apparent that this venture is not anymore an
adventure. All the findings and technical details so far got condensed to a
[https://fosdem.org/2019/schedule/event/microkernel_virtualization - presentation]
given and recorded at the [https://fosdem.org/2019 - FOSDEM 2019] in Brussels
in February in the
[https://fosdem.org/2019/schedule/track/microkernels_and_component_based_os - Microkernel and Component based OS]
developer room.
At this point, we started transforming our prototype for the 4 kernels into a
clean solution to be featured in Genode 19.05. Eventually, the kernel-agnostic
Seoul VMM runnable on seL4, Fiasco.OC, and NOVA entered Genode master. In the
Genodians article
[https://genodians.org/alex-ab/2019-05-09-seoul-vmm - Seoul VMM and the new VM interface],
we conserved the current state and a few performance measurements.
Shortly before this release, the kernel-agnostic VirtualBox VMM version on
Genode/NOVA got ready. The kernel-agnostic version is in principle capable to
run Linux VMs and Windows 7/10 VMs on Genode/NOVA. Currently, this version
must still be considered as experimental and does not run on seL4 or
Fiasco.OC.
Because of the experimental nature of the kernel-agnostic VirtualBox VMM
version, we decided to keep the kernel-specific version for NOVA for the
moment. This gives us time to test and improve the kernel-agnostic version. It
also allows us to compare both versions to each other.
If time and interest permits, we will consider bringing the virtualization
support on Genode/seL4 and Genode/Fiasco.OC on par with Genode/NOVA.
When building VirtualBox with Genode 19.05,
you will find both the 'virtualbox5-nova' and the new 'virtualbox5' binaries
in the build directory. The former relies on NOVA's kernel interface whereas
the latter uses Genode's kernel-agnostic VM interface. Nightly tested run
scenarios with the new VM interface are named 'vbox5_vm*.run' and can be found
in the 'repos/ports/run' directory.
Broadened CPU architecture support and updated tool chain
#########################################################
With the major update of Genode's tool chain and library infrastructure in
tandem, the framework gains a consistent architecture support across x86-32,
x86-64, ARM-32, RISC-V, and the newly added AARCH64. This includes the tool
chain (Section [Tool chain based on GCC 8.3.0 and binutils 2.32]), the base
framework, the dynamic linker, and the C runtime
(Section [Updated dynamic linker and C runtime]).
Together with this update, we took the chance to wrap up our long-time move
away from board-specific build directories to one generic build directory
shared by multiple kernels and boards for a given CPU architecture
(Section [Unified build directories for ARM]).
Tool chain based on GCC 8.3.0 and binutils 2.32
===============================================
Genode uses a tailored tool chain based on GCC and binutils that is used
across all supported kernels and architectures. Since the previous tool-chain
update in version
[https://genode.org/documentation/release-notes/17.05#Tool_chain - 17.05],
we relied on GCC 6.3. After two years, it was time for an update, motivated by
three major reasons. First, the C++17 standard is common-place now. We Genode
developers anticipate the improvements that come with it. Second, RISC-V and
AARCH64 are now supported by mainline GCC. Up till now, we had to maintain a
custom patch set for Genode's RISC-V support. AARCH64 was not supported yet.
Third, our increasing engagement with SPARK depends on recent improvements of
the Ada compiler that is part of GCC.
With Genode 19.05, the tool chain is now based on binutils version 2.32, GCC
version 8.3.0, GDB version 8.2.1, gcov version 8.3.0, standard C++ library
version 8.3.0.
The tool chain supports x86 (32 and 64 bit), ARM, AARCH64, and RISC-V.
For C++ code, the C++17 standard is enabled by default.
The update of the tool chain provided a perfect opportunity to replace the
former use of gnatmake with a much more natural integration of Ada in Genode's
build system, using a custom ali2dep dependency-extraction tool developed
by [https://github.com/Componolit/ali2dep - Componolit].
In contrast to the previous versions, we switched to a versioned installation
directory for the new tool chain. By default, it is now installed to
_/usr/local/genode/tool/19.05/_. This eases the use of different tool-chain
versions for different development branches.
:Tool-chain installation:
[https://genode.org/download/tool-chain]
Caveats
-------
The tool-chain update required a number of adaptations throughout the source
tree, and may affect Genode users too:
* The silent fall-though within switch statements must now be replaced
by an explicit annotation of the form
! [[fallthrough]]
* The 'register' keyword is no longer valid with C++17. Hence, it must
be removed from the code.
* Types marked as 'Noncopyable' can no longer have an implicit default
constructor. A default constructor must be provided manually.
Updated dynamic linker and C runtime
====================================
The tool-chain update is accompanied with a major update of the dynamic linker
and the C runtime to cover both the AARCH64 and RISC-V architectures in
addition to the traditional x86 and ARM architectures.
FreeBSD 12 supports AARCH64 and RISC-V. Hence, by updating our C runtime to
this version, Genode's libc support extends to those architectures now.
Until now, Genode's dynamic linker supported only the eager binding of symbols
at loading time on the *RISC-V* architecture. With the current version, we
lifted this limitation in favor of lazy binding as used on all other CPU
architectures.
Unified build directories for ARM
=================================
In version
[https://genode.org/documentation/release-notes/17.02#Genode_Application_Binary_Interface - 17.02],
we introduced unified build directories for x86, which allow us to build and
run Genode scenarios on various kernels while using only one build directory.
This concept leverages Genode's cross-kernel binary compatibility to make
the switch from one kernel to another - like developing on base-linux and
deploying on base-nova - a seamless experience.
On ARM, this concept was held back by a third dimension. The
system-integration step does not only depend on the CPU architecture and
the kernel but also on the used board. Our traditional approach was the
use of one build directory per board. Granted, within such a build directory,
one could easily switch between different kernels like Fiasco.OC and seL4.
But on ARM, we find an extreme proliferation of different board
configurations, which share the same CPU architecture but demand different
integration steps. This ensues large redundancies among different build
directories. Switching from one board to another - even when most binaries
happen to be exactly the same - requires an additional rebuilding effort.
With version 19.05, we took the chance to generalize the unified build
directory concept to support multiple different boards per build directory,
greatly reducing the friction when switching kernels and boards for a given
CPU architecture (like ARMv7a). This change has the following implications:
* Drivers no longer depend on the SPEC values as configured for a build
directory.
* All *binaries* are now *named unambiguously*. For example, the USB drivers
for the Panda (OMAP) and Arndale (Exynos) boards were formerly called
'usb_drv' but were different programs. They just never happened to
appear in the same build directory. In the new version, they are named
'panda_usb_drv' and 'arndale_usb_drv' respectively and can thereby
peacefully co-exist within the same 'armv7a' build directory.
Note that this binary renaming will likely affect existing run scripts.
* Include paths no longer hide the board details, which makes the included
code much more easy to follow.
* Run scripts need to pick the right binary, depending on the used board.
Since the board is no longer tied to a build directory, the selection
of the used board has become a build-time variable 'BOARD' following
the successful pattern of how we specify the targeted 'KERNEL'.
To avoid the pollution of run scripts with difficult conditions, we wrap
the drivers needed for a particular board and use case into so-called
_drivers_ packages. Such a package can be instantiated within a generic
scenario using a nested init instance. The details about the drivers and
how they access the hardware remain nicely hidden inside this building block.
Currently, there exist _drivers_ packages for two distinct use cases:
:drivers_interactive pkgs: contain all drivers needed for simple
interactive scenarios, including graphical output and user input.
:drivers_nic pkgs: contain the drivers needed for communication over the
network.
Whenever a run script fits one of these use cases, it can rely on the
corresponding ready-to-use drivers packages via:
! import_from_depot [depot_user]/src/[base_src] \
! [depot_user]/pkg/[drivers_nic_pkg] \
! ...
With the drivers package incorporated, the drivers subsystem can be
instantiated as follows (note the absence of any board or kernel-specific
details):
! <start name="drivers" caps="1000">
! <resource name="RAM" quantum="32M" constrain_phys="yes"/>
! <binary name="init"/>
! <route>
! <service name="ROM" label="config">
! <parent label="drivers.config"/> </service>
! <service name="Timer"> <child name="timer"/> </service>
! <any-service> <parent/> </any-service>
! </route>
! <provides> <service name="Nic"/> </provides>
! </start>
Using the 'BOARD' build variable
--------------------------------
The new 'BOARD' variable selects the board to use. It can be specified either
as a 'make' command-line argument (or environment variable), or defined in the
build-directory configuration (_etc/build.conf_). The following boards are
available:
:arm_v6: rpi
:arm_v7a: arndale, imx53_qsb, imx53_qsb_tz, imx6q_sabrelite, imx7d_sabre,
nit6_solox, odroid_x2, odroid_xu, panda, pbxa9, usb_armory,
wand_quad, zynq_qemu
:arm_v8a: rpi3
:x86_64: pc, linux, muen
:x86_32: pc, linux
:riscv: spike
Please note, when running Genode on Linux or the Muen separation kernel -
although it is run on common x86 PC hardware - we treat both runtime
environments as separate "boards" because their device driver environments
are fundamentally different.
New revision of the Genode Foundations book
###########################################
The "Genode Foundations" book received its annual update, which is actually
rather a refinement than a revision. The noteworthy additions and changes are:
: <div class="visualClear"><!-- --></div>
: <p>
: <div style="clear: both; float: left; margin-right:20px;">
: <a class="internal-link" href="https://genode.org">
: <img class="image-inline" src="https://genode.org/documentation/genode-foundations-title.png">
: </a>
: </div>
: </p>
* Component health monitoring
* Static code analysis
* Documentation of --depot-user and --depot-auto-update
* Minor adjustments in the under-the-hood chapter
* Changes of the build system
* Updated tool requirements
* Updated API reference
: <div class="visualClear"><!-- --></div>
To examine the changes in detail, please refer to the book's
[https://github.com/nfeske/genode-manual/commits/master - revision history].
New online version of the book
------------------------------
We are happy to announce that the Genode Foundations book is now available
as an online version in addition to the regular PDF version.
:Browse the Genode Foundations book online:
[https://genode.org/documentation/genode-foundations/19.05/index.html]
Thanks a lot to Edgard Schmidt for creating the tooling for the HTML version
of the book!
Base framework and OS-level infrastructure
##########################################
Modernized block-storage interfaces
===================================
With the current release, we revisited Genode's interfaces for accessing
block devices to ease the implementation of asynchronous I/O, to accommodate
zero-copy block drivers, and to support trim and sync operations.
Revised RPC interface
---------------------
The 'Block::Session' RPC interface remained untouched for a long time.
We have now rectified long-standing deficiencies.
First, *sync requests* used to be handled as synchronous RPCs. This is bad
for components like part_block that multiplex one block device for multiple
clients. One long-taking sync request of one client could stall the I/O for
all other clients. The new version handles sync requests as asynchronous
block-request packets instead.
Second, the new version allows a server to dictate the *alignment* of
block-request payload. This way, a driver becomes able to use the payload
buffer shared between client and server directly for DMA transfers while
respecting the device's buffer-alignment constraints.
Third, we added support for *trim* as an asynchronous block operation.
However, as of now, this operation is ignored by all servers.
Fourth, each block operation can now be accompanied with a client-defined
request tag independent from the other parameters of the operation. The tag
allows a block-session client to uniquely correlate acknowledgments with
outstanding requests. Until now, this was possible for read and write
operations by taking the value of the request's packet-stream offset. However,
sync and trim requests do not carry any packet-stream payload and thereby lack
meaningful and unique offset values. By introducing the notion of a tag, we
can support multiple outstanding requests of any type and don't need to
overload the meaning of the offset value.
New client-side API
-------------------
We have now equipped the 'Block::Connection' with a framework API for the
implementation of robust block-session clients that perform block I/O in an
asynchronous fashion.
An application-defined 'JOB' type, inherited from 'Connection::Job',
encapsulates the application's context information associated with a block
operation.
The life cycle of the jobs is implemented by the 'Connection' and driven by
the application's invocation of 'Connection::update_jobs'. The 'update_jobs'
mechanism takes three hook functions as arguments, which implement the
applications-defined policy for producing and consuming data, and for the
completion of jobs.
We plan to gradually move the existing block clients to the new API to benefit
from the latency-hiding effects of asynchronous I/O. The first updated client
is the _block_tester_ component located at _os/src/app/block_tester/_, which
received a number of new features like the choice of the batch size. Please
refer to the accompanied README for a detailed description of the
block-tester.
Unified types for time values
=============================
[https://genode.org/documentation/release-notes/17.05#New_API_for_user-level_timing - Two years ago],
we introduced the so-called timeout framework to provide a general solution
for requirements unmet by the bare timer-session interface - most notably
timer-session multiplexing amongst multiple timeouts, and microseconds
accuracy. Up to this day, the timeout framework has proved itself many times
in both real-life appliances and artificial tests and has become the standard
front end for timing in Genode applications.
With this release, we solved one of the few remaining limitations with the
framework by enabling timeouts of up to 2^64 microseconds (> 500000 years)
across all supported architectures. In order to achieve this, we replaced the
former machine-word-wide types used for plain time values by unsigned 64-bit
integers. We did this not only inside the timeout framework but also to almost
all code in the basic Genode repositories that uses the framework.
By doing so, we also paved the way for a second step, in which we are planning
to replace plain time values as far as possible with the abstract 'Duration'
type. With this type in place, the user wouldn't have to worry anymore about
any plain-integer implications when calculating with time values.
Support for chained EBR partitions
==================================
Having an active community around Sculpt leads to bugfixes in unexpected
places. By now we prefer to use a GPT rather than an MBR based partition table
and although we test 'part_block', the component that parses the tables, on
regular basis, the handling of chained EBR's was flawed. Community member
[https://genodians.org/valerius/index - Valery Sedletski] who relies on such a
setup encountered this flaw and provided a bug report, which enabled us to
quickly reproduce and fix the problem.
IP forwarding with port redirection
===================================
The NIC router can now be used to redirect to individual destination ports on
port-forwarding. To express the redirection, the new 'to_port' attribute can
be added to '<tcp-forward>' and '<udp-forward>' rules in the NIC router
configuration. If the new attribute isn't added, the rules behave as usual and
forward with an unaltered destination port.
Libraries, languages, and applications
######################################
Ada/SPARK runtime and SPARK-based cryptography
==============================================
The SPARK runtime has been updated to GCC 8.3. SPARK components do not require
'Genode::Env' or a terminal session anymore. Debug messages can still be
printed using 'GNAT.IO', which uses 'Genode::log' and 'Genode::error'
internally now.
Threading support, which was never fully implemented, has been removed to
further simplify the runtime. This simplification allowed us to prove absence
of runtime errors for the secondary stack allocator and other parts of the
runtime.
[https://github.com/Componolit/libsparkcrypto.git - Libsparkcrypto] is a
library of common cryptographic algorithms implemented in SPARK. It is
free-standing and has a very small footprint. The port of libsparkcrypto for
Genode has been added to the libports repository. Thanks to Alexander Senier
and Johannes Kliemann of [https://componolit.com - Componolit] for maintaining
the Ada/SPARK runtime and libsparkcrypto.
To accommodate the use case of block encryption, we added the small wrapper
library 'aes_cbc_4k' around libsparkcrypto that provides a simple C++
interface for the en/decryption of 4 KiB data blocks. It uses AES-CBC while
incorporating the block number and the private key as salt values.
Improved resilience of the sequence tool
========================================
We have a simple component that starts other components sequentially. It
will exit whenever one of those components has exited with an error.
However, this component is used by our [https://genodians.org - Genodians]
appliance where it controls the content-update mechanism. Since updating
involves fetching content via HTTP/S depending on external events, e.g.,
the remote site is not reachable, the sequence tool might exit. In a long
running appliance, this is obviously not a useful action where no one is
in place to restart the sequence tool. Rather than increasing the overall
complexity of the appliance by introducing such a management component, we
added a _keep-going_ feature to the sequence tool that will instruct it
to carry on even if one of the started components has failed.
Please look at _repos/os/src/app/sequence/README_ for instructions on
how to use the feature.
NIC-bus server for private LANs
===============================
The 'nic_bus' server was added to the world repository as an alternative
to the 'nic_router' and 'nic_bridge' components. The name may be a slight
misnomer, but this component acts neither as a hub, switch, or router.
The 'nic_bus' implements unicast and multicast Ethernet packet switching
between sessions, but drops any unicast packet not destined for a session
attached to the bus. This is in opposition to the behavior of a typical
Ethernet switch and is intending to create simple, software-defined
local-area-networks for native components as well as virtual machines.
In practice the component has been used for attaching VMs to the
[https://yggdrasil-network.github.io/ - Yggdrasil] overlay network via
a bus-local IPv6 prefix.
Distributed Genode
==================
In
[https://genode.org/documentation/release-notes/16.08#Network-transparent_ROM_sessions_to_a_remote_Genode_system - 16.08],
we initially released the _remote_rom_ components that act as communication
proxies. A communication proxy transparently relays a particular service to
another Genode system. As the name suggests, the remote_rom relays ROM
sessions.
Originally implemented as a proof of concept using bare IP packets, broadcast
MACs and static configuration of IP addresses, we added several improvements
to allow a more general use. First, we adopted the size-guard idea for packet
construction and processing from the NIC router. Furthermore, we adopted the
single-threaded implementation style that was already established in other NIC
components. Thanks to Edgard Schmidt for this contribution. Second, we
implemented ARP requests to eliminate broadcasting. Third, we moved from bare
IP packets to UDP/IP and implemented a go-back-N ARQ strategy in order to
reliably transmit larger ROM dataspaces.
As the remote_rom proved valuable for distributing functionality across
multiple Genode devices, we also applied this concept to the LOG session in
order to transmit LOG output from a headless Genode device to a
[https://genode.org/download/sculpt - Sculpt] system for instance. The udp_log
component provides a LOG service and sends the LOG messages as UDP packets to
another machine. The log_udp reverses this process by receiving these UDP
packets and forwarding the messages to a LOG service. An example can be found
in the world repository at _run/udp_log.run_ and _run/log_udp.run_.
Seoul and VirtualBox virtual machine monitors
=============================================
Besides the conversion of the Genode back end of Seoul to the new VM
interface, we added mouse-wheel support to the PS/2 model and changed the VMM
to request a single GUI/nitpicker session rather than distinct framebufer and
input sessions.
Similar to the Seoul VMM, the VirtualBox VMM was adjusted to the new VM
interface and now uses the GUI/nitpicker session. The original kernel-specific
VirtualBox version tied to the NOVA kernel is still available. Both versions
can be used simultaneously.
Use of Nim decoupled from Genode build system
=============================================
With this release, all integration with Nim tooling has been removed from the
Genode build system as a result of maturing support for additional languages
via Genode SDKs. Building Nim components independently of the Genode source
tree has the benefit of smaller upstream checkouts and faster build times, and
has yielded components such as the
[https://genodians.org/ehmry/2019-03-22-depot_9P - 9P server] used in some
Sculpt developer workflows. An example of an independent build system for Nim
components is
[https://genodians.org/ehmry/2019-04-27-nim_packaging - documented on the Genodians blog].
OpenJDK improvements
====================
Within the 19.05 release cycle, we further improved Genode's OpenJDK support
by enabling additional networking infrastructure required by the
[https://spring.io - Spring Framework]. The improvements especially concern
support for SSL connections, which enabled us to successfully execute an embedded
[https://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-web-servers.html - Tomcat]
server natively on Genode x86 and ARMv7 platforms using the same JAR archive.
This line of work continues our Java for embedded systems effort as described in
our [https://genodians.org/ssumpf/2019-02-27-java-19-02 - Boot2Java] article.
Having these features in place, our Java efforts will continue in the direction
of Java Swing and the support of input devices in the future, with the ultimate
goal of seamless Java application integration into
[https://genode.org/download/sculpt - Sculpt OS].
Device drivers
##############
Improved Zynq board support
===========================
The initial support of the Xilinx Zynq-7000 SoC was added to our custom kernel
in 15.11. Since then, the support of this hardware has been incrementally
extended. The definitions of memory maps, frequencies, and RAM sizes for
different Zynq-based boards are found in the world repository.
One of the major additions in this release is the initialization of the L2
cache. In this context, we also added a simple cache benchmark at
_repos/os/run/cache.run_ that measures the access times for memory regions of
different size and thereby reveals the number of cache levels and their sizes.
With the latest improvements of the network driver in 18.11, a zero-copy
approach was introduced as an effort to eliminate bottlenecks in the driver's
performance. However, this modification also introduced a kernel dependency of
the driver in order to flush packet-buffer memory from the cache before handing
it over to the DMA-controller. With this release, we moved back to using
uncached dataspaces in order to eliminate the cache flushes and the kernel
dependency. Interestingly, we could not recognize a significant impact on the
driver's performance, which confirms the presumption that flushing the cache
nullifies the gain from using cached dataspaces.
In order to enable the continuous operation of the network driver, we extended
the driver-internal error handling that is necessary to recover the network
driver in certain situations.
_Thanks to Johannes Schlatow for contributing and maintaining Genode's Zynq support!_
Updated Intel network drivers
=============================
As a result of recurring issues with modern Intel i219 laptop NICs, we
updated the driver sources for Intel chipsets to the latest upstream
iPXE version. This update also enables all NIC variants, which were
missing from our manually maintained PCI ID whitelist before.
New drivers-nic and drivers-interactive depot packages
======================================================
As already described in section [Unified build directories for ARM],
_drivers_nic_ packages nicely hide the driver configuration internals needed for
a specific board to communicate over the network. Until now there was only one
package available for x86 based PCs. Now, additional _drivers_nic_ packages
are available for:
:boards: imx53_qsb imx6q_sabrelite linux muen pbxa9 rpi zynq
Beside the formerly available _drivers_interactive_ packages for linux, pbxa9
and pc, there are now additional ones for the following:
:boards: imx53_qsb rpi muen
Platforms
#########
For most kernel environments, the core component provides a ROM module named
'platform_info', which comprises information provided by either the kernel or
the bootloader. The information entails e.g., the TSC clock frequency and
framebuffer dimensions. Most of the information is of interest for special
device driver components only.
Over the time, there was an increasing need to incorporate the information
about which kernel Genode runs on top of. Thereby, special test components,
like depot_autopilot could use the information to, e.g., skip certain tests
on kernels known to not support them. Moreover, there are rare corner-cases
where kernels behave differently, for instance, interrupts are enumerated
differently on certain ARM platforms. Rather than maintaining multiple driver
binaries with different names depending on specific kernels, the
'platform_info' ROM module can now be used to differentiate between kernels
when necessary.
Execution on bare hardware (base-hw)
====================================
This release comes with fundamental optimizations and corrections for
executing Genode on bare hardware when using the core component as the actual
kernel.
In the past, we could observe some serious peculiarities regarding the timing
behavior on the hw kernel. After a careful review, we identified the obstacles
that led to time drifts on several platforms and to quite different runtime
execution.
First and foremost, we limited the CPU-load wasted by the kernel, which
unnecessarily made new scheduling decisions quite often. When the hw kernel
was started as an experiment, there was less focus on performance, but more on
simplicity. Instead of caring about state changes that make a scheduling
decision necessary, the scheduler was asked for the next execution context
unconditionally, whenever the kernel was entered. Now, the scheduler gets
invoked only whenever an execution context gets blocked, or unblocked, or if
the kernel's timer fires due to a timeout. This dramatically influences the
CPU-load caused by the hw kernel in a positive way.
The timing accuracy got increased by reworking most hardware timer drivers
used in the kernel to let the timer never stop counting. Moreover, we limit
the scope in between reading the clock and adjusting the next timeout to a
minimum. The whole internal time representation got widened to 64-bit.
In some rare use cases, we could observe components that do I/O polling, and
thereby actively ask for pending signals, to starve. The reason was a gap in
the hw kernel's syscall API. Beside the ability to wait for signals, the
base-library offers the ability to check for pending signals without blocking
in the case of no available signals. The equivalent call in the kernel was
still missing, and is now present and integrated in the base-library of
base-hw.
ARM architecture
----------------
With this release, we add the i.MX 7 Dual SABRE reference board to the rich
hardware zoo Genode runs directly on top of. This includes the use of the
virtualization extensions available on this platform.
Apart from the new board support, several optimizations were added
specifically for the ARM architecture. Several unnecessary cache maintenance
operations were eliminated, which resided in the code base since the time when
the kernel used a separate address-space only. Moreover, the kernel-lock -
used when several execution contexts on different CPU-cores try to enter the
kernel - does not spin anymore. Instead, the CPU goes into a sleep-state to
save energy. As a side-effect, multi-core scenarios become usable when
executed in Qemu.
X86 architecture
----------------
Since the newly used compiler version makes aggressive use of FPU instructions
including the core component, the kernel itself makes use of FPU registers and
state. Therefore, lazy FPU switching becomes a no go for base-hw. Although, we
incorporated eager FPU switching into the ARM-specific part of the hw kernel
already, the x86 version was still missing it. Now, the FPU context of a thread
gets saved and restored on every kernel entry and exit on x86 too.
Updated Muen separation kernel
==============================
The Muen port has been updated to the latest development version, which comes
with many improvements under the hood. Most notably this version of Muen brings
support for Linux SMP subjects, GNAT Community 2018 toolchain support as well
as much improved build speed, which is most noticeable during autopilot runs.
Additionally, the debug server buffer size in the Genode system policy has been
increased to avoid potential message loss in case of rapid successive logging.
_Thanks to Adrian-Ken Rueegsegger of [https://codelabs.ch - Codelabs] for_
_this welcome contribution!_
NOVA microhypervisor
====================
The kernel got updated due to the tool-chain update to GNU G++ 8.3.0.
Additionally, several issues reported by Julian Stecklina regarding FPU and
page-table synchronization got addressed. The kernel memory allocation at boot
time got more flexible to address target machines with fragmented physical
memory. Additionally, the vTLB implementation is no longer used on AMD
machines whenever nested paging is available.
seL4 microkernel
================
With this release, we extend the variety of hardware to run Genode on top of
the seL4 kernel with NXP's i.MX 7 Dual SABRE reference board. To do so, we had
to update the seL4 tools used to craft a bootable ELF image to a state that is
consistent with the currently supported seL4 kernel version 9.0.1.
As a side-effect of this development work, the General Purpose Timer (GPT) used
in the i.MX series can now be used as a timer service component.
Fiasco.OC microkernel
=====================
As with base-hw and seL4, we add the i.MX 7 Dual SABRE reference board to the
list of working hardware for Genode running on top of the Fiasco.OC
microkernel. Moreover, with Fiasco.OC it is now possible to take the first
steps using Genode on the ARM 64-bit architecture. Therefore, we add Raspberry
Pi 3 as a candidate board to be used with Genode/Fiasco.OC. Currently, only
basic tests without peripheral dependencies are supported.
Tooling and build system
########################
Improved handling of missing ports
==================================
The depot tools _tool/depot/create_ and _tool/depot/extract_ now detect and
report all missing third-party sources - called ports - for a given set of
archives at once. Additionally, the user can tell the tools to download and
prepare such missing ports automatically by setting the argument
'PREPARE_PORTS=1'. Please be aware that doing so may cause downloads and
file operations in your _contrib/_ directory without further interaction.
These features make building archives with dependencies to many ports more
enjoyable. If you merely need a list of ports that are missing for your
archives, you can use the new tool _tool/depot/missing_ports_.
For more details you may read the
[https://genodians.org/m-stein/2019-05-21-depot-missing-ports - article on genodians.org].
Automated depot management
==========================
When using the 'import_from_depot' mechanism of the run tool, one frequently
encounters a situation where the depot lacks a particular archive. Whenever
the run tool detects such a situation, it prompts the user to manually curate
the depot content via the _tool/depot/create_ tool. The need for such manual
steps negatively interferes with the development workflow. The right manual
steps are sometimes not straight-forward to find, in particular after
switching between Git branches.
To relieve the developer from this uncreative manual labor, we extended the
run tool with the option '--depot-auto-update' for managing the depot
automatically according to the needs of the executed run script. To enable
this option, use the following line in the build configuration:
! RUN_OPT += --depot-auto-update
If enabled, the run tool automatically invokes the right depot-management
commands to populate the depot with the required archives, and to ensure the
consistency of the depot content with the current version of the source tree.
The feature comes at the price of a delay when executing the run script
because the consistency check involves the extraction of all used source
archives from the source tree. In regular run scripts, this delay is barely
noticeable. Only when working with a run script of a large system, it may be
better to leave the depot auto update disabled.
Please note that the use of the automated depot update may result in version
updates of the corresponding depot recipes in the source tree (recipe hash
files). It is a good practice to review and commit those hash files once the
local changes in the source tree have reached a good shape.

681
doc/release_notes-19-08.txt Normal file
View File

@@ -0,0 +1,681 @@
===============================================
Release notes for the Genode OS Framework 19.08
===============================================
Genode Labs
The stated theme of this year's [https://genode.org/about/road-map - road map]
is "bridging worlds", which expresses our ambition to smoothen the practical
use of Genode-based systems such as Sculpt OS. The current release pays
tribute to this ambition by addressing a great number of practical concerns:
How to accommodate the staggering variety of keyboard layouts out there?
(Section [Flexible keyboard layouts])
How can the system gracefully respond when confronted with exotic USB devices?
(Section [Storage-stack improvements])
How to set the system time from within the system? How does SNTP fit in here?
(Section [General system time concept])
How to approach the remote administration of the system?
(Section [Enhanced SSH terminal])
How to copy and paste text securely between mutually distrusting subsystems?
(Section [Clipboard])
Or how to overcome the captive portal of a Hotel WiFi with Sculpt OS?
(Section [Disposable VM for handling captive portals])
By providing answers to those questions, we believe to make Genode - and Sculpt
OS in particular - generally more useful.
As another take on "bridging worlds", we continue our effort to bring the rich
Sculpt OS software stack to the 64-bit ARM world, in particular to our most
loved SoC family, namely NXP i.MX. Section [64-bit ARM and NXP i.MX8] reports
on our progress in this direction.
Under the hood, there are a few exciting developments that will greatly reduce
the effort of running existing software on Genode. In particular, Genode's
(entirely optional) C runtime has gained the ability to emulate the
traditional execve and fork mechanisms.
(Section [Consolidation of the C runtime and Noux]) This will eventually
alleviate the need for our present noux runtime environment to the benefits of
better performance and increased flexibility.
Further highlights of Genode 19.08 are a major update of Qt5 to version 5.13
(Section [Updated Qt5]) and the continuation of our kernel-agnostic
virtualization story (Section [Virtualization]).
Flexible keyboard layouts
#########################
Genode is used worldwide in a multilingual context beyond Germany and common
technical realms of English. Therefore, we had to address localized
keyboard-input handling for quite some time now and introduced the
_input-filter_ component in
[https://genode.org/documentation/release-notes/17.02#Input-event_filter - 17.02].
The component merges input streams and applies several forms of input
transformations, in particular the application of keyboard layouts to
supplement the input-event stream with character events.
But as we are by no means localization experts, our solution, while performing
a solid job for selected layouts, also had some quirks and rough edges when it
came to French or even Swiss German. First, our oversimplified notion of
[https://en.wikipedia.org/wiki/Caps_Lock - Caps Lock] as _just a pressed Shift_
_key_ is plain wrong but part of all our character-generator configurations.
We just missed this drawback because none of our developers uses Caps Lock
regularly. Further, US English and Germany layouts work very well without
[https://en.wikipedia.org/wiki/Dead_key - dead keys], but crossing any German
border (except the Austrian) is impossible without support for key sequences
composing special characters. The French keyboard layout in Genode tried to
alleviate the lack of compose sequences by adding an additional Circumflex
modifier and character mapping, which unfortunately is not standard.
[image keyboard_stack]
Beginning at this state of affairs, we researched common practice in
international keyboard-input handling, sought a quasi-standard source for
layout configurations, and addressed the drawbacks mentioned before. During
our research we found out that no current implementation is void of critique
and, therefore, decided to look more into X11/XKB as our open-source
quasi-standard solution, but always had an eye on the proprietary world.
The handling of key events in X11/XKB happens on three layers.
:Key codes: On the key-code layer, the device driver programs the
keyboard and generates a stream of key-code (i.e., scan-code)
events, which represent the physical location of the actual key on
the keyboard.
:Key symbols: These key codes are mapped to key symbols, which
represent the label imprinted on the key. So, the key code producing
US English _Q_ (QWERTY keyboard) generates _A_ on a French keyboard
(AZERTY). Modifiers like Shift, AltGr, and Caps Lock are included in
the key-symbol mapping. Additionally, some layouts map key codes to
dead key symbols, which start the before-mentioned compose
sequences. Key repeat is also implemented as key-symbol repeat
actually.
:Characters: On top of this stack, the key symbols are mapped to
characters represented as Unicode codepoints or UTF-8 strings.
The procedure obviously includes key symbols that have no character
representation (e.g. Control and Alt). Key symbols forming a valid compose
sequence generate characters on this level (e.g., dead-key circumflex plus
e generates ê).
We limited our research to Western keyboard-input handling and only had a
blink into the direction of Chinese-Japanese-Korean (CJK) and advanced input
methods (IM). This simplification is supported by the fact that CJK can also
be based on the mechanisms mentioned with some limitations only. Nevertheless,
we do not expect to never touch this topic again.
After doing our homework of keyboard-input handling, we worked on squeezing
all available layout information out of X11/XKB, which resulted in a small
tool residing in _tool/xkb2ifcfg_. For those wondering, the name is just a
silly acronym for _XKB to input-filter_ _configuration_ that pays tribute to
the boringness of this task. After building the tool by a run of 'make' in the
tool path, it can be used as follows. Please make sure you have libxkbcommon
development packages installed beforehand.
! xkb2ifcfg generate <layout> <variant> <locale>
!
! xkb2ifcfg generate us euro en_US.UTF-8
! xkb2ifcfg generate de nodeadkeys de_DE.UTF-8
If the parameter combination is available, xkb2ifcfg prints a input-filer
chargen configuration for the selected layout to standard output. Valid
'layout' and 'variant' options can be figured out from the LAYOUTS section in
'man 7 xkeyboard-config', where 'variant' strings are depicted in parentheses
after the layout (e.g., 'us(euro)'). The 'locale' option has the standard
locale syntax (see /usr/share/i18n/locales). The tool needs all three
parameters to gather the correct key-map and compose-sequence information. The
generated chargen configurations include '<map>' and '<key>' nodes
corresponding to significant modifier states and '<sequence>' nodes (described
later). For simplicity of the generator, the '<key>' nodes always use the
'code="..."' attribute, but also have a comment with the UTF-8 character
appended.
! <key name="KEY_MINUS" code="0x00df"/> <!-- ß -->
Last, we addressed the improvement of the input-filter character generator and
the actual chargen configuration files in Genode. Therefore, we specified the
modifier configuration assumed by the standard chargen files as '<mod1>'
corresponds to Shift, '<mod2>' to Control, '<mod3>' to AltGr, and '<mod4>' to
Caps Lock.
! <mod1> <key name="KEY_LEFTSHIFT"/> <key name="KEY_RIGHTSHIFT"/> </mod1>
! <mod2> <key name="KEY_LEFTCTRL"/> <key name="KEY_RIGHTCTRL"/> </mod2>
! <mod3> <key name="KEY_RIGHTALT"/> </mod3> <!-- AltGr -->
! <mod4> <rom name="capslock"/> </mod4>
As outlined above, the '<key>' nodes generated by xkb2ifcfg always use the
'code' attribute for the Unicode codepoint. Because of this and because UTF-8
also refers to codepoints, we deprecated the 'b0/b1/b2/b3' attributes for
character definition with this release.
The chargen is also extended by the '<sequence>' configuration node. A
sequence node permits the definition of dead-key/composing character
sequences. With such sequences, the character is not generated instantly on
key press but only after the sequence is completed. If an unfinished sequence
can't be completed due to an unmatched character, the sequence is aborted and
no character is generated. We support sequences of up to four characters at
the moment.
For example, the French AZERTY
[https://docs.microsoft.com/en-us/globalization/keyboards/kbdfr.html - keyboard layout]
has a dead key for Circumflex Accent _^_ right of the _P_ key (which is
bracket left _[_ on US keyboards). When Circumflex is pressed no visible
character should be generated instantly but the accent must be combined with a
follow-up character (e.g., Circumflex plus _a_ generates _â_).
Dead keys can be defined in the '<key>' nodes of any '<map>' by using
codepoints not used for direct output, for example, Combining Diacritical
Marks beginning at U+0300. The French Circumflex example can be configured
like follows.
! <mod1>
! <key name="KEY_LEFTSHIFT"/> <key name="KEY_RIGHTSHIFT"/>
! </mod1>
! <map>
! <key name="KEY_Q" code="0x0061"/> <!-- a -->
! <key name="KEY_LEFTBRACE" code="0x0302"/> <!-- dead_circumflex -->
! </map>
! <map mod1="true">
! <key name="KEY_Q" code="0x0041"/> <!-- A -->
! </map>
! <sequence first="0x0302" second="0x0061" code="0x00e2"/> <!-- â -->
! <sequence first="0x0302" second="0x0041" code="0x00c2"/> <!-- Â -->
Fortunately, the configuration is automatically generated by xkb2ifcfg, but
admittedly quite extensive. Therefore, we manually amended the chargen
configurations before adding them to Genode, which also gave us the chance to
apply some adjustments like follows for AltGr in Swiss German.
! <map mod1="false" mod2="false" mod3="true" mod4="false">
! <key name="KEY_1" code="0x00a6"/> <!-- ¦ (*) -->
! <key name="KEY_4" code="0x00b0"/> <!-- ° (*) -->
! <key name="KEY_5" code="0x00a7"/> <!-- § (*) -->
! </map>
Beside the advanced input methods mentioned before, there are still loose ends
we are going to address in the upcoming releases. For example, the current key
handling in our Qt5 back end maps localized key symbols incorrectly (think
AZERTY vs. QWERTY) in combination with shortcuts like Ctrl-A.
64-bit ARM and NXP i.MX8
########################
64-bit ARM support in our custom base-hw kernel
-----------------------------------------------
By introducing rudimentary Raspberry Pi 3 support on top of the Fiasco.OC
kernel in the previous release, the first ARM 64-bit support has entered the
Genode OS framework. We continued pursuing the ARM 64-bit path and introduce
support for Raspberry Pi 3 as well as the i.MX8 evaluation kit (EVK), this
time using our own base-hw kernel.
Noteworthy additions in the base-hw kernel are support for the AARCH64 system
level architecture, and the use of the modern GIC v3 interrupt controller on
top of the i.MX8 EVK board. In comparison to the GICv2, GICv3 adds support for
more than eight CPUs, more than 1020 interrupt IDs, and offers fast register
access to the CPU interface, instead of memory-mapped I/O access. Minor
changes had to be made to the page-table implementation of ARMv7 with Large
Physical Address Extension (LPAE) to re-use it for ARMv8. Moreover, the
internal kernel API for TLB maintenance needed to be changed slightly for all
ARM platforms.
We expanded our regular testing infrastructure with two AARCH64 platforms,
namely Raspberry Pi 3 via Qemu and the NXP i.MX8 EVK board as physical
hardware. Both platforms are driven with a single CPU core only at the moment.
Network driver for i.MX7 and i.MX8
----------------------------------
We updated the 'fec' network driver to version 4.16.3, which adds support for
i.MX7 and i.MX8 SoCs. This makes i.MX8 a viable platform for Genode-based
networking scenarios.
Enhanced packaging and test infrastructure for ARMv8
----------------------------------------------------
Besides the improved base-hw kernel, we enabled additional infrastructure for
ARMv8 platforms. For example, noux packages - like _coreutils_, _bash_ - are
now available, the standard C++ library is in place, and support for Genode's
port of the Linux TCP/IP stack is enabled.
Additionally, ARMv8 is now regularly tested within our nightly
_depot_autopilot_ runs.
Base framework and OS-level infrastructure
##########################################
Tracing
=======
Support for fast tracing has been built into Genode for a long time. However,
the stakes to take advantage of this feature remained high because convenience
functions were not in place. With the current release, we added the support
for easy trace setups through a VFS plugin. The plugin is called _vfs_trace_
and can be mounted into a Genode component as follows:
!<config>
! <vfs>
! <trace ram=32MB/>
! </vfs>
!</config>
This configuration will create a trace file system at the root of the VFS. The
_ram_ attribute is mandatory and determines the maximum size of all trace
buffers. The file system forms a recursive directory structure that represents
the parent/child relationship of running components, whereas the leaf
directories represent single threads within a component. Each leaf directory
currently contains three files:
:'enable': Start or stop the tracing of a thread by writing "true" or "false"
into the file.
:'buffer_size': Allows for the configuration of the trace-buffer size for the
thread in the usual Genode format (e.g. 5M, 512K, 1024).
:'trace_buffer': This read-only file contains the current content of the trace
buffer. Each trace entry can only be read once, after that only new entries
appear. "tail -f" can also be used to display continuous output.
As an example, tracing is started by writing _true_ to the _enable_ file:
! echo "true" > enable
The trace buffer can then be displayed using Unix tools like _tail_
! tail -f trace_buffer
which provides a continuous output.
Additionally, we have added the _trace_ function to _base/log.h_ that
facilitates identical functionality as _Genode::log_
! Genode::trace("Tracepoint value: ", value);
In order to enable tracing, the parent must provide the "TRACE" service. For a
real world example on Sculpt OS, please refer to this
[https://genodians.org/ssumpf/2019-06-18-trace_fs - Genodians article].
With the _vfs_trace_ plugin in place, we removed the outdated _trace_fs_.
Consolidation of the C runtime and Noux
=======================================
On our [https://genode.org/about/road-map#August_-_Release_19.08 - road map],
we vaguely hinted at our plan for the "consolidation" of the noux runtime,
which is actually meant as a polite way of announcing that we are going to
remove it. We introduced the
[https://genode.org/documentation/release-notes/11.02#Noux_-_an_execution_environment_for_the_GNU_userland - Noux runtime]
in 2011 as a way to execute command-line-based GNU software directly on
Genode. It has served us well over the years and is - in fact - a crucial
ingredient of Sculpt OS and other system scenarios such as the Genodians.org
web server. Noux supplements Genode with two valuable assets, namely a
flexible and expandable virtual file system (VFS) layer, and the
implementation of the
[https://genode.org/documentation/release-notes/12.02#Noux_support_for_fork_semantics - Unix way]
to spawn applications ('fork' and 'execve').
In the
[https://genode.org/documentation/release-notes/17.02#Enhanced_VFS_infrastructure - meantime],
noux' VFS implementation has become independent from the noux runtime and is
now prominently employed by Genode's C runtime and the VFS server component.
Genode's C runtime became more and more complete, alleviating the use of noux
as POSIX compatibility layer except for programs that depended on a working
implementation of 'fork' and 'execve'.
The current release fills this remaining gap in Genode's C runtime by
providing 'fork', 'execve', and cousins such as 'wait4' and 'getpid' as
regular parts of the libc. This will eventually make noux redundant.
Note that this change does *NOT* make Genode reliant on POSIX. The C runtime
including the Unix features are entirely optional.
As one stepping stone of this undertaking, noux applications, which previously
had to be compiled for noux, have become binary compatible with the regular C
runtime. So one can execute programs like 'bash' directly as a Genode
component without any friction.
There are a few collateral improvements of Genode's dynamic linker and the C
runtime on the account of the new 'fork' and 'execve' implementation. E.g., in
addition to the already supported 'stdin', 'stdout', and 'stderr'
configuration, the libc can be instructed to initialize arbitrary file
descriptors as follows:
! <config>
! ...
! <libc ...>
! <fd id="3" path="/dev/log" writeable="yes" readable="no" seek="10"/>
! ...
! </libc>
! </config>
The libc-based implementation of 'fork' and 'execve' can be tried out via
the new _ports/run/bash.run_ script. Note that there are still a number of
limitations such as the lack of signal and ioctl handling. Pipes are not
supported, and shebangs ('#!') are not interpreted yet. That said, once those
missing pieces come into place, we can fade out the use of noux within Genode.
General system time concept
===========================
Briefly speaking, up to now there has been no notion of an overall concept of
system time in Genode. Components that need to have access to some kind of
real time are either configured locally, e.g., libc-based components access a
configured "device" (/dev/rtc), which just might be an inline file system
containing an artificial timestamp or the VFS RTC plugin, while other
components query some RTC session directly. Most of the time, this session is
provided by the 'rtc_drv' on x86 machines, which is somewhat costly as reading
the RTC via I/O ports takes time and is therefore done scarcely. For example,
the libc will query an RTC source only once and uses this initial value to
interpolate the current time. However, for executing long-running components,
it will be necessary to adjust the clock to compensate for any occurring clock
drift or to correct a misconfigured clock in general. In addition it is
desirable to be able to use a remote time source, e.g., an NTP-server, to
synchronize the system time.
To address this, we came up with the following concept:
[image system_rtc]
The new "System RTC" component, located at
_repos/libports/src/server/system_rtc_, acts as proxy for the RTC service in
front of the actual RTC driver. It uses the driver to get the initial RTC
value and then uses a timer session (via the timeout framework) to locally
interpolate the time. In contrast to querying the RTC driver, querying the
System RTC is fast.
The RTC driver and the System RTC are bundled up together in the new
_drivers-rtc-pc_ package. The runtime of this package requests two ROM modules
used to update the RTC value. The first one, named 'system_set_rtc', is used
to update the proxy component while the second one, called 'hw_set_rtc', is
used by the RTC driver to write the value into the battery-backed RTC. A
separate component, potentially accessing a remote time source, may generate
these ROMs to adjust the time in the package's runtime.
The new native *SNTP* client at _repos/libports/src/app/sntp_client_ is such a
component. It periodically requests the current time from a given SNTP server
and generates a report. The report produced by the component contains the time
as UTC/GMT. Depending on the system policy, it can be used to update the time
of the System RTC and/or instruct the driver to set the RTC value.
To propagate such changes to RTC values, the RTC session was enhanced by the
new 'set' signal. A client of the session can install a signal handler to
adapt its own time when necessary. Based on this, the time back end of the
libc was changed to instantiate a watch handler for the RTC device, which,
when triggered, will cause the libc to re-read the RTC value.
This constellation should, under normal operation, allow for second to
sub-second granularity updates of the overall system time and avoid drifting
away from network time.
Accessing SMBIOS tables
=======================
The System Management BIOS (SMBIOS) is a specification that allows for reading
management information produced by the BIOS of a system as a collection of
data structures in memory. It has the potential to eliminate the need for the
operating system to probe hardware for discovering present devices and their
characteristics. Nowadays, the SMBIOS specification is implemented widely in
PC systems, which includes modern UEFI systems as well. The data structures
are referred to as _tables_ or _records_ by public documentation.
The new native SMBIOS decoder at _os/src/app/smbios_decoder_ can be used on
x86 to parse SMBIOS tables and report gathered information in a human-readable
way. Besides general table information like number and size of structures,
etc., the component supports complete parsing of SMBIOS structures of types
"BIOS", "System", and "Baseboard".
The component is free from any code for acquiring an SMBIOS table through
means like the bootloader or BIOS information. It expects a table to be
present through a regular Genode ROM session with a 'smbios_table' label. This
way, the underlying system is required to find, select, and save the raw table
on startup and create a ROM module out of it. This is currently achieved on
NOVA and base-hw through an interplay of kernel, the core component, and the
ACPI driver and was tested for legacy BIOSes as well as UEFI systems.
Clipboard
=========
Genode introduced a principle copy-and-paste mechanism already
[https://genode.org/documentation/release-notes/15.11#Copy_and_paste - four years ago].
However, originally created as a part of a tech demo, the mechanism remained
unused in our day to day Genode work. This changed now. We took the
integration of copy-and-paste support in Sculpt OS as an opportunity to revive
and refine the existing mechanism and supplement it with the features needed
to make it practical for daily use. We believe that the result aligns ease of
use nicely with security. The concept is described in a
[https://genodians.org/nfeske/2019-07-03-copy-paste - dedicated article]
at Genodians.org.
On a technical level, the existing clipboard component has received a new
option that allows for dynamic information-flow policies based on user
interactivity (keyboard focus, activity). When setting the config attribute
'match_labels="yes"', the clipboard performs plausibility checks for copy and
paste operations against the focus of the Nitpicker GUI server. All aspects of
the clipboard policy - including information-flow policies - have become
reconfigurable.
To make window-manager clients compatible with the clipboard's dynamic policy,
the window manager got enhanced with the ability to proxy the interaction with
the clipboard. GUI clients in turn - in particular the graphical *terminal* -
became able to interact with the clipboard. With the '<config>' attribute
'copy="yes"' specified, the terminal allows the user to select text to be
reported to a "clipboard" report. The selection mode is activated by holding
the left shift key. While the selection mode is active, the text position
under the mouse pointer is highlighted and the user can select text via the
left mouse button. Upon release of the mouse button, the selection is
reported. Vice versa, with the '<config>' attribute 'paste="yes"' specified,
the terminal allows the user to paste the content of a "clipboard" ROM session
to the terminal client by pressing the middle mouse button.
Finally, we integrated those new abilities into Sculpt OS and into several
installable packages, including virtual machines, the noux-system package,
and graphical Qt5-based applications.
Enhanced SSH terminal
=====================
This release paves the way for remotely managing Genode devices over SSH.
Until now, only interactive SSH sessions were supported. It is now possible to
execute commands from a remote SSH client. E.g., 'ssh noux@localhost -p 5555
"ls -hal /bin/"'. For non-interactive sessions, ssh_terminal requires a helper
component. This component is responsible to create the environment for the
command to run in. You can find an example for such a component at
_gems/src/test/exec_terminal_. It starts noux in a sub init and executes the
provided command inside of it. The new _ssh_exec_channel.run_ script gives a
demonstration on how this feature can be used.
This work is a contribution by Sid Hussmann of
[https://gapfruit.com - Gapfruit]. Thanks for this great new feature!
Storage-stack improvements
==========================
The desire of one Genode developer to exchange data via Iomega ZIP drives
between an Atari Falcon and Sculpt OS called for a number of small
improvements across several components of the storage stack.
First, the USB-block driver has been changed to exit on an initialization
failure instead of waiting for another (supported) device. This change enables
the Sculpt manager to detect such conditions and release the USB device
hardware by removing the driver component. Such a failed initialization may
happen with exotic USB-storage devices such as ZIP drives. With the device
released, however, it can be assigned to a virtual machine to access it using
a guest OS with a broader support of devices.
Second, the USB-block driver received new support for issuing the SCSI
START-STOP command at initialization time, thereby overcoming the ZIP-drive
initialization failure.
Third, we enhanced the part-block component with the ability to parse AHDI
partition schemes and detect the GEMDOS variant of FAT as used by Atari TOS.
Fourth, we enabled the Rump VFS plugin to access GEMDOS file systems. The
GEMDOS variant is readily supported by NetBSD's "msdos" file-system driver.
However, it must explicitly be enabled by a mount flag. Hence, we added the
principle ability for passing mount flags to NetBSD file-system drivers and
enabled the MSDOSFSMNT_GEMDOSFS flag based on the VFS plugin's config
attribute 'gemdos="yes"'.
With these changes in place, data can now be exchanged directly between
Atari-formatted disks and Sculpt OS. That said, advanced use cases such as
media changes at runtime are not covered yet.
Updated Ada/SPARK runtime
=========================
Genode's Ada/SPARK runtime is developed and maintained by
[https://componolit.com - Componolit]. Thanks for this excellent
collaboration!
The updated Componolit Ada runtime 1.1.0 increases the proof coverage and
cleans up the source-code structure. SPARK mode is now enabled wherever
possible and unneeded abstractions have been removed. Furthermore, the 64-bit
addition and subtraction have been proven to be free of runtime errors.
As a new feature, the runtime now supports the use of inline assembly in Ada.
The removal of unneeded features such as the incomplete threading support for
the secondary stack has greatly reduced the runtime's complexity while keeping
the current functionality available. Also GNAT.IO has been removed as its
implementation was incomplete and complex. A simpler replacement has been
introduced with 'Componolit.Runtime.Debug'.
Unrelated to Genode, the runtime now supports [https://muen.sk/ - Muen] and
the API/ABI of the runtime has been separated from the GNAT ABI.
Libraries and applications
##########################
Updated Qt5
===========
We updated our Qt5 port to the latest upstream version 5.13.0. Before
preparing the 'qt5' port, please make sure to build and install the updated
Qt5 host tools with the 'tool/tool_chain_qt5' script.
Virtualization
==============
As follow-up of our work on the
[https://genode.org/documentation/release-notes/19.05#Kernel-agnostic_virtual-machine_monitors - kernel agnostic virtual-machine monitor interface]
on x86, we added principle support to run our port of VirtualBox on
Genode/Fiasco.OC. We write _principle_ support, since we managed to get the
VMM running with Fiasco.OC, but unfortunately not all features required by the
VMM are available using the Fiasco.OC kernel, e.g., guest FPU registers, PDPTE
registers, and task-priority support. In practice this means that the VMs with
Windows and Linux come up to a certain point but will fail later whenever the
guest state runs out of synchronization between VMM and hardware. In contrast,
the Seoul VMM runs fine on Fiasco.OC since it does not depend on the mentioned
missing features.
Our main working items have been the completion of transfer of the available
guest registers and control flow synchronization improvements between VMM and
Fiasco.OC kernel. Additionally, the usage of priorities for VirtualBox's
pthreads in the VMM had to be disabled. Finally, some tests for VirtualBox
with Genode/Fiasco.OC are enabled for nightly regular testing now.
As a side topic, we added support for using the VirtualBox
[https://forums.virtualbox.org/viewtopic.php?f=2&t=82299&start=15 - CPU profile]
feature, which allows for presenting a different CPUID to the VM than the one
of the real CPU. This can help when running Windows 7 on a Kaby Lake or newer
CPU, which are considered _unsupported hardware_ and reason enough not to
receive security updates from Microsoft. The feature can be used on Genode by
adding the 'CpuProfile' attribute to the '<CPU>' XML node in the .vbox file,
like:
! <CPU CpuProfile="Intel Core i7-5600U">
Disposable VM for handling captive portals
==========================================
It is common that WiFi networks require the user to interact with a specific
web page before gaining access to full network functionality. Such captive
portal pages are completely individual to the accessed network and not limited
in the use of common web techniques. Therefore, their handling is best be done
using a fully-featured web browser like Mozilla Firefox.
This is where, in a Genode-based desktop system like Sculpt, a disposable VM
for hosting a minimal browser setup becomes desirable. Its goal is to unlock a
network for the native Genode surroundings with as little inconvenience as
possible just to be thrown away afterwards without any side effects on the
system.
Now, one could use the Firefox appliance VM of Sculpt (see the
[https://genode.org/documentation/release-notes/18.05 - release notes] or the
[http://genodians.org/alex-ab/2019-03-06-disposal-browser-vm - Genodians article])
for this. But this VM aims for a long-term browsing experience which, in the
context of mere captive-portal handling, brings some drawbacks like a much
higher RAM consumption or the required sessions for USB detection and shared
folders.
Furthermore, in the captive portal VM, there's no need for managing windows or
browser tabs. The one browser tab needed can always be shown in fullscreen. It
is also unnecessary for the browser to maintain a content cache or remember
user data. This can reduce resource consumption.
[image captive_portal_vm]
The VM we came up with is provided as package for Sculpt by Martin Stein
(depot user 'mstein'). You'll possibly need to manually add Martin's
[https://github.com/genodelabs/genode/tree/master/depot/mstein - depot key and download location]
to your Sculpt depot directory. After enabling this user, the captive portal
VM can be found in the Sculpt menu under "Depot -> mstein -> Virtual
Machines -> vbox5-nova-captive-portal".
The VM is based on a TinyCore 10 Linux with Xserver, i3 WM, and a tailored
Firefox browser. The package runtime doesn't need access to your file system,
it merely loads some ROMs into a RAM FS, so, it will completely forget any
changes made during a session. Therefore, it's also safe to simply remove an
instance via the Leitzentrale component-view once you don't need it anymore.
The guest additions are also included to make the VM window resizable.
Build system and tools
######################
At Genode Labs, we have used _tool/autopilot_ for the steering of tests in our
Continuous Integration workflow for almost a decade now. This implied various
improvements over the years and with the completion of our work on
[https://genode.org/documentation/release-notes/19.05#Unified_build_directories_for_ARM - unified build directories]
it was time to amend this handy tool once again. Unified build directories
support building all components for one CPU architecture in one directory
saving the build server from the redundant work we previously had with
board-specific directories. With the new notion of boards during builds, the
definition of the target platform when integrating Genode system scenarios is
now a triplet of _CPU architecture_, _board_, and _kernel_. This is reflected
in the new '-t <architecture-board-kernel>' command line option, which
instructs autopilot to generate a build directory for _architecture_ and
execute tests for the _board-kernel_ combination.
! autopilot -t x86_64-pc-sel4 -t x86_64-pc-nova -r run/log
The known options for '-k kernel' and '-p platform' are still supported with
the small change that the platform must now be defined as
_architecture-board_.
! autopilot -p x86_64-pc -k sel4 -k nova -r run/log
Autopilot now also documents the hidden feature to propagate custom 'RUN_OPTs'
via the 'RUN_OPT_AUTOPILOT' environment variable to the run tool executed.
Besides that, the tool always appends 'RUN_OPT' with '--autopilot'.
! RUN_OPT_AUTOPILOT="--depot-dir /data/depot" autopilot ...

815
doc/release_notes-19-11.txt Normal file
View File

@@ -0,0 +1,815 @@
===============================================
Release notes for the Genode OS Framework 19.11
===============================================
Genode Labs
On our [https://genode.org/about/road-map - road map] for this year, we stated
"bridging worlds" as our guiding theme of 2019. The current release pays
tribute to this ambition on several accounts.
First, acknowledging the role of POSIX in the real world outside the heavens
of Genode, the release vastly improves our (optional) C runtime with respect
to the emulation of POSIX signals, execve, and ioctl calls. With the line of
work described in Section [C runtime with improved POSIX compatibility], we
hope to greatly reduce the friction when porting and hosting existing
application software directly on Genode.
Second, we identified the process of porting or developing application
software worth improving. Our existing tools were primarily geared to
operating-system development, not application development. Application
developers demand different work flows and tools, including the freedom to use
a build system of their choice.
Section [New tooling for bridging existing build systems with Genode]
introduces our new take on this productivity issue.
Third, in cases where the porting of software to Genode is considered
infeasible, virtualization comes to the rescue. With the current release, a
new virtual machine monitor for the 64-bit ARM architecture enters the
framework. It is presented in Section [Virtualization of 64-bit ARM platforms].
As another goal for 2019, we envisioned a solution for block-level device
encryption, which is a highly anticipated feature among Genode users. We are
proud to present the preliminary result of our year-long development in
Section [Preliminary block-device encrypter].
Preliminary block-device encrypter
##################################
Over the past year, we worked on implementing a block-device encryption
component that makes use of the
[https://en.wikipedia.org/wiki/SPARK_(programming_language) - SPARK]
programming language for its core logic. In contrast to common
block-device encryption techniques where normally is little done besides
the encryption of the on-disk blocks, the _consistent block encrypter (CBE)_
aims for more. It combines multiple techniques to ensure integrity -
the detection of unauthorized modifications of the block-device -
and robustness against data loss. Robustness is achieved by keeping snapshots
of old states of the device that remain unaffected by the further operation of
the device. A copy-on-write mechanism (only the differential changes to the
last snapshot are stored) is employed to maintain this snapshot history with
low overhead. To be able to access all states of the device in the same manner,
some kind of translation from virtual blocks to blocks on the device is needed.
Hash-trees, where each node contains the hash of its sub-nodes, combine the
aspect of translating blocks and ensuring their integrity in an elegant way.
During the tree traversal, the computed hash of each node can be easily checked
against the hash stored in the parent node.
The CBE does not perform any cryptography by itself but delegates
cryptographic operations to another entity. It neither knows nor cares about
the used algorithm. Of all the nodes in the virtual block device (VBD), only
the leaf nodes, which contain the data, are encrypted. All other nodes, which
only contain meta-data, are stored unencrypted.
Design
------
As depicted in Figure [cbe_trees], all information describing the various
parts of the CBE is stored in the superblock. The referenced VBD is a set of
several hash trees, each representing a certain device state including the
current working state. Only the tree of the current working state is used to
write data to the block device. All other trees represent snapshots of older
states and are immutable. Each stored device state has a generation number
that provides the chronological order of the states.
As you can see, in the depicted situation, there exist four device states - the
snapshot with generation 3 is the oldest, followed by two newer snapshots and
generation 6 that marks the working state of the virtual device. The tree with
generation 6 is the current working tree. Each tree contains all changes done
to the VBD since the previous generation (for generation 6 the red nodes). All
parts of a tree that didn't change since the previous generation are references
into older trees (for generation 6 the gray nodes). Note that in the picture,
nodes that are not relevant for generation 6 are omitted to keep it manageable.
The actual data blocks of the virtual device are the leaf nodes of the trees,
shown as squares.
[image cbe_trees]
Whenever a block request from the client would override data blocks in
generation 6 that are still referenced from an older generation, new blocks for
storing the changes are needed. Here is where the so-called _Free Tree_ enters
the picture. This tree contains and manages the spare blocks. Spare blocks are
a certain amount of blocks that the CBE has in addition to the number of blocks
needed for initializing the virtual device. So, after having initialized a
virtual device, they remain unused and are only referenced by the Free Tree.
Therefore, in case the VBD needs new blocks, it consults the Free Tree (red
arrow).
In the depicted situation, writing the first data block (red square) would
require allocating 4 new blocks as all nodes in the branch leading to the
corresponding leaf node - including the leaf node itself - have to be written.
In contrast, writing the second data block would require allocating only one
new block as the inner nodes (red circles) now already exist. Subsequent write
requests affecting only the new blocks will not trigger further block
allocations because they still belong to the current generation and will be
changed in-place. To make them immutable we have to create a new snapshot.
The blocks in generation 5 that were replaced by the change to generation 6
(blue nodes) are not needed for the working state of the virtual device
anymore. They are therefore, in exchange for the allocated blocks, added to
the Free Tree. But don't be fooled by the name, they are not free for
allocation yet, but marked as "reserved" only. This means, they are
potentially still part of a snapshot (as is the case in our example) but the
Free Tree shall keep checking, because once all snapshots that referenced the
blue blocks have disappeared, they become free blocks and can be allocated
again.
To create a new snapshot, we first have to make all changes done to the VBDs
working state as well as the Free Tree persistent by writing all corresponding
blocks to the block-device. After that, the new superblock state is written to
the block-device. To safeguard this operation, the CBE always maintains several
older states of the superblock on the block device. In case writing the new
state of the superblock fails, the CBE could fall back to the last state that,
in our example, would contain only generations 3, 4, and 5. Finally, the
current generation of the superblock in RAM is incremented by one (in the
example to generation 7). Thereby, generation 6 becomes immutable.
A question that remains is when to create snapshots. Triggering a snapshot
according to some heuristics inside the CBE might result in unnecessary
overhead. For instance, the inner nodes of the tree change frequently during a
sequential operation. We might not want them to be re-allocated all the time.
Therefore, the creation of a snapshot must be triggered explicitly from the
outside world. This way, we can accommodate different strategies, for
instance, client-triggered, time-based, or based on the amount of data
written.
When creating a snapshot, it can be specified whether it shall be disposable
or persistent. A disposable snapshot will be removed automatically by the CBE
in two situations, either
* When there are not enough usable nodes in the Free Tree left to
satisfy a write request, or
* When creating a new snapshot and all slots in the superblock that might
reference snapshots are already occupied.
A persistent snapshot, or quarantine snapshot, on the other hand will never be
removed automatically. Its removal must be requested explicitly.
During initialization, the CBE selects the most recent superblock and reads the
last generation value from it. The current generation (or working state
generation) is then set to the value incremented by one. Since all old blocks,
that are still referenced by a snapshot, are never changed again, overall
consistency is guaranteed for every generation whose superblock was stored
safely on disk.
Implementation
--------------
Although we aimed for a SPARK implementation of the CBE, we saw several
obstacles with developing it in SPARK right from the beginning. These obstacles
mainly came from the fact that none of us was experienced in designing
complex software in SPARK. So we started by conducting a rapid design-space
exploration using our mother tongue (C++) while using only language features
that can be mapped 1:1 to SPARK concepts. Additionally, we applied a clear
design methodology that allowed us to keep implementation-to-test cycles
small and perform a seamless and gradual translation into SPARK:
* _Control flow_
The core logic of the CBE is a big state machine that doesn't block. On each
external event, the state machine gets poked to update itself accordingly.
C++ can call SPARK but SPARK never calls C++. The SPARK code therefore
evolves as self-contained library.
* _Modularity_
The complex state machine of the CBE as a whole is split-up into smaller
manageable sub-state-machines, working independently from each other. These
modules don't call each other directly. Instead, an additional superior
module handles the interplay. This is done by constantly iterating over all
modules with the following procedure until no further progress can be made:
# Try to enter requests of other modules into the current one
# Poke the state machine of the current module
# The current module may have generated requests - Try to enter them into
the targeted modules
# The current module may have finished requests - Acknowledge them at the
modules they came from
Each module is represented through a class (C++) respectively a package with
a private state record (SPARK).
* _No global state_
There are no static (C++) or package (SPARK) variables. All state is kept in
members of objects (C++) respectively records (SPARK). All packages are pure
and sub-programs have no side-effects. Therefore, memory management and
communication with other components is left to OS glue-code outside the
core logic.
This approach worked out well. Module by module, we were able to translate the
C++ prototype to SPARK without long untested phases, rendering all regression
bugs manageable. In Genode, the CBE library is currently integrated through
the CBE-VFS plugin. Figure [cbe_modules] depicts its current structure and the
integration via VFS plugin.
[image cbe_modules]
The green and blue boxes each represent an Ada/SPARK package. The translation
to SPARK started at the bottom of the picture moving up to the more abstract
levels until it reached the Library module. This is the module that handles
the interplay of all other modules. Its interface is the front end of the CBE
library. So, all green packages are now completely written in SPARK and
together form the CBE library. Positioned above, the CXX library in blue is
brought in by a separate library and exports the CBE interface to C++. This
way, the CBE can also be used in other environments including pure SPARK
programs. The CXX Library package is not written in SPARK but Ada and performs
all the conversions and checks required to meet the preconditions set by the
SPARK packages below.
At the C++ side, we have the VFS plugin. Even at this level, the already
mentioned procedure applies: The plugin continuously tries to enter requests
coming from the VFS client (above) into the CBE (below), pokes the CBE state
machine, and puts thereby generated block/crypto requests of the CBE into the
corresponding back-ends (left). This process is repeated until there is no
further progress without waiting for an external event.
Current state
-------------
In its current state, the CBE library is still pretty much in flux and is not
meant for productive use.
As the Free Tree does not employ copy-on-write semantics for its meta-data, a
crash, software- or hardware-wise, will corrupt the tree structure and renders
the CBE unusable on the next start.
This issue is subject to ongoing work. That being said, there are
components that, besides being used for testing, show how the interface of the
CBE library lends itself to be integrated in components in different ways. At
the moment, there are two components making use of the CBE library as
block-device provider.
The first one is the aforementioned CBE-VFS plugin. Besides r/w access to the
working tree and r/o access to all persistent snapshots, it also provides a
management interface where persistent snapshots can be created or discarded.
Its current layout is illustrated by Figure [cbe_vfs]. The VFS plugin
generates three top directories in its root directory. The first one is the
_control_ directory. It contains several pseudo files for managing the CBE:
[image cbe_vfs]
:'key': set a key by writing a string into the file.
:'create_snapshot': writing 'true' to this file will attempt to create
a new snapshot. (Eventually the snapshot will
appear in the 'snapshots' directory if it could be
created successfully.)
:'discard_snapshot': writing a snapshot ID into this file will discard
the snapshot
The second is the 'current' directory. It gives access to the current
working tree of the CBE and contains the following file:
:'data': this file represents the virtual block device and gives
read and write access to the data stored by the CBE.
The third and last is the 'snapshots' directory. For each persistent snapshot,
there is a sub-directory named after the ID of the snapshot. This directory,
like the 'current' directory, contains a 'data' file. This file, however,
gives only read access to the data belonging to the snapshot.
The CBE-VFS plugin itself uses the VFS to access the underlying block device.
It utilizes the file specified in its configuration. Here is a '<vfs>'
snippet that shows a configured CBE-VFS plugin where the block device is
provided by the block VFS plugin.
! <vfs>
! <dir name="dev">
! <block name="block"/>
! <cbe name="cbe" block="/dev/block"/>
! </dir>
! </vfs>
An exemplary ready-to-use run script can be found in the CBE repository
at _run/cbe_vfs_snaps.run_. This run script uses a bash script to
automatically perform a few operations on the CBE using the VFS plugin.
Afterwards it will drop the user into a shell where further operations
can be performed manually, e.g.:
! dd if=/dev/zero of=/dev/cbe/current/data bs=4K
The second component is the CBE server. In contrast to the CBE-VFS plugin,
it is just a simple block-session proxy component that uses a block connection
as back end to access a block-device. It provides a front-end block session to
its client, creates disposable snapshots every few seconds, and uses the
'External_Crypto' library to encrypt the data blocks using AES-CBC-ESSIV. The
used key is a plain passphrase. The following snippet illustrates its
configuration:
! <start name="cbe">
! <resource name="RAM" quantum="4M"/>
! <provides><service name="Block"/></provides>
! <config sync_interval="5" passphrase="All your base are belong to us"/>
! </start>
The _run/cbe.run_ run script in the CBE repository showcases the use of the
CBE server.
Both run scripts will create the initial CBE state in a RAM-backed
block device that is then accessed by the CBE server or the CBE-VFS
plugin.
The run-script and the code itself can be found on the
[https://github.com/cnuke/cbe/tree/cbe_19.11 - cbe/cbe_19.11] branch on
GitHub. If you intend to try it out, you have to checkout
the corresponding
[https://github.com/cnuke/genode/tree/cbe_19.11 - genode/cbe_19.11]
branch in the Genode repository as well.
Future plans
------------
Besides addressing the current shortcomings and getting the CBE library
production-ready so that it can be used in Sculpt, there are still
a few features that are currently unimplemented. For one we would like
to add support for making it possible to resize the VBD as well as the
Free Tree. For now the geometry is fixed at initialization time and cannot
be changed afterwards. Furthermore, we would like to enable re-keying,
i.e., changing the used cryptographic key and re-encrypting the tree
set of the VBD afterwards. In addition to implementing those features, the
overall tooling for the CBE needs to be improved. E.g., there is currently
no proper initialization component. For now, we rely on a component
that was built merely as a test vehicle to generate the initial trees.
Virtualization of 64-bit ARM platforms
######################################
Genode has a long history regarding support of all kinds of
virtualization-related techniques including
[https://genode.org/documentation/release-notes/9.11#Paravirtualized_Linux_on_Genode_OKL4 - para-virtualization],
[https://genode.org/documentation/articles/trustzone - TrustZone],
hardware-assisted virtualization on
[https://genode.org/documentation/articles/arm_virtualization - ARM],
[https://genode.org/documentation/release-notes/13.02#Full_virtualization_on_NOVA_x86 - x86],
up to the full virtualization stack of
[https://genode.org/documentation/release-notes/14.02#VirtualBox_on_top_of_the_NOVA_microhypervisor - VirtualBox].
We regard those techniques as welcome stop-gap solutions for using non-trivial
existing software stacks on top of Genode's clean-slate OS architecture. The
[https://genode.org/documentation/release-notes/19.05#Kernel-agnostic_virtual-machine_monitors - recent]
introduction of a kernel-agnostic interface to control virtual machines (VM)
ushered a new level for the construction respectively porting of
virtual-machine monitors (VMM). By introducing a new ARMv8-compliant VMM
developed from scratch, we continue this line of work.
The new VMM builds upon our existing proof-of-concept (PoC) implementation for
ARMv7 as introduced in release
[https://genode.org/documentation/release-notes/15.02#Virtualization_on_ARM - 15.02].
In contrast to the former PoC implementation, however, it aims to be complete
to a greater extent. Currently, it comprises device models for the following
virtual hardware:
* RAM
* System Bus
* CPU
* Generic Interrupt Controller v2 and v3
* Generic Timer
* PL011 UART (limited)
* Pass-through devices
The VMM is able to load diverse 64-bit Linux kernels including
Device-Tree-Binary (DTB) and Initramfs. Currently, the implementation uses a
fixed memory layout for the guest-physical memory view, which needs to be
reflected by the DTB used by the guest OS. An example device-tree source file
can be found at _repos/os/src/server/vmm/spec/arm_v8/virt.dts_. The actual VMM
is located in the same directory.
Although support for multi-core VMs is already considered internally, it is
not yet finished. Further outstanding features that are already in development
are Virtio device model support for networking and console. As the first - and
by now only - back end, we tied the VMM to the ARMv8 broadened Kernel-agnostic
VM-session interface as implemented by Genode's custom base-hw kernel. As a
side effect of this work, we consolidated the generic VM session interface
slightly. The RPC call to create a new virtual-CPU now returns an identifier
for identification.
The VMM has a strict dependency on ARM's hardware virtualization support
(EL2), which comprises extensions for the ARMv8-A CPU, ARM's generic timer,
and ARM's GIC. This rules out the Raspberry Pi 3 board as a base platform
because it does not include a GIC but a custom interrupt-controller without
hardware-assisted virtualization of interrupts. To give the new VMM a try, we
recommend using the run script _repos/os/run/vmm_arm.run_ as a starting point
for executing the VMM on top of the i.MX8 Evaluation Kit board.
New tooling for bridging existing build systems with Genode
###########################################################
Genode's development tools are powerful and intimidating at the same time.
Being designed from the perspective of a whole-systems developer, they put
emphasis on the modularity of the code base (separating concerns like
different kernels or system abstraction levels), transitive dependency
tracking between libraries, scripting of a wide variety of system-integration
tasks, and the continuous integration of complete Genode-based
operating-system scenarios. Those tools are a two-edged sword though.
On the one hand, the tools are key for the productivity of seasoned Genode
developers once the potential of the tools is fully understood and leveraged.
For example, during the development of Sculpt OS, we are able to
change an arbitrary line of code in any system component and can test-drive
the resulting Sculpt system on real hardware within a couple of seconds.
As another example, the almost seamless switching from one OS kernel to
another has become a daily routine that we just take for granted without
even thinking about it.
On the other hand, the sophistication of the tools stands in the way of
application developers who are focused on a particular component instead
of the holistic Genode system. In this case, the powerful system-integration
features remain unused but the complexity of the tools and the build system
prevails. Speaking of build systems, this topic is ripe of emotions
anyway. _Developers use to hate build systems._ Forcing Genode's build
system down the throats of application developers is probably not the best
idea to make Genode popular.
This line of thoughts prompted us to re-approach the tooling for Genode from
the perspective of an application developer. The intermediate result is a new
tool called Goa:
:Goa project at GitHub:
[https://github.com/nfeske/goa]
Unlike Genode's regular tools, Goa's work flow is project-centered. A project
is a directory that may contain source code, data, instructions how to
download source codes from a 3rd party, descriptions of system scenarios, or
combinations thereof. Goa is independent from Genode's regular build system.
It combines Genode's package management (depot) with commodity build systems
such a CMake. In addition to building and test-driving application software
directly on a Linux-based development system, Goa is able to aid the process
of exporting and packaging the software in the format expected by Genode
systems like Sculpt OS.
At the current stage, Goa should be considered as work in progress. It's a new
approach and its success is anything but proven. That said, if you are
interested in developing or porting application software for Genode, your
feedback would be especially valuable. As a starting point, you may find the
following introductory article helpful:
:Goa - streamlining the development of Genode applications:
[https://genodians.org/nfeske/2019-11-25-goa]
Base framework and OS-level infrastructure
##########################################
File-system session
===================
The file-system session interface received a much anticipated update.
Writing modification times
--------------------------
The new operation WRITE_TIMESTAMP allows a client to update the modification
time of a file-system node. The time is defined by the client to keep
file-system servers free from time-related concerns. The VFS server implements
the operation by forwarding it to the VFS plugin interface. At present, this
new interface is implemented by the rump VFS plugin to store modification
times on EXT2 file systems.
Enhanced file-status info
-------------------------
The status of a file-system node as returned by the 'File_system::Status'
operation has been revisited. First, we replaced the fairly opaque "mode" bits -
which were an ad-hoc attempt to stay compatible with Unix - with the explicit
notion of 'readable', 'writeable', and 'executable' attributes. We completely
dropped the notion of users and groups. Second, we added the distinction
between *continuous* and *transactional* files to allow for the robust
implementation of continuous write operations across component boundaries. A
continuous file can be written-to via a sequence of arbitrarily sized chunks
of data. For such files, a client can split a large write operation into any
number of smaller operations in accordance to the size of the used I/O
buffers. In contrast, a write to a transactional file is regarded as a
distinct operation. The canonical example of a transactional file is a
socket-control pseudo file.
Virtual file-system infrastructure
==================================
First fragments of a front-end API
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The VFS is mostly used indirectly via the C runtime. However, it is also
useful for a few components that use the Genode API directly without any
libc. To accommodate such users of the VFS, we introduced the front-end
API at _os/vfs.h_ that covers a variety of current use cases. Currently, those
use cases revolve around the watching, reading, and parsing of files and
file-system structures - as performed by Sculpt's deployment mechanism.
Writing to files is not covered.
Improved file-watching support
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All pseudo files that use the VFS-internal 'Readonly_value_file_system'
utility have become able to deliver watch notifications. This change enables
VFS clients to respond to VFS-plugin events (think of terminal resize)
dynamically.
Speaking of the *terminal VFS plugin*, the current release enhances the plugin
in several respects. First, it now delivers status information such as the
terminal size via pseudo files. Second, we equipped the VFS terminal file
system with the ability to detect user interrupts in the incoming data stream,
and propagate this information via the new pseudo file '.terminal/interrupts'.
Each time, the user presses control-c in the terminal, the value stored in
this pseudo file is increased. Thereby, a VFS client can watch this file to
get notified about the occurrences of user interrupts.
VFS plugin for emulating POSIX pipes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We added a new VFS plugin for emulating POSIX pipes. The new plugin creates
pipes between pairs of VFS handles. It replaces the deprecated libc_pipe
plugin. In contrast to the libc_pipe plugin, which was limited to pipes within
one component, the new VFS plugin can also be used to establish pipes between
different components by mounting the plugin at a shared VFS server.
C runtime with improved POSIX compatibility
===========================================
Within Genode, we used to think of POSIX as a legacy that is best avoided.
In fact, the foundational components of the framework do not depend on a
C runtime at all. However, higher up the software stack - at the latest when
3rd-party libraries enter the picture - a working C runtime is unavoidable. In
this statement, the term "working" is rather muddy though. Since we have never
fully embraced POSIX, we were content with cutting corners here and there. For
example, given Genode's architecture, supporting 'fork' and 'execve' seemed
totally out of question because those mechanisms would go against the grain of
Genode.
However, our growing aspiration to bridge the gap between existing popular
applications and Genode made us re-evaluate our stance towards POSIX.
All technical criticism aside, POSIX is immensely useful because it is
a universally accepted stable interface. To dissolve friction between
Genode and popular application software, we have to satisfy the application's
expectations. This ignited a series of developments, in particular
the added support for 'fork' and 'execve' - of all things - in
[https://genode.org/documentation/release-notes/19.08#Consolidation_of_the_C_runtime_and_Noux - Genode 19.08],
which was nothing short of surprising, even to us.
The current release continues this line of development and brings the
following improvements.
Execve
------
The libc's 'execve' implementation got enhanced to evaluate the path of the
executable binary according to the information found on the VFS, in particular
by traversing directories and following symbolic links. This enables the libc
to execute files stored at sub directories of the file system.
Furthermore, 'execve' received handling for *executing shell scripts* by
parsing the shebang marker at the beginning of the executable file. This way,
the 'execve' mechanism of the libc reaches parity with the feature set of the
Noux runtime that we traditionally used to host Unix software on top of
Genode.
Modification-time handling
--------------------------
By default, the libc uses the just added facility for updating the timestamp
of file-system nodes when closing a written-to file, which clears the path
towards using tools like 'make' that rely on file-modifications times.
The libc's mechanism can be explicitly disabled by specifying
! <libc update_mtime="no"...>
This is useful for applications that have no legitimate access to a time
source.
Emulation of 'ioctl' operations via pseudo files
------------------------------------------------
With the current release, we introduce a new scheme of handling ioctl
operations, which maps 'ioctl' calls to pseudo-file accesses, similar to how
the libc already maps socket calls to socket-fs operations.
A device file can be accompanied with a (hidden) directory that is named after
the device file and hosts pseudo files for triggering the various device
operations. For example, for accessing a terminal, the directory structure
looks like this:
! /dev/terminal
! /dev/.terminal/info
! /dev/.terminal/rows
! /dev/.terminal/columns
! /dev/.terminal/interrupts
The 'info' file contains device information in XML format. The type of the XML
node corresponds to the device type. Whenever the libc receives a TIOCGWINSZ
ioctl for _/dev/terminal_, it reads the content of _/dev/.terminal/info_ to
obtain the terminal-size information. In this case, the _info_ file looks as
follows:
! <terminal rows="25" columns="80/>
Following this scheme, VFS plugins can support ioctl operations by providing
an ioctl directory in addition to the actual device file.
Emulation of POSIX signals
--------------------------
Even though there is no notion of POSIX signals at the Genode level, we
can reasonably emulate certain POSIX signals at the libc level. The current
release introduces the first bunch of such emulated signals:
:SIGWINCH: If 'stdout' is connected to a terminal, the libc watches the
terminal's ioctl pseudo file _.terminal/info_. Whenever the terminal
size changes, the POSIX signal SIGWINCH is delivered to the application.
With this improvement, Vim becomes able to dynamically adjust itself
to changed window dimensions when started as a native Genode component
(w/o the Noux runtime environment).
:SIGINT: If 'stdin' is connected to a terminal, the libc watches the
terminal's pseudo file _.terminal/interrupts_. Since, the terminal VFS
plugin modifies the file for each occurred user interrupt (control-c),
the libc is able to reflect such an event as SIGINT signal to the
application.
:Process-local signal delivery: The libc's implementation of 'kill' got
enhanced with the ability to submit signals to the local process.
Support for arbitrarily large write operations
----------------------------------------------
The number of bytes written by a single 'write' call used to be constrained by
the file's underlying I/O buffer size. Even though our libc correctly returned
this information to the application, we found that real-world applications
rarely check the return value of 'write' because partial writes do usually not
occur on popular POSIX systems. Thanks to the added distinction between
continuous and transactional files as described in Section
[File-system session], we became able to improve the libc's write operation to
iterate on partial writes to continuous files until the original write count
is reached. The split of large write operations into small partial writes as
dictated by the VFS infrastructure becomes invisible to the libc-using
application.
Input-event handling
====================
In Genode 19.08, we undertook a comprehensive rework of our keyboard-event
handling in the light of localization and also promised to tie up remaining
loose ends soon.
First, we again dived into our character generators for a thorough check of
our stack of keyboards and fixed remaining inconsistencies in French and
German layouts. En passant, we also increased the default RAM quotas for
the input filter to 1280K in our recipes to cope with the increased
layout-configuration sizes in corner cases.
Next - and more importantly - we subdued the monsters lurking in our Qt5
keyboard back end and enabled transparent support for system-wide keyboard
layout configuration for Qt5 components. One important change during this work
was to move the handling of control key sequences into the clients. For
example, the graphical terminal and Qt5 interpret key events in combination
with the CTRL modifier based on characters and, thus, support CTRL-A with
AZERTY and QWERTY layouts correctly. As a result we removed all CTRL modifier
(mod2) configurations from our character-generator configurations.
Finally we'd like to point out one important change of our rework that
repeatedly led to surprises: For keys without character mappings the reworked
character-generator mechanism emits invalid codepoints in contrast to
codepoints with value 0. For that reason, components interpreting character
events should check 'Codepoint::valid()' to prevent the processing of invalid
characters (and not the frequent pattern of 'codepoint.value != 0').
NIC router
==========
The NIC router has received the ability to report the link state of its NIC
interfaces (downlinks and uplinks). To control this mechanism, there are two
new boolean attributes 'link_state' and 'link_state_triggers' in the <report>
tag of the NIC router configuration. If the former is set to "true", the report
will contain the current link state for each interface:
! <domain name="domain1">
! <interface label="uplink1" link_state="false"/>
! <interface label="downlink1" link_state="true"/>
! </domain>
! <domain name="domain2">
! <interface label="downlink2" link_state="true"/>
! </domain>
The second attribute decides whether to trigger a report update each time the
link state of an interface changes. By default, both attributes are set to
"false".
Device drivers
==============
Platform driver on x86
~~~~~~~~~~~~~~~~~~~~~~
During our enablement of Genode on a
[https://genodians.org/chelmuth/2019-10-21-sculpt-elitebook - recent notebook],
we spotted some PC platform shortcomings, we address with this release. Most
prominently we added support for
[https://en.wikipedia.org/wiki/PCI_configuration_space#Bus_enumeration - 64-bit PCI base address registers]
to the x86 platform driver. This allows the use of PCI devices that are
assigned to physical I/O-memory regions beyond 4 GiB by the boot firmware.
Wireless driver
~~~~~~~~~~~~~~~
We added the firmware images for the 5000 and 9000 series of Intel wireless
devices to the firmware white-list in the _wifi_drv_ component. Such devices
as 5100AGN, 5300AGN and 5350AGN as well as 9461, 9462 and 9560 should now be
usable on Genode.
Libraries and applications
##########################
VirtualBox improvements
=======================
The GUI handling of our VirtualBox port got improved to react on window-size
changes more instantly. The effect is that an interactive adjustment of the
window size, e.g., on Sculpt, becomes quickly visible to the user. Still, the
VM may take some time to adjust to the resolution change, which ultimately
depends on the behavior of the driver of the VirtualBox guest additions.
Updated 3rd-party software
==========================
With the addition of the 64-bit ARM architecture (AARCH64) with the
[https://genode.org/documentation/release-notes/19.05#Broadened_CPU_architecture_support_and_updated_tool_chain - 19.05]
release, it became necessary to update the libraries the Genode tool chain
(gcc) depends on in order to support AARCH64 properly. This concerns the GNU
multi precision arithmetic library (gmp), which has been updated from version
4.3.2 to 6.1.2, as well as the libraries that depend on it: Multi precision
floating point (mpfr) and multi precision complex arithmetic (mpc). All those
old versions did not offer support for the AARCH64 architecture, which is a
requirement to make Genode self hosting. Targets for building binutils and GCC
within Genode for AARCH64 are in place, GNU make is in place, and even code
coverage (gcov) has been added. This work puts AARCH64 in line with other
supported CPU architectures and emphasizes our interest in the ARM 64-bit
architecture.
Platforms
#########
Execution on bare hardware (base-hw)
====================================
With the previous release, Genode's base-hw kernel got extended to support the
ARMv8-A architecture in principle. The first hardware supported was the
Raspberry Pi 3 as well as the i.MX8 evaluation kit (EVK). But only a single
CPU-core was usable at that time. Now, we lifted this limitation. On both
boards, all four CPU-cores are available henceforth.
Removed components
##################
The current release removes the following components:
:gems/src/app/launcher:
The graphical launcher remained unused for a few years now. It is not
suitable for systems as flexible as Sculpt OS.
:os/src/app/cli_monitor:
CLI monitor was a runtime environment with a custom command-line interface
to start and stop subsystems. It was part of the user interface of our
first take on a Genode-based desktop OS called
[https://genode.org/documentation/release-notes/15.11#Genode_as_desktop_OS - Turmvilla].
Nowadays, we use standard command-line tools like Vim to edit init
configurations dynamically, which is more flexible and - at the same time -
alleviates the need for a custom CLI. The CLI-monitor component was too
limited for use cases like Sculpt anyway.
Along with the CLI monitor, we removed the ancient (and untested for long
time) _terminal_mux.run_ script, which was the only remaining user of the CLI
monitor.
:fatfs_fs, rump_fs, and libc_fatfs plugin:
The stand-alone file-system servers fatfs_fs and rump_fs as well as the
fatfs libc plugin have been superseded by the fatfs and rump VFS plugins.
The stand-alone servers can be replaced by using the VFS server plus the
corresponding VFS plugin as a drop-in replacement.

814
doc/release_notes-20-02.txt Normal file
View File

@@ -0,0 +1,814 @@
===============================================
Release notes for the Genode OS Framework 20.02
===============================================
Genode Labs
This year's [https://genode.org/about/road-map - road map] is all about making
Genode and Sculpt OS more approachable. It turns out that the first release of
the year already pays tribute to that goal. First, it equips Sculpt OS with a
much more logical and welcoming graphical user interface
(Section [Redesign of the administrative user interface of Sculpt OS]).
Second, it greatly reduces the friction when hosting existing applications on
Genode by smoothening several rough edges with respect to POSIX compatibility,
and by generally improving performance.
Most topics of the release are closely related to Sculpt. The biggest
break-though is certainly the ability of running Sculpt OS on 64-bit ARM
hardware (Section [Sculpt OS on 64-bit ARM i.MX8 hardware]) along with our
custom virtual machine monitor (VMM). On PC hardware, Sculpt users can enjoy
an updated audio driver and optimizations of the Seoul VMM. Furthermore,
Sculpt's window manager received the much anticipated ability to use virtual
desktops.
At the framework-API level, the most significant changes are the introduction
of dedicated types for inter-thread synchronization patterns
(Section [Base-framework refinements]) and a new library for
bringing the benefits of the Genode architecture to the application level
(Section [New sandbox library based on the init component]).
Redesign of the administrative user interface of Sculpt OS
##########################################################
On our [https://genode.org/about/road-map - road map] for 2020, we stated
the reducing of the barrier of entry as our main concern of the year.
We highlighted the ease of use of Sculpt OS as one particular work area.
Removing Unix from the picture
------------------------------
Until now, Sculpt's administrative user interface - lyrically called
Leitzentrale - employed a small Unix runtime and the Vim editor as utility for
basic file operations and for the tweaking of configurations. Even though this
was a practical intermediate solution, we have to face the fact that not
everyone loves the Unix command-line interface as much as we do. Quite the
opposite, actually. When presenting Sculpt, we can clearly sense that people
with a non-Unix background are put off by it. The audience generally loves the
runtime graph, visual cues, and discoverability. Furthermore, command-line
interfaces are (albeit wrongly) perceived as archaic and impenetrable relics
by many computer users who are otherwise perfectly happy with the notion of
files and directories. We identified that file-manipulation tasks performed in
the Leitzentrale are rare and simple. Relying on Unix for those basic tasks is
like taking a sledgehammer to crack a nut. On average, the Leitzentrale is
used in just a few moments a day for basic things like browsing a file-system
hierarchy, glimpsing at the reports stored on the report file system, deleting
or copying a file or two, or tweaking a configuration file. With a Unix shell
presenting one barrier, Vim is certainly an even higher one. Familiarity with
Vim should definitely not be a prerequisite for using an operating system.
Following this reasoning, we decided to swap out the command-line interface
and Vim by a simple GUI-based file browser and a notepad-like editor, which do
not require any learning curve.
Note that even once the Unix command-line interface is removed from Sculpt's
Leitzentrale, advanced users will still be able to manipulate Sculpt's config
file system via a Unix runtime deployed as a regular component, similar to the
use of the noux-system package we have today.
New user-interface layout
-------------------------
The move away from the command-line interface goes hand in hand with the
redesign of the overall user-interface layout. A new panel at the top of the
screen contains two centered tabs for switching between the runtime graph and
the file-system browser.
[image sculpt_20.02_panel]
The storage-management functionality has been moved from the former storage
dialog into the respective nodes of the runtime graph. E.g., to format a block
device, the user can now select a USB or storage node of the graph to get a
menu of block-device-level operations.
[image sculpt_20.02_storage]
The network-management is now located at a drop-down menu that can be toggled
via a button at the right side of the panel.
[image sculpt_20.02_network]
A new button on the left side of the panel allows the user to toggle a
drop-down menu for GUI settings. At the current time, there is only the option
to adjust the font size. In the future, the dialog will give easy access to
the screen-resolution options and the keyboard layout.
The log-message view is now hidden in another drop-down menu that can be
toggled via a panel button. So when starting the system, the user is greeted
with only the runtime graph, which is a much nicer and cleaner looking
experience.
Informative or diagnostic messages are displayed in the left-bottom corner of
the screen.
[image sculpt_20.02_message]
The "Files" tab of the panel switches the main screen area to a simple file
browser that lists all file systems available. By toggling one of the
file-system buttons, the directory hierarchy can be browsed. When hovering
a file, an "Edit" or "View" button appears, which can be used to open
the file in a text area that appears on the right side of the file browser.
The editor supports the usual notepad-like motions, operations, and
shortcuts (control-c for copy, control-v for paste, control-s for save).
[image sculpt_20.02_editor]
Half-way there
--------------
With the current release, one can already accomplish a lot without having to
resort to a command-line interface: connecting to the network, managing
storage devices, installing and deploying software, inspecting the system
state, and tweaking configurations.
There are still a few gaps though. In particular the file browser does
not yet support file operations like the copying, renaming, or removal of
files. For these tasks, the current version of Sculpt still features the
Unix-based inspect window, which can be accessed by toggling the "Inspect"
button inside the USB or storage dialog. Once selected, the panel presents an
"Inspect" tab that features the familiar Unix shell and Vim. Note, however,
that we keep the inspect window only as an interim solution. It will
eventually be removed. As with every new feature, there are still rough edges
to be expected in the editor and file browser, e.g., the editing of files with
long lines or the browsing of directories with many entries is not
appropriately covered yet.
To see the current new version of Sculpt OS in action, you may find the
following presentation entertaining.
:Live demonstration of Sculpt OS at FOSDEM 2020:
[https://fosdem.org/2020/schedule/event/uk_sculpt/]
The new version 20.02 of Sculpt OS is part of this release and can be built
from source and used right now. Several Genode developers already provide
ready-to-use packages for the new version. The software depots by alex-ab,
cnuke, skalk are worth exploring. A downloadable system image along with an
updated manual will be released shortly.
Sculpt OS on 64-bit ARM i.MX8 hardware
######################################
Within the past two releases, big steps were taken to support ARMv8 hardware in
the Genode OS framework. After implementing basic support for Raspberry Pi 3,
and the i.MX 8M Evaluation Kit, the network card was enabled for the latter.
Moreover, we updated the Linux TCP/IP, and C library ports, as well as
the Noux environment to support the architecture. Finally, with the latest
releases, a new ARMv8-compliant virtual-machine monitor for the base-hw kernel
entered the framework.
The rapid achievements motivated us to strive for a more ambitious scenario to
run on top of the currently focused ARMv8 hardware platform. So why not using
Sculpt OS on the i.MX 8M System-on-Chip?
Persistent storage
==================
There were several challenges to cope with initially. First, persistent
storage was needed. Luckily, the Genode OS framework contained already an
SD-card driver implementation for the i.MX series. The driver was written for
Genode from scratch and initially supported the i.MX53 SoC only. From then, it
got extended repeatedly to drive the SD-card controller of several i.MX6 and
i.MX7 platforms. Therefore, it was not a big issue to support the new hardware
too. However, when we later used it in Sculpt, it turned out that the driver
has some low-latency requirements. If those were not met, it got stuck. This
was the time where the CPU-quota mechanism came in handy in a real-world
scenario. It helped to let the interrupt handler of the driver be scheduled in
time, and thereby let the driver run stable.
Having a working block device is one part, but it is of little use without a
file system. In Sculpt OS, the NetBSD rump kernel's ext2 file-system is
typically used to host the depot package system and for keeping configuration
files persistent. Unfortunately, the version of NetBSD as used in Genode's
rump kernel port does not contain the ARMv8 architecture. Of course, we could
have upgraded the rump kernel as a whole. But this software stack is quite
complex with a lot of threads reproducing a sophisticated state machine. It
took some time in the past to meet its required semantics. Therefore,
backporting some header definitions and a few architecture-dependent functions
seemed more attractive. Luckily, it turned out to be the right decision, and
after a day of backporting work, the file system could run on ARMv8.
Display engine
==============
One of the more challenging tasks was certainly the enabling of the Display
Controller Subsystem (DCSS) of the i.MX 8M SoC. Originally, we hoped to profit
from our experiences with the Image Processing Unit (IPU), the display engine
of former i.MX SoCs. But as it turned out, the DCSS is a completely new
design, and has not much in common with the IPU. When first writing a driver
for the IPU of the i.MX53, we were surprised by the complexity and flexibility
of this piece of hardware. Back then, it took months to get something
meaningful working. To not lose too much time by re-implementing a driver from
scratch, we decided to take the DDE Linux approach, which worked out pretty
fast. The resulting driver should provide the same flexibility like the Linux
original one. However, as the i.MX 8M EVK board provides a HDMI connector
only, we did not test more than that. The configuration of the driver is
analogous to the Intel framebuffer driver, and looks like the following:
! <config>
! <connector name="HDMI-A-1" width="1920" height="1080" hz="60" enabled="true"/>
! </config>
Later, when using the driver in practice within the Sculpt OS, we could
experience a slightly sluggish behaviour, which was due to a missing
architectural back end of the blitting library of Genode. After tweaking this
too, the graphical user interface experience was good.
USB and Input
=============
The last missing I/O device to run Sculpt OS on the ARMv8 was something for
user generated input. Therefore, the existent USB host controller driver for
the i.MX series got updated. The only roadblock here was the powering of the
device. As there is no platform driver for the target hardware yet, which
would manage power and clocks, the hardware either has to be pre-configured
correctly, or the driver has to enable it on its own. Ethernet card, SD-card,
and the display engine were all already powered by the bootloader, but not
USB. In contrast to the first devices, the u-boot bootloader turns off USB
explicitly as soon as it starts the OS. As an interim solution, we patched
u-boot to not turn off the USB host controller, and enforced u-boot to
initialize the powering in our boot scripts. Therefore, if one wants to use
USB on the i.MX 8M EVK, make sure to take our modified version. As a
convenient solution, you can use the 'uboot' port within the base repository.
Just issue the following command in the Genode directory:
! tool/ports/prepare_port uboot
Finally, you have to copy u-boot to the SD-card as root user:
! dd if=`tool/ports/current uboot`/imx8q_evk/imx-mkimage/iMX8M/flash.bin \
! of=/dev/sd<?> bs=1k seek=33 conv=fsync
Of course, you have to replace 'sd<?>' with the correct device node of your
attached SD-card.
After enabling the USB host controller driver, we could successfully re-use the
USB HID client driver to drive keyboard and mouse connected to the board. As a
nice side-effect, the list of possible storage devices got extended with USB
mass storage too by adding the USB block client driver.
Missing libraries
=================
Finally, when building the necessary and optional packages for Sculpt OS, we
stumbled across several libraries that needed to be adapted to compile and
link for ARMv8 too. Mostly, the inclusion of some other compilation units and
headers was sufficient. The related libraries are: libssl, libcrypto, libpng,
and Mesa. With the latter two, it is now even possible to execute Qt5
components on the target hardware.
Apart from all the new driver components and extended libraries, the Sculpt
manager had to be slightly modified to execute on the i.MX 8M hardware. In its
original form it is inherently dependent on x86 drivers, as it for example
generates configurations for some of those drivers. For the time being, the
changes to the Sculpt manager are not yet part of the official release.
Nevertheless, you can produce a Sculpt OS image to be run on an i.MX 8M EVK
board by using the following
[https://github.com/skalk/sculpt_20.02_imx8q_evk/ - topic branch].
Alternatively, you can also have a look at Sculpt OS on ARMv8 hardware by
following the video recordings of the following talk at FOSDEM 2020.
:Live demonstration of Sculpt OS on i.MX 8M EVK at FOSDEM 2020:
[https://fosdem.org/2020/schedule/event/uk_genode_armv8/]
Base framework and OS-level infrastructure
##########################################
New sandbox library based on the init component
===============================================
The init component is Genode's canonical mechanism for the composition of
components. This role was further amplified when init became
[https://genode.org/documentation/release-notes/17.02#Dynamically_reconfigurable_init_component - dynamically reconfigurable].
The latter change cleared the ground for system scenarios like Sculpt OS, the
on-target deployment of packages, and dynamic device discovery. One typical
pattern found in such scenarios is one dynamically configured instance of init
accompanied by a controlling component that is usually called "manager". The
manager would consume reports of the subsystem hosted within the dynamic init,
and adjust the init configuration according to a domain-specific policy. Such
a configuration change, in turn, may trigger new reports, which effectively
turns this setting into a feedback control loop.
Whereas this established pattern is suitable for many scenarios, it is not
always natural. In particular if the manager does not only need to
manage a subsystem but also wants to intercept a service used by the
subsystem, the roles are no longer clear-cut. A practical example is a
GUI application that employs the menu-view component for the GUI rendering
while processing keyboard events locally. This application would need to
intercept the menu-view's GUI session to obtain the stream of user input
events. For such an application, the most natural approach would be the
co-location of the init functionality with the application logic into a
single all-encompassing component.
To accommodate such scenarios where a domain-specific management component is
tightly coupled with a dynamic subsystem, we extracted the child-management
functionality from the init component into a new library called "sandbox". The
library API is located at
[https://github.com/genodelabs/genode/blob/master/repos/os/include/os/sandbox.h - os/include/os/sandbox.h].
In addition to the hosting of components, the sandbox API also allows for the
interaction with the sandboxed children by providing locally implemented
services. The latter mechanism is illustrated by a new test available at
_os/src/test/sandbox_.
POSIX compatibility improvements
================================
During the release cycle of Genode 20.02, we continued our mission to host
POSIX software effortlessly as Genode components. In particular, we followed
up the line of work pursued with the two previous releases
[https://genode.org/documentation/release-notes/19.08#Consolidation_of_the_C_runtime_and_Noux - 19.08] and
[https://genode.org/documentation/release-notes/19.11#C_runtime_with_improved_POSIX_compatibility - 19.11]
with respect to the traditional Unix mechanisms fork, execve, and pipes.
After covering several edge cases - cloexec, file-descriptor lifetimes,
line-buffer handling, vfork, just to name a few - as needed by programs like
make, bash, and tclsh, we eventually reached a state where the website
generator of [https://genodians.org] works without the need for the now
deprecated Noux runtime.
For years we have been running complex software stacks like the Qt-based web
browser on top of our C runtime but not without carefully placed tweaks and
occasional patches. With the current release, we address the area of
concurrency and introduce a thorough reimplementation of the synchronization
primitives namely POSIX mutexes and condition variables as well as semaphores.
We also reaped the fruit of our labor by replacing our custom Qt thread back
end by the standard POSIX-thread based implementation. Further, we reduced the
number of threads in Qt applications by moving the QPA event handling to the
component entrypoint and removing the timed-semaphore utility from LibC.
Beyond Qt, we also address synchronization issues revealed by running a
third-party port of [https://grpc.io/ - gRPC] in our network back ends and
amended thread-local errno in the C runtime. Finally, our POSIX thread
implementation supports cleanup handlers now.
Base-framework refinements
==========================
Replacing the 'Lock' type by new 'Mutex' and 'Blockade' types
-------------------------------------------------------------
Up to now, Genode's lock implementation supports mainly two flavours of usage.
On the one hand, it is used to protect critical sections where the lock is
initialized as unlocked. In the contention case, the lock holder is supposed
to release the critical section. On the other hand, the lock is used as
blockade to synchronize startup between various executions of threads. Here
the lock is initialized as locked during instantiation whereby the thread that
releases the lock is not necessarily the same thread as the creator of the
lock.
We decided to make the two usage patterns more obvious by introducing two
separate classes, called 'Mutex' and 'Blockade'. The reasons are twofold.
First, during code review, the usage pattern at hand becomes more obvious.
Second, by codifying the programmer's intent behind the use of a
synchronization primitive, Genode becomes able to perform additional checks,
and diagnose certain dead-lock situations and other usage errors on the spot.
The separation got introduced shortly before this release. Up to now, it is
only used in 'Genode::Thread', 'Genode::Heap', and 'Genode::Registry'. The
plan is to cultivate the usage across all Genode sources over the next
releases and to ultimately remove the 'Genode::Lock' from the public API.
The 'Mutex' class is more restrictive compared to the 'Lock' class.
* At initialization time, it is always unlocked.
* To enter and leave a critical section the methods 'acquire()' and
'release()' are used.
* A 'Mutex::Guard' is provided, which will 'acquire()' a mutex at
construction time and release it automatically at destruction time of
the guard.
* No thread is permitted to lock twice. The code will generate a warning if
a dead-lock is detected.
* Only the lock holder is permitted to release the mutex. The code will
generate a warning and will not release the mutex if this rule is violated.
! Genode::Mutex mutex;
! mutex.acquire();
! mutex.release();
!
! {
! Genode::Mutex::Guard guard(mutex) /* acquire() during construction */
! } /* release() on guard object destruction */
!
! Genode::Mutex::Guard guard(mutex);
! mutex.acquire(); /* <-- Will cause a warning about the dead-lock */
The 'Blockade' class is always initialized as locked and provides the methods
'block()' and 'wakeup()'. Beside the initialization aspect, the 'Blockade'
behaves up to now like the 'Genode::Lock' implementation.
! Genode::Blockade blockade;
!
! /* step */ /* thread A */ /* thread B */
! 0: -start thread B-
! 1: ... -startup-
! 2: blockade.block(); ...
! 3: -sleep- ...
! 4: -sleep- blockade.wakeup();
! 5: ... ...
Performance optimization of the XML parser
------------------------------------------
Genode's XML parser used to rely on C++ exceptions while parsing, which is an
almost historic artifact inherited from the initial implementation. The
performance penalties of exceptions in the rare use of XML was acceptable
back when we started. But modern Genode systems like Sculpt OS rely on the
dynamic processing of XML like a back bone. The overhead became particularly
apparent when executing [Sculpt OS on 64-bit ARM i.MX8 hardware]. Prompted by
this observation, we reworked the code such that exceptions are no longer
thrown in any hot code path. The public interface of 'Xml_node' remains
unchanged.
New polling variant for register framework
------------------------------------------
Genode's register framework has offered a 'wait_for' method for a long time.
This function sleeps for a certain amount of microseconds and checks if one or
more given conditions become true. The number of attempts to sleep and check
the conditions must also be specified. In case the conditions are not met
after these attempts, a polling timeout exception is thrown. The function
simply returns in case of success. With the current Genode release, we have
added a 'wait_for_any' method with almost the same semantics but instead of
waiting for all conditions to become true, it returns if any condition is
met, and thus, implements a logical OR.
Migration to modern block-device API
====================================
With release 19.02, Genode introduced two new APIs for block-session handling.
The client side of a block session now uses the job API in order to send block
requests to the server, which in turn receives those jobs as requests through
the Request API. These two APIs replace Genode's 'Block::Driver' and
'Block::Session_component' implementations that used the packet stream API
directly, which turned out to be error prone for block session implementations.
Instead, these new APIs wrap the packet stream handling in a controlled
manner while handling all corner cases and even the overcommit of packets.
With the current release, we have adapted Genode's AHCI driver and partition
manager to these new interfaces, with the plan to adjust all block session
clients/servers to the new APIs with Genode release 20.05.
During this line of work, the AHCI driver received a major cleanup. For
example, dynamic memory allocations were removed, the whole initialization
state machine has been removed, ATAPI support for Qemu has been re-enabled,
and Exynos5 AHCI support is gone - since the platform is outdated and not
supported by Genode any more.
Updated audio driver based on OpenBSD 6.6
=========================================
In this release, we updated the 3rd-party sources of the audio driver component
to OpenBSD 6.6 and adapted the emulation glue code. While doing so, we fixed
a bug regarding the 'delay()' implementation where the function expects
microseconds but was given milliseconds. This led to a increased start-up
time of the component. We also fixed the logging back end that accidentally
was rendered silent and brought in the 'printf' back end from DDE Linux to
be able to produce better formatted LOG messages in the future.
Until now the component only supported HDA and EAP (ES1370 PCI) devices. The
first is primarily intended to be used with real hardware whereas the latter
was used during the initial porting effort in Qemu. That being said, the EAP
driver apparently also works on hardware according to community feedback.
Since the HDA driver does not work when used in VirtualBox and users expressed
the desire to also use audio when running in a VM, we enabled another driver,
for which a device-model in VirtualBox exists: the AC97 ICH. As it turned out,
using this driver, we can produce audio, albeit the quality is far from
usable. Nevertheless, with the driver enabled, interested parties are free to
investigate the cause for the current issues.
All in all, this update is solely a catch up effort to stay more
up-to-date with the upstream changes and to pull in HDA quirks for more
recent systems. More interesting changes to the driver component, like
reworking the OpenBSD kernel emulation layer and bringing support for USB
audio devices, are scheduled for future releases.
Support for unlabeled LOG output
================================
In situations where a Genode system is remotely controlled and monitored,
it is useful to allow a special component to produce log output with no
Genode label applied. This way, such a component can produce log data in
a format that is immediately suitable for a controller. This feature can be
enabled for a component by rewriting the label of the component's LOG session
to "unlabeled".
! <route>
! <service name="LOG"> <parent label="unlabeled"/> </service>
! ...
! </route>
Libraries and applications
##########################
Custom virtual machine monitor on ARM
=====================================
The ARMv8-compliant virtual-machine monitor introduced in the previous release
19.11 now contains new device models to enable the interaction with a
virtual-machine via network and terminal services. The new virtual ethernet
card and console implementations are compliant to the virtualization standard
VIRTIO 1.1.
Currently, the VMM cannot be configured to contain specific devices. It is
hard-wired to provide exactly:
* One virtual ethernet card that connects to Genode's "Nic" service,
* A VIRTIO console that opens up a session to the "Terminal" service using the
label "console", and
* The traditional PL011 serial device model, which connects to a
"Terminal" service too but uses the label "earlycon"
Seoul VMM
=========
During the usage of Seoul on Sculpt, it became apparent that the Seoul VMM
caused a constant CPU load even when the guest VM was idling. After some
investigation it became clear that having a fixed rate to synchronize the
guest graphic memory with the Genode GUI service was the main reason for the
constant load. With this release, we added the feature to dynamically adjust
the GUI refresh rate depending on the rate of user interactivity.
Additionally, if all virtual CPUs go to idle state, the GUI refresh is stopped
completely. With these measures, the overall CPU load could be reduced
noticeably.
TCP terminal
============
The TCP terminal is a long-living component in the Genode OS framework since
release 11.11. It can be used, e.g., to connect to a headless Genode system
via telnet. Until now, it always listened to incoming network connections at
configured ports. The port had to be configured for each terminal session
client.
The TCP terminal got extended to either listen to incoming network
connections, or to directly connect to another network server, dependent on
the policy defined for the corresponding terminal client. The following
example configuration illustrates the differences:
! <config>
! <policy label="client" ip="10.0.0.5" port="1234"/>
! <policy label="another_client" port="4567"/>
! </config>
If only a port is described in the policy, the TCP terminal will listen on
that port for incoming connections. If an IP address is provided additionally,
it connects to the IP address using the given port.
Virtual desktops
================
Genode's GUI stack enables a high degree of flexibility. Beside the fundamental
nitpicker component, responsible for basically multiplexing input events and
framebuffer content, there is the window-manager component, and example
implementations of a window-layouter, and decorator. The interplay of the
latter three allows a window management that scales from simple to rich and
sophisticated without lowering its security properties. For a brief description
of its architecture, please refer to the release notes of
[http://genode.org/documentation/release-notes/14.08 - 14.08].
In this architecture, the window layouter is responsible for the arrangement
of the different windows. It exports a data model of the window layout.
Although, the example implementation of the window layouter introduced in
14.08 was simple, it already contained a notion of having different virtual
screens and screen sections, beside the actual window placements. However,
until now there was no use-case of switching dynamically between different
virtual screens respectively window sets related to them.
While using more and more different graphical components within Sculpt, the
window layouter in its initial form hit a limit. Although it already allowed to
switch in-between different windows via configured key-combinations, it became
inconvenient when having more than a handful windows hiding each other.
Therefore, the window layouter now got extended to allow switching dynamically
in between several pre-defined virtual screens. For the time being, one has to
assign a new window to a screen in the rule-set of the window layouter
initially by hand. Defining the currently visible screen can either be done by
editing the rule-set, or by using pre-configured key-combinations.
The new default configuration of the window layouter as exported by its
corresponding depot package looks like the following:
! <config rules="rom">
! <rules>
! <screen name="screen_1"/>
! <screen name="screen_2"/>
! <screen name="screen_3"/>
! <screen name="screen_4"/>
! <screen name="screen_5"/>
! <screen name="screen_6"/>
! <screen name="screen_7"/>
! <screen name="screen_8"/>
! <screen name="screen_9"/>
! <screen name="screen_0"/>
! <assign label_prefix="" target="screen_1" xpos="any" ypos="any"/>
! </rules>
!
! <press key="KEY_SCREEN">
! <press key="KEY_ENTER" action="toggle_fullscreen"/>
! <press key="KEY_1" action="screen" target="screen_1"/>
! <press key="KEY_2" action="screen" target="screen_2"/>
! <press key="KEY_3" action="screen" target="screen_3"/>
! <press key="KEY_4" action="screen" target="screen_4"/>
! <press key="KEY_5" action="screen" target="screen_5"/>
! <press key="KEY_6" action="screen" target="screen_6"/>
! <press key="KEY_7" action="screen" target="screen_7"/>
! <press key="KEY_8" action="screen" target="screen_8"/>
! <press key="KEY_9" action="screen" target="screen_9"/>
! <press key="KEY_0" action="screen" target="screen_0"/>
! ...
As can be seen, individual keys are assigned to switch to a specific virtual
screen. By default ten screens are defined that are accessible via the number
keys. The first screen definition in the rules configuration marks the
currently visible screen.
Menu-view widget renderer
=========================
The line of work described in Section
[Redesign of the administrative user interface of Sculpt OS] called for
the enhancement of Genode's GUI-rendering component. This component - named
menu view - was
[https://genode.org/documentation/release-notes/14.11#New_menu_view_application - originally introduced in Genode 14.11]
for the rendering of the relatively simple menus of an application launcher.
Its software design largely deviates from the beaten track of established
widget toolkits, which come in the form of client-side libraries. The
menu view is not a complete toolkit but solely a dialog renderer sandboxed
in a dedicated component. This design reinforces the strict separation of the
view from the application logic, fosters screen-resolution independence, and -
most importantly - keeps the complexity of pixel processing out of the
application program. Because of the latter, it lends itself to the
implementation of security-sensitive interactive applications.
It would certainly be misguiding to tout our menu-view as feature competitive
with existing toolkits. We certainly won't recommend using it over Qt in
general. But Sculpt's custom administrative user interface "Leitzentrale"
presented us with the perfect playground to explore and grow the potential of
our novel approach.
In contrast to the previous iteration of the Leitzentrale GUI, which relied on
a small Unix runtime and Vim for editing text files, the new version ought to
feature a simple text editor integrated in the GUI. A text editor requires
a much tighter interplay between the view and the actual program logic
compared to an application with just a bunch of buttons. Think about cursor
handling, scrolling text, displaying textual selections, or placing a text
cursor with the mouse. On the course of the work towards the text-area
component featured in the new Leitzentrale, the menu view received the
following improvements:
:Text-cursor support:
The label widget gained the ability to display one or multiple text cursors,
as illustrated by the following example:
! <label text="...">
! <cursor at="10"/>
! </label>
For the display of multiple cursors, each cursor must feature a distinctive
'name' attribute.
:Character position featured in the hover report:
The hovering information provided by the menu view used to be at the
granularity of widgets, which is insufficient for placing a text cursor with
the mouse. Hence, the information of a hovered label additionally provides
the character position within the label now.
:Unquoting label text attribute values:
The text displayed in label widgets is provided by a 'text' attribute value,
which raises the question of how to present '"' characters on the GUI. With
the new version, the attribute value can contain XML-quoted characters,
specifically "&quot;".
:Support for displaying text selections:
Similarly to the way of how a <cursor> can be defined for a <label>
widget, a selection can now be expressed as follows:
! <label ...>
! <selection at="2" length="12"/>
! </label>
:Support of multiple '<float>' widgets within a '<frame>':
We refined the hover reporting of <float> widgets such that a float widget
never responds to hovering unless a child is hovered. This way, it becomes
possible to stack multiple float widgets within one frame and still reach
all child widgets. This is useful for aligning multiple widgets within one
screen area independently from each other. For example, for left-aligning,
centering, and right-aligning the elements of a panel.
:Enforcing the minimum size of a label:
The new '<label min_ex="..">' attribute can be used to enforce a minimum
width in the unit of the size of the character 'x'. In the absence of a
'text' attribute, the minimum height of a label is implicitly set to 0. The
combination of both changes makes the label usable as a horizontal spacer.
:Basic support for styling labels:
The new version allows for the customization of the text color and alpha
value of the label widget by the means of a style-definition file. The
mechanism is exemplified with the new "invisible" label style that sets the
alpha value to zero.
With these few incremental changes in place, the menu-view widget renderer
becomes usable as the basis of the simple text editor used in Sculpt's new user
interface.
Self-hosting the tool chain on 64-bit ARM
=========================================
With our ongoing ARM 64-bit effort, we have successfully updated Genode's tool
chain with release
[https://genode.org/documentation/release-notes/19.05#Broadened_CPU_architecture_support_and_updated_tool_chain - 19.05].
With the current release, we have additionally managed to make Genode's tool
chain self hosting on ARM 64-bit, which means the tool chain can compile
source code on ARM 64-bit directly.
Platforms
#########
Execution on bare hardware (base-hw)
====================================
The generic code base of the base-hw kernel underwent several cosmetic changes
to reduce or eliminate the application of certain problematic constructs like
too much inheritance, pointers, and dynamic casts. Those changes were
motivated to ease the translation of several kernel parts to the Ada/SPARK
language in the context of the Spunky project. For more information regarding
this experiment to write a Genode kernel in Ada/SPARK, please have a look at
the recent [https://genodians.org/m-stein/index - genodians.org article series]
of Martin Stein or listen to his recent
[https://video.fosdem.org/2020/AW1.125/ada_spunky.mp4 - FOSDEM talk].
Moreover, the IPC path implementation got simplified to lower the overhead
costs introduced by the transfer of capabilities. Together with the mentioned
Spunky cleanup efforts, this change measurably improved IPC performance.
The base-hw kernel now exports time consumption of individual threads via
the trace service analogously to the implementation for NOVA. Thereby, it
becomes possible to use for instance the top component within the Sculpt OS
also on this kernel.
Until now, support for the Raspberry Pi 3 was limited to Qemu emulation only.
Thanks to a contribution of Tomasz Gajewski, it is now possible to execute
Genode on all four CPUs of the actual hardware concurrently.
Execution on Linux
==================
Traditionally, the Linux version of Genode serves us as very handy development
vehicle but it was never intended as an actual target platform. On Linux,
Genode is usually executed as a multi-process application on top of a regular
GNU/Linux desktop distribution by specifying 'KERNEL=linux' and 'BOARD=linux'
to the run tool.
However, thanks to the work of Johannes Kliemann, Genode has become able to
run on a bare-bone Linux kernel without any other user land.
We blatantly used to refer to this idea as the
[https://genode.org/about/challenges#Platforms - microkernelization of Linux].
Johannes picked up the idea, supplemented Genode's core with the services
needed for user-level device drivers (IRQ, IOMEM, IOPORT) and supplemented
the tooling for the integration of Genode scenarios into a bootable initrd
image. This target of execution can be addressed by specifying 'KERNEL=linux'
and 'BOARD=pc' to the run tool now. If specified, the run tool will produce a
bootable Linux system image for the given run script and run it in Qemu.
That said, as this line of work is still considered as an experimental
playground - not for productive use - the work flow is not entirely automated.
In particular, one needs to prepare a suitable
[https://github.com/jklmnn/linux/commits/genode - Linux kernel] manually.
If you are interested in the topic, please refer to the background information
given in the [https://github.com/genodelabs/genode/pull/2829 - issue tracker].

View File

@@ -14,138 +14,186 @@ The road map is not fixed. If there is commercial interest of pushing the
Genode technology to a certain direction, we are willing to revisit our plans.
Review of the past year
#######################
Review of 2019
##############
In 2013, we worked on four construction sites: Framework infrastructure,
self-hosting, tooling and optimization, and hardware support. When
reviewing the road map for 2013, it is great to see that we largely
lived up to our planning.
For the road map 2019, we picked "bridging worlds" as our guiding theme:
(1) Lowering the friction when combining existing software with Genode,
(2) Fostering interoperability with widely used protocols and APIs, and
(3) Making Genode easier to approach and generally more practical.
The framework infrastructure was enhanced with concepts for managing
CPUs on multi-processor systems and for dynamically balancing memory
resources, it received new audio and file-system capabilities, and, with
the addition of Qt5 and the lxIP stack, we could enable highly
sophisticated workloads natively on Genode.
With respect to (1), we identified Genode's custom tooling (build
system, run scripts, ports mechanism, depot tools) as a point of
friction. They are arguably powerful and flexible but require a lot of
up-front learning. This is certainly a burden unacceptable for a casual
developer without a black belt in Make and Expect/Tcl. The new
[https://genode.org/documentation/release-notes/19.11#New_tooling_for_bridging_existing_build_systems_with_Genode - Goa]
tool rearranges the existing tools in a way that puts the concerns of casual
developers into focus, allowing for the use of commodity build systems,
eliminating Tcl syntax from the equation, running sub-second test cycles, and
streamlining the packaging of software.
On our endeavour of self-hosting Genode on Genode, we could eliminate
long-standing show stoppers for several base platforms. We were able to
improve them to the point where we can routinely execute Genode's tool
chain across several base platforms such as NOVA and Fiasco.OC as part
of our nightly automated tests. On the user-facing side, a new
command-line interface has seen the light of the day.
On account of (2), we
[https://genode.org/documentation/release-notes/19.05#Broadened_CPU_architecture_support_and_updated_tool_chain - switched to C++17]
by default, fostered the use of
[https://genodians.org/ssumpf/2019-02-27-java-19-02 - Java],
updated Qt5, and put
[https://genode.org/documentation/release-notes/19.11#C_runtime_with_improved_POSIX_compatibility - POSIX]
compatibility into the spotlight. We were eventually able to dissolve the need
for our custom Unix runtime (Noux) because all features of Noux are covered by
our regular libc now.
Two highlights when it comes to tooling were the new event tracing
facilities, and profound support for automated testing. Thanks to the
latter, we expose Genode to over 500 test runs including automated
performance benchmarks. By executing those tests each night, we have
become able to resolve regressions before they enter the master branch.
So the master branch remains always in a good shape.
Our biggest step towards (3) is the [https://genodians.org] website we
started in winter 2019, which gives individual members of our community
an easy way to present thoughts, projects, and experiences.
Complementing Genode's formal documentation, it also conserves practical
tips and tricks that were previously not covered in written form.
As expected for an operating-system project, most of our work was spent
on hardware support. On x86, we added IOMMU support, and the
virtualization capabilities on NOVA have seen a major upgrade. On ARM,
we enabled or vastly enhanced the device drivers for Samsung Exynos 5,
Freescale i.MX, and Raspberry Pi. We also explored the possibilities of
combining Genode with ARM TrustZone.
When speaking of "bridging worlds", we should not forget to mention the
tremendous effort to bring Sculpt-OS-like workloads to the 64-bit ARM world.
Thanks to the added support for
[https://genode.org/documentation/release-notes/19.08#64-bit_ARM_and_NXP_i.MX8 - multi-core AARCH64],
hardware-based
[https://genode.org/documentation/release-notes/19.11#Virtualization_of_64-bit_ARM_platforms - virtualization],
and network/USB/graphics drivers for the i.MX8 SoC, the flexibility of Sculpt
OS will eventually become available on PC hardware and ARM-based devices
alike.
Only two topics, namely Intel wireless and a new user interface concept
had been deferred. We decided to postpone the Intel wireless topic to
address gigabit networking instead. Even though the new user-interface
concept served as a strong motivation behind many improvements of the
base system such as dynamic reconfiguration and dynamic resource
balancing, the work on those fundamentals left little room to bring
forward the actual UI concept. Now that those pieces are in place, we
can go full steam ahead.
The most surprising topic that was not clearly laid out in our last
year's road map is the advancement of the base-hw platform. Started as a
mere experiment, it received so much love and attention that it
unexpectedly became able to host the whole universe of Genode's software
stack.
Over the course of 2019, we admittedly skipped a few topics originally
mentioned on our road map. In particular, the user-visible side of
Sculpt OS received less attention than originally envisioned. We also
deferred several ideas we had in mind about reworking our GUI stack.
Instead, we expanded our work in the areas of storage (block-level APIs,
test infrastructure,
[https://genode.org/documentation/release-notes/19.11#Preliminary_block-device_encrypter - block encryption])
and
[https://genode.org/documentation/release-notes/19.08#Flexible_keyboard_layouts - input processing].
This shift of focus is mostly attributed to the priorities of Genode Labs'
customers who fund our work.
2014
####
2020 - Dwarfing the barrier of entry
####################################
In 2014, we will put the emphasis on the base-hw kernel, 3rd-party software,
storage, and the user-facing side of Genode.
Genode as a technology is there. For more than one decade, we walked unfathomed
territory, fought with countless deep rabbit holes, took risky decisions,
tracked back, explored design spaces, developed taste and distaste, pruned
technical debt, and eventually found formulas of success. Today, there are no
(fundamental) unsolved questions. All the puzzle pieces are in place. There
could be no better proof than our daily use of Sculpt OS. The time is right
to make Genode palatable for a wider circle. We identified four actionable
topics to achieve that.
The experience with base-hw in 2013 ignited our ambitions to develop this
kernel not just into a complete base platform for Genode, but also
to explore new grounds. To fully accommodate Genode, we will complement
base-hw with multi-processor support, kernel-protected capability-based
security, and real-time scheduling. Beyond supporting Genode's software
stack, we will explore the use of ARM's virtualization extensions
to turn base-hw into a microhypervisor, similar to NOVA but focusing on ARM.
:User friendliness of Sculpt OS:
With Genode becoming more and more flexible, the role of 3rd-party software in
both source-code and binary form grows. Even though Genode offers a pretty
convenient mechanism to automatically download and integrate 3rd-party source
codes, the burden to resolve inter-dependencies between such source packages is
still left to the user of the framework. Many new users stumble over
the installation of 3rd-party code as it is not obvious to see which packages
are required for a particular system scenario. To make Genode better
approachable and more convenient to use, we plan to consolidate the current
mechanisms into a solid source-code package management solution.
Until now, Sculpt OS is not exactly friendly towards users who are
unfamiliar with the Unix command-line tools. Since Sculpt is not Unix
based, this is a bit paradoxical. 2020 will give Sculpt OS a friendlier
and discoverable user experience. In this context, we will inevitably
put our attention to Genode's GUI stack.
The improved 3rd-party software support will hopefully allow us to realize
sophisticated and popular usage scenarios more easily. As security is one of
Genode's major benefits compared to commodity operating systems, we consider
supporting TOR, either as server, or client side, or even both. One
possibility would be to provide a ready-to-use live image containing a TOR
client and a configured browser, which would enable users to browse
anonymously.
:Perception of high quality:
Besides the use of ported 3rd-party software on top of Genode, we see clear
demand for hosting 3rd-party binary software, particularly virtualized OSes.
The Seoul VMM (on NOVA) and L4Linux (on Fiasco.OC) already allow for the use
of Linux guest OSes as Genode sub systems. However, both solutions fall short
in different ways. Whereas L4Linux requires the maintenance of a patched Linux
kernel, Seoul can execute unpatched Linux kernels but requires a fine-tuned
kernel configuration. Because we long for a product-quality virtualization
solution that works just out of the box with most existing guest OSes, we will
make VirtualBox available on Genode/NOVA.
Compared to commodity operating systems who stood the test of time,
Genode is a young and largely unproven technology. It understandably calls
for skepticism. All the more we must leave no doubts about our high
quality standards. There must be no room for uncertainty. Hence, during
2020, we will intensify the consolidation and optimization of the framework
and its API, and talk about it.
The move to employing Genode for day-to-day computing requires reliable,
secure, and fast storage. Hence, we will build and optimize components that
operate on file-system and block level. This includes work on device drivers,
file-system stacks, caching mechanisms, block-level encryption, as well as
improved per-process virtual file systems.
:Enjoyable tooling:
Finally, we plan to complement Genode with an entirely capability-based user
interface, which will present the user with a unique model of how to interact
with the system. With user interface, we actually refer to three different
things: System configuration (the user interface a system integrator has
to deal with), text-based user interface, and a graphical desktop environment.
We hope to cover those with one single holistic concept.
Genode's success at large will depend on developers. As of today, software
development for Genode requires a huge up-front learning curve. This is
fine for people who are already convinced of Genode. But it unacceptable
for casual developers who want to get their toes wet. We should aim for
tooling that allows new developers to keep up their flow and beloved
tools. The recently introduced [https://genodians.org/nfeske/2019-11-25-goa - Goa]
tooling is our first take in this respect. It is certainly too early to call
Goa a success. In order to find out if we are on the right track, we want to
expose Goa to as many problems as possible, primarily by the means of
porting software. Also, things like IDE usage or adapters for a variety of
build systems will certainly move into focus in 2020.
:Convincing use cases:
Use cases can give exemplary proof of the fitness of Genode. We already
took a few baby steps to extend the range of documented use cases beyond
Sculpt OS last year. The boot2java scenenario comes in mind. 2020 will
hopefully see several more illustrations of Genode's versatility.
Milestones
==========
Apart from this overall theme, we plan to continue our commitment to the
NXP i.MX SoC family, revisit Genode's low-latency audio support, and
extend the cultivation of Ada/SPARK within (and on top of) Genode.
In the following, there is a rough schedule of the planned work. As usual,
Milestones for 2020
###################
In the following, we present a rough schedule of the planned work. As usual,
it is not set in stone. If you are interested in a particular line of work,
please get in touch.
:February - Release 14.02:
* First version of VirtualBox on NOVA
* Base-hw: multi-processor support
* Block cache
* Component composition tool kit
:May - Release 14.05:
* Base-hw: real-time scheduling
* 3rd-party source-code package management
* Block-level encryption
February - Release 20.02
========================
:August - Release 14.08:
* Desktop environment
* Base-hw: kernel-protected capability-based security
* TOR on Genode
* Consolidation: removal of the Noux runtime
* Library version of the init component
* Updated audio drivers
* Sculpt
* 64-bit ARM (i.MX8)
* Revised administrative user interface
* System image without Unix tools
:November - Release 14.11:
* Base-hw: virtualization on ARM, support for Cortex-A7
* Intel wireless
* NOVA kernel resource management
May - Release 20.05
===================
* Updated "Genode Foundations" book
* Consolidation
* Block-level components (update to Genode's modern block APIs)
* ARM device drivers (introducing the notion of a platform driver)
* Improved STL support (e.g., threading and mutexes)
* Continuous POSIX-compliance testing
* Systematic network-stack stress and performance tests
* Desktop: panel and virtual desktops
* Use case: Genode-based network router
* Goa: broadened support for 3rd-party build systems
* Native tool chain, including Git
* Sculpt
* Interactive device management
* Keyboard-controlled administration
* Support for BSPs maintained outside of Genode's mainline repository
August - Release 20.08
======================
* Revisited GUI-related framework interfaces
* Extended tooling for performance monitoring
* Goa: Qt development workflow
* Desktop
* Native mail client
* Native web browser
* Sculpt
* Configurable CPU resources
* On-screen documentation
* Block encryption via our
[https://genode.org/documentation/release-notes/19.11#Preliminary_block-device_encrypter - consistent block encrypter]
implemented in Ada/SPARK
* USB audio
* Initial version of a kernel implemented in Ada/SPARK
November - Release 20.11
========================
* Consolidation of capability-space management across kernels
* CPU-load balancing
* Hardware-accelerated graphics on i.MX8 (experimental)
* Reworked audio stack (interfaces, mixing)
* Sculpt: component lifetime management, shutdown protocol
* VFS plugins for lwext4 and FUSE-based file systems

View File

@@ -14,8 +14,8 @@ Genode.
Recommended development platform
################################
We currently use [http://www.ubuntu.com/ - Ubuntu] 12.04 LTS on servers and
client machines. Hence, Genode should always build without trouble on these
We use recent [https://www.ubuntu.com/ - Ubuntu] LTS releases on our
development hosts. Hence, Genode should always build without trouble on these
platforms.
@@ -23,19 +23,23 @@ Unified tool chain
##################
Starting with Genode version 11.11, there is a unified tool chain for all base
platforms and supported CPU architectures (x86_32, x86_64, and ARM). For Genode
development, we highly recommend the use of the official Genode tool chain. It
can be obtained in two ways: as pre-compiled binaries or manually compiled:
platforms and supported CPU architectures (x86_32, x86_64, ARM, AARCH64, and
RISC-V).
For Genode development, we highly recommend the use of the official Genode
tool chain. It can be obtained in two ways: as pre-compiled binaries or
manually compiled:
:Pre-compiled:
Our pre-compiled tool chain is runnable on Linux x86_32 and x86_64. The
archives for both versions will be extracted to '/usr/local/genode-gcc'. To
extract the archive, use the following command:
! sudo tar xPfj genode-toolchain-<version>-<arch>.tar.bz2
archives for both versions will be extracted to
_/usr/local/genode/tool/<version>_.
To extract the archive, use the following command:
! sudo tar xPf genode-toolchain-<version>-<arch>.tar.xz
The use of the 'P' option ensures that the tool chain will be installed at
the correct absolute path '/usr/local/genode-gcc' where the build system
expects it to reside by default.
[http://sourceforge.net/projects/genode/files/genode-toolchain/ - Download the pre-compiled tool chain...]
the correct absolute path where the build system expects it to reside by
default. Please note, Genode OS Framework releases require a Genode tool
chain with an equal or next smaller version number.
[https://sourceforge.net/projects/genode/files/genode-toolchain/ - Download the pre-compiled tool chain...]
:Compile from source:
For those of you who prefer compiling the tool chain from source, we provide
@@ -43,96 +47,16 @@ can be obtained in two ways: as pre-compiled binaries or manually compiled:
find the tool in Genode's source tree at 'tool/tool_chain'. For usage
instructions, just start the tool without arguments.
In both cases, the tool chain will be installed to '/usr/local/genode-gcc'. All
tools are prefixed with 'genode-x86-' or 'genode-arm-' respectively such that
it is safe to add the installation directory to our 'PATH' variable (optional).
The Genode tool chain will be used by the Genode build system by default. If
you desire to use a different tool chain, create a file called 'tools.conf' in
the 'etc/' subdirectory of your build directory where you can define the
tool-chain prefix to be used:
In both cases, the tool chain is installed to _/usr/local/genode/tool/<version>_.
This install location is expected by the build system by default.
The tools are prefixed with 'genode-x86-', 'genode-arm-', 'genode-riscv-', or
'genode-aarch64-' respectively so that it is safe to add the
_/usr/local/genode/tool/<version>/bin/_ path to our 'PATH' environment
variable (optional).
Should you desire to use a different tool chain, create a file called
_tools.conf_ in the _etc/_ subdirectory of your build directory where you can
define the tool-chain prefix to be used:
! CROSS_DEV_PREFIX = /path/to/your/custom/tool_chain/your-x86-
However, we recommend you to stick with the official Genode tool chain. If you
see a valid reason not to use it, please contact us (e.g., via the mailing
list).
; XXX The Gentoo Portage overlay must be update to the new tool chain
;
;Gentoo Portage overlay
;######################
;
;For Gentoo users, there exist a Portage overlay, which includes the Genode
;toolchain.
;
;:[https://github.com/blitz/blitz-overlay]:
; Portage overlay for using the Genode tool chain on Gentoo
;
;You'll find the toolchain under sys-devel/genode-toolchain.
Background information - Why do we need a special tool chain?
#############################################################
Early on in the genesis of Genode, we introduced a custom tool chain to
overcome several problems inherent to the use of standard tool chains installed
on Linux host platforms.
First, GCC and binutils versions vary a lot between different Linux systems.
Testing the Genode code with all those different tool chains and constantly
adapting the code to the peculiarities of certain tool-chain versions is
infeasible and annoying. Second, Linux tool chains use certain features that
stand in the way when building low-level system components. For example, the
'-fstack-protector' option is enabled by default on some Linux distributions.
Hence, we have to turn it off when building Genode. However, some tool chains
lack this option. So the attempt to turn it off produces an error. The most
important problem with Linux tool chains is the dependency of their respective
GCC support libraries on the glibc. When not using a Linux glibc, as the case
with Genode, this leads to manifold problems, most of them subtle and extremely
hard to debug. For example, the support libraries expect the Linux way of
implementing thread-local storage (using segment registers on x86_32). This
code will simply crash on other kernels. Another example is the use of certain
C-library functions, which are not available on Genode. Hence, Genode provides
custom implementations of those functions (in the 'cxx' library).
Unfortunately, the set of functions used varies across tool-chain versions. For
these reasons, we introduced a custom configured tool chain where we mitigated
those problems by pinning the tools to certain versions and tweaking the
compiler configuration to our needs (i.e., preventing the use of Linux TLS).
That said, the use a our custom configured tool chain was not free from
problems either. In particular, the script for creating the tool chain relied
on a libc being present on the host system. The header files of the libc would
be used to build the GCC support libraries. This introduced two problems. When
adding Genode's libc to the picture, which is based on FreeBSD's C library, the
expectations of the GCC support libraries did not match 100% with the semantics
implemented by Genode's libc (e.g., the handling of 'errno' differs). The
second problem is the limitation that the tool chain could only be built for
the platform that corresponds to the host. For example, on a Linux-x86_32
system, it was not possible to build a x86_64 or ARM tool chain. For this
reason we used the ARM tool chains provided by CodeSourcery.
With Genode 11.11, we addressed the root of the tool-chain problem by
completely decoupling the Genode tool chain from the host system that is used
to build it. The most important step was the removal of GCC's dependency on
a C library, which is normally needed to build the GCC support libraries. We
were able to remove the libc dependency by sneaking-in a small custom libc stub
into the GCC build process. This stub comes in the form of the single header
file 'tool/libgcc_libc_stub.h' and brings along all type definitions and
function declarations expected by the support-library code. Furthermore, we
removed all GNU-specific heuristics from the tool chain. Technically, the
Genode tool chain is a bare-metal tool chain. But in contrast to existing
bare-metal tool chains, C++ is fully supported.
With the libc dependency out of the way, we are now free to build the tool
chain for arbitrary architectures, which brings us two immediate benefits. We
do no longer have to rely on the CodeSourcery tool chain for ARM. There is now
a 'genode-arm' tool chain using the same compiler configuration as used on x86.
The second benefit is the use of multiarch libs on the x86 platform. The
genode-x86 tool chain can be used for both x86_32 and x86_64 as build target,
the latter being the default.
Since we introduced GDB support into Genode, we added GDB in addition to GCC
and binutils to the Genode tool chain. The version is supposed to match the one
expected by Genode's GDB facility, avoiding potential problems with mismatching
protocols between GDB monitor and GDB.

View File

@@ -10,7 +10,7 @@ build-system manual:
:Build-system manual:
[http://genode.org/documentation/developer-resources/build_system]
[https://genode.org/documentation/developer-resources/build_system]
The build system uses a configurable selection of those reposities to obtain
the source codes for the build process. The repositories are not independent
@@ -31,40 +31,37 @@ but build upon of each other:
:'nova':
NOVA hypervisor developed at University of Technology Dresden
See [http://genode.org/documentation/platforms/nova]
See [https://genode.org/documentation/platforms/nova]
:'foc':
Fiasco.OC is a modernized version of the Fiasco microkernel with a
completely revised kernel interface fostering capability-based
security. It is not compatible with L4/Fiasco.
See [http://genode.org/documentation/platforms/foc]
See [https://genode.org/documentation/platforms/foc]
:'hw':
The hw platform allows the execution of Genode on bare ARM hardware
The hw platform allows the execution of Genode on bare ARM and x86 hardware
without the need for a separate kernel. The kernel functionality is
included in core.
See [http://genode.org/documentation/platforms/hw]
included in core except in the special case of the Muen separation
kernel.
See [https://genode.org/documentation/platforms/hw] and
[https://genode.org/documentation/platforms/muen]
:'okl4':
OKL4 kernel (x86_32 and ARM) developed at Open-Kernel-Labs.
See [http://genode.org/documentation/platforms/okl4]
See [https://genode.org/documentation/platforms/okl4]
:'pistachio':
L4ka::Pistachio kernel developed at University of Karlsruhe.
See [http://genode.org/documentation/platforms/pistachio]
See [https://genode.org/documentation/platforms/pistachio]
:'fiasco':
L4/Fiasco kernel developed at University of Technology Dresden.
See [http://genode.org/documentation/platforms/fiasco]
See [https://genode.org/documentation/platforms/fiasco]
:'codezero':
Codezero microkernel developed by B-Labs
See [http://genode.org/documentation/platforms/codezero]
:'host':
Pseudo platform documenting the interface between the generic and
platform-specific parts of the base framework. This is not a functional
base platform.
:'sel4':
seL4 microkernel developed at NICTA/General Dynamics
See[https://sel4.systems/]
:'os':
@@ -102,10 +99,10 @@ but build upon of each other:
This source-code repository contains the device-driver environment for
executing drivers of the iPXE project.
:'dde_oss':
:'dde_bsd':
This source-code repository contains the device-driver environment for the
audio drivers of the Open Sound System (OSS).
This source-code repository contains the device-driver environment for
drivers of the OpenBSD operating system.
:'dde_rump':
@@ -114,12 +111,10 @@ but build upon of each other:
The repository contains a server that uses a rump kernel to provide
various NetBSD file systems to Genode.
:'qt4':
:'dde_zircon':
This source-code repository contains the Genode version of Qt4 framework.
Please find more information about using Qt4 with Genode in the repository's
'README' file. Please note that the Qt4 support is deprecated. Use Qt5
as contained in 'libports' instead.
This repository contains the emulation environment for drivers
ported from the Zircon kernel.
:'ports':
@@ -130,14 +125,6 @@ but build upon of each other:
as used for the 'libports' repository. Please consult 'libports/README'
for further information.
:'ports-<platform>':
These platform-specific source-code repositories contain software that
capitalizes special features of the respective kernel platform.
For the Fiasco.OC platform, 'ports-foc' hosts a port of the L4Linux
kernel. For further information, please refer to the README file at the
top level of the respective repository.
:'gems':
This source-code repository contains Genode applications that use

View File

@@ -1,54 +0,0 @@
#
# \brief Download and prepare the Codezero kernel
# \author Norman Feske
# \date 2011-08-05
#
VERBOSE ?= @
ECHO = @echo
GIT_URL = https://github.com/nfeske/codezero.git
GIT_REV = 6fa4884a5a1cf6207372f69ae01e5faa6d5a39c8
CONTRIB_DIR = contrib
PATCHES = $(shell find patches -name *.patch)
#
# Utility to check if a tool is installed
#
check_tool = $(if $(shell which $(1)),,$(error Need to have '$(1)' installed.))
$(call check_tool,git)
$(call check_tool,patch)
$(call check_tool,python2.6)
$(call check_tool,scons)
#
# Print help information by default
#
help::
prepare: $(CONTRIB_DIR)
help::
$(ECHO)
$(ECHO) "Check out upstream source code of the Codezero kernel"
$(ECHO)
$(ECHO) "The source code will be located at the '$(CONTRIB_DIR)/' directory."
$(ECHO)
$(ECHO) "--- available commands ---"
$(ECHO) "prepare - checkout upstream source codes"
$(ECHO) "clean - remove upstream source codes"
$(ECHO)
$(CONTRIB_DIR)/.git:
$(VERBOSE)git clone $(GIT_URL) $(CONTRIB_DIR)
$(CONTRIB_DIR): $(CONTRIB_DIR)/.git
$(VERBOSE)cd $(CONTRIB_DIR); git reset --hard $(GIT_REV)
$(ECHO) "applying patches to '$(CONTRIB_DIR)/'"
$(VERBOSE)for i in $(PATCHES); do patch -d $@ -p1 < $$i; done
.PHONY: $(CONTRIB_DIR)
clean::
$(VERBOSE)rm -rf $(CONTRIB_DIR)

View File

@@ -1,3 +0,0 @@
This repository contains the port of Genode to the Codezero microkernel
For instructions about using Genode with Codezero, please refer to
'doc/codezero.txt'.

View File

@@ -1,240 +0,0 @@
#
# Automatically generated, don't edit
#
# Generated on: furnace
# At: Fri, 05 Aug 2011 21:48:00 +0000
# Linux version 2.6.32-33-generic (buildd@rothera) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #70-Ubuntu SMP Thu Jul 7 21:09:46 UTC 2011
#
# Codezero Microkernel Configurator
#
#
# Main architecture
#
CONFIG_ARCH_ARM=y
#
# ARM Architecture Configuration
#
#
# ARM Platform Type
#
CONFIG_PLATFORM_PB926=y
CONFIG_PLATFORM_PBA9=n
CONFIG_PLATFORM_BEAGLE=n
CONFIG_PLATFORM_EB=n
#
# ARM Processor Type
#
CONFIG_CPU_ARM926=y
#
# Generic Processor Properties
#
CONFIG_ICACHE_DISABLE=n
CONFIG_DCACHE_DISABLE=n
#
# Generic Kernel Properties
#
CONFIG_PREEMPT_DISABLE=n
CONFIG_DEBUG_ACCOUNTING=n
CONFIG_DEBUG_SPINLOCKS=n
CONFIG_SCHED_TICKS=1000
#
# Toolchain Prefix
#
CONFIG_TOOLCHAIN_USERSPACE="arm-none-linux-gnueabi-"
CONFIG_TOOLCHAIN_KERNEL="arm-none-eabi-"
#
# Container Setup
#
CONFIG_CAPABILITIES=n
CONFIG_CONTAINERS=1
#
# Container 0 Parameters
#
#
# Container 0 Type
#
CONFIG_CONT0_TYPE_BAREMETAL=y
CONFIG_CONT0_TYPE_POSIX=n
CONFIG_CONT0_TYPE_LINUX=n
#
# Container 0 Options
#
CONFIG_CONT0_OPT_NAME="empty0"
#
# Baremetal Project Type
#
CONFIG_CONT0_BAREMETAL_PROJ_EMPTY=y
CONFIG_CONT0_BAREMETAL_PROJ_HELLO_WORLD=n
CONFIG_CONT0_BAREMETAL_PROJ_THREADS_DEMO=n
CONFIG_CONT0_BAREMETAL_PROJ_TEST_SUITE=n
CONFIG_CONT0_BAREMETAL_PROJ_UART_SERVICE=n
CONFIG_CONT0_BAREMETAL_PROJ_TIMER_SERVICE=n
CONFIG_CONT0_BAREMETAL_PROJ_KMI_SERVICE=n
CONFIG_CONT0_BAREMETAL_PROJ_MUTEX_DEMO=n
CONFIG_CONT0_BAREMETAL_PROJ_IPC_DEMO=n
#
# Container 0 Pager Linker Parameters
#
CONFIG_CONT0_PAGER_LMA=0x40000
CONFIG_CONT0_PAGER_VMA=0x100000
#
# Container 0 Pager Physical Memory Regions (Capabilities)
#
CONFIG_CONT0_PAGER_PHYSMEM_REGIONS=1
CONFIG_CONT0_PAGER_PHYS0_START=0x40000
CONFIG_CONT0_PAGER_PHYS0_END=0x4000000
#
# Container 0 Pager Virtual Memory Regions (Capabilities)
#
CONFIG_CONT0_PAGER_VIRTMEM_REGIONS=1
CONFIG_CONT0_PAGER_VIRT0_START=0x0
CONFIG_CONT0_PAGER_VIRT0_END=0x50000000
#
# Container 0 Pager Capabilities
#
#
# Container 0 Thread Pool Capability
#
CONFIG_CONT0_PAGER_CAP_THREADPOOL_USE=y
CONFIG_CONT0_PAGER_CAP_THREADPOOL_SIZE=64
#
# Container 0 Space Pool Capability
#
CONFIG_CONT0_PAGER_CAP_SPACEPOOL_USE=y
CONFIG_CONT0_PAGER_CAP_SPACEPOOL_SIZE=64
#
# Container 0 Mutex Pool Capability
#
CONFIG_CONT0_PAGER_CAP_MUTEXPOOL_USE=y
CONFIG_CONT0_PAGER_CAP_MUTEXPOOL_SIZE=100
#
# Container 0 Map Pool Capability
#
CONFIG_CONT0_PAGER_CAP_MAPPOOL_USE=y
CONFIG_CONT0_PAGER_CAP_MAPPOOL_SIZE=800
#
# Container 0 IPC Capability
#
CONFIG_CONT0_PAGER_CAP_IPC_USE=y
CONFIG_CONT0_PAGER_CAP_IPC_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT0_PAGER_CAP_IPC_TARGET_CURRENT_PAGER_SPACE=n
CONFIG_CONT0_PAGER_CAP_IPC_TARGET_OTHER_CONTAINER=n
CONFIG_CONT0_PAGER_CAP_IPC_TARGET_OTHER_PAGER=n
#
# Container 0 IRQ Control Capability
#
CONFIG_CONT0_PAGER_CAP_IRQCTRL_USE=y
#
# Container 0 Custom Capability 0 Parameters
#
CONFIG_CONT0_PAGER_CAP_CUSTOM0_USE=n
#
# Container 0 Custom Capability 1 Parameters
#
CONFIG_CONT0_PAGER_CAP_CUSTOM1_USE=n
#
# Container 0 Custom Capability 2 Parameters
#
CONFIG_CONT0_PAGER_CAP_CUSTOM2_USE=n
#
# Container 0 Custom Capability 3 Parameters
#
CONFIG_CONT0_PAGER_CAP_CUSTOM3_USE=n
#
# Container 0 Global Capabilities
#
#
# Container 0 IPC Capability
#
CONFIG_CONT0_CAP_IPC_USE=y
CONFIG_CONT0_CAP_IPC_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT0_CAP_IPC_TARGET_CURRENT_PAGER_SPACE=n
CONFIG_CONT0_CAP_IPC_TARGET_OTHER_CONTAINER=n
CONFIG_CONT0_CAP_IPC_TARGET_OTHER_PAGER=n
#
# Container 0 Mutex Pool Capability
#
CONFIG_CONT0_CAP_MUTEXPOOL_USE=y
CONFIG_CONT0_CAP_MUTEXPOOL_SIZE=100
#
# Derived symbols
#
CONFIG_CONT3_START_PC_ADDR=0xd0000000
CONFIG_DEBUG_PERFMON_KERNEL=n
CONFIG_CONT1_PAGER_LOAD_ADDR=0x1100000
CONFIG_CONT2_START_PC_ADDR=0xc0000000
CONFIG_CONT2_PAGER_VIRT_ADDR=0xc0000000
CONFIG_RAM_BASE_PLAT=0
CONFIG_CONT2_PAGER_LOAD_ADDR=0x2100000
CONFIG_CONT1_PAGER_VIRT_ADDR=0xb0000000
CONFIG_CONT3_PAGER_LOAD_ADDR=0x3100000
CONFIG_SUBARCH_V5=y
CONFIG_SUBARCH_V7=n
CONFIG_SUBARCH_V6=n
CONFIG_CONT0_PAGER_LOAD_ADDR=0x40000
CONFIG_CONT0_PAGER_VIRT_ADDR=0x100000
CONFIG_CONT3_PAGER_VIRT_ADDR=0xd0000000
CONFIG_CONT0_START_PC_ADDR=0x100000
CONFIG_CONT1_START_PC_ADDR=0xb0000000
#
# That's all, folks!

View File

@@ -1,274 +0,0 @@
==================================
Genode on the Codezero microkernel
==================================
Norman Feske
Codezero is a microkernel primarily targeted at ARM-based embedded systems.
It is developed by the British company B-Labs.
:B-Labs website:
[http://b-labs.com]
The Codezero kernel was first made publicly available in summer 2009. The
latest version, documentation, and community resources are available at the
project website:
:Codezero project website:
[http://l4dev.org]
As highlighted by the name of the project website, the design of the kernel is
closely related to the family of L4 microkernels. In short, the kernel provides
a minimalistic set of functionality for managing address spaces, threads, and
communication between threads, but leaves complicated policy and device access
to user-level components.
Using Genode with Codezero
##########################
For using Codezero, please ensure to have Git, SCons, and Python installed as
these tools are required for downloading and building the kernel. Furthermore,
you will need to install the tool chain for ARM. For instructions on how to
download and install the tool chain, please refer to:
:[http://genode.org/download/tool-chain]:
Genode tool-chain
To download the Codezero kernel and integrate it with Genode, issue
! make prepare
from the 'base-codezero/' directory. The Codezero kernel is fully supported by
Genode's run mechanism. Therefore, you can run Genode scenarios using Qemu
directly from the build directory. For a quick test, let's create a build
directory for Codezero on the VersatilePB926 platform using Genode's
'create_builddir' tool:
! <genode-dir>/tool/create_builddir codezero_vpb926 BUILD_DIR=<build_dir>
To execute the graphical Genode demo, change to the new created build directory
and issue:
! make run/demo
Characteristics of the kernel
#############################
To put Codezero in relation to other L4 kernels, here is a quick summary on the
most important design aspects as implemented with the version 0.3, and on how
our port of Genode relates to them:
* In the line of the original L4 interface, the kernel uses global name spaces
for kernel objects such as threads and address spaces.
* For the interaction between a user thread and the kernel, the concept of
user-level thread-control blocks (UTCB) is used. A UTCB is a small
thread-specific region in the thread's virtual address space, which is
always mapped. Hence the access to the UTCB can never raise a page fault,
which makes it perfect for the kernel to access system-call arguments,
in particular IPC payload copied from/to user threads. In contrast to other
L4 kernels, the location of UTCBs within the virtual address space is managed
by the user land.
On Genode, core keeps track of the UTCB locations for all user threads.
This way, the physical backing store for the UTCB can be properly accounted
to the corresponding protection domain.
* The kernel provides three kinds of synchronous inter-process communication
(IPC): Short IPC carries payload in CPU registers only. Full IPC copies
message payload via the UTCBs of the communicating parties. Extended IPC
transfers a variable-sized message from/to arbitrary locations of the
sender/receiver address spaces. During an extended IPC, page fault may
occur.
Genode solely relies on extended IPC, leaving the other IPC mechanisms to
future optimizations.
* The scheduling of threads is based on hard priorities. Threads with the
same priority are executed in a round-robin fashion. The kernel supports
time-slice-based preemption.
Genode does not support Codezero priorities yet.
* The original L4 interface leaves open the question on how to manage
and account kernel resources such as the memory used for page tables.
Codezero makes the accounting of such resources explicit, enables the
user-land to manage them in a responsible way, and prevent kernel-resource
denial-of-service problems.
* In contrast to the original L4.v2 and L4.x0 interfaces, the kernel provides
no time source in the form of IPC timeouts to the user land. A time source
must be provided by a user-space timer driver. Genode employs such a timer
services on all platforms so that it is not effected by this limitation.
In several ways, Codezero goes beyond the known L4 interfaces. The most
noticeable addition is the support for so-called containers. A container is
similar to a virtual machine. It is an execution environment that holds a set
of physical resources such as RAM and devices. The number of containers and the
physical resources assigned to them is static and is to be defined at build
time. The code executed inside a container can be roughly classified into two
cases. First, there are static programs that require strong isolation from the
rest of the system but no classical operating-system infrastructure, for
example special-purpose telecommunication stacks or cryptographic functionality
of an embedded device. Second, there a kernel-like workload, which use the L4
interface to substructure the container into address spaces, for example a
paravirtualized Linux kernel that uses Codezero address spaces to protect Linux
processes. Genode runs inside a container and facilitates Codezero's L4
interface to implement its multi-server architecture.
Behind the scenes
#################
The 'make prepare' mechanism checks out the kernel source code from the
upstream Git repository to 'base-codezero/contrib'. When building the kernel
from within a Genode build directory via 'make kernel', this directory won't be
touched by the Genode build system. Instead, a snapshot of the 'contrib'
directory is taken to '<build-dir>/kernel/codezero'. This is the place where
the Codezero configuration and build processes are executed. By working with a
build-directory-local snapshot, we ensure that the source tree remains
untouched at all times. After having taken the snapshot, the Codezero kernel is
configured using a configuration template specific for the hardware platform.
The configuration comes in the form of a CML file located at
'base-codezero/config/'. There is one CML file per supported platform named
'<platform>.cml'. The configured Codezero build directory will reside at
'<build-dir>/kernel/codezero/build/'. Finally, the Codezero build system is
invoked to build the kernel.
The two stages of building Codezero
===================================
The Codezero build system always performs the compilation of the kernel and the
so-called containers as well as the integration of all these components into a
final ELF image as one operation. When building just the kernel via 'make
kernel', the final image will contain the default container0 that comes with
the Codezero distribution. For integrating Genode into the final image, the
content of the container0 must be replaced by the Genode binaries followed by
another execution of 'kernel/codezero/build.py'. Now, the single-image will be
re-created, including the Genode binaries. When using Genode's run mechanism,
these steps are automated for you. For reference, please review the Codezero
run environment at 'base-codezero/run/env'.
By first building the kernel with Codezero's default container ('make kernel')
and later replacing the container's content with Genode binaries, we
optimize the work flow for building Genode components. The kernel is compiled
only once, but the (quick) re-linking of the final image is done every time a
run script is executed.
In the run environment, you will see that we forcefully remove a file called
'cinfo.c' from the build-directory-local snapshot of the Codezero source tree.
This file is generated automatically by the Codezero build system and linked
against the kernel. It contains the parameters of the containers executed on
the kernel. Because we change the content of container0 each time when
executing a run script, those parameter change. So we have to enforce to
re-generation of the 'cinfo.c' file.
How Genode ROM modules are passed into the final image
======================================================
The Codezero build system picks up any ELF files residing the container's
directory wheres the file called 'main.elf' is considered to be the roottask
(in Codezero speak called pager) of the container. For Genode, 'main.elf'
corresponds to the core executable. All other boot modules are merged into an
ELF file, which we merely use as a container for these binary data. This ELF
file is linked such that it gets loaded directly after the core image (this is
how core finds the boot modules). The process of archiving all boot modules
into the single ELF file is automated via the 'base-codezero/tool/gen_romfs'
tool. In the container's directory, the merged file is called 'modules.elf'.
Adapting the source code of the kernel
======================================
For debugging and development you might desire to change the kernel code
at times. You can safely do so within the 'base-codezero/contrib/' directory.
When issuing the next 'make kernel' from the Genode build directory, your
changes will be picked up. However, when working with run scripts, the kernel
is not revisited each time. The kernel gets built only once if the
'<build-dir>/kernel' directory does not exist, yet. If you work on the kernel
source tree and wish to conveniently test the kernel with a run script, use
! make kernel run/<run-script>
This way, you make sure to rebuild the kernel prior executing the steps
described in the run script.
Tweaking the kernel configuration
=================================
The kernel configuration can be tweaked within '<build-dir>/kernel/codezero'.
Just change to this directory and issue './build.py -C'. The next time you
build the kernel via 'make kernel' your configuration will be applied.
If you want to conserve your custom configuration, just copy the file
'<build-dir>/kernel/codezero/build/config.cml'.
Parameters of 'vpb926.cml' explained
====================================
The default configuration for the VersatilePB926 platform as found at
'base-codzero/config/vpb926.cml' is paramaterized as follows:
:Default pager parameters:
! 0x40000 Pager LMA
! 0x100000 Pager VMA
These values are important because they are currently hard-wired in the
linker script used by Genode. If you need to adopt these values, make
sure to also update the Genode linker script located at
'base-codezero/src/platform/genode.ld'.
:Physical Memory Regions:
! 1 Number of Physical Regions
! 0x40000 Physical Region 0 Start Address
! 0x4000000 Physical Region 0 End Address
We only use 64MB of memory. The physical memory between 0 and 0x40000 is
used by the kernel.
:Virtual Memory Regions:
! 1 Number of Virtual Regions
! 0x0 Virtual Region 0 Start Address
! 0x50000000 Virtual Region 0 End Address
It is important to choose the end address such that the virtual memory
covers the thread context area. The context area is defined at
'base/include/base/thread.h'.
Limitations
###########
At the current stage, the Genode version for Codezero is primarily geared
towards the developers of Codezero as a workload to stress their kernel. It
still has a number of limitations that would affect the real-world use:
* Because the only platform supported out of the box by the official Codezero
source tree is the ARM-based Versatilebp board, Genode is currently tied to
this hardware platform.
* The current timer driver at 'os/src/drivers/timer/codezero/' is a dummy
driver that just yields the CPU time instead of blocking. Is is not
suitable as time source.
* The PL110 framebuffer driver at 'os/src/drivers/framebuffer/pl110/'
does only support the LCD display as provided by Qemu but it is not tested on
real hardware.
* Even though Codezero provides priority-based scheduling, Genode does not
allow assigning priorities to Codezero processes, yet.
As always, these limitations will be addressed as needed.
Thanks
######
We want to thank the main developer of Codezero Bahadir Balban for his great
responsiveness to our feature requests and questions. Without his help, the
porting effort would have taken much more effort. We hope that our framework
will be of value to the Codezero community.

View File

@@ -1 +0,0 @@
SPECS = genode

View File

@@ -1,33 +0,0 @@
/*
* \brief Atomic operations for ARM on codezero
* \author Norman Feske
* \date 2009-10-02
*/
/*
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#ifndef _INCLUDE__ARM__CPU__ATOMIC_H_
#define _INCLUDE__ARM__CPU__ATOMIC_H_
namespace Genode {
/**
* Atomic compare and exchange
*
* This function compares the value at dest with cmp_val.
* If both values are equal, dest is set to new_val. If
* both values are different, the value at dest remains
* unchanged.
*
* \return 1 if the value was successfully changed to new_val,
* 0 if cmp_val and the value at dest differ.
*/
int cmpxchg(volatile int *dest, int cmp_val, int new_val);
}
#endif /* _INCLUDE__ARM__CPU__ATOMIC_H_ */

View File

@@ -1,63 +0,0 @@
/*
* \brief IPC message buffer
* \author Norman Feske
* \date 2009-10-02
*/
/*
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#ifndef _INCLUDE__BASE__IPC_MSGBUF_H_
#define _INCLUDE__BASE__IPC_MSGBUF_H_
namespace Genode {
/**
* IPC message buffer layout
*/
class Msgbuf_base
{
protected:
size_t _size;
char _msg_start[]; /* symbol marks start of message */
public:
/*
* Begin of actual message buffer
*/
char buf[];
/**
* Return size of message buffer
*/
inline size_t size() const { return _size; };
/**
* Return address of message buffer
*/
inline void *addr() { return &_msg_start[0]; };
} __attribute__((aligned(4)));
/**
* Instance of IPC message buffer with specified buffer size
*/
template <unsigned BUF_SIZE>
class Msgbuf : public Msgbuf_base
{
public:
char buf[BUF_SIZE];
Msgbuf() { _size = BUF_SIZE; }
} __attribute__((aligned(4)));
}
#endif /* _INCLUDE__BASE__IPC_MSGBUF_H_ */

View File

@@ -1,171 +0,0 @@
/*
* \brief Dummy pager support for Genode
* \author Norman Feske
* \date 2009-10-02
*/
/*
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#ifndef _INCLUDE__BASE__IPC_PAGER_H_
#define _INCLUDE__BASE__IPC_PAGER_H_
#include <base/cache.h>
#include <base/ipc.h>
#include <base/stdint.h>
#include <base/native_types.h>
namespace Genode {
class Mapping
{
private:
addr_t _from_phys_addr;
addr_t _to_virt_addr;
size_t _num_pages;
bool _writeable;
enum { PAGE_SIZE_LOG2 = 12 };
public:
/**
* Constructor
*/
Mapping(addr_t dst_addr, addr_t src_addr,
Cache_attribute const cacheability, bool io_mem,
unsigned l2size = PAGE_SIZE_LOG2,
bool rw = true)
:
_from_phys_addr(src_addr),
_to_virt_addr(dst_addr),
_num_pages(1 << (l2size - PAGE_SIZE_LOG2)),
_writeable(rw)
{ }
/**
* Construct invalid mapping
*/
Mapping() : _num_pages(0) { }
/**
* Prepare map operation
*
* No preparations are needed on Codezero because all mapping
* originate from the physical address space.
*/
void prepare_map_operation() { }
addr_t from_phys() const { return _from_phys_addr; }
addr_t to_virt() const { return _to_virt_addr; }
size_t num_pages() const { return _num_pages; }
bool writeable() const { return _writeable; }
};
/**
* Special paging server class
*/
class Ipc_pager : public Native_capability
{
private:
Native_thread_id _last; /* faulted thread */
addr_t _pf_addr; /* page-fault address */
addr_t _pf_ip; /* instruction pointer of faulter */
bool _pf_write; /* true on write fault */
Mapping _reply_mapping;
// protected:
//
// /**
// * Wait for pagefault
// */
// void _wait();
//
// /**
// * Send page-fault reply and wait for next page fault
// */
// void _reply_and_wait();
public:
/**
* Constructor
*/
Ipc_pager();
/**
* Wait for a new page fault received as short message IPC
*/
void wait_for_fault();
/**
* Reply current page-fault and wait for a new one
*/
void reply_and_wait_for_fault();
/**
* Request instruction pointer of current page fault
*/
addr_t fault_ip() { return _pf_ip; }
/**
* Request fault address of current page fault
*/
addr_t fault_addr() { return _pf_addr; }
/**
* Set parameters for next reply
*/
void set_reply_mapping(Mapping m) { _reply_mapping = m; }
/**
* Set destination for next reply
*/
void set_reply_dst(Native_capability pager_object) {
_last = pager_object.local_name(); }
/**
* Answer call without sending a mapping
*
* This function is used to acknowledge local calls from one of
* core's region-manager sessions.
*/
void acknowledge_wakeup();
/**
* Return thread ID of last faulter
*/
Native_thread_id last() const { return _last; }
/**
* Return badge for faulting thread
*/
unsigned long badge() const { return _last; }
/**
* Return true if page fault was a write fault
*/
bool is_write_fault() const { return _pf_write; }
/**
* Return true if last fault was an exception
*/
bool is_exception() const
{
/*
* Reflection of exceptions is not supported on this platform.
*/
return false;
}
};
}
#endif /* _INCLUDE__BASE__IPC_PAGER_H_ */

View File

@@ -1,113 +0,0 @@
/*
* \brief Dummy definitions for native types used for compiling unit tests
* \author Norman Feske
* \date 2009-10-02
*/
/*
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#ifndef _INCLUDE__BASE__NATIVE_TYPES_H_
#define _INCLUDE__BASE__NATIVE_TYPES_H_
#include <base/native_capability.h>
#include <base/stdint.h>
namespace Codezero {
struct l4_mutex;
enum { NILTHREAD = -1 };
}
namespace Genode {
class Platform_thread;
struct Cap_dst_policy
{
typedef int Dst;
static bool valid(Dst tid) { return tid != Codezero::NILTHREAD; }
static Dst invalid() { return Codezero::NILTHREAD; }
static void copy(void* dst, Native_capability_tpl<Cap_dst_policy>* src);
};
typedef Cap_dst_policy::Dst Native_thread_id;
struct Native_thread
{
Native_thread_id l4id;
/**
* Only used in core
*
* For 'Thread' objects created within core, 'pt' points to the
* physical thread object, which is going to be destroyed on
* destruction of the 'Thread'.
*/
Platform_thread *pt;
};
/**
* Empty UTCB type expected by the thread library
*
* On this kernel, UTCBs are not placed within the the context area. Each
* thread can request its own UTCB pointer using the kernel interface.
* However, we use the 'Native_utcb' member of the thread context to
* hold thread-specific data, i.e. the running lock used by the lock
* implementation.
*/
struct Native_utcb
{
private:
/**
* Prevent construction
*
* A UTCB is never constructed, it is backed by zero-initialized memory.
*/
Native_utcb();
/**
* Backing store for per-thread running lock
*
* The size of this member must equal 'sizeof(Codezero::l4_mutex)'.
* Unfortunately, we cannot include the Codezero headers here.
*/
int _running_lock;
public:
Codezero::l4_mutex *running_lock() {
return (Codezero::l4_mutex *)&_running_lock; }
};
typedef Native_capability_tpl<Cap_dst_policy> Native_capability;
typedef int Native_connection_state;
struct Native_config
{
/**
* Thread-context area configuration.
*/
static constexpr addr_t context_area_virtual_base() {
return 0x40000000UL; }
static constexpr addr_t context_area_virtual_size() {
return 0x10000000UL; }
/**
* Size of virtual address region holding the context of one thread
*/
static constexpr addr_t context_virtual_size() { return 0x00100000UL; }
};
struct Native_pd_args { };
}
#endif /* _INCLUDE__BASE__NATIVE_TYPES_H_ */

View File

@@ -1,85 +0,0 @@
/*
* \brief Aggregate Codezero syscall bindings
* \author Norman Feske
* \date 2010-02-16
*/
/*
* Copyright (C) 2010-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#ifndef _INCLUDE__CODEZERO__SYSCALLS_H_
#define _INCLUDE__CODEZERO__SYSCALLS_H_
/*
* Codezero headers happen to include the compiler's 'stdarg.h'. If this
* happened within the 'Codezero' namespace below, we would not be able to
* include 'stdarg.h' later on into the root namespace (stdarg's include guards
* would prevent this. Therefore, we make sure to include the file into the
* root namespace prior processing any Codezero headers.
*/
#include <stdarg.h>
namespace Codezero { extern "C" {
/* make Codezero includes happy */
extern char *strncpy(char *dest, const char *src, __SIZE_TYPE__);
extern void *memcpy(void *dest, const void *src, __SIZE_TYPE__);
/*
* Work around the problem of C++ keywords being used as
* argument names in the Codezero API headers.
*/
#define new _new_
#define virtual _virtual_
#define printf(A, ...)
#include <l4lib/macros.h>
#include <l4lib/arch/arm/syscalls.h>
#include <l4lib/arch/arm/syslib.h>
#include <l4lib/ipcdefs.h>
#include <l4lib/init.h>
#include <l4lib/mutex.h>
#include <l4/api/thread.h>
#include <l4/api/irq.h>
#include <l4lib/exregs.h>
#include <l4/lib/list.h> /* needed for capability.h */
#include <l4/generic/capability.h>
#include <l4/generic/cap-types.h>
#include <l4/arch/arm/exception.h>
#include <l4/arch/arm/io.h>
#undef new
#undef virtual
#ifdef max
#undef max
#endif
#undef printf
/*
* Turn '#define cacheable' (as defined in the codezero headers) into an enum
* value. Otherwise, the define will conflict with variables named 'cacheable'.
*/
enum { _codezero_cacheable = cacheable /* #define value */ };
#undef cacheable
enum { cacheable = _codezero_cacheable };
} }
namespace Codezero {
/**
* Return thread ID of the calling thread
*/
inline int thread_myself()
{
struct task_ids ids = { 0, 0, 0 };
l4_getid(&ids);
return ids.tid;
}
}
#endif /* _INCLUDE__CODEZERO__SYSCALLS_H_ */

View File

@@ -1 +0,0 @@
REP_INC_DIR += include/codezero/dummies

View File

@@ -1,9 +0,0 @@
LIBL4_DIR = $(CODEZERO_DIR)/conts/userlibs/libl4
INC_DIR += $(CODEZERO_DIR)/conts/userlibs/libc/include
SRC_C += $(notdir $(wildcard $(LIBL4_DIR)/src/arch/arm/v5/*.c))
SRC_S += $(notdir $(wildcard $(LIBL4_DIR)/src/arch/arm/v5/*.S))
vpath %.c $(LIBL4_DIR)/src/arch/arm/v5
vpath %.S $(LIBL4_DIR)/src/arch/arm/v5

View File

@@ -1,3 +0,0 @@
LIBS += l4_arm_v5
include $(REP_DIR)/lib/mk/l4.inc

View File

@@ -1,34 +0,0 @@
#
# \brief Portions of base library shared by core and non-core processes
# \author Norman Feske
# \date 2013-02-14
#
LIBS += cxx syscall startup
SRC_CC += cap_copy.cc
SRC_CC += ipc/ipc.cc ipc/pager.cc ipc/ipc_marshal_cap.cc
SRC_CC += pager/pager.cc pager/common.cc
SRC_CC += avl_tree/avl_tree.cc
SRC_CC += allocator/slab.cc
SRC_CC += allocator/allocator_avl.cc
SRC_CC += heap/heap.cc heap/sliced_heap.cc
SRC_CC += console/console.cc
SRC_CC += child/child.cc
SRC_CC += process/process.cc
SRC_CC += elf/elf_binary.cc
SRC_CC += lock/lock.cc
SRC_CC += signal/signal.cc signal/common.cc
SRC_CC += server/server.cc server/common.cc
SRC_CC += thread/thread.cc thread/thread_bootstrap.cc thread/trace.cc
SRC_CC += thread/context_allocator.cc env/utcb.cc
SRC_CC += lock/cmpxchg.cc
INC_DIR += $(REP_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/thread
INC_DIR += $(REP_DIR)/include/codezero/dummies
vpath cap_copy.cc $(BASE_DIR)/src/platform
vpath %.cc $(REP_DIR)/src/base
vpath %.cc $(BASE_DIR)/src/base

View File

@@ -1,13 +0,0 @@
SRC_CC += console/log_console.cc
SRC_CC += cpu/cache.cc
SRC_CC += env/env.cc env/context_area.cc env/reinitialize.cc
SRC_CC += thread/thread_start.cc
INC_DIR += $(BASE_DIR)/src/base/env
INC_DIR += $(REP_DIR)/include/codezero/dummies
LIBS += base-common
vpath %.cc $(REP_DIR)/src/base
vpath %.cc $(BASE_DIR)/src/base

View File

@@ -1,3 +0,0 @@
ifeq ($(filter-out $(SPECS),platform_vpb926),)
CODEZERO_CML = $(REP_DIR)/config/vpb926.cml
endif

View File

@@ -1,43 +0,0 @@
LIBL4_DIR = $(CODEZERO_DIR)/conts/userlibs/libl4
SRC_C += init.c irq.c mutex.c
SRC_C += arch/arm/exregs.c
SRC_S += $(addprefix arch/arm/,syscalls.S new_thread.S)
SRC_C += $(addprefix lib/,addr.c bit.c idpool.c)
SRC_C += $(addprefix lib/thread/,init.c thread.c)
SRC_C += $(addprefix lib/cap/,cap.c read.c)
INC_DIR += $(CODEZERO_DIR)/conts/userlibs/libc/include
INC_DIR += $(CODEZERO_DIR)/conts/userlibs/libmem/include
INC_DIR += $(CODEZERO_DIR)/conts/userlibs/libmem
vpath % $(LIBL4_DIR)/src
#
# The libl4 source files uses macros defined in macros.h but do not
# explicitly include the 'macros.h' header file.
#
CC_OPT += -include $(LIBL4_DIR)/include/l4lib/macros.h
#
# Resolve conflicts with built-in functions
#
CC_OPT += -fno-builtin-pow
#
# During the compilation of the libl4 file 'thread.c', the 'l4id_t' type
# is used without prior inclusion of 'types.h'. Furthermore, 'types.h'
# has a wrong include guard, so we take care of this problem using a
# wrapper.
#
CC_OPT_lib_thread_thread += -include fix_include_types.h
CC_OPT_arch_arm_exregs += -include fix_include_types.h
lib/thread/thread.o arch/arm/exregs.o: fix_include_types.h
fix_include_types.h:
@echo "#include <l4lib/arch/arm/types.h>" > $@
@echo "#define __L4LIB_ARM_TYPES_H___" >> $@
CC_OPT += -std=gnu99

View File

@@ -1,5 +0,0 @@
SRC_CC = core_printf.cc
INC_DIR += $(REP_DIR)/src/base/console/pl011
INC_DIR += $(REP_DIR)/include/codezero/dummies
vpath core_printf.cc $(BASE_DIR)/src/base/console

View File

@@ -1,33 +0,0 @@
#
# Create prerequisites for building Genode for Codezero
#
#
# Execute the rules in this file only at the second build stage when we know
# about the complete build settings, e.g., the 'CROSS_DEV_PREFIX'.
#
ifeq ($(called_from_lib_mk),yes)
include $(REP_DIR)/lib/mk/codezero_cml.inc
all: $(BUILD_BASE_DIR)/include/l4/config.h
$(BUILD_BASE_DIR)/include/l4/config.h: $(CODEZERO_CML)
$(VERBOSE)mkdir -p $(dir $@)
$(VERBOSE)$(CODEZERO_DIR)/tools/cml2header.py -i $^ -o $@
#
# Codezero's 'macros.h' includes the file "config.h", expected to be located in
# the same directory (using #include "config.h"). However, 'config.h' is
# generated into the source tree by the Codezero configuration system. Since we
# do not want to pollute the source tree, we create a shadow copy of 'macros.h'
# in the same directory as our generated 'config.h'.
#
all: $(BUILD_BASE_DIR)/include/l4/macros.h
$(BUILD_BASE_DIR)/include/l4/macros.h: $(CODEZERO_DIR)/include/l4/macros.h
$(VERBOSE)mkdir -p $(dir $@)
$(VERBOSE)ln -s $^ $@
endif

View File

@@ -1,5 +0,0 @@
include $(BASE_DIR)/lib/mk/startup.inc
INC_DIR += $(REP_DIR)/include/codezero/dummies
vpath crt0.s $(BASE_DIR)/src/platform/arm

View File

@@ -1,51 +0,0 @@
#
# Specifics for the Codezero kernel API
#
#
# Read default and builddir-specific config files
#
# In these config files, we expect to find the definition of CODEZERO_DIR
#
-include $(call select_from_repositories,etc/codezero.conf)
-include $(BUILD_BASE_DIR)/etc/codezero.conf
ifeq ($(CODEZERO_DIR),)
$(error Could not find the definition of CODEZERO_DIR in etc/codezero.conf)
endif
#
# Convert path to absolute directory
#
absdir = $(shell readlink -f $(1))
#
# Headers generated within the build directory
# (see 'lib/mk/platform.mk')
#
INC_DIR += $(BUILD_BASE_DIR)/include
#
# Codezero headers
#
CODEZERO_ABS_DIR = $(call absdir,$(CODEZERO_DIR))
INC_DIR += $(CODEZERO_ABS_DIR)/include
INC_DIR += $(CODEZERO_ABS_DIR)/conts/userlibs/libl4/include
INC_DIR += $(CODEZERO_ABS_DIR)/conts/userlibs/libdev/uart/include
#
# Allow programs to test for the Codezero kernel
#
# This is needed by the 'pl050/irq_handler.h' to handle the interrupt semantics
# of Codezero.
#
CC_OPT += -D__CODEZERO__
#
# Clean rules for removing the side effects of building the platform
#
clean_includes:
$(VERBOSE)rm -rf $(BUILD_BASE_DIR)/include
cleanall: clean_includes

View File

@@ -1,13 +0,0 @@
#
# Specifics for Codezero on ARM
#
SPECS += codezero
#
# Linker options specific for ARM
#
LD_TEXT_ADDR ?= 0x02000000
CC_OPT += -D__ARCH__=arm
include $(call select_from_repositories,mk/spec-codezero.mk)

View File

@@ -1,9 +0,0 @@
#
# Specifics for Codezero on ARMv5
#
SPECS += codezero_arm
CC_OPT += -D__SUBARCH__=v5
include $(call select_from_repositories,mk/spec-codezero_arm.mk)

View File

@@ -1,6 +0,0 @@
SPECS += codezero_arm_v5 platform_vpb926
CC_OPT += -D__PLATFORM__=pb926
include $(call select_from_repositories,mk/spec-codezero_arm_v5.mk)
include $(call select_from_repositories,mk/spec-platform_vpb926.mk)

View File

@@ -1,67 +0,0 @@
This directory contains patches of the Codezero kernel that are needed for the
integration with Genode. Furthermore, some patches address issues with recent
tool chains not yet supported by the official Codezero verison.
:binutils-2.21.patch:
The GNU assembler of binutils-2.21 complains with an error that was ignored
by previous binutils versions:
"Error: .size expression for ... does not evaluate to a constant"
This error seems to occur if the argument of 'BEGIN_PROC' does not match
the argument of 'END_PROC'. The patch fixes such inconsistencies in the
code.
:gcc_shared_enabled.patch:
Codezero expect the tool chain to be used for the kernel to not support
shared libraries. This is the case for Codesourcery's arm-non-eabi
tool chain. Such tool chains use to incorporate both libgcc and libgcc_eh
into the single libgcc.a library. In contrast, for tool chains built with
'--enable-shared', libgcc does not contain the functions of libgcc_eh. Hence,
one symbol called '__aeabi_unwind_cpp_pr0' referenced by libgcc and normally
provided by libgcc_eh remains unresolved. There are two possible solutions
for this problem: We could link libgcc_eh to the 'final.elf' image as
expected by libgcc. However, this way, we will need to implement the
the environment expected by libgcc_eh. For Codezero, this is pointless
because no C++ is used. The second option is to provide a dummy symbol
for '__aeabi_unwind_cpp_pr0' just to make the linker happy. This patch
adds such a dummy symbol to 'loader/main.c'.
:libc_search_dir.patch:
The userlibs are build with w/o '-nostdinc'. Consequently, the standard
search paths of the tool chain are used. Because the user land is
normally build with the Codesourcery tool chain 'arm-none-linux-gnueabi',
the complete glibc headers (that come with the tool chain) end up in
the default search path. Coincidentally, the userlibs SConstruct file
misses to supply the Codezero libc headers, which goes undetected because
headers such as 'stdio.h' are silently taken from the tool chain's libc.
This patch supplies Codezero's libc include-search path for building
the userlibs. This enables the userlibs to be built with tool chains
that do not come with a complete libc.
:scons-2.0.1.patch:
SCons 2.0.1 complains about the 'build_dir' argument being renamed to
'variant_dir'. This patch renames the argument where needed for building
the kernel and the default container.
:set_fixed_pager.patch:
At some point, Codezero abandoned the facility to define the pager for a
given thread via the exregs system call. Instead, the kernel hard-wires the
creator of the thread as the thread's pager. This is conflicting with
Genode's way of creating and paging threads. On the current version of Genode
for Codezero, all threads are paged by one thread (thread 3 happens to be the
global pager) within core. As a work-around to Codezero's current limitation,
we define thread 3 to be the pager of all threads.
:gcc_4_6_1_fixes.patch:
Version 4.6.1 of GCC is more picky about dead code than previous versions and
warns about unused variables. Because Codezero is build with the '-Werror'
flag, these warnings cause the kernel build to fail. The patch fixes those
warnings by removing the variables in question.

View File

@@ -1,33 +0,0 @@
diff --git a/src/arch/arm/vectors.S b/src/arch/arm/vectors.S
index 0475389..62f3c38 100644
--- a/src/arch/arm/vectors.S
+++ b/src/arch/arm/vectors.S
@@ -503,7 +503,7 @@ BEGIN_PROC(arm_irq_exception_basic)
mov lr, pc
ldr pc, =do_irq
ldmfd sp!, {r0-r3, pc}^
-END_PROC(arm_irq_exception)
+END_PROC(arm_irq_exception_basic)
/* Minimal IRQ state saved on irq stack right after irq vector enters: */
#define IRQ_R0 0
diff --git a/conts/userlibs/libc/src/arch-arm/memcpy.S b/conts/userlibs/libc/src/arch-arm/memcpy.S
index 383f5d2..b4df27f 100644
--- a/conts/userlibs/libc/src/arch-arm/memcpy.S
+++ b/conts/userlibs/libc/src/arch-arm/memcpy.S
@@ -57,4 +57,4 @@ BEGIN_PROC(memcpy)
bne last
1:
pop {r0, r4 - r11, pc}
-END_PROC(_memcpy)
+END_PROC(memcpy)
diff --git a/conts/userlibs/libc/src/arch-arm/memset.S b/conts/userlibs/libc/src/arch-arm/memset.S
index ce9b06c..3746955 100644
--- a/conts/userlibs/libc/src/arch-arm/memset.S
+++ b/conts/userlibs/libc/src/arch-arm/memset.S
@@ -65,4 +65,4 @@ BEGIN_PROC(memset)
bne end
ldmfd sp!, {r4 - r11, pc}
-END_PROC(_memset)
+END_PROC(memset)

View File

@@ -1,182 +0,0 @@
diff --git a/src/api/map.c b/src/api/map.c
index 1d15086..6139b4c 100644
--- a/src/api/map.c
+++ b/src/api/map.c
@@ -78,6 +78,6 @@ int sys_unmap(unsigned long virtual, unsigned long npages, unsigned int tid)
retval = ret;
}
- return ret;
+ return retval;
}
diff --git a/src/api/thread.c b/src/api/thread.c
index 985c425..579e4fb 100644
--- a/src/api/thread.c
+++ b/src/api/thread.c
@@ -497,7 +497,7 @@ out_err:
*/
int sys_thread_control(unsigned int flags, struct task_ids *ids)
{
- struct ktcb *task = 0, *pager = 0;
+ struct ktcb *task = 0;
int err, ret = 0;
if ((err = check_access((unsigned long)ids, sizeof(*ids),
@@ -508,8 +508,6 @@ int sys_thread_control(unsigned int flags, struct task_ids *ids)
if (!(task = tcb_find(ids->tid)))
return -ESRCH;
- pager = task->pager;
-
/*
* Caller may operate on a thread if it shares
* the same address space with that thread's pager
diff --git a/src/arch/arm/mapping-common.c b/src/arch/arm/mapping-common.c
index 385f7c2..55b4bea 100644
--- a/src/arch/arm/mapping-common.c
+++ b/src/arch/arm/mapping-common.c
@@ -313,12 +313,11 @@ int check_mapping(unsigned long vaddr, unsigned long size,
int remove_mapping_space(struct address_space *space, unsigned long vaddr)
{
pmd_table_t *pmd_table;
- int pgd_i, pmd_i;
+ int pmd_i;
pmd_t *pmd;
unsigned int pmd_type, pte_type;
vaddr = page_align(vaddr);
- pgd_i = PGD_INDEX(vaddr);
pmd_i = PMD_INDEX(vaddr);
/*
diff --git a/src/glue/arm/init.c b/src/glue/arm/init.c
index 2373c66..43c6fda 100644
--- a/src/glue/arm/init.c
+++ b/src/glue/arm/init.c
@@ -68,8 +68,6 @@ void print_sections(void)
/* The kip is non-standard, using 0xBB to indicate mine for now ;-) */
void kip_init()
{
- struct utcb **utcb_ref;
-
/*
* TODO: Adding utcb size might be useful
*/
@@ -86,9 +84,6 @@ void kip_init()
kip_init_syscalls();
- /* KIP + 0xFF0 is pointer to UTCB segment start address */
- utcb_ref = (struct utcb **)((unsigned long)&kip + UTCB_KIP_OFFSET);
-
add_boot_mapping(virt_to_phys(&kip), USER_KIP_PAGE, PAGE_SIZE,
MAP_USR_RO);
printk("%s: Kernel built on %s, %s\n", __KERNELNAME__,
diff --git a/loader/libs/elf/src/elf.c b/loader/libs/elf/src/elf.c
index 4a1b5e0..f97273b 100644
--- a/loader/libs/elf/src/elf.c
+++ b/loader/libs/elf/src/elf.c
@@ -339,16 +339,12 @@ elf_loadFile(void *elfFile, bool phys)
{
int i;
int num_pheaders;
- int pheader_offset;
- int pheader_type;
if (elf_checkFile(elfFile) != 0) {
return false;
}
num_pheaders = elf_getNumProgramHeaders(elfFile);
- pheader_offset = elf_getProgramHeaderOffset(elfFile, 0);
//printf("Number of program headers: %d\n", num_pheaders);
- //printf("Program header offset of first header from file beginning: 0x%p\n",pheader_offset);
/*
* FIXME:
@@ -373,8 +369,6 @@ elf_loadFile(void *elfFile, bool phys)
// printf("This section's size in file: %p\n", len);
src = (uint64_t) (uintptr_t) elfFile + elf_getProgramHeaderOffset(elfFile, i);
// printf("Elf program header offset: %p\n", src);
- pheader_type = elf_getProgramHeaderType(elfFile, i);
- // printf("Elf program header type: %p\n", pheader_type);
// Comment
printf("Copying to range from 0x%x to 0x%x of size: 0x%x\n", (unsigned int)dest, (unsigned int)dest + (unsigned int)len, (unsigned int)len);
memcpy((void*) (uintptr_t) dest, (void*) (uintptr_t) src, len);
diff --git a/loader/libs/elf/src/elf32.c b/loader/libs/elf/src/elf32.c
index 2d13798..78bbf33 100644
--- a/loader/libs/elf/src/elf32.c
+++ b/loader/libs/elf/src/elf32.c
@@ -248,7 +248,6 @@ elf32_fprintf(FILE *f, struct Elf32_Header *file, int size, const char *name, in
struct Elf32_Shdr *sections;
unsigned numSections;
int i, r;
- char *str_table;
fprintf(f, "Found an elf32 file called \"%s\" located "
"at address 0x%p\n", name, file);
@@ -307,7 +306,6 @@ elf32_fprintf(FILE *f, struct Elf32_Header *file, int size, const char *name, in
}
}
if (flags & ELF_PRINT_SECTIONS) {
- str_table = elf32_getSegmentStringTable(file);
printf("Section Headers:\n");
printf(" [Nr] Name Type Addr Off\n");
diff --git a/src/generic/capability.c b/src/generic/capability.c
index 0860ea5..ef44445 100644
--- a/src/generic/capability.c
+++ b/src/generic/capability.c
@@ -403,7 +403,7 @@ struct capability *cap_match_mem(struct capability *cap,
{
struct sys_map_args *args = args_ptr;
struct ktcb *target = args->task;
- unsigned long long start, end, pfn_point;
+ unsigned long long start, pfn_point;
unsigned long pfn;
unsigned int perms;
@@ -415,7 +415,6 @@ struct capability *cap_match_mem(struct capability *cap,
/* Long long range check to avoid overflow */
start = cap->start;
- end = cap->end;
pfn_point = pfn;
if (start > pfn_point || cap->end < pfn_point + args->npages)
return 0;
diff --git a/loader/main.c b/loader/main.c
index 7d21a4c..8d7d6db 100644
--- a/loader/main.c
+++ b/loader/main.c
@@ -26,7 +26,6 @@ int load_elf_image(unsigned long **entry, void *filebuf);
int load_container_image(void *cont_section)
{
struct Elf32_Header *elf_header = (struct Elf32_Header *)cont_section;
- struct Elf32_Shdr *sect_header;
int nsect;
int nimgs = 0;
unsigned long *image_entry;
@@ -36,7 +35,6 @@ int load_container_image(void *cont_section)
return -1;
}
- sect_header = elf32_getSectionTable(elf_header);
nsect = elf32_getNumSections(elf_header);
for (int i = 0; i < nsect; i++) {
@@ -59,7 +57,6 @@ int load_container_image(void *cont_section)
int load_container_images(unsigned long start, unsigned long end)
{
struct Elf32_Header *elf_header = (struct Elf32_Header *)start;
- struct Elf32_Shdr *sect_header;
int nsect = 0;
int nconts = 0;
@@ -68,7 +65,6 @@ int load_container_images(unsigned long start, unsigned long end)
return -1;
}
- sect_header = elf32_getSectionTable(elf_header);
nsect = elf32_getNumSections(elf_header);
for (int i = 0; i < nsect; i++) {

View File

@@ -1,10 +0,0 @@
diff --git a/loader/main.c b/loader/main.c
index 7d21a4c..ee03918 100644
--- a/loader/main.c
+++ b/loader/main.c
@@ -135,3 +135,5 @@ int main(void)
return -1;
}
+
+asm(".global __aeabi_unwind_cpp_pr0; __aeabi_unwind_cpp_pr0:");

View File

@@ -1,21 +0,0 @@
diff --git a/conts/userlibs/SConstruct b/conts/userlibs/SConstruct
index 41c7913..421b563 100644
--- a/conts/userlibs/SConstruct
+++ b/conts/userlibs/SConstruct
@@ -11,6 +11,7 @@ PROJRELROOT = '../..'
sys.path.append(PROJRELROOT)
from scripts.config.config_invoke import *
+from scripts.config.projpaths import *
config = configuration_retrieve()
gcc_arch_flag = config.gcc_arch_flag
@@ -28,7 +29,7 @@ env = Environment(CC = config.toolchain_userspace + 'gcc',
ASFLAGS = ['-D__ASSEMBLY__', '-march=' + gcc_arch_flag],
ENV = {'PATH' : os.environ['PATH']},
LIBS = 'gcc', # libgcc.a - Required for division routines.
- CPPPATH = KERNEL_HEADERS,
+ CPPPATH = [KERNEL_HEADERS, LIBC_INCLUDE],
CPPFLAGS = '-include l4/config.h -include l4/macros.h -include l4/types.h')
# Set the build directory for this source tree

View File

@@ -1,97 +0,0 @@
diff --git a/src/drivers/SConscript b/src/drivers/SConscript
index eedb59f..8f5cd5d 100644
--- a/src/drivers/SConscript
+++ b/src/drivers/SConscript
@@ -8,24 +8,24 @@ src_local = []
objs = []
objs += SConscript("uart/pl011/SConscript", exports = { 'env' : env },
- duplicate=0, build_dir = join(bdir, 'pl011'))
+ duplicate=0, variant_dir = join(bdir, 'pl011'))
objs += SConscript("timer/sp804/SConscript", exports = { 'env' : env },
- duplicate=0, build_dir = join(bdir, 'timer'))
+ duplicate=0, variant_dir = join(bdir, 'timer'))
objs += SConscript("irq/pl190/SConscript", exports = { 'env' : env },
- duplicate=0, build_dir = join(bdir, 'vic'))
+ duplicate=0, variant_dir = join(bdir, 'vic'))
objs += SConscript("irq/gic/SConscript", exports = { 'env' : env },
- duplicate=0, build_dir = join(bdir, 'gic'))
+ duplicate=0, variant_dir = join(bdir, 'gic'))
objs += SConscript("irq/omap3/SConscript", exports = { 'env' : env },
- duplicate=0, build_dir = join(bdir, 'omap/intc'))
+ duplicate=0, variant_dir = join(bdir, 'omap/intc'))
objs += SConscript("uart/omap/SConscript", exports = { 'env' : env },
- duplicate=0, build_dir = join(bdir, 'omap/uart'))
+ duplicate=0, variant_dir = join(bdir, 'omap/uart'))
objs += SConscript("timer/omap/SConscript", exports = { 'env' : env },
- duplicate=0, build_dir = join(bdir, 'omap/timer'))
+ duplicate=0, variant_dir = join(bdir, 'omap/timer'))
Return('objs')
diff --git a/conts/baremetal/empty/SConstruct b/conts/baremetal/empty/SConstruct
index b70d69a..4889d8e 100644
--- a/conts/baremetal/empty/SConstruct
+++ b/conts/baremetal/empty/SConstruct
@@ -48,7 +48,7 @@ env = Environment(CC = config.toolchain_userspace + 'gcc',
CPPFLAGS = '-include l4/config.h -include l4/macros.h -include l4/types.h')
objs = SConscript('SConscript', exports = { 'env' : env },
- duplicate=0, build_dir = builddir)
+ duplicate=0, variant_dir = builddir)
Depends(objs, join(PROJROOT, CONFIG_H))
prog = env.Program(join(builddir, 'main.elf'), objs)
diff --git a/SConstruct b/SConstruct
index 2abc190..58c983d 100644
--- a/SConstruct
+++ b/SConstruct
@@ -71,35 +71,35 @@ env = Environment(CC = config.toolchain_kernel + 'gcc',
objects = []
objects += SConscript('src/generic/SConscript',
exports = { 'env' : env }, duplicate = 0,
- build_dir = join(builddir, 'generic'))
+ variant_dir = join(builddir, 'generic'))
objects += SConscript(join(join('src/glue', arch), 'SConscript'),
exports = { 'env' : env }, duplicate = 0,
- build_dir = join(builddir, join('glue',arch)))
+ variant_dir = join(builddir, join('glue',arch)))
objects += SConscript(join(join('src/arch', arch), 'SConscript'),
exports = { 'env' : env }, duplicate = 0,
- build_dir = join(builddir, join('arch', arch)))
+ variant_dir = join(builddir, join('arch', arch)))
objects += SConscript(join(join('src/arch', arch), join(subarch, 'SConscript')),
exports = { 'env' : env }, duplicate = 0,
- build_dir = join(builddir, join(join('arch',arch), subarch)))
+ variant_dir = join(builddir, join(join('arch',arch), subarch)))
objects += SConscript('src/lib/SConscript',
exports = { 'env' : env }, duplicate = 0,
- build_dir = join(builddir, 'lib'))
+ variant_dir = join(builddir, 'lib'))
objects += SConscript('src/api/SConscript',
exports = { 'env' : env }, duplicate = 0,
- build_dir = join(builddir, 'api'))
+ variant_dir = join(builddir, 'api'))
objects += SConscript('src/drivers/SConscript',
exports = { 'env' : env, 'bdir' : 'driver/'}, duplicate = 0,
- build_dir = join(builddir, 'driver'))
+ variant_dir = join(builddir, 'driver'))
objects += SConscript(join(join('src/platform', platform), 'SConscript'),
exports = { 'env' : env }, duplicate = 0,
- build_dir = join(builddir, join('platform', platform)))
+ variant_dir = join(builddir, join('platform', platform)))
# Add builders for generating kernel linker scripts

View File

@@ -1,13 +0,0 @@
diff --git a/include/l4/generic/tcb.h b/include/l4/generic/tcb.h
index 7b315b8..ace38d8 100644
--- a/include/l4/generic/tcb.h
+++ b/include/l4/generic/tcb.h
@@ -70,7 +70,7 @@ struct task_ids {
struct container;
-#define tcb_pagerid(tcb) ((tcb)->pager->tid)
+#define tcb_pagerid(tcb) 4
#define space_is_pager(tcb) \
((tcb)->space->spid == (tcb)->pager->space->spid)

View File

@@ -1,106 +0,0 @@
#
# \brief Codezero-specific test-environment supplements
# \author Norman Feske
# \date 2011-08-05
#
# This file is meant to be used as '--include' argument for 'tool/run'.
#
##
# Return location of prebuilt mirror of codezero source tree
#
proc kernel_dir { } { return [pwd]/kernel/codezero }
##
# Return container directory where the Genode binaries should be copied to
#
proc container_dir { } { return [kernel_dir]/build/cont0/empty0 }
##
# Return location of 'gen_romfs' tool
#
proc gen_romfs { } { return "[genode_dir]/repos/base-codezero/tool/gen_romfs" }
##
# Print and execute shell command
#
proc exec_sh { command } {
puts "$command"
exec sh -c $command
}
##################################
## Test framework API functions ##
##################################
proc create_boot_directory { } {
# create only intermediate directries hosting the run directory
exec mkdir -p [run_dir]
exec rm -rf [run_dir]
exec mkdir -p [run_dir]/genode
}
proc build_boot_image {binaries} {
if {![file exists kernel]} { build kernel }
copy_and_strip_genode_binaries_to_run_dir $binaries
# the codezero build system expects that the pager binary is named 'main.elf'
exec cp [run_dir]/genode/core [container_dir]/main.elf
# obtain list of modules
set modules [glob [run_dir]/genode/*]
# remove core from list of modules
set core_idx [lsearch -exact $modules [run_dir]/genode/core]
set modules [lreplace $modules $core_idx $core_idx]
# generate elf image containing the boot modules
exec_sh "[gen_romfs] -p [cross_dev_prefix] -c [run_dir]/genode/core -o [container_dir]/modules.elf $modules"
set tool_chain_dir [file dirname [cross_dev_prefix]]
set prepend_path ""
if {[file isdirectory $tool_chain_dir]} {
set prepend_path $tool_chain_dir }
# force re-generation of 'cinfo.c', which depends on the container content
exec_sh "rm -f [kernel_dir]/src/generic/cinfo.c"
# rebuild codezero, linking the new container content
exec_sh "cd [kernel_dir]; PATH=$prepend_path:\$PATH ./build.py"
# copy result to [run_dir]/image.elf (to be picked up by spawn_qemu)
exec_sh "cp [kernel_dir]/build/final.elf [run_dir]/image.elf"
}
proc run_genode_until {{wait_for_re forever} {timeout_value 0} {running_spawn_id -1}} {
#
# If a running_spawn_id is specified, wait for the expected output
#
if {$running_spawn_id != -1} {
wait_for_output $wait_for_re $timeout_value $running_spawn_id
return
}
#
# Try to use one of the supported backends for running the scripts
#
if {[is_qemu_available]} {
spawn_qemu $wait_for_re $timeout_value
return
}
global run_target
puts stderr "Error: Can't execute automatically on target '$run_target'"
exit -1
}

View File

@@ -1,78 +0,0 @@
/*
* \brief Console backend for PL011 UART on Codezero
* \author Norman Feske
* \date 2009-10-03
*
* This code assumes a PL011 UART as provided by 'qemu -M versatilepb'. Prior
* executing this code, the kernel already initialized the UART to print some
* startup message. So we can skip the UART initialization here. The kernel
* maps the UART registers to the magic address PL011_BASE when starting mm0.
* So we can just start using the device without any precautions.
*/
/*
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
/* Genode includes */
#include <base/console.h>
/* codezero includes */
#include <codezero/syscalls.h>
typedef unsigned char uint8_t;
/**
* Base address of default-mapped UART device
*
* defined in 'l4/arch/arm/io.h'
*/
enum { PL011_BASE = USERSPACE_CONSOLE_VBASE };
/**
* UART registers
*/
enum { PL011_REG_UARTDR = PL011_BASE + 0x00 };
enum { PL011_REG_UARTFR = PL011_BASE + 0x18 };
/**
* Returns true if UART is ready to transmit a character
*/
static bool pl011_tx_ready()
{
enum { PL011_TX_FIFO_FULL = 1 << 5 };
return !(*((volatile unsigned *)PL011_REG_UARTFR) & PL011_TX_FIFO_FULL);
}
/**
* Output character to serial port
*/
static void pl011_out_char(uint8_t c)
{
/* wait until serial port is ready */
while (!pl011_tx_ready());
/* output character */
*((volatile unsigned int *)PL011_REG_UARTDR) = c;
}
namespace Genode
{
class Core_console : public Console
{
protected:
void _out_char(char c) {
if(c == '\n')
pl011_out_char('\r');
pl011_out_char(c);
}
};
}

View File

@@ -1,53 +0,0 @@
/*
* \brief Support for exceptions libsupc++
* \author Norman Feske
* \author Sebastian Sumpf
* \date 2006-07-21
*/
/*
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#include <base/printf.h>
extern "C" char __eh_frame_start__[]; /* from linker script */
extern "C" void __register_frame (const void *begin); /* from libgcc_eh */
/*
* This symbol is set by Genode's dynamic linker (ldso) during binary setup.
* After setup, the symbol will point to the actual implementation of
* 'dl_iterate_phdr', which is located within the linker. 'dl_iterate_phdr'
* iterates through all (linker loaded) binaries and shared libraries. This
* function has to be implemented in order to support C++ exceptions within
* shared libraries.
* Return values of dl_iterate_phdr (gcc 4.2.4):
* < 0 = error
* 0 = continue program header iteration
* > 0 = stop iteration (no errors occured)
*
* See also: man dl_iterate_phdr
*/
int (*genode__dl_iterate_phdr) (int (*callback) (void *info, unsigned long size, void *data), void *data) = 0;
extern "C" int dl_iterate_phdr(int (*callback) (void *info, unsigned long size, void *data), void *data) __attribute__((weak));
extern "C" int dl_iterate_phdr(int (*callback) (void *info, unsigned long size, void *data), void *data)
{
if (!genode__dl_iterate_phdr)
return -1;
return genode__dl_iterate_phdr(callback, data);
}
extern "C" void raise()
{
PDBG("raise called - not implemented\n");
}
void init_exception_handling()
{
// __register_frame(__eh_frame_start__);
}

View File

@@ -1,24 +0,0 @@
/*
* \brief Functions required for using the arm-none-linux-gnueabi tool chain
* \author Norman Feske
* \date 2009-10-02
*/
/*
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#include <base/printf.h>
#include <base/stdint.h>
using namespace Genode;
extern "C" int raise(int sig)
{
PWRN("raise - not yet implemented");
return 0;
}

Some files were not shown because too many files have changed in this diff Show More