https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120881

            Bug ID: 120881
           Summary: [16 Regression] -fstack-protector-all -pg doesn't call
                    mount at function entry
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: gcov-profile
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hjl.tools at gmail dot com
  Target Milestone: ---

[hjl@gnu-zen4-1 gcc]$ cat /tmp/x.c
__attribute__ ((weak)) __attribute__ ((noinline, noclone)) void
f1 (void)
{
}

__attribute__ ((weak)) __attribute__ ((noinline, noclone)) void
f2 (void)
{
  f1 ();

  asm volatile ("");
}

__attribute__ ((weak)) __attribute__ ((noinline, noclone)) void
f3 (int count)
{
  for (int i = 0; i < count; ++i)
    {
      f1 ();
      f2 ();
    }
}

int
main (void)
{
  f3 (1000);
  return 0;
}
[hjl@gnu-zen4-1 gcc]$ ./xgcc -B./ -fstack-protector-all -O2 -pg /tmp/x.c -S
[hjl@gnu-zen4-1 gcc]$ cat x.s
        .file   "x.c"
        .text
        .p2align 4
        .weak   f1
        .type   f1, @function
f1:
.LFB0:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        subq    $16, %rsp
1:      call    mcount
        movq    %fs:40, %rax
        movq    %rax, -8(%rbp)
        xorl    %eax, %eax
        movq    -8(%rbp), %rax
        subq    %fs:40, %rax
        jne     .L4
        leave
        .cfi_remember_state
        .cfi_def_cfa 7, 8
        ret
.L4:
        .cfi_restore_state
        call    __stack_chk_fail
        .cfi_endproc
.LFE0:
        .size   f1, .-f1
        .p2align 4
        .weak   f2
        .type   f2, @function
f2:
.LFB1:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        subq    $16, %rsp
1:      call    mcount
        movq    %fs:40, %rax
        movq    %rax, -8(%rbp)
        xorl    %eax, %eax
        call    f1
        movq    -8(%rbp), %rax
        subq    %fs:40, %rax
        jne     .L7
        leave
        .cfi_remember_state
        .cfi_def_cfa 7, 8
        ret
.L7:
        .cfi_restore_state
        call    __stack_chk_fail
        .cfi_endproc
.LFE1:
        .size   f2, .-f2
        .p2align 4
        .weak   f3
        .type   f3, @function
f3:
.LFB2:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        subq    $32, %rsp
        movq    %r12, -8(%rbp)
        .cfi_offset 12, -24
        movq    %fs:40, %r12
        movq    %r12, -24(%rbp)
        movl    %edi, %r12d
        testl   %r12d, %r12d
        jle     .L8
        movq    %rbx, -16(%rbp)
        .cfi_offset 3, -32
        xorl    %ebx, %ebx
        .p2align 4
        .p2align 3
.L10:
        call    f1
        addl    $1, %ebx
        call    f2
        cmpl    %ebx, %r12d
        jne     .L10
        movq    -16(%rbp), %rbx
        .cfi_restore 3
.L8:
        movq    -24(%rbp), %rax
        subq    %fs:40, %rax
        jne     .L13
        movq    -8(%rbp), %r12
        leave
        .cfi_remember_state
        .cfi_def_cfa 7, 8
        ret
.L13:
        .cfi_restore_state
        movq    %rbx, -16(%rbp)
        .cfi_offset 3, -32
1:      call    mcount  <<<<<<<<<< Isn't at the function entry.
        call    __stack_chk_fail
        .cfi_endproc
.LFE2:
        .size   f3, .-f3
        .section        .text.startup,"ax",@progbits
        .p2align 4
        .globl  main
        .type   main, @function
main:
.LFB3:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        subq    $16, %rsp
1:      call    mcount
        movq    %fs:40, %rdi
        movq    %rdi, -8(%rbp)
        movl    $1000, %edi
        call    f3
        movq    -8(%rbp), %rax
        subq    %fs:40, %rax
        jne     .L16
        leave
        .cfi_remember_state
        .cfi_def_cfa 7, 8
        xorl    %eax, %eax
        ret
.L16:
        .cfi_restore_state
        call    __stack_chk_fail
        .cfi_endproc
.LFE3:
        .size   main, .-main
        .ident  "GCC: (GNU) 16.0.0 20250629 (experimental)"
        .section        .note.GNU-stack,"",@progbits
[hjl@gnu-zen4-1 gcc]$

Reply via email to