]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
force-indirect-call-2.c: Allow indirect branch via GOT
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 31 Jan 2025 10:28:23 +0000 (18:28 +0800)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 31 Jan 2025 11:10:34 +0000 (19:10 +0800)
r15-1619-g3b9b8d6cfdf593 changed the codegen from

f2:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
movq f1@GOTPCREL(%rip), %rbx
call *%rbx
leaq f3(%rip), %rax
call *%rax
movq %rbx, %rax
popq %rbx
.cfi_def_cfa_offset 8
jmp *%rax
.cfi_endproc

to

f2:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
call *f1@GOTPCREL(%rip)
leaq f3(%rip), %rax
call *%rax
addq $8, %rsp
.cfi_def_cfa_offset 8
jmp *f1@GOTPCREL(%rip)
.cfi_endproc

Since it is OK to indirect call via memory for -mforce-indirect-call,
allow indirect branch via GOT.

PR target/115673
* gcc.target/i386/force-indirect-call-2.c: Allow indirect branch
via GOT.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
gcc/testsuite/gcc.target/i386/force-indirect-call-2.c

index 2f7023630415b97c5d9c380e43f2ff4adf1bdbad..405c97c800087fe46559dd797d5c4495d57fc787 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -mforce-indirect-call -fPIC" } */
 /* { dg-require-effective-target fpic } */
-/* { dg-final { scan-assembler-times "(?:call|jmp)\[ \\t\]+\\*%" 3 } } */
+/* { dg-final { scan-assembler-times "(?:call|jmp)\[ \\t\]+\\*" 3 } } */
 
 #include "force-indirect-call-1.c"