diff options
| author | Emil <ez@la.mine.nu> | 2017-06-09 19:44:29 +0100 |
|---|---|---|
| committer | Emil <ez@la.mine.nu> | 2017-06-09 19:44:29 +0100 |
| commit | 3e028af453f037870ca36defe85d86a21eee3b49 (patch) | |
| tree | 8f1bf0e2a3927f1fa9740b4b976ffda60df632fc /tccelf.c | |
| parent | 3e4b7693bfd5b76570b35558c83a935326513eff (diff) | |
| download | tinycc-3e028af453f037870ca36defe85d86a21eee3b49.tar.gz tinycc-3e028af453f037870ca36defe85d86a21eee3b49.tar.bz2 | |
When creating a staticaly linked ELF program should not include
any dyn symbols. The if( !s1->static_link ) prevents tcc from
crashing when buiding a program linked to dietlibc.
The section header should not contain the number of local symbols when
the sh_size is null. This makes the header compliant and IDA will not
issue any warnings when an executable is disassembled.
Diffstat (limited to 'tccelf.c')
| -rw-r--r-- | tccelf.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -679,7 +679,8 @@ static void sort_syms(TCCState *s1, Section *s) p++; } /* save the number of local symbols in section header */ - s->sh_info = q - new_syms; + if( s->sh_size ) /* this 'if' makes IDA happy */ + s->sh_info = q - new_syms; /* then second pass for non local symbols */ p = (ElfW(Sym) *)s->data; @@ -1985,10 +1986,11 @@ static void tidy_section_headers(TCCState *s1, int *sec_order) for_each_elem(symtab_section, 1, sym, ElfW(Sym)) if (sym->st_shndx != SHN_UNDEF && sym->st_shndx < SHN_LORESERVE) sym->st_shndx = backmap[sym->st_shndx]; - for_each_elem(s1->dynsym, 1, sym, ElfW(Sym)) - if (sym->st_shndx != SHN_UNDEF && sym->st_shndx < SHN_LORESERVE) - sym->st_shndx = backmap[sym->st_shndx]; - + if( !s1->static_link ) { + for_each_elem(s1->dynsym, 1, sym, ElfW(Sym)) + if (sym->st_shndx != SHN_UNDEF && sym->st_shndx < SHN_LORESERVE) + sym->st_shndx = backmap[sym->st_shndx]; + } for (i = 0; i < s1->nb_sections; i++) sec_order[i] = i; tcc_free(s1->sections); |
