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

            Bug ID: 121318
           Summary: handle_tls_model_attribute failed to consider compiler
                    options
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hjl.tools at gmail dot com
  Target Milestone: ---

[hjl@gnu-cfl-3 tls-1]$ cat b4.c
extern const int afoo[3];

__thread const int *pfoo __attribute__ ((tls_model ("initial-exec"))) = afoo;

const int **
ppfoo (void)
{
  return &pfoo;
}
[hjl@gnu-cfl-3 tls-1]$ gcc -O3 -fPIE -ftls-model=initial-exec -S b4.c
[hjl@gnu-cfl-3 tls-1]$ cat b4.s
        .file   "b4.c"
        .text
        .p2align 4
        .globl  ppfoo
        .type   ppfoo, @function
ppfoo:
.LFB0:
        .cfi_startproc
        movq    pfoo@gottpoff(%rip), %rax
        addq    %fs:0, %rax
        ret
        .cfi_endproc
.LFE0:
        .size   ppfoo, .-ppfoo
        .globl  pfoo
        .section        .tdata,"awT",@progbits
        .align 8
        .type   pfoo, @object
        .size   pfoo, 8
pfoo:
        .quad   afoo
        .ident  "GCC: (GNU) 15.1.1 20250521 (Red Hat 15.1.1-2)"
        .section        .note.GNU-stack,"",@progbits
[hjl@gnu-cfl-3 tls-1]$ 

Since pfoo is defined locally, TLS_MODEL_LOCAL_EXEC should be used even with
__attribute__ ((tls_model ("initial-exec"))).  The expected code is

ppfoo:
.LFB0:
        .cfi_startproc
        movq    %fs:0, %rax
        addq    $pfoo@tpoff, %rax
        ret
        .cfi_endproc

Reply via email to