mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-04-06 14:21:43 +08:00
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:
parent
16cbeae1b2
commit
91cdbed4d7
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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'
|
||||
|
Loading…
x
Reference in New Issue
Block a user