ld: implement an actual program loader
This commit is contained in:
59
sys/ld/image-list.h
Normal file
59
sys/ld/image-list.h
Normal file
@@ -0,0 +1,59 @@
|
||||
#ifndef IMAGE_LIST_H_
|
||||
#define IMAGE_LIST_H_
|
||||
|
||||
#include "btree.h"
|
||||
#include "queue.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define IMAGE_NAME_MAX 256
|
||||
|
||||
enum image_list_entry_type {
|
||||
IMAGE_LIST_ENTRY_NONE = 0,
|
||||
IMAGE_LIST_ENTRY_LEAF,
|
||||
IMAGE_LIST_ENTRY_BUCKET,
|
||||
};
|
||||
|
||||
struct image_list_entry {
|
||||
enum image_list_entry_type e_type;
|
||||
uint64_t e_hash;
|
||||
union {
|
||||
struct btree_node e_node;
|
||||
struct queue_entry e_entry;
|
||||
};
|
||||
};
|
||||
|
||||
struct image_list_bucket {
|
||||
struct image_list_entry b_base;
|
||||
struct queue b_items;
|
||||
};
|
||||
|
||||
struct image_list_leaf {
|
||||
struct image_list_entry l_base;
|
||||
char l_name[IMAGE_NAME_MAX];
|
||||
};
|
||||
|
||||
struct image_list {
|
||||
struct btree l_items;
|
||||
};
|
||||
|
||||
struct image_list_iterator {
|
||||
struct image_list_entry *it_cur;
|
||||
struct image_list_leaf *it_leaf;
|
||||
};
|
||||
|
||||
extern void image_list_init(struct image_list *list);
|
||||
extern void image_list_cleanup(struct image_list *list);
|
||||
|
||||
extern void image_list_put(
|
||||
struct image_list *list,
|
||||
struct image_list_leaf *item);
|
||||
extern struct image_list_leaf *image_list_get(
|
||||
struct image_list *list,
|
||||
const char *name);
|
||||
|
||||
extern void image_list_iterator_begin(
|
||||
struct image_list_iterator *it,
|
||||
struct image_list *list);
|
||||
extern void image_list_iterator_move_next(struct image_list_iterator *it);
|
||||
#endif
|
||||
Reference in New Issue
Block a user