This patch implements the 'pread()' and 'pwrite()' functions in the libc.
A lock guard prevents the parallel execution of either or both functions.
Fixes#278.
Use git to get recent kernels from github. Adjust NOVA patch to compile
with recent github version. Patch and use makefile of NOVA microkernel
to avoid duplicated (and outdated) makefile in Genode
Furthermore, this patch adds support for using NOVA on x86_64. The
generic part of the syscall bindings has been moved to
'base-nova/include/nova/syscall-generic.h'. The 32/64-bit specific
parts are located at 'base-nova/include/32bit/nova/syscalls.h' and
'base-nova/include/64bit/nova/syscalls.h' respectively.
On x86_64, the run environment boots qemu using the Pulsar boot loader
because GRUB legacy does not support booting 64bit ELF executables.
In addition to the NOVA-specific changes in base-nova, this patch
rectifies compile-time warnings or build errors in the 'ports' and
'libports' repositories that are related to NOVA x86_64 (i.e., Vancouver
builds for 32bit only and needed an adaptation to NOVAs changed
bindings)
Fixes#233, fixes#234
We are using bison to generate certain files when preparing the libc.
However the yacc(1) wrapper script is used instead of calling bison
directly which does not work if bison is not installed but the original
yacc(1).
Fixes#225. Fixes#227.
modexp512 and rc4-md5 code were missing for x86_64. The files are now
generated on openssl-prepare and will be used when building for x86_64.
Fixes#224.
By now the gmp-library works builds on x86/32bit only. The mpfr library
depends on gmp, so make both library dependent on the corresponding platform
variables. Look at the discussion of issue #135.
Some source files do not build with -O0 due to conflicting register
allocation and inline assembler constrains. We enforce optimization (O2)
for these files.
Also, I reduced the noise from warning messages induced by lazy handling
of "assignment discards ‘const’ qualifier" and "passing argument from
incompatible pointer type" in third-party sources.
This commit contains the initial port of OpenSSL to Genode. It certainly
needs some more work to get things straight - it compiles fine but does
not work because of a NULL pointer exception.
With this patch the SDL-based 'avplay' media player, which is part of
'libav', can be built. The run script expects a media file named
'mediafile' in the 'bin' directory.
Fixes#216.
The Lua runtime library is built in two variants: ANSI C and C++. The
C++ provides all Lua API function with C++ linkage and uses C++
exceptions instead of setjmp/longjmp for protected execution of Lua
chunks.
The ported version of Lua is 5.1.5.
This patch introduces the file-system-session interface, provides an
implementation of this interface in the form of an in-memory file
system, and enables the libc to use the new file-system facility.
The new interface resides in 'os/include/file_system_session/'. It
uses synchronous RPC calls for functions referring to directory
and meta-data handling. For transferring payload from/to files, the
packet-stream interface is used. I envision that the asynchronous design
of the packet-stream interface fits well will the block-session
interface. Compared to Unix-like file-system APIs, Genode's file-system
session interface is much simpler. In particular, it does not support
per-file permissions. On Genode, we facilitate binding policy (such as
write-permission) is sessions rather than individual file objects.
As a reference implementation of the new interface, there is the
new 'ram_fs' service at 'os/src/server/ram_fs'. It stores sparse
files in memory. At the startup, 'ram_fs' is able to populate the
file-system content with directories and ROM modules as specified
in its configuration.
To enable libc-using programs to access the new file-system interface,
there is the new libc plugin at 'libports/src/lib/libc-fs'. Using this
plugin, files stored on a native Genode file system can be accessed
using the traditional POSIX file API.
To see how the three parts described above fit together, the test
case at 'libports/run/libc_fs' can be taken as reference. It reuses
the original 'libc_ffat' test to exercise several file operations
on a RAM file-system using the libc API.
:Known limitations:
The current state should be regarded as work in progress. In particular
the error handling is not complete yet. Not all of the session functions
return the proper exceptions in the event of an error. I plan to
successively refine the interface while advancing the file-system
implementations. Also the support for truncating files and symlink
handling are not yet implemented.
Furthermore, there is much room for optimization, in particular for the
handling of directory entries. Currently, we communicate only one dir
entry at a time, which is bad when traversing large trees. However, I
decided to focus on functionality first and defer optimizations (such as
batching dir entries) to a later stage.
The current implementation does not handle file modification times at
all, which may be a severe limitation for tools that depend on this
information such as GNU make. Support for time will be added after we
have revisited Genode's timer-session interface (issue #1).
Fixes#54Fixes#171
This patch implements a Genode-specific audio backend for SDL.
The audio volume (in percent) can be configured in the config file of the
SDL application:
<config>
<sdl_audio_volume value="100"/>
</config>
Fixes#204.
This patch enables the use of threads and locking mechanisms in SDL
applications. The 'pthread' libary is used as backend. Not all features
are currently supported.
Fixes#185.
This patch provides an implementation of the '_nanosleep()' libc function,
which blocks on a timed semaphore for the given time, but at least 10ms.
This should result in better performance than creating a timer connection
on every call (for thread-safety), but could still be improved.
Fixes#158.
Both the libc and the NOVA syscall bindings provide the definition of
PAGE_SIZE. In contrast to the libc, which uses a #define, the NOVA
syscalls uses a proper enum value. Thus, we can work around the conflict
by including the NOVA syscalls header prior the libc header. Fixes#152.
The 'log2()' and 'log2f()' functions have been added in FreeBSD's libc
version 9.0.0, but they are missing in version 8.2.0, which is used in
Genode. This patch provides preliminary implementations of these
functions until the Genode libc gets updated to version 9.0.0 or above.
Fixes#143.
The old variant provided 8K capability slots to all processes on core,
which increased binaries by 180 KB for the static allocator. I reduced it
to 4K capabilities stay under 100 KB overhead for the allocator.
Anyway, pci_drv and pl11x_drv need more RAM quota now: 2M for pl11x_drv
and 1M for pci_drv.
If using the libc for Noux programs, the default implementation of these
functions cannot be used because they rely on a dedicated
timeout-scheduler thread. Noux programs, however, are expected to
contain only the main thread. By turning the functions into weak
symbols, the noux libc-plugin can provide custom implementations.
This patch introduces the basic key handling required to browse through
a multi-page PDF document ([page-up] or [enter] -> next page,
[page-down] or [backspace] -> previous page).
This way, we can register a meaningful 'user_data' pointer to at the
'pdfapp_t' structure and avoid the use of singletons for 'Framebuffer'
and 'pdfapp'.
This version of MuPDF will use Genode's framebuffer session and input
session to display a PDF file. At the current stage, the program is
merely a skeleton that compiles and starts. Neither the actual rendering
not the response to user input are implemented. To try it out, there
is a ready-to-use run script at 'libports/run/mupdf.run'.
As a preliminary step for working on issue #11, this patch revisits the
'Framebuffer::info' RPC call. Instead of using C-style out paramters,
the new 'mode()' RPC call returns the mode information as an object of
type 'Mode'. Consequently, mode-specific functions such as
'bytes_per_pixel' have been moved to the new 'Framebuffer::Mode' class.
This version of the library was hardwired to the former USB storage
driver supplied with DDE Linux. This driver is no more. The ffat.mk lib
is superseded by the libc_ffat plugin anyway. This plugin uses Genode's
block session interface instead of co-locating the block driver with the
application.
At the startup of python's termios module, a sequence of 'tcgetattr' and
'tcsetattr' calls is executed. If one of those calls fails, the
initialization gets canceled. 'tcgetattr' is implemented via ioctl
operations on stdout. To let those operations succeed, the default
implementation of ioctl ('Plugin::ioctl') cannot be used because it
returns -1. Adding a dummy ioctl to the libc_log back end alleviates
this problem.
MuPDF is a fast and versatile PDF rendering library with only a few
dependencies. It depends on openjpeg (JPEG2000 codec) and jbig2dec (b/w
image compression library). Therefore, this patch comprises the ports of
these libraries as well. All libraries compile well in the Genode build
system but are not tested yet.
Removed dummy implementation of '_ioctl'. This function is called
internally within the libc, i.e., by 'tcgetattr'. For running
libreadline in Noux, we need to hook into those ioctl operations via
the libc plugin interface.