Index: uspace/lib/c/generic/rtld/rtld.c
===================================================================
--- uspace/lib/c/generic/rtld/rtld.c	(revision 31ea2a7b402ca14939caa6c5f580a5c7f3e3a190)
+++ uspace/lib/c/generic/rtld/rtld.c	(revision ea77c2d18c8ff8eeff7e8bb1e4ebad6d26af7a44)
@@ -43,27 +43,31 @@
 
 rtld_t *runtime_env;
-static rtld_t rt_env_static;
-
-/** Initialize a minimal runtime linker environment for use in executables loaded directly by kernel. */
-errno_t rtld_init_static(void)
-{
+
+/** Initialize the runtime linker for use in a statically-linked executable. */
+errno_t rtld_init_static(elf_finfo_t *finfo, rtld_t **rre)
+{
+	rtld_t *env;
 	errno_t rc;
 
-	runtime_env = &rt_env_static;
-	list_initialize(&runtime_env->modules);
-	list_initialize(&runtime_env->imodules);
-	runtime_env->program = NULL;
-	runtime_env->next_id = 1;
-
-	rc = module_create_static_exec(runtime_env, NULL);
+	env = calloc(1, sizeof(rtld_t));
+	if (env == NULL)
+		return ENOMEM;
+
+	list_initialize(&env->modules);
+	list_initialize(&env->imodules);
+	env->program = NULL;
+	env->next_id = 1;
+
+	rc = module_create_static_exec(finfo->base, env);
 	if (rc != EOK)
 		return rc;
 
-	modules_process_tls(runtime_env);
-
+	modules_process_tls(env);
+
+	*rre = env;
 	return EOK;
 }
 
-/** Initialize and process an executable, static or dynamic.
+/** Initialize and process a dynamically linked executable.
  *
  * @param p_info Program info
@@ -75,5 +79,5 @@
 	module_t *prog;
 
-	DPRINTF("Load program with rtld.\n");
+	DPRINTF("Load dynamically linked program.\n");
 
 	/* Allocate new RTLD environment to pass to the loaded program */
@@ -95,10 +99,6 @@
 	 */
 
-	if (p_info->dynamic) {
-		DPRINTF("Parse program .dynamic section at %p\n", p_info->dynamic);
-		dynamic_parse(p_info->dynamic, 0, &prog->dyn);
-	} else {
-		DPRINTF("Program is statically linked\n");
-	}
+	DPRINTF("Parse program .dynamic section at %p\n", p_info->dynamic);
+	dynamic_parse(p_info->dynamic, 0, &prog->dyn);
 	prog->bias = 0;
 	prog->dyn.soname = "[program]";
@@ -128,12 +128,10 @@
 	 */
 
-	if (p_info->dynamic) {
-		DPRINTF("Load all program dependencies\n");
-		errno_t rc = module_load_deps(prog, 0);
-		if (rc != EOK) {
-			free(prog);
-			free(env);
-			return rc;
-		}
+	DPRINTF("Load all program dependencies\n");
+	errno_t rc = module_load_deps(prog, 0);
+	if (rc != EOK) {
+		free(prog);
+		free(env);
+		return rc;
 	}
 
