From ccf9ed7d54910308ac1779d090cb38b5da2ad948 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 25 Nov 2016 21:29:01 +0000 Subject: [PATCH] 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 --- tccelf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tccelf.c b/tccelf.c index 2f8df1d..ac8fd0f 100644 --- a/tccelf.c +++ b/tccelf.c @@ -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;