Opened 16 years ago
Closed 13 years ago
#56 closed enhancement (fixed)
Finish and merge the dynamic loader to trunk
Reported by: | Jakub Jermář | Owned by: | Jiri Svoboda |
---|---|---|---|
Priority: | major | Milestone: | 0.5.0 |
Component: | helenos/unspecified | Version: | mainline |
Keywords: | dynload, thesis | Cc: | |
Blocker for: | Depends on: | ||
See also: |
Description
This ticket is created to track progress on merging the dynamic loader to trunk.
Change History (6)
comment:1 by , 15 years ago
comment:2 by , 15 years ago
Component: | → unspecified |
---|---|
Keywords: | thesis added |
comment:3 by , 14 years ago
Milestone: | 0.5.0 → 0.5.1 |
---|
comment:4 by , 14 years ago
Type: | task → enhancement |
---|
comment:5 by , 14 years ago
Owner: | set to |
---|---|
Status: | new → accepted |
Merged from mainline again (the branch was left at the state when it was converted from Subversion to Bazaar). Since the Makefiles have changed completely, I need to re-implement building of shared libraries. The system now compiles (if you disable Build shared C library
) but unless you supply a fake libtest.so
it won't build the ISO image.
The common user space Makefile now must be taught how to build shared libraries (and how to link against them).
comment:6 by , 13 years ago
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
Dynamic linking support merged in changeset:mainline,937. Two years too late, but better than never, right?
Merge notes: Dynamic linking is disabled by default. It can be enabled only on ia32 by setting CONFIG_RTLD = y, CONFIG_BUILD_SHARED_LIBS = y, CONFIG_USE_SHARED_LIBS = y.
Makefiles for executables that are init-binaries must set STATIC_NEEDED = y. Makefiles for executables that cannot be dynamically linked must set STATIC_ONLY = y.
TLS support is limited. Only the C library can use TLS and all thread-local variables must be static. Example: icmp uses thread-local variables and thus it sets STATIC_ONLY = y.
Currently shared versions of lib/c and lib/softint will be built (if CONFIG_BUILD_SHARED_LIBS = y) and all executables except init-binaries (STATIC_NEEDED = y) and icmp (STATIC_ONLY = y) will link against them. Shared variants of other libs can be built easily, but need a little more makefile work to link against them.
I brought the dynload branch in sync with trunk (it was lagging behind by some 700 changesets).
ia32 works well, although non static thread-local vars are still not supported (this concerns two variables in the C library, which are marked static in dynload, but not in trunk). ppc32 and mips32 still only pass dltest2 (call a dlsym-resloved function) but not dltest (shared C library).