Index: kernel/generic/include/debug/line.h
===================================================================
--- kernel/generic/include/debug/line.h	(revision 1170cfc70c2aa7932fed750ddf238fbb29481f55)
+++ kernel/generic/include/debug/line.h	(revision 84d29a2469f6e9f8b8996192f61028dba140b6e7)
@@ -33,4 +33,5 @@
 #include <stddef.h>
 #include <stdint.h>
+#include <debug/sections.h>
 
 struct debug_line_program_header {
@@ -103,5 +104,5 @@
 }
 
-extern bool debug_line_get_address_info(uintptr_t addr, int op_index, const char **file, const char **dir, int *line, int *col);
+extern bool debug_line_get_address_info(debug_sections_t *scs, uintptr_t addr, int op_index, const char **file, const char **dir, int *line, int *col);
 
 #endif /* DWARFS_LINE_H_ */
Index: kernel/generic/include/debug/sections.h
===================================================================
--- kernel/generic/include/debug/sections.h	(revision 1170cfc70c2aa7932fed750ddf238fbb29481f55)
+++ kernel/generic/include/debug/sections.h	(revision 84d29a2469f6e9f8b8996192f61028dba140b6e7)
@@ -33,36 +33,42 @@
 #include <stddef.h>
 
-extern const void *debug_aranges;
-extern size_t debug_aranges_size;
+typedef struct {
+	const void *debug_aranges;
+	size_t debug_aranges_size;
 
-extern const void *debug_info;
-extern size_t debug_info_size;
+	const void *debug_info;
+	size_t debug_info_size;
 
-extern const void *debug_abbrev;
-extern size_t debug_abbrev_size;
+	const void *debug_abbrev;
+	size_t debug_abbrev_size;
 
-extern const void *debug_line;
-extern size_t debug_line_size;
+	const void *debug_line;
+	size_t debug_line_size;
 
-extern const char *debug_str;
-extern size_t debug_str_size;
+	const char *debug_str;
+	size_t debug_str_size;
 
-extern const char *debug_line_str;
-extern size_t debug_line_str_size;
+	const char *debug_line_str;
+	size_t debug_line_str_size;
 
-extern const void *debug_rnglists;
-extern size_t debug_rnglists_size;
+	const void *debug_rnglists;
+	size_t debug_rnglists_size;
 
-extern const void *eh_frame_hdr;
-extern size_t eh_frame_hdr_size;
+	const void *eh_frame_hdr;
+	size_t eh_frame_hdr_size;
 
-extern const void *eh_frame;
-extern size_t eh_frame_size;
+	const void *eh_frame;
+	size_t eh_frame_size;
 
-extern const elf_symbol_t *symtab;
-extern size_t symtab_size;
+	const elf_symbol_t *symtab;
+	size_t symtab_size;
 
-extern const char *strtab;
-extern size_t strtab_size;
+	const char *strtab;
+	size_t strtab_size;
+} debug_sections_t;
+
+extern debug_sections_t kernel_sections;
+
+debug_sections_t get_debug_sections(const void *elf, size_t elf_size);
 
 #endif /* DEBUG_SECTIONS_H_ */
Index: kernel/generic/include/proc/program.h
===================================================================
--- kernel/generic/include/proc/program.h	(revision 1170cfc70c2aa7932fed750ddf238fbb29481f55)
+++ kernel/generic/include/proc/program.h	(revision 84d29a2469f6e9f8b8996192f61028dba140b6e7)
@@ -56,5 +56,5 @@
 
 extern errno_t program_create(as_t *, uspace_addr_t, char *, program_t *);
-extern errno_t program_create_from_image(void *, char *, program_t *);
+extern errno_t program_create_from_image(void *, size_t, char *, program_t *);
 extern errno_t program_create_loader(program_t *, char *);
 extern void program_ready(program_t *);
Index: kernel/generic/include/proc/task.h
===================================================================
--- kernel/generic/include/proc/task.h	(revision 1170cfc70c2aa7932fed750ddf238fbb29481f55)
+++ kernel/generic/include/proc/task.h	(revision 84d29a2469f6e9f8b8996192f61028dba140b6e7)
@@ -36,26 +36,27 @@
 #define KERN_TASK_H_
 
-#include <cpu.h>
-#include <ipc/ipc.h>
-#include <ipc/event.h>
-#include <ipc/kbox.h>
-#include <synch/spinlock.h>
-#include <synch/mutex.h>
+#include <abi/proc/task.h>
+#include <abi/sysinfo.h>
 #include <adt/list.h>
 #include <adt/odict.h>
-#include <security/perm.h>
+#include <arch/context.h>
+#include <arch/cpu.h>
+#include <arch/fpu_context.h>
 #include <arch/proc/task.h>
 #include <arch/proc/thread.h>
-#include <arch/context.h>
-#include <arch/fpu_context.h>
-#include <arch/cpu.h>
+#include <arch.h>
+#include <cap/cap.h>
+#include <cpu.h>
+#include <debug/sections.h>
+#include <ipc/event.h>
+#include <ipc/ipc.h>
+#include <ipc/kbox.h>
+#include <mm/as.h>
 #include <mm/tlb.h>
 #include <proc/scheduler.h>
+#include <security/perm.h>
+#include <synch/mutex.h>
+#include <synch/spinlock.h>
 #include <udebug/udebug.h>
-#include <mm/as.h>
-#include <abi/proc/task.h>
-#include <abi/sysinfo.h>
-#include <arch.h>
-#include <cap/cap.h>
 
 #define TASK                 CURRENT->task
@@ -131,4 +132,6 @@
 	uint64_t ucycles;
 	uint64_t kcycles;
+
+	debug_sections_t *debug_sections;
 } task_t;
 
Index: kernel/generic/include/symtab.h
===================================================================
--- kernel/generic/include/symtab.h	(revision 1170cfc70c2aa7932fed750ddf238fbb29481f55)
+++ kernel/generic/include/symtab.h	(revision 84d29a2469f6e9f8b8996192f61028dba140b6e7)
@@ -36,5 +36,7 @@
 #define KERN_SYMTAB_H_
 
+#include <stdbool.h>
 #include <typedefs.h>
+#include <debug/sections.h>
 
 extern void symtab_print_search(const char *);
@@ -42,5 +44,5 @@
 extern const char *symtab_fmt_name_lookup(uintptr_t);
 extern errno_t symtab_addr_lookup(const char *, uintptr_t *);
-extern const char *symtab_name_lookup(uintptr_t, uintptr_t *);
+extern const char *symtab_name_lookup(uintptr_t, uintptr_t *, debug_sections_t *);
 
 #endif
