i386: Don't insert ENDBR after NOTE_INSN_DELETED_LABEL
NOTE_INSN_DELETED_LABEL is used to mark what used to be a 'code_label', but was not used for other purposes than taking its address which cannot be used as target for indirect jumps. Tested on Linux/x86-64 with -fcf-protection. For x86-64 libc.so on glibc master branch (commit f43b8dd55588c3), Before: 2961 endbr64 After: 2943 endbr64 gcc/ PR target/89355 * config/i386/i386-features.c (rest_of_insert_endbranch): Remove NOTE_INSN_DELETED_LABEL check. gcc/testsuite/ PR target/89355 * gcc.target/i386/cet-label-3.c: New test. * gcc.target/i386/cet-label-4.c: Likewise. * gcc.target/i386/cet-label-5.c: Likewise. Co-Authored-By: Hongtao Liu <hongtao.liu@intel.com> From-SVN: r271828
This commit is contained in:
parent
d030d4c5a4
commit
02ed904927
6 changed files with 63 additions and 4 deletions
|
@ -1,3 +1,10 @@
|
|||
2019-05-31 H.J. Lu <hongjiu.lu@intel.com>
|
||||
Hongtao Liu <hongtao.liu@intel.com>
|
||||
|
||||
PR target/89355
|
||||
* config/i386/i386-features.c (rest_of_insert_endbranch): Remove
|
||||
NOTE_INSN_DELETED_LABEL check.
|
||||
|
||||
2019-05-31 Prachi Godbole <prachi.godbole@imgtec.com>
|
||||
Robert Suchanek <robert.suchanek@mips.com>
|
||||
|
||||
|
|
|
@ -1911,10 +1911,7 @@ rest_of_insert_endbranch (void)
|
|||
continue;
|
||||
}
|
||||
|
||||
if ((LABEL_P (insn) && LABEL_PRESERVE_P (insn))
|
||||
|| (NOTE_P (insn)
|
||||
&& NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))
|
||||
/* TODO. Check /s bit also. */
|
||||
if (LABEL_P (insn) && LABEL_PRESERVE_P (insn))
|
||||
{
|
||||
cet_eb = gen_nop_endbr ();
|
||||
emit_insn_after (cet_eb, insn);
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2019-05-31 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR target/89355
|
||||
* gcc.target/i386/cet-label-3.c: New test.
|
||||
* gcc.target/i386/cet-label-4.c: Likewise.
|
||||
* gcc.target/i386/cet-label-5.c: Likewise.
|
||||
|
||||
2019-05-31 Dragan Mladjenovic <dmladjenovic@wavecomp.com>
|
||||
|
||||
* gcc.target/mips/msa-fmadd.c: New.
|
||||
|
|
23
gcc/testsuite/gcc.target/i386/cet-label-3.c
Normal file
23
gcc/testsuite/gcc.target/i386/cet-label-3.c
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* PR target/89355 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fcf-protection" } */
|
||||
/* { dg-final { scan-assembler-times "endbr32" 1 { target ia32 } } } */
|
||||
/* { dg-final { scan-assembler-times "endbr64" 1 { target { ! ia32 } } } } */
|
||||
int
|
||||
test (int* val)
|
||||
{
|
||||
int status = 99;
|
||||
|
||||
if (!val)
|
||||
{
|
||||
status = 22;
|
||||
goto end;
|
||||
}
|
||||
|
||||
extern int x;
|
||||
*val = x;
|
||||
|
||||
status = 0;
|
||||
end:
|
||||
return status;
|
||||
}
|
12
gcc/testsuite/gcc.target/i386/cet-label-4.c
Normal file
12
gcc/testsuite/gcc.target/i386/cet-label-4.c
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* PR target/89355 */
|
||||
/* { dg-do compile { target { fpic && lp64 } } } */
|
||||
/* { dg-options "-O2 -fcf-protection -fPIC -mcmodel=large" } */
|
||||
/* { dg-final { scan-assembler-times "endbr64" 1 } } */
|
||||
|
||||
extern int val;
|
||||
|
||||
int
|
||||
test (void)
|
||||
{
|
||||
return val;
|
||||
}
|
13
gcc/testsuite/gcc.target/i386/cet-label-5.c
Normal file
13
gcc/testsuite/gcc.target/i386/cet-label-5.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* PR target/89355 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fcf-protection -Wno-return-local-addr" } */
|
||||
/* { dg-final { scan-assembler-times "endbr32" 1 { target ia32 } } } */
|
||||
/* { dg-final { scan-assembler-times "endbr64" 1 { target { ! ia32 } } } } */
|
||||
|
||||
void *
|
||||
func (void)
|
||||
{
|
||||
return &&bar;
|
||||
bar:
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue