Bug 89935 - [Arm] Return from interrupt on Cortex-R52 must use eret instruction
Summary: [Arm] Return from interrupt on Cortex-R52 must use eret instruction
Status: UNCONFIRMED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 8.1.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-04-02 19:14 UTC by Alexander Fedotov
Modified: 2019-04-05 09:02 UTC (History)
1 user (show)

See Also:
Host:
Target: arm
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alexander Fedotov 2019-04-02 19:14:55 UTC
Compiling following code for Arm Cortex-r52:

extern int another_func(int);
void __attribute__ ((interrupt ("IRQ"))) IRQ_Handler(void)
{
  another_func(0);
}

gcc generates epilogue respectively:
  ldmfd    sp!, {r0, r1, r2, r3, r4, fp, ip, pc}^

The problem is that on Cortex-R52 virtualization is used so that when IRQ interrupt happens in Hypervisor mode (EL2) return from interrupt must use ERET instruction. Otherwise Undefined exception occurs (what actually corresponds to chapter F5.1.65 LDM (exception return) in https://static.docs.arm.com/ddi0487/da/DDI0487D_a_armv8_arm.pdf?_ga=2.927729.1146405679.1554127327-529207546.1554127327)

Probably we should introduce new ISR attribute like IRQ_el2 or IRQ_hyp.
Comment 1 Martin Liška 2019-04-05 08:38:15 UTC
Author: marxin
Date: Fri Apr  5 08:37:44 2019
New Revision: 270163

URL: https://gcc.gnu.org/viewcvs?rev=270163&root=gcc&view=rev
Log:
Remove usage of apostrophes in error and warning messages (PR translation/89935).

2019-04-05  Martin Liska  <mliska@suse.cz>

	PR translation/89935
	* check-internal-format-escaping.py: Properly detect wrong
	apostrophes.
2019-04-05  Martin Liska  <mliska@suse.cz>

	PR translation/89935
	* collect-utils.c (collect_execute): Use %< and %>, or %qs in
	order to wrap keywords or arguments.
	* collect2.c (main): Likewise.
	(scan_prog_file): Likewise.
	(scan_libraries): Likewise.
	* common/config/riscv/riscv-common.c (riscv_subset_list::parsing_subset_version): Likewise.
	(riscv_subset_list::parse_std_ext): Likewise.
	* config/aarch64/aarch64.c (aarch64_override_options_internal): Likewise.
	* config/arm/arm.c (arm_option_override): Likewise.
	* config/cris/cris.c (cris_print_operand): Likewise.
	* config/darwin-c.c (darwin_pragma_options): Likewise.
	(darwin_pragma_unused): Likewise.
	(darwin_pragma_ms_struct): Likewise.
	* config/ft32/ft32.c (ft32_print_operand): Likewise.
	* config/i386/i386.c (print_reg): Likewise.
	(ix86_print_operand): Likewise.
	* config/i386/xm-djgpp.h: Likewise.
	* config/iq2000/iq2000.c (iq2000_print_operand): Likewise.
	* config/m32c/m32c.c (m32c_option_override): Likewise.
	* config/msp430/msp430.c (msp430_option_override): Likewise.
	* config/nds32/nds32.c (nds32_option_override): Likewise.
	* config/nvptx/mkoffload.c (main): Likewise.
	* config/rx/rx.c (rx_print_operand): Likewise.
	(valid_psw_flag): Likewise.
	* config/vms/vms-c.c (vms_pragma_member_alignment): Likewise.
	(vms_pragma_nomember_alignment): Likewise.
	(vms_pragma_extern_model): Likewise.
	* lto-wrapper.c (compile_offload_image): Likewise.
	* omp-offload.c (oacc_parse_default_dims): Likewise.
	* symtab.c (symtab_node::verify_base): Likewise.
	* tlink.c (recompile_files): Likewise.
	(start_tweaking): Likewise.
	* tree-profile.c (parse_profile_filter): Likewise.
2019-04-05  Martin Liska  <mliska@suse.cz>

	PR translation/89935
	* objc-act.c (objc_add_property_declaration): Use %< and %>, or %qs in
	order to wrap keywords or arguments.
	(objc_add_synthesize_declaration_for_property): Likewise.

Modified:
    trunk/contrib/ChangeLog
    trunk/contrib/check-internal-format-escaping.py
    trunk/gcc/ChangeLog
    trunk/gcc/collect-utils.c
    trunk/gcc/collect2.c
    trunk/gcc/common/config/riscv/riscv-common.c
    trunk/gcc/config/aarch64/aarch64.c
    trunk/gcc/config/arm/arm.c
    trunk/gcc/config/cris/cris.c
    trunk/gcc/config/darwin-c.c
    trunk/gcc/config/ft32/ft32.c
    trunk/gcc/config/i386/i386.c
    trunk/gcc/config/i386/xm-djgpp.h
    trunk/gcc/config/iq2000/iq2000.c
    trunk/gcc/config/m32c/m32c.c
    trunk/gcc/config/msp430/msp430.c
    trunk/gcc/config/nds32/nds32.c
    trunk/gcc/config/nvptx/mkoffload.c
    trunk/gcc/config/rx/rx.c
    trunk/gcc/config/vms/vms-c.c
    trunk/gcc/lto-wrapper.c
    trunk/gcc/objc/ChangeLog
    trunk/gcc/objc/objc-act.c
    trunk/gcc/omp-offload.c
    trunk/gcc/symtab.c
    trunk/gcc/tlink.c
    trunk/gcc/tree-profile.c
Comment 2 Martin Liška 2019-04-05 09:02:28 UTC
(In reply to Martin Liška from comment #1)
> Author: marxin
> Date: Fri Apr  5 08:37:44 2019
> New Revision: 270163
> 
> URL: https://gcc.gnu.org/viewcvs?rev=270163&root=gcc&view=rev
> Log:
> Remove usage of apostrophes in error and warning messages (PR
> translation/89935).
> 
> 2019-04-05  Martin Liska  <mliska@suse.cz>
> 
> 	PR translation/89935
> 	* check-internal-format-escaping.py: Properly detect wrong
> 	apostrophes.
> 2019-04-05  Martin Liska  <mliska@suse.cz>
> 
> 	PR translation/89935
> 	* collect-utils.c (collect_execute): Use %< and %>, or %qs in
> 	order to wrap keywords or arguments.
> 	* collect2.c (main): Likewise.
> 	(scan_prog_file): Likewise.
> 	(scan_libraries): Likewise.
> 	* common/config/riscv/riscv-common.c
> (riscv_subset_list::parsing_subset_version): Likewise.
> 	(riscv_subset_list::parse_std_ext): Likewise.
> 	* config/aarch64/aarch64.c (aarch64_override_options_internal): Likewise.
> 	* config/arm/arm.c (arm_option_override): Likewise.
> 	* config/cris/cris.c (cris_print_operand): Likewise.
> 	* config/darwin-c.c (darwin_pragma_options): Likewise.
> 	(darwin_pragma_unused): Likewise.
> 	(darwin_pragma_ms_struct): Likewise.
> 	* config/ft32/ft32.c (ft32_print_operand): Likewise.
> 	* config/i386/i386.c (print_reg): Likewise.
> 	(ix86_print_operand): Likewise.
> 	* config/i386/xm-djgpp.h: Likewise.
> 	* config/iq2000/iq2000.c (iq2000_print_operand): Likewise.
> 	* config/m32c/m32c.c (m32c_option_override): Likewise.
> 	* config/msp430/msp430.c (msp430_option_override): Likewise.
> 	* config/nds32/nds32.c (nds32_option_override): Likewise.
> 	* config/nvptx/mkoffload.c (main): Likewise.
> 	* config/rx/rx.c (rx_print_operand): Likewise.
> 	(valid_psw_flag): Likewise.
> 	* config/vms/vms-c.c (vms_pragma_member_alignment): Likewise.
> 	(vms_pragma_nomember_alignment): Likewise.
> 	(vms_pragma_extern_model): Likewise.
> 	* lto-wrapper.c (compile_offload_image): Likewise.
> 	* omp-offload.c (oacc_parse_default_dims): Likewise.
> 	* symtab.c (symtab_node::verify_base): Likewise.
> 	* tlink.c (recompile_files): Likewise.
> 	(start_tweaking): Likewise.
> 	* tree-profile.c (parse_profile_filter): Likewise.
> 2019-04-05  Martin Liska  <mliska@suse.cz>
> 
> 	PR translation/89935
> 	* objc-act.c (objc_add_property_declaration): Use %< and %>, or %qs in
> 	order to wrap keywords or arguments.
> 	(objc_add_synthesize_declaration_for_property): Likewise.
> 
> Modified:
>     trunk/contrib/ChangeLog
>     trunk/contrib/check-internal-format-escaping.py
>     trunk/gcc/ChangeLog
>     trunk/gcc/collect-utils.c
>     trunk/gcc/collect2.c
>     trunk/gcc/common/config/riscv/riscv-common.c
>     trunk/gcc/config/aarch64/aarch64.c
>     trunk/gcc/config/arm/arm.c
>     trunk/gcc/config/cris/cris.c
>     trunk/gcc/config/darwin-c.c
>     trunk/gcc/config/ft32/ft32.c
>     trunk/gcc/config/i386/i386.c
>     trunk/gcc/config/i386/xm-djgpp.h
>     trunk/gcc/config/iq2000/iq2000.c
>     trunk/gcc/config/m32c/m32c.c
>     trunk/gcc/config/msp430/msp430.c
>     trunk/gcc/config/nds32/nds32.c
>     trunk/gcc/config/nvptx/mkoffload.c
>     trunk/gcc/config/rx/rx.c
>     trunk/gcc/config/vms/vms-c.c
>     trunk/gcc/lto-wrapper.c
>     trunk/gcc/objc/ChangeLog
>     trunk/gcc/objc/objc-act.c
>     trunk/gcc/omp-offload.c
>     trunk/gcc/symtab.c
>     trunk/gcc/tlink.c
>     trunk/gcc/tree-profile.c

Sorry for wrong commit entry, itb elongs to PR89935.