This symbol is needed to inform the (static) linker about the dependency
of the component-startup code from the program's main function. Without
the symbol, the use of gc-sections during linking may discard the actual
application code.
This patch contains changes to the libSDL port that were needed to build
the Hatari emulator using cmake.
- Since SDL programs cannot use the posix library (because sdl's init
function needs a way to get hold of the Genode env), the sdl_main
library must be used instead of the posix library. The sdl_main
code implements the Libc::Component::construct function for the
final binary. However, 3rd-party build systems are not aware of this
Genode-specific peculiarity and thereby create binaries that leave
libsdl uninitialized. This patch adds the sdl_main to libsdl by
default and thereby eliminates the need for specifying the extra
sdl_main library. Customizing the Libc::Component::construct is
still possible by overriding the library-provided implementation
in the main program.
- A few missing config definitions are added to compile Hatari
successfully.
- Avoid reliance on the include/SDL convention in SDL_config.h
- Cmake relies on the upper-case naming of the library with no way
to tweak this convention. So we install an symlink named `SDL.lib.so`
when installing the library into the <build-dir>/bin/ directory.
Fixes#161
Avoid a runtime warning message since our backend does not provide
such constructor functions yet. If a backend requires them, it should
initiate their execution by itself within the backend init functions.
In coherence with the size_guard idea, the remote_rom packets are are
separated into a simple layer packet and a data packet. While basically
only managing common control informations, the layer packet may carry
any payload. The data packet, instead, manages the transmission of the
actual ROM payload and can be attached to the layer packet. This
simplifies the management of the notification packets UPDATE and SIGNAL
since they do not contain fields like 'offset' or 'payload_size'
anymore.
Now, a single thread manages all incoming RPC calls, signals and (thus)
network packets. This will hopefully make further synchronization
enhancements a lot easier.
Further changes:
* Following data packets are identified as such by their offset instead
of their packet type field. This simplifies the protocol.
* reduced redundancy in the packet building code
* rewrap lines with >79 columns
* fix compiler warnings
* split backend code
* Remove a few unnecessary include and using directives.
* In order to avoid global variables across modules, 'verbose' is a
member variable now. Later, its value may be set via constructor.
* The nested Rx class is merged with Backend_base. This way, we avoid
unnecessary maintenance as long as we don't have a clear design for
ROM multiplexing which may require the management of multiple IP
addresses etc.
* The HANDLER template argument is removed since client and server
inherit from Backend_base anyway. The receive method is virtual now.
* The signals packet_avail and ready_to_ack are directly passed to the
same signal handler now.
* Remove unnecessarily public/protected visibility from some members.
* Remove and add unnecessary and, due to inclusion order, secretly
missing include directives, respectively.
Besides the missing supported features noted in the README, missing
support for extending files via truncation/seeking might limit its
application.
Issue #124.
The vfs is now populated with the python libs using a tar file system.
This is necessary because providing the zip from the rom did not work on NOVA.
The issue here is that python's zipimporter uses fseek with SEEK_END to
find the zip header. Unfortunately, the file size cannot be correctly
determined from the ROM session (see #1920) so that the fseek fails.