Index: uspace/lib/c/generic/rtld/rtld.c
===================================================================
--- uspace/lib/c/generic/rtld/rtld.c	(revision c576800952e07575202b2da8af33796cbbc9ebe9)
+++ uspace/lib/c/generic/rtld/rtld.c	(revision 31ea2a7b402ca14939caa6c5f580a5c7f3e3a190)
@@ -45,5 +45,5 @@
 static rtld_t rt_env_static;
 
-/** Initialize the runtime linker for use in a statically-linked executable. */
+/** Initialize a minimal runtime linker environment for use in executables loaded directly by kernel. */
 errno_t rtld_init_static(void)
 {
@@ -65,5 +65,5 @@
 }
 
-/** Initialize and process a dynamically linked executable.
+/** Initialize and process an executable, static or dynamic.
  *
  * @param p_info Program info
@@ -75,5 +75,5 @@
 	module_t *prog;
 
-	DPRINTF("Load dynamically linked program.\n");
+	DPRINTF("Load program with rtld.\n");
 
 	/* Allocate new RTLD environment to pass to the loaded program */
@@ -95,6 +95,10 @@
 	 */
 
-	DPRINTF("Parse program .dynamic section at %p\n", p_info->dynamic);
-	dynamic_parse(p_info->dynamic, 0, &prog->dyn);
+	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");
+	}
 	prog->bias = 0;
 	prog->dyn.soname = "[program]";
@@ -124,8 +128,12 @@
 	 */
 
-	DPRINTF("Load all program dependencies\n");
-	errno_t rc = module_load_deps(prog, 0);
-	if (rc != EOK) {
-		return rc;
+	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;
+		}
 	}
 
