gas: scfi: untraceable control flow should be a hard error

PR gas/31284

Currently, if an indirect jump is seen, GCFG (a CFG of ginsns) cannot be
created, and the SCFI machinery bails out with a warning:
  "Warning: Untraceable control flow for func 'foo'; Skipping SCFI"

It is, however, better suited if this is a hard error.  Change it to a
hard error.  Also change the message to skip mentioning "SCFI", because
the error itself may also useful when ginsns are used for other passes
(distinct from SCFI) involving GCFG, like a pass to detect if there is
unreachable code.  Hence, simply say:
  "Error: untraceable control flow for func 'foo'"

gas/
PR gas/31284
	* ginsn.c (ginsn_data_end): Use as_bad instead of as_warn.

gas/testsuite/
PR gas/31284
	* gas/scfi/x86_64/ginsn-cofi-1.l: Adjust to the expected output
	in case of errors.
	* gas/scfi/x86_64/scfi-unsupported-cfg-1.l: Error not Warning.
This commit is contained in:
Indu Bhagat 2024-01-26 10:30:18 -08:00
parent 16cbeae1b2
commit 91cdbed4d7
3 changed files with 13 additions and 11 deletions

View File

@ -1161,8 +1161,8 @@ ginsn_data_end (const symbolS *label)
/* Build the cfg of ginsn(s) of the function. */
if (!frchain_now->frch_ginsn_data->gcfg_apt_p)
{
as_warn (_("Untraceable control flow for func '%s'; Skipping SCFI"),
S_GET_NAME (func));
as_bad (_("untraceable control flow for func '%s'"),
S_GET_NAME (func));
goto end;
}

View File

@ -1,3 +1,5 @@
.*: Assembler messages:
.*:20: Error: untraceable control flow for func 'foo'
GAS LISTING .*
@ -12,23 +14,23 @@ GAS LISTING .*
8 ginsn: SYM FUNC_BEGIN
9 foo:
9 ginsn: SYM foo
10 0000 4801D0 addq %rdx, %rax
10 \?\?\?\? 4801D0 addq %rdx, %rax
10 ginsn: ADD %r1, %r0, %r0
11 0003 E200 loop foo
11 \?\?\?\? E200 loop foo
11 ginsn: JCC
12 0005 3EFFE0 notrack jmp \*%rax
12 \?\?\?\? 3EFFE0 notrack jmp \*%rax
12 ginsn: JMP %r0,
13 0008 41FFD0 call \*%r8
13 \?\?\?\? 41FFD0 call \*%r8
13 ginsn: CALL
14 000b 67E305 jecxz .L179
14 \?\?\?\? 67E305 jecxz .L179
14 ginsn: JCC
15 000e FF6730 jmp \*48\(%rdi\)
15 \?\?\?\? FF6730 jmp \*48\(%rdi\)
15 ginsn: JMP %r5,
16 0011 7000 jo .L179
16 \?\?\?\? 7000 jo .L179
16 ginsn: JCC
17 .L179:
17 ginsn: SYM .L179
18 0013 C3 ret
18 \?\?\?\? C3 ret
18 ginsn: RET
19 .LFE0:
19 ginsn: SYM .LFE0

View File

@ -1,3 +1,3 @@
.*Assembler messages:
.*50: Warning: SCFI ignores most user-specified CFI directives
.*52: Warning: Untraceable control flow for func 'foo'; Skipping SCFI
.*52: Error: untraceable control flow for func 'foo'