diff options
author | Freya Murphy <freya@freyacat.org> | 2024-09-23 10:13:38 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2024-09-23 10:13:38 -0400 |
commit | 9d3d75fecbf89ca526b95dd824b15a4d284e05c8 (patch) | |
tree | 969c28f4090595853a9ad863bb3812020b5aecaf /mld/link.h | |
parent | update readme (diff) | |
download | mips-9d3d75fecbf89ca526b95dd824b15a4d284e05c8.tar.gz mips-9d3d75fecbf89ca526b95dd824b15a4d284e05c8.tar.bz2 mips-9d3d75fecbf89ca526b95dd824b15a4d284e05c8.zip |
fix local vs global symbol names, locals now are local
Diffstat (limited to 'mld/link.h')
-rw-r--r-- | mld/link.h | 30 |
1 files changed, 28 insertions, 2 deletions
@@ -39,6 +39,9 @@ struct linker; struct object; struct segment; +struct string_table; +struct symbol_table; +struct symbol_table_mapping; /// /// relocation table @@ -79,13 +82,35 @@ struct symbol_table { Elf32_Sym *syms; size_t len; size_t size; + + // mapping for global symbol table + // can be null + // (metadata for each symbol) + struct symbol_table_mapping *map; }; +/// +/// symbol table map +/// (metadata for each symbol) +/// + int symtab_init(struct symbol_table *symtab); void symtab_free(struct symbol_table *symtab); int symtab_push(struct symbol_table *symtab, const Elf32_Sym *sym); -int symtab_get(struct symbol_table *symtab, Elf32_Sym **sym, const char *name); +int symtab_get(struct symbol_table *symtab, Elf32_Sym **sym, const char *name, + int32_t obj_idx); + +struct symbol_table_mapping { + uint32_t len; + uint32_t size; + struct object **meta; +}; + +int symtab_map_push(struct symbol_table_mapping *symtabm, struct object *seg); + +int symtab_map_init(struct symbol_table_mapping *symtabm); +void symtab_map_free(struct symbol_table_mapping *symtabm); /// /// segment @@ -211,7 +236,7 @@ struct object { struct symbol_table *symtabs; }; -int object_load(struct object *object, char *path); +int object_load(struct object *object, char *path, uint32_t index); void object_free(struct object *object); @@ -235,6 +260,7 @@ struct linker { struct string_table shstrtab; struct string_table strtab; struct symbol_table symtab; + struct symbol_table_mapping symtab_map; // output elf Elf32_Ehdr ehdr; |