mirror of
https://github.com/TinyCC/tinycc.git
synced 2025-11-16 04:24:45 +00:00
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.
This commit is contained in:
4
tccasm.c
4
tccasm.c
@@ -907,6 +907,10 @@ static void asm_parse_directive(TCCState *s1, int global)
|
|||||||
sets alignment to PTR_SIZE. The assembler behaves different. */
|
sets alignment to PTR_SIZE. The assembler behaves different. */
|
||||||
if (old_nb_section != s1->nb_sections) {
|
if (old_nb_section != s1->nb_sections) {
|
||||||
cur_text_section->sh_addralign = 1;
|
cur_text_section->sh_addralign = 1;
|
||||||
|
/* Make .init and .fini sections executable by default.
|
||||||
|
GAS does so, too, and musl relies on it. */
|
||||||
|
if (!strcmp(sname, ".init") || !strcmp(sname, ".fini"))
|
||||||
|
flags |= SHF_EXECINSTR;
|
||||||
cur_text_section->sh_flags = flags;
|
cur_text_section->sh_flags = flags;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user