forked from genodelabs/genode
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cleanup shared-object support mechanics
The former ldso-startup static library (now called ldso_so_support) is used to spice each shared object/library with local support code for the dynamic linker (execution of static constructors and ARM-EABI). Therefore, the library must be statically linked to each dynamic library. As a result recipes for dynamic libraries must always depend on the "so" API, which makes ldso_so_support.mk and so_support.c available independent of "base". Additionally, ldso_so_support is also provided in the libc API to cut the dependency early for libc/posix libraries. Issue genodelabs#3720
- Loading branch information
Showing
14 changed files
with
95 additions
and
109 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
SRC_C = so_support.c | ||
|
||
vpath so_support.c $(call select_from_repositories,src/lib/ldso) |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
/** | ||
* \brief Shared-object support code | ||
* \author Sebastian Sumpf | ||
* \author Christian Helmuth | ||
* \date 2009-08-14 | ||
* | ||
* Support code comprises hooks for execution of static constructors and | ||
* ARM-EABI dynamic linking. | ||
* | ||
* The ARM cross compiler uses the __gnu_Unwind_Find_exidx hook to locate a | ||
* 'ARM.exidx' section within a shared object. For this to work | ||
* 'dl_unwind_find_exidx' is excuted by 'ldso', which returns the section | ||
* address if it finds a shared object within the range of the provieded | ||
* program counter. | ||
*/ | ||
|
||
/* | ||
* Copyright (C) 2009-2020 Genode Labs GmbH | ||
* | ||
* This file is part of the Genode OS framework, which is distributed | ||
* under the terms of the GNU Affero General Public License version 3. | ||
*/ | ||
|
||
#define BEG { (ld_hook) ~1U } | ||
#define END { (ld_hook) 0 } | ||
#define SECTION(x) __attribute__((used,section( x ))) | ||
|
||
typedef void (*ld_hook)(void); | ||
static ld_hook _lctors_start[1] SECTION("_mark_ctors_start") = BEG; | ||
static ld_hook _lctors_end[1] SECTION("_mark_ctors_end") = END; | ||
|
||
/* | ||
* '__dso_handle' needs to be defined in the main program and in each shared | ||
* object. Because ld.lib.so is both of them, '__dso_handle' is weak here. | ||
*/ | ||
void *__dso_handle __attribute__((__visibility__("hidden"))) | ||
__attribute__((weak)) = &__dso_handle; | ||
|
||
/* called by dynamic linker on library startup (ld.lib.so) */ | ||
extern void _init(void) __attribute__((used,section(".init"))); | ||
extern void _init(void) | ||
{ | ||
/* call static constructors */ | ||
for (ld_hook *func = _lctors_end; func > _lctors_start + 1; (*--func)()); | ||
} | ||
|
||
|
||
/* | ||
* from gcc/config/arm/unwind-arm.h | ||
*/ | ||
typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__))); | ||
|
||
|
||
/* | ||
* Dummy for static libs, implemented in ldso for dynamic case | ||
*/ | ||
extern _Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int *pcount) __attribute__((weak)); | ||
extern _Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int *pcount) | ||
{ | ||
return 0; | ||
} | ||
|
||
|
||
/* | ||
* Called from libgcc_eh.a file 'gcc/config/arm/unwind-arm.c' in function | ||
* 'get_eit_entry' | ||
*/ | ||
extern _Unwind_Ptr __gnu_Unwind_Find_exidx (_Unwind_Ptr pc, int *pcount) | ||
{ | ||
return dl_unwind_find_exidx(pc, pcount); | ||
} |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,10 @@ | ||
MIRROR_FROM_REP_DIR := lib/symbols/posix lib/import/import-posix.mk | ||
|
||
content: $(MIRROR_FROM_REP_DIR) LICENSE lib/mk/base.mk lib/mk/ldso-startup.mk | ||
content: $(MIRROR_FROM_REP_DIR) LICENSE | ||
|
||
$(MIRROR_FROM_REP_DIR): | ||
$(mirror_from_rep_dir) | ||
|
||
lib/mk/base.mk lib/mk/ldso-startup.mk: | ||
mkdir -p $(dir $@) | ||
touch $@ | ||
|
||
LICENSE: | ||
cp $(GENODE_DIR)/LICENSE $@ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
base | ||
libc | ||
so |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,3 +6,4 @@ report_session | |
rtc_session | ||
terminal_session | ||
vfs | ||
so |