mirror of
https://github.com/mirror/tinycc.git
synced 2025-01-15 05:20:06 +08:00
Control symbol table of which to relocate symbols
Pass pointer to symbol table to relocate the symbols of in relocate_syms
This commit is contained in:
parent
c4bec037be
commit
097cf3aa5e
2
tcc.h
2
tcc.h
@ -1375,7 +1375,7 @@ ST_FUNC void put_stabn(int type, int other, int desc, int value);
|
|||||||
ST_FUNC void put_stabd(int type, int other, int desc);
|
ST_FUNC void put_stabd(int type, int other, int desc);
|
||||||
|
|
||||||
ST_FUNC void relocate_common_syms(void);
|
ST_FUNC void relocate_common_syms(void);
|
||||||
ST_FUNC void relocate_syms(TCCState *s1, int do_resolve);
|
ST_FUNC void relocate_syms(TCCState *s1, Section *symtab, int do_resolve);
|
||||||
ST_FUNC void relocate_section(TCCState *s1, Section *s);
|
ST_FUNC void relocate_section(TCCState *s1, Section *s);
|
||||||
ST_FUNC void relocate_plt(TCCState *s1);
|
ST_FUNC void relocate_plt(TCCState *s1);
|
||||||
|
|
||||||
|
6
tccelf.c
6
tccelf.c
@ -652,13 +652,13 @@ ST_FUNC void relocate_common_syms(void)
|
|||||||
|
|
||||||
/* relocate symbol table, resolve undefined symbols if do_resolve is
|
/* relocate symbol table, resolve undefined symbols if do_resolve is
|
||||||
true and output error if undefined symbol. */
|
true and output error if undefined symbol. */
|
||||||
ST_FUNC void relocate_syms(TCCState *s1, int do_resolve)
|
ST_FUNC void relocate_syms(TCCState *s1, Section *symtab, int do_resolve)
|
||||||
{
|
{
|
||||||
ElfW(Sym) *sym;
|
ElfW(Sym) *sym;
|
||||||
int sym_bind, sh_num;
|
int sym_bind, sh_num;
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
for_each_elem(symtab_section, 1, sym, ElfW(Sym)) {
|
for_each_elem(symtab, 1, sym, ElfW(Sym)) {
|
||||||
sh_num = sym->st_shndx;
|
sh_num = sym->st_shndx;
|
||||||
if (sh_num == SHN_UNDEF) {
|
if (sh_num == SHN_UNDEF) {
|
||||||
name = (char *) strtab_section->data + sym->st_name;
|
name = (char *) strtab_section->data + sym->st_name;
|
||||||
@ -1898,7 +1898,7 @@ static int final_sections_reloc(TCCState *s1)
|
|||||||
int i;
|
int i;
|
||||||
Section *s;
|
Section *s;
|
||||||
|
|
||||||
relocate_syms(s1, 0);
|
relocate_syms(s1, s1->symtab, 0);
|
||||||
|
|
||||||
if (s1->nb_errors != 0)
|
if (s1->nb_errors != 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
2
tccpe.c
2
tccpe.c
@ -1872,7 +1872,7 @@ ST_FUNC int pe_output_file(TCCState *s1, const char *filename)
|
|||||||
;
|
;
|
||||||
else if (filename) {
|
else if (filename) {
|
||||||
pe_assign_addresses(&pe);
|
pe_assign_addresses(&pe);
|
||||||
relocate_syms(s1, 0);
|
relocate_syms(s1, s1->symtab, 0);
|
||||||
for (i = 1; i < s1->nb_sections; ++i) {
|
for (i = 1; i < s1->nb_sections; ++i) {
|
||||||
Section *s = s1->sections[i];
|
Section *s = s1->sections[i];
|
||||||
if (s->reloc) {
|
if (s->reloc) {
|
||||||
|
Loading…
Reference in New Issue
Block a user