Skip to content

Commit ba0899d

Browse files
author
Stefan
committed
tccasm.c: Make .init and .fini sections executable
GAS selects default attributes for a section based on its name and makes the sections .text, .init, .fini executable. The crti.s and crtn.s files of musl rely on these defaults and don't set the "x" flag for the .init and .fini sections. Unfortunately TCC does not care for .init and .fini section defaults in assembler or C code. Fix this for assembler code.
1 parent 2f88764 commit ba0899d

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

tccasm.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -907,6 +907,10 @@ static void asm_parse_directive(TCCState *s1, int global)
907907
sets alignment to PTR_SIZE. The assembler behaves different. */
908908
if (old_nb_section != s1->nb_sections) {
909909
cur_text_section->sh_addralign = 1;
910+
/* Make .init and .fini sections executable by default.
911+
GAS does so, too, and musl relies on it. */
912+
if (!strcmp(sname, ".init") || !strcmp(sname, ".fini"))
913+
flags |= SHF_EXECINSTR;
910914
cur_text_section->sh_flags = flags;
911915
}
912916
}

0 commit comments

Comments
 (0)