summaryrefslogtreecommitdiff
path: root/kc/api/kc.h
diff options
context:
space:
mode:
authorAda Christine <adachristine18@gmail.com>2022-03-15 16:29:24 +0000
committerAda Christine <adachristine18@gmail.com>2022-03-15 16:29:24 +0000
commitec4aee35de3446713c6754641cdad82adc011204 (patch)
treefb40b7b153da4bbb47ec46b40144a18fbfbcf74b /kc/api/kc.h
parent97fcd7d1fc4574753d91e6767a8d8a7653a7f7fe (diff)
infrastructure for dynamic symbol resolution
Diffstat (limited to 'kc/api/kc.h')
-rw-r--r--kc/api/kc.h33
1 files changed, 32 insertions, 1 deletions
diff --git a/kc/api/kc.h b/kc/api/kc.h
index b4a6682..2e3b43c 100644
--- a/kc/api/kc.h
+++ b/kc/api/kc.h
@@ -1,5 +1,13 @@
#pragma once
+#ifndef __ASSEMBLER__
+
+#include <elf/elf64.h>
+
+#include <stddef.h>
+
+#define KC_EXPORT __attribute__((visibility("default")))
+
extern unsigned char kc_image_base;
extern unsigned char kc_text_begin;
extern unsigned char kc_text_end;
@@ -8,5 +16,28 @@ extern unsigned char kc_data_begin;
extern unsigned char kc_data_end;
extern unsigned char kc_image_end;
-#define KC_EXPORT __attribute__((visibility("default")))
+extern void kc_dynamic_init(void *base, Elf64_Dyn *dyn);
+extern void kc_reloc(
+ void *base,
+ Elf64_Rela *entries,
+ size_t size,
+ size_t entsize);
+
+extern void kc_resolve_symbol(void);
+
+#else
+
+.extern kc_image_base
+.extern kc_text_begin
+.extern kc_text_end
+.extern kc_rodata_begin
+.extern kc_rodata_end
+.extern kc_data_begin
+.extern kc_data_end
+.extern kc_image_end
+.extern _DYNAMIC
+
+.extern kc_dynamic_init
+
+#endif // __ASSEMBLER__