diff options
| author | root <root@mallow.celest.fr> | 2016-11-25 21:29:01 +0000 |
|---|---|---|
| committer | Thomas Preud'homme <robotux@celest.fr> | 2016-12-03 17:26:50 +0000 |
| commit | ccf9ed7d54910308ac1779d090cb38b5da2ad948 (patch) | |
| tree | 4d3ed1fb47dc30c70e0099c665f33aba78602cdd /tccelf.c | |
| parent | ed99f3608df3d6dd4c8c7d52d608a8212203dfe4 (diff) | |
| download | tinycc-ccf9ed7d54910308ac1779d090cb38b5da2ad948.tar.gz tinycc-ccf9ed7d54910308ac1779d090cb38b5da2ad948.tar.bz2 | |
Clear SHF_GROUP flag when linking
SHF_GROUP flag set on a section indicates that it is part of a section
group and that if the section is removed, the other sections in the same
group should be removed as well [1]. Since section group are guide for
the linking process, they do not have any meaning after linking has
occured. TCC rightfully [2] discard such sections (by not recognizing the
section type) but keeps the SHF_GROUP flag set on sections that were
part of a section group which confuses binutils (objdump and gdb at
least). Clearing that bit makes objdump and gdb accept binaries created
by TCC.
[1] https://docs.oracle.com/cd/E19683-01/816-1386/chapter7-26/index.html
[2] GNU ld does the same
Diffstat (limited to 'tccelf.c')
| -rw-r--r-- | tccelf.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -3047,7 +3047,7 @@ ST_FUNC int tcc_load_object_file(TCCState *s1, } } /* not found: create new section */ - s = new_section(s1, sh_name, sh->sh_type, sh->sh_flags); + s = new_section(s1, sh_name, sh->sh_type, sh->sh_flags & ~SHF_GROUP); /* take as much info as possible from the section. sh_link and sh_info will be updated later */ s->sh_addralign = sh->sh_addralign; |
