diff options
| author | Michael Matz <matz@suse.de> | 2014-04-04 17:54:52 +0200 |
|---|---|---|
| committer | Michael Matz <matz@suse.de> | 2014-04-04 17:54:52 +0200 |
| commit | 2024c445411f80b7c4b761322521d823e606418d (patch) | |
| tree | 7d3b6501f2a670312885d54fa12556a2961d758e /tccelf.c | |
| parent | f2c8491fc0ecf1870ed4db48029ef32dd3a9fd41 (diff) | |
| download | tinycc-2024c445411f80b7c4b761322521d823e606418d.tar.gz tinycc-2024c445411f80b7c4b761322521d823e606418d.tar.bz2 | |
run: Always create .got relocs
When output is memory we applied the correct GOT offset for certain
relocations (e.g. _GOT32), but we forgot to actually fill the got
entries with the final symbol values, so unconditionally create relocs
against .got as well.
Diffstat (limited to 'tccelf.c')
| -rw-r--r-- | tccelf.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -1173,6 +1173,13 @@ static unsigned long put_got_entry(TCCState *s1, put_elf_reloc(s1->dynsym, s1->got, s1->got->data_offset, reloc_type, index); + } else { + /* Without .dynsym (i.e. static link or memory output) we + still need relocs against the generated got, so as to fill + the entries with the symbol values (determined later). */ + put_elf_reloc(symtab_section, s1->got, + s1->got->data_offset, + reloc_type, sym_index); } /* And now create the GOT slot itself. */ ptr = section_ptr_add(s1->got, PTR_SIZE); |
