From 308531d148afa3fd77c0efc82a80b26300f9615a Mon Sep 17 00:00:00 2001 From: Stafford Horne Date: Thu, 28 Oct 2021 06:54:05 +0900 Subject: [PATCH] or1k: Add return address argument to _mcount call MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This fixes an issue in the glibc port I am working on where the build fails due to the warning: error: calling ‘__builtin_return_address’ with a nonzero argument is unsafe [-Werror=frame-address] This is due to how the current implementation of _mcount in glibc uses __builtin_return_address with a count argument of 1. Fix that by passing the value of LR_REGNUM to the _mcount function, effectivtly providing the value _mcount is after. This is an ABI change, but I think it's OK because the glibc port for or1k is not yet upstreamed. Also, I think just adding an argument should not break anything anyway. gcc/ChangeLog: * config/or1k/or1k.h (PROFILE_HOOK): Add return address argument to _mcount. --- gcc/config/or1k/or1k.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gcc/config/or1k/or1k.h b/gcc/config/or1k/or1k.h index 669907e..8a529f4 100644 --- a/gcc/config/or1k/or1k.h +++ b/gcc/config/or1k/or1k.h @@ -394,9 +394,10 @@ do { \ profiling a function entry. */ #define PROFILE_HOOK(LABEL) \ { \ - rtx fun; \ + rtx fun, ra; \ + ra = get_hard_reg_initial_val (Pmode, LR_REGNUM); \ fun = gen_rtx_SYMBOL_REF (Pmode, "_mcount"); \ - emit_library_call (fun, LCT_NORMAL, VOIDmode); \ + emit_library_call (fun, LCT_NORMAL, VOIDmode, ra, Pmode); \ } /* All the work is done in PROFILE_HOOK, but this is still required. */ -- 2.7.4