Add patch_area_size and patch_area_entry to crtl
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 2 May 2020 04:03:10 +0000 (21:03 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 2 May 2020 04:04:01 +0000 (21:04 -0700)
commit6607bdd99994c834f92fce924abdaea3405f62dc
tree9263654efb733aa5e0fdd7c218ab784c96ae69e0
parent23c42a01bce298d1578bd0421db1d463739cdf2b
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.
12 files changed:
gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-attribs.c
gcc/cfgexpand.c
gcc/doc/invoke.texi
gcc/emit-rtl.h
gcc/opts.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/patchable_function_entry-error-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/patchable_function_entry-error-2.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/patchable_function_entry-error-3.c [new file with mode: 0644]
gcc/varasm.c