public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Indu Bhagat <indu.bhagat@oracle.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: binutils@sourceware.org
Subject: Re: [PATCH,V4 10/14] gas: synthesize CFI for hand-written asm
Date: Thu, 11 Jan 2024 10:14:45 -0800	[thread overview]
Message-ID: <a1e9b2be-e23b-446d-9d07-368094fec307@oracle.com> (raw)
In-Reply-To: <15461c7f-08eb-40a4-b24e-15df25b744e9@suse.com>

On 1/11/24 00:13, Jan Beulich wrote:
>>>>>>>>>> +    case 0xc2:
>>>>>>>>>> +    case 0xc3:
>>>>>>>>>> +      if (i.tm.opcode_space != SPACE_BASE)
>>>>>>>>>> +	break;
>>>>>>>>>> +      /* Near ret.  */
>>>>>>>>>> +      ginsn = ginsn_new_return (insn_end_sym, true);
>>>>>>>>>> +      ginsn_set_where (ginsn);
>>>>>>>>>> +      break;
>>>>>>>>> No tracking of the stack pointer adjustment?
>>>>>>>> No stack unwind information for a function is relevant after the
>>>>>>>> function has returned.  So, tracking of stack pointer adjustment by
>>>>>>>> return is not necessary.
>>>>>>> What information does the "return" insn then carry, beyond it being
>>>>>>> an unconditional branch (which you have a different insn for)?
>>>>>>>
>>>>>> "return" does not carry any more information than just the
>>>>>> GINSN_TYPE_RETURN as ginsn->type.
>>>>>>
>>>>>> So then why support both "return" and an unconditional branch: The
>>>>>> intention is to carry the semantic difference between ret and
>>>>>> unconditional jump.  Unconditional jumps may be to a label within
>>>>>> function, and in those cases, we use it for some validation and BB
>>>>>> linking when creating CFG. Return, OTOH, always indicates exit from
>>>>>> function.
>>>>>>
>>>>>> For SCFI purposes, above is the one use.  Future analyses may find other
>>>>>> use-cases for an explicit return ginsn.  But IMO, keeping
>>>>>> GINSN_TYPE_RETURN as an explicit insn makes the overall offering cleaner.
>>>>> Okay. And here you don't bother decoding operands. Hence why I'm
>>>>> asking the same to be the case for (e.g.) CALL.
>>>>>
>>>> It seems I will need to deal with operands of RETURN insn soon.  For
>>>> implementing "Warn if imbalanced stack at return", we will need this info.
>>> Will you? Isn't stack state_before_  the RET what matters (and hence
>>> the optional immediate still doesn't matter)?
>>>
>> RET with operand makes this tricky.
>>
>> My initial thought was:
>> "Balanced stack at function return" will check that the RSP at the entry
>> of the function (after the call instruction) is the same as that at the
>> return from the function (before the return instruction).
>>
>> Now if RET with operand (which tells how much stack to pop before an
>> eventual return) is in effect, I do need to check the RSP value right
>> before the RETURN (RETURN being the microOP/ginsn equivalent).
> No, that's not how it works. RET with operand discards arguments passed
> to the function (see Windows' __stdcall calling convention for an example
> use). Naturally arguments are pushed_before_  the return address.

Correct.  Even the manual clearly says "The optional source operand 
specifies the number of stack bytes to be released after the return 
address is popped; the default is none. This operand can be used to 
release parameters from the stack that were passed to the called
procedure and are no longer needed.".

So we will not need to deal with operands of RET insn.

  reply	other threads:[~2024-01-11 18:14 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-03  7:15 [PATCH,V4 00/14] Synthesize " Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 01/14] gas: dw2gencfi: minor rejig for cfi_sections_set and all_cfi_sections Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 02/14] gas: dw2gencfi: use all_cfi_sections instead of cfi_sections Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 03/14] gas: dw2gencfi: expose a new cfi_set_last_fde API Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 04/14] gas: dw2gencfi: move some tc_* defines to the header file Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 05/14] gas: dw2gencfi: expose dot_cfi_sections for scfidw2gen Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 06/14] gas: dw2gencfi: externalize the all_cfi_sections Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 07/14] gas: add new command line option --scfi[=all,none] Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 08/14] gas: scfidw2gen: new functionality to prepare for SCFI Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 09/14] opcodes: i386: new marker for insns that implicitly update stack pointer Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 10/14] gas: synthesize CFI for hand-written asm Indu Bhagat
2024-01-05 13:58   ` Jan Beulich
2024-01-08  0:46     ` Indu Bhagat
2024-01-08  8:16       ` Jan Beulich
2024-01-08  8:33         ` Indu Bhagat
2024-01-08 19:33     ` Indu Bhagat
2024-01-09  9:30       ` Jan Beulich
2024-01-10  6:10         ` Indu Bhagat
2024-01-10  9:44           ` Jan Beulich
2024-01-10 11:26             ` Indu Bhagat
2024-01-10 14:15               ` Jan Beulich
2024-01-10 19:43                 ` Indu Bhagat
2024-01-11  8:13                   ` Jan Beulich
2024-01-11 18:14                     ` Indu Bhagat [this message]
2024-01-17  1:20             ` Indu Bhagat
2024-01-17  8:09               ` Jan Beulich
2024-01-03  7:15 ` [PATCH,V4 11/14] gas: doc: update documentation for the new listing option Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 12/14] i386-reg.tbl: Add a comment to reflect dependency on ordering Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 13/14] gas: testsuite: add a x86_64 testsuite for SCFI Indu Bhagat
2024-01-05 14:22   ` Jan Beulich
2024-01-05 22:29     ` Indu Bhagat
2024-01-08  8:11       ` Jan Beulich
2024-01-03  7:15 ` [PATCH,V4 14/14] gas/NEWS: announce the new SCFI command line option Indu Bhagat
2024-01-03  7:43 ` [PATCH,V4 09/14] opcodes: i386: new marker for insns that implicitly update stack pointer Indu Bhagat
2024-01-05 14:05   ` [PATCH, V4 " Jan Beulich
2024-01-06 10:08     ` Indu Bhagat
2024-01-08  8:12       ` Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a1e9b2be-e23b-446d-9d07-368094fec307@oracle.com \
    --to=indu.bhagat@oracle.com \
    --cc=binutils@sourceware.org \
    --cc=jbeulich@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).