bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/25416] TLSDESC relaxation doesn't work for x32


From: hjl.tools at gmail dot com
Subject: [Bug ld/25416] TLSDESC relaxation doesn't work for x32
Date: Sat, 18 Jan 2020 21:17:38 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=25416

H.J. Lu <hjl.tools at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|TLSDESC relaxation doesn    |TLSDESC relaxation doesn't
                   |                            |work for x32

--- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> ---
For X32, TLSDESC generates

1. -maddress-mode=short

        lea     foo@TLSDESC(%rip), %eax
        call    *foo@TLSCALL(%eax)

2. -maddress-mode=long

        lea     foo@TLSDESC(%rip), %rax
        call    *foo@TLSCALL(%rax)

Currently, I got

[hjl@gnu-cfl-2 tls-x32]$ cat main.c
#include <stdlib.h>
#include <stdio.h>

__thread int bar = 301;

extern int *test1 (int);
extern int *test2 (int);

int
main ()
{
  int *p;
  p = test1 (30);
  if (*p != 30)
    abort ();
  *p = 40;
  test1 (40);
  p = test2 (301);
  if (*p != 301)
    abort ();
  if (p != &bar)
    abort ();
  *p = 40;
  test2 (40);
  puts ("PASS");
  return 0;
}
[hjl@gnu-cfl-2 tls-x32]$ cat tlsdes.S
        .text
        .p2align 4
        .globl  test1
        .type   test1, @function
test1:
        .cfi_startproc
        subl    $8, %esp
        .cfi_def_cfa_offset 16
        lea     foo@TLSDESC(%rip), %eax
        call    *foo@TLSCALL(%eax)
        addl    %fs:0, %eax
        cmpl    %edi, (%eax)
        jne     .L5
        addl    $8, %esp
        .cfi_remember_state
        .cfi_def_cfa_offset 8
        ret
.L5:
        .cfi_restore_state
        call    abort@PLT
        .cfi_endproc
        .size   test1, .-test1
        .p2align 4
        .globl  test2
        .type   test2, @function
test2:
        .cfi_startproc
        subl    $8, %esp
        .cfi_def_cfa_offset 16
        lea     bar@TLSDESC(%rip), %eax
        call    *bar@TLSCALL(%eax)
        addl    %fs:0, %eax
        cmpl    %edi, (%eax)
        jne     .L9
        addl    $8, %esp
        .cfi_remember_state
        .cfi_def_cfa_offset 8
        ret
.L9:
        .cfi_restore_state
        call    abort@PLT
        .cfi_endproc
        .size   test2, .-test2
        .section        .tdata,"awT",@progbits
        .align 4
        .type   foo, @object
        .size   foo, 4
foo:
        .long   30
        .section        .note.GNU-stack,"",@progbits
[hjl@gnu-cfl-2 tls-x32]$ gcc -mx32 tlsdes.S main.c
/usr/local/bin/ld: /tmp/ccdQjj3W.o: TLS transition from
R_X86_64_GOTPC32_TLSDESC to R_X86_64_TPOFF32 against `foo' at 0x5 in section
`.text' failed
collect2: error: ld returned 1 exit status
[hjl@gnu-cfl-2 tls-x32]$

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]