Re: [tip: x86/asm] x86/asm: Make ASM_CALL_CONSTRAINT conditional on frame pointers

From: Uros Bizjak
Date: Tue Mar 04 2025 - 11:06:42 EST




On 4. 03. 25 00:59, H. Peter Anvin wrote:
On March 3, 2025 2:45:48 PM PST, Josh Poimboeuf <jpoimboe@xxxxxxxxxx> wrote:
On Mon, Mar 03, 2025 at 02:31:50PM -0800, H. Peter Anvin wrote:
+#ifdef CONFIG_UNWINDER_FRAME_POINTER
#define ASM_CALL_CONSTRAINT "r" (__builtin_frame_address(0))
+#else
+#define ASM_CALL_CONSTRAINT
+#endif

#endif /* __ASSEMBLY__ */


Wait, why was this changed? I actually tested this form at least once
and found that it didn't work under all circumstances...

Do you have any more details about where this didn't work? I tested
with several configs and it seems to work fine. Objtool will complain
if it doesn't work.

See here for the justification (the previous version was producing crap
code in Clang):

https://lore.kernel.org/dbea2ae2fb39bece21013f939ddeb15507baa7d3.1740964309.git.jpoimboe@xxxxxxxxxx


I need to dig it up, but I had a discussion about this with some gcc people about a year ago.

It was discussed here [1].

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117311

Uros.