PatchworkOS
28a9544
A non-POSIX operating system.
Theme:
Default
Round
Robot
Loading...
Searching...
No Matches
symbol.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <
kernel/utils/map.h
>
4
5
#include <
boot/boot_info.h
>
6
7
#include <
sys/elf.h
>
8
#include <
sys/list.h
>
9
57
#define SYMBOL_MAX_NAME MAP_KEY_MAX_LENGTH
58
67
typedef
uint64_t
symbol_group_id_t
;
68
75
typedef
struct
76
{
77
map_entry_t
mapEntry
;
78
symbol_group_id_t
id
;
79
list_t
names
;
80
}
symbol_group_t
;
81
88
typedef
struct
89
{
90
list_entry_t
groupEntry
;
91
map_entry_t
mapEntry
;
92
list_t
addrs
;
93
char
name[
SYMBOL_MAX_NAME
];
94
}
symbol_name_t
;
95
103
typedef
struct
104
{
105
list_entry_t
nameEntry
;
106
void
*
addr
;
107
symbol_group_id_t
groupId
;
108
Elf64_Symbol_Binding
binding
;
109
Elf64_Symbol_Type
type
;
110
}
symbol_addr_t
;
111
118
typedef
struct
119
{
120
char
name[
SYMBOL_MAX_NAME
];
121
void
*
addr
;
122
symbol_group_id_t
groupId
;
123
Elf64_Symbol_Binding
binding
;
124
Elf64_Symbol_Type
type
;
125
}
symbol_info_t
;
126
134
symbol_group_id_t
symbol_generate_group_id
(
void
);
135
151
uint64_t
symbol_add
(
const
char
* name,
void
* addr,
symbol_group_id_t
groupId,
Elf64_Symbol_Binding
binding,
152
Elf64_Symbol_Type
type);
153
159
void
symbol_remove_group
(
symbol_group_id_t
groupId);
160
174
uint64_t
symbol_resolve_addr
(
symbol_info_t
* outSymbol,
void
* addr);
175
183
uint64_t
symbol_resolve_name
(
symbol_info_t
* outSymbol,
const
char
* name);
184
boot_info.h
elf.h
symbol_resolve_name
uint64_t symbol_resolve_name(symbol_info_t *outSymbol, const char *name)
Resolve a symbol by name.
Definition
symbol.c:344
symbol_group_id_t
uint64_t symbol_group_id_t
Symbol group identifier type.
Definition
symbol.h:67
symbol_resolve_addr
uint64_t symbol_resolve_addr(symbol_info_t *outSymbol, void *addr)
Resolve a symbol by address.
Definition
symbol.c:338
symbol_add
uint64_t symbol_add(const char *name, void *addr, symbol_group_id_t groupId, Elf64_Symbol_Binding binding, Elf64_Symbol_Type type)
Add a symbol to the kernel symbol table.
Definition
symbol.c:165
SYMBOL_MAX_NAME
#define SYMBOL_MAX_NAME
Maximum length of a symbol name.
Definition
symbol.h:57
symbol_remove_group
void symbol_remove_group(symbol_group_id_t groupId)
Remove all symbols from the kernel symbol table in the given group.
Definition
symbol.c:278
symbol_generate_group_id
symbol_group_id_t symbol_generate_group_id(void)
Generate a unique symbol group identifier.
Definition
symbol.c:24
Elf64_Symbol_Binding
Elf64_Symbol_Binding
Symbol binding values stored in st_info.
Definition
elf.h:565
Elf64_Symbol_Type
Elf64_Symbol_Type
Symbol type values stored in st_info.
Definition
elf.h:588
list.h
map.h
uint64_t
__UINT64_TYPE__ uint64_t
Definition
stdint.h:17
list_entry_t
A entry in a doubly linked list.
Definition
list.h:38
list_t
A doubly linked list.
Definition
list.h:51
map_entry_t
Map entry structure.
Definition
map.h:68
symbol_addr_t
Symbol address mapping structure.
Definition
symbol.h:104
symbol_addr_t::groupId
symbol_group_id_t groupId
Definition
symbol.h:107
symbol_addr_t::binding
Elf64_Symbol_Binding binding
Definition
symbol.h:108
symbol_addr_t::addr
void * addr
Definition
symbol.h:106
symbol_addr_t::type
Elf64_Symbol_Type type
Definition
symbol.h:109
symbol_addr_t::nameEntry
list_entry_t nameEntry
Definition
symbol.h:105
symbol_group_t
Definition
symbol.h:76
symbol_group_t::names
list_t names
Definition
symbol.h:79
symbol_group_t::mapEntry
map_entry_t mapEntry
Definition
symbol.h:77
symbol_group_t::id
symbol_group_id_t id
Definition
symbol.h:78
symbol_info_t
Symbol information structure.
Definition
symbol.h:119
symbol_info_t::addr
void * addr
Definition
symbol.h:121
symbol_info_t::groupId
symbol_group_id_t groupId
Definition
symbol.h:122
symbol_info_t::binding
Elf64_Symbol_Binding binding
Definition
symbol.h:123
symbol_info_t::type
Elf64_Symbol_Type type
Definition
symbol.h:124
symbol_name_t
Symbol name mapping structure.
Definition
symbol.h:89
symbol_name_t::groupEntry
list_entry_t groupEntry
Definition
symbol.h:90
symbol_name_t::addrs
list_t addrs
Definition
symbol.h:92
symbol_name_t::mapEntry
map_entry_t mapEntry
Definition
symbol.h:91
include
kernel
module
symbol.h
Generated by
1.9.8