Commit Graph

5735 Commits

Author SHA1 Message Date
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
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
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
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 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
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
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
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
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
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