Message ID | 20190410180043.3799-1-jmoreira@suse.de |
---|---|
State | New |
Headers | show |
Series | Fix __patchable_function_entries section flags | expand |
On Wed, Apr 10, 2019 at 03:00:43PM -0300, Joao Moreira wrote: > When -fpatchable-relocation-entry is used, gcc places nops on the > prologue of each compiled function and creates a section named > __patchable_function_entries which holds relocation entries for the > positions in which the nops were placed. As is, gcc creates this > section without the proper section flags, causing crashes in the > compiled program during its load. > > Given the above, fix the problem by creating the section with the > SECTION_WRITE and SECTION_RELRO flags. > > The problem was noticed while compiling glibc with > -fpatchable-function-entry compiler flag. After applying the patch, > this issue was solved. > > This was also tested on x86-64 arch without visible problems under > the gcc standard tests. Thanks for the patch. Just some nits: > 2019-04-10 Joao Moreira <jmoreira@suse.de> Two spaces after the name. > > * gcc/targhooks.c (default_print_patchable_function_entry): emit > __patchable_function_entries section with writable flags to allow > relocation resolution. Please drop the gcc/ prefix and use capital E in "emit". > --- > gcc/targhooks.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/gcc/targhooks.c b/gcc/targhooks.c > index 318f7e9784a..9fbaa255747 100644 > --- a/gcc/targhooks.c > +++ b/gcc/targhooks.c > @@ -1814,7 +1814,7 @@ default_print_patchable_function_entry (FILE *file, > ASM_GENERATE_INTERNAL_LABEL (buf, "LPFE", patch_area_number); > > switch_to_section (get_section ("__patchable_function_entries", > - 0, NULL)); > + SECTION_WRITE | SECTION_RELRO , NULL)); Redundant space before ,. Marek
diff --git a/gcc/targhooks.c b/gcc/targhooks.c index 318f7e9784a..9fbaa255747 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -1814,7 +1814,7 @@ default_print_patchable_function_entry (FILE *file, ASM_GENERATE_INTERNAL_LABEL (buf, "LPFE", patch_area_number); switch_to_section (get_section ("__patchable_function_entries", - 0, NULL)); + SECTION_WRITE | SECTION_RELRO , NULL)); fputs (asm_op, file); assemble_name_raw (file, buf); fputc ('\n', file);