[v2] Fix __patchable_function_entries section flags

Message ID 20190411171807.26796-1-jmoreira@suse.de
State New
Headers show
Series
  • [v2] Fix __patchable_function_entries section flags
Related show

Commit Message

Joao Moreira April 11, 2019, 5:18 p.m.
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.

2019-04-10  Joao Moreira  <jmoreira@suse.de>

	* targhooks.c (default_print_patchable_function_entry): Emit
	__patchable_function_entries section with writable flags to allow
	relocation resolution.

Signed-off-by: Joao Moreira <jmoreira@suse.de>

---
 gcc/targhooks.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.16.4

Comments

Jeff Law April 12, 2019, 4:19 p.m. | #1
On 4/11/19 11:18 AM, 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.

> 

> 2019-04-10  Joao Moreira  <jmoreira@suse.de>

> 

> 	* targhooks.c (default_print_patchable_function_entry): Emit

> 	__patchable_function_entries section with writable flags to allow

> 	relocation resolution.

OK.  Do you have write access to the GCC repo?

jeff
>
Joao Moreira April 15, 2019, 4:31 p.m. | #2
On 4/12/19 1:19 PM, Jeff Law wrote:
> On 4/11/19 11:18 AM, 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.

>>

>> 2019-04-10  Joao Moreira  <jmoreira@suse.de>

>>

>> 	* targhooks.c (default_print_patchable_function_entry): Emit

>> 	__patchable_function_entries section with writable flags to allow

>> 	relocation resolution.

> OK.  Do you have write access to the GCC repo?

> 

No.

Tks,
Joao.

> jeff

>>
Jeff Law April 17, 2019, 6:25 p.m. | #3
On 4/15/19 10:31 AM, Joao Moreira wrote:
> 

> 

> On 4/12/19 1:19 PM, Jeff Law wrote:

>> On 4/11/19 11:18 AM, 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.

>>>

>>> 2019-04-10  Joao Moreira  <jmoreira@suse.de>

>>>

>>>     * targhooks.c (default_print_patchable_function_entry): Emit

>>>     __patchable_function_entries section with writable flags to allow

>>>     relocation resolution.

>> OK.  Do you have write access to the GCC repo?

>>

> No.

I went ahead and installed on the trunk for you.  Are you going to be
working on GCC regularly?  If so it might make sense to go ahead and get
that access setup.

Jeff

Patch

diff --git a/gcc/targhooks.c b/gcc/targhooks.c
index 318f7e9784a..e6f54ddf41b 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);