This is the mail archive of the mailing list for the binutils project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [SH] TLS IE -> LE optimization issue

Alan Modra <> wrote:
> On Fri, Apr 13, 2012 at 05:48:06PM +0200, Thomas Schwinge wrote:
>> That is, we need a __thread variable that is referenced from another
>> compilation unit; these two are linked into an executable; and we need a
>> (dummy) SO in order to trigger creation of the .dynamic section, etc.
> A dummy .so should make no difference to dynamic relocations, so
> you've found a bug in the SH allocate_dynrelocs.
> elf32-ppc.c allocate_dynrelocs handles this situation by testing
> whether the tls symbol is defined in a dynamic library.  If not, no
> dynamic relocation is allocated and a special GOT entry for local
> dynamic TLS syms is used, tlsld_got.

Ah, then a minimal fix would be a patch like below, though I'm
not sure if it's enough.  Also there might be similar problems
in SH allocate_dynrelocs for the other TLS relocations.

--- ORIG/src/bfd/elf32-sh.c	2012-03-04 10:20:50.000000000 +0900
+++ src/bfd/elf32-sh.c	2012-04-15 07:52:20.000000000 +0900
@@ -3111,6 +3111,9 @@ allocate_dynrelocs (struct elf_link_hash
 	      && (got_type == GOT_NORMAL || got_type == GOT_FUNCDESC))
 	    htab->srofixup->size += 4;
+      /* No dynamic relocations required when IE->LE conversion happens.  */
+      else if (got_type == GOT_TLS_IE && !h->def_dynamic && !info->shared)
+	;
       /* R_SH_TLS_IE_32 needs one dynamic relocation if dynamic,
 	 R_SH_TLS_GD needs one if local symbol and two if global.  */
       else if ((got_type == GOT_TLS_GD && h->dynindx == -1)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]