diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2020-05-01 21:03:10 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2020-05-01 21:04:01 -0700 |
commit | 6607bdd99994c834f92fce924abdaea3405f62dc (patch) | |
tree | 9263654efb733aa5e0fdd7c218ab784c96ae69e0 /gcc/opts.c | |
parent | 23c42a01bce298d1578bd0421db1d463739cdf2b (diff) | |
download | gcc-6607bdd99994c834f92fce924abdaea3405f62dc.zip gcc-6607bdd99994c834f92fce924abdaea3405f62dc.tar.gz gcc-6607bdd99994c834f92fce924abdaea3405f62dc.tar.bz2 |
Add patch_area_size and patch_area_entry to crtl
Currently patchable area is at the wrong place. It is placed immediately
after function label and before .cfi_startproc. A backend should be able
to add a pseudo patchable area instruction durectly into RTL. This patch
adds patch_area_size and patch_area_entry to crtl so that the patchable
area info is available in RTL passes.
It also limits patch_area_size and patch_area_entry to 65535, which is
a reasonable maximum size for patchable area.
gcc/
PR target/93492
* cfgexpand.c (pass_expand::execute): Set crtl->patch_area_size
and crtl->patch_area_entry.
* emit-rtl.h (rtl_data): Add patch_area_size and patch_area_entry.
* opts.c (common_handle_option): Limit
function_entry_patch_area_size and function_entry_patch_area_start
to USHRT_MAX. Fix a typo in error message.
* varasm.c (assemble_start_function): Use crtl->patch_area_size
and crtl->patch_area_entry.
* doc/invoke.texi: Document the maximum value for
-fpatchable-function-entry.
gcc/c-family/
PR target/93492
* c-attribs.c (handle_patchable_function_entry_attribute): Limit
value to USHRT_MAX (65535).
gcc/testsuite/
PR target/93492
* c-c++-common/patchable_function_entry-error-1.c: New test.
* c-c++-common/patchable_function_entry-error-2.c: Likewise.
* c-c++-common/patchable_function_entry-error-3.c: Likewise.
Diffstat (limited to 'gcc/opts.c')
-rw-r--r-- | gcc/opts.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -2615,10 +2615,12 @@ common_handle_option (struct gcc_options *opts, function_entry_patch_area_start = 0; } if (function_entry_patch_area_size < 0 + || function_entry_patch_area_size > USHRT_MAX || function_entry_patch_area_start < 0 + || function_entry_patch_area_start > USHRT_MAX || function_entry_patch_area_size < function_entry_patch_area_start) - error ("invalid arguments for %<-fpatchable_function_entry%>"); + error ("invalid arguments for %<-fpatchable-function-entry%>"); free (patch_area_arg); } break; |