mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-05 23:23:09 +00: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:
@@ -1161,8 +1161,8 @@ ginsn_data_end (const symbolS *label)
|
|||||||
/* Build the cfg of ginsn(s) of the function. */
|
/* Build the cfg of ginsn(s) of the function. */
|
||||||
if (!frchain_now->frch_ginsn_data->gcfg_apt_p)
|
if (!frchain_now->frch_ginsn_data->gcfg_apt_p)
|
||||||
{
|
{
|
||||||
as_warn (_("Untraceable control flow for func '%s'; Skipping SCFI"),
|
as_bad (_("untraceable control flow for func '%s'"),
|
||||||
S_GET_NAME (func));
|
S_GET_NAME (func));
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*:20: Error: untraceable control flow for func 'foo'
|
||||||
GAS LISTING .*
|
GAS LISTING .*
|
||||||
|
|
||||||
|
|
||||||
@@ -12,23 +14,23 @@ GAS LISTING .*
|
|||||||
8 ginsn: SYM FUNC_BEGIN
|
8 ginsn: SYM FUNC_BEGIN
|
||||||
9 foo:
|
9 foo:
|
||||||
9 ginsn: SYM foo
|
9 ginsn: SYM foo
|
||||||
10 0000 4801D0 addq %rdx, %rax
|
10 \?\?\?\? 4801D0 addq %rdx, %rax
|
||||||
10 ginsn: ADD %r1, %r0, %r0
|
10 ginsn: ADD %r1, %r0, %r0
|
||||||
11 0003 E200 loop foo
|
11 \?\?\?\? E200 loop foo
|
||||||
11 ginsn: JCC
|
11 ginsn: JCC
|
||||||
12 0005 3EFFE0 notrack jmp \*%rax
|
12 \?\?\?\? 3EFFE0 notrack jmp \*%rax
|
||||||
12 ginsn: JMP %r0,
|
12 ginsn: JMP %r0,
|
||||||
13 0008 41FFD0 call \*%r8
|
13 \?\?\?\? 41FFD0 call \*%r8
|
||||||
13 ginsn: CALL
|
13 ginsn: CALL
|
||||||
14 000b 67E305 jecxz .L179
|
14 \?\?\?\? 67E305 jecxz .L179
|
||||||
14 ginsn: JCC
|
14 ginsn: JCC
|
||||||
15 000e FF6730 jmp \*48\(%rdi\)
|
15 \?\?\?\? FF6730 jmp \*48\(%rdi\)
|
||||||
15 ginsn: JMP %r5,
|
15 ginsn: JMP %r5,
|
||||||
16 0011 7000 jo .L179
|
16 \?\?\?\? 7000 jo .L179
|
||||||
16 ginsn: JCC
|
16 ginsn: JCC
|
||||||
17 .L179:
|
17 .L179:
|
||||||
17 ginsn: SYM .L179
|
17 ginsn: SYM .L179
|
||||||
18 0013 C3 ret
|
18 \?\?\?\? C3 ret
|
||||||
18 ginsn: RET
|
18 ginsn: RET
|
||||||
19 .LFE0:
|
19 .LFE0:
|
||||||
19 ginsn: SYM .LFE0
|
19 ginsn: SYM .LFE0
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
.*Assembler messages:
|
.*Assembler messages:
|
||||||
.*50: Warning: SCFI ignores most user-specified CFI directives
|
.*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'
|
||||||
|
|||||||
Reference in New Issue
Block a user