| 1 | |
| 2 | On mips target, binutils currently sets DT_MIPS_RLD_MAP to 0 in dynamic |
| 3 | section if a --version-script sets _RLD_MAP to local. This is apparently |
| 4 | a binutils bug, but libc shouldn't segfault in this case. |
| 5 | |
| 6 | see also: http://sourceware.org/bugilla/show_bug.cgi?id=11615 |
| 7 | |
| 8 | Upstream-Status: Pending |
| 9 | |
| 10 | 9/19/2010 - added by Qing He <qing.he@intel.com> |
| 11 | |
| 12 | |
| 13 | --- |
| 14 | diff -ru glibc-2.10.1.orig/ports/sysdeps/mips/dl-machine.h glibc-2.10.1/ports/sysdeps/mips/dl-machine.h |
| 15 | --- glibc-2.10.1.orig/ports/sysdeps/mips/dl-machine.h 2009-05-16 16:36:20.000000000 +0800 |
| 16 | +++ glibc-2.10.1/ports/sysdeps/mips/dl-machine.h 2010-09-19 09:11:53.000000000 +0800 |
| 17 | @@ -70,7 +70,8 @@ |
| 18 | /* If there is a DT_MIPS_RLD_MAP entry in the dynamic section, fill it in |
| 19 | with the run-time address of the r_debug structure */ |
| 20 | #define ELF_MACHINE_DEBUG_SETUP(l,r) \ |
| 21 | -do { if ((l)->l_info[DT_MIPS (RLD_MAP)]) \ |
| 22 | +do { if ((l)->l_info[DT_MIPS (RLD_MAP)] && \ |
| 23 | + (l)->l_info[DT_MIPS (RLD_MAP)]->d_un.d_ptr) \ |
| 24 | *(ElfW(Addr) *)((l)->l_info[DT_MIPS (RLD_MAP)]->d_un.d_ptr) = \ |
| 25 | (ElfW(Addr)) (r); \ |
| 26 | } while (0) |
| 27 | |