OSDN Git Service

Fix for SIGBUS error on MIPS64 with N64 ABI
authorWaldemar Brodkorb <wbx@openadk.org>
Wed, 27 Nov 2013 08:55:51 +0000 (09:55 +0100)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Fri, 20 Dec 2013 13:11:36 +0000 (14:11 +0100)
When accessing errno, a per thread variable, from _stdio_init
a SIGBUS error happens. This change fixes the wrong relocation
and debug output.

Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
ldso/ldso/mips/elfinterp.c

index e57a99f..a90e163 100644 (file)
@@ -259,11 +259,11 @@ int _dl_parse_relocation_information(struct dyn_elf *xpnt,
                                        case R_MIPS_TLS_TPREL32:
                                        case R_MIPS_TLS_TPREL64:
                                                CHECK_STATIC_TLS((struct link_map *)tls_tpnt);
-                                               *(ElfW(Word) *)reloc_addr +=
+                                               *(ElfW(Addr) *)reloc_addr +=
                                                        TLS_TPREL_VALUE (tls_tpnt, symbol_addr);
 #ifdef __SUPPORT_LD_DEBUG__
                                                _dl_dprintf(2, "TLS_TPREL  : %s, %x, %x\n",
-                                                       symname, old_val, *((unsigned int *)reloc_addr));
+                                                       symname, old_val, *((unsigned long *)reloc_addr));
 #endif
                                                break;
                                }