aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-expr.cc
diff options
context:
space:
mode:
authorSzabolcs Nagy <szabolcs.nagy@arm.com>2024-11-14 16:15:13 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2024-11-14 16:15:13 +0000
commit80fabc8d6ba8968abc36305c49564fe1ab1a120f (patch)
treeef7140b2df16919d85a6f253218952127191f499 /gcc/fortran/trans-expr.cc
parent6f73c29d2fc27708476377749f7823bb86004bad (diff)
downloadgcc-80fabc8d6ba8968abc36305c49564fe1ab1a120f.zip
gcc-80fabc8d6ba8968abc36305c49564fe1ab1a120f.tar.gz
gcc-80fabc8d6ba8968abc36305c49564fe1ab1a120f.tar.bz2
aarch64: Introduce indirect_return attribute
Tail calls of indirect_return functions from non-indirect_return functions are disallowed even if BTI is disabled, since the call site may have BTI enabled. Needed for swapcontext within the same function when GCS is enabled. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_gnu_attributes): Add indirect_return. (aarch64_gen_callee_cookie): Use indirect_return attribute. (aarch64_callee_indirect_return): New. (aarch_fun_is_indirect_return): New. (aarch64_function_ok_for_sibcall): Disallow tail calls if caller is non-indirect_return but callee is indirect_return. (aarch64_function_arg): Add indirect_return to cookie. (aarch64_init_cumulative_args): Record indirect_return in CUMULATIVE_ARGS. (aarch64_comp_type_attributes): Check indirect_return attribute. (aarch64_output_mi_thunk): Add indirect_return to cookie. * config/aarch64/aarch64.h (CUMULATIVE_ARGS): Add new field indirect_return. * config/aarch64/aarch64.md (tlsdesc_small_<mode>): Update. * config/aarch64/aarch64-opts.h (AARCH64_NUM_ABI_ATTRIBUTES): New. * config/aarch64/aarch64-protos.h (aarch64_gen_callee_cookie): Update. * config/arm/aarch-bti-insert.cc (call_needs_bti_j): New. (rest_of_insert_bti): Use call_needs_bti_j. * config/arm/aarch-common-protos.h (aarch_fun_is_indirect_return): New. * config/arm/arm.cc (aarch_fun_is_indirect_return): New. Co-authored-by: Yury Khrustalev <yury.khrustalev@arm.com>
Diffstat (limited to 'gcc/fortran/trans-expr.cc')
0 files changed, 0 insertions, 0 deletions