diff options
author | Felix Fietkau <nbd@openwrt.org> | 2016-01-30 20:15:16 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2016-01-30 20:15:16 +0000 |
commit | 0c6b003704c125664e40d008db205f292c7de756 (patch) | |
tree | 28243bcd78057f6dc4461a7ff603b6b20129f4c7 /toolchain | |
parent | ed95e47f072caaeffdc48a78718cfc08fe89f690 (diff) | |
download | upstream-0c6b003704c125664e40d008db205f292c7de756.tar.gz upstream-0c6b003704c125664e40d008db205f292c7de756.tar.bz2 upstream-0c6b003704c125664e40d008db205f292c7de756.zip |
musl: fix GDB debugging on mips (local, remote)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
SVN-Revision: 48575
Diffstat (limited to 'toolchain')
-rw-r--r-- | toolchain/musl/patches/020-ldso-fix-GDB-dynamic-linker-info-on-MIPS.patch | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/toolchain/musl/patches/020-ldso-fix-GDB-dynamic-linker-info-on-MIPS.patch b/toolchain/musl/patches/020-ldso-fix-GDB-dynamic-linker-info-on-MIPS.patch new file mode 100644 index 0000000000..12d85034ee --- /dev/null +++ b/toolchain/musl/patches/020-ldso-fix-GDB-dynamic-linker-info-on-MIPS.patch @@ -0,0 +1,55 @@ +From: Felix Fietkau <nbd@openwrt.org> +Date: Sat, 30 Jan 2016 19:19:08 +0100 +Subject: [PATCH] ldso: fix GDB dynamic linker info on MIPS + +GDB is looking for a pointer to the ldso debug info in the data of the +.rld_map section. + +Signed-off-by: Felix Fietkau <nbd@openwrt.org> +--- + +--- a/arch/mips/reloc.h ++++ b/arch/mips/reloc.h +@@ -24,7 +24,7 @@ + #define REL_TPOFF R_MIPS_TLS_TPREL32 + + #define NEED_MIPS_GOT_RELOCS 1 +-#define DYNAMIC_IS_RO 1 ++#define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP + #define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT)) + + #define CRTJMP(pc,sp) __asm__ __volatile__( \ +--- a/ldso/dynlink.c ++++ b/ldso/dynlink.c +@@ -1582,11 +1582,14 @@ _Noreturn void __dls3(size_t *sp) + load_deps(&app); + make_global(&app); + +-#ifndef DYNAMIC_IS_RO +- for (i=0; app.dynv[i]; i+=2) +- if (app.dynv[i]==DT_DEBUG) ++ for (i=0; app.dynv[i]; i+=2) { ++ if (!DT_DEBUG_INDIRECT && app.dynv[i]==DT_DEBUG) + app.dynv[i+1] = (size_t)&debug; +-#endif ++ if (DT_DEBUG_INDIRECT && app.dynv[i]==DT_DEBUG_INDIRECT) { ++ size_t *ptr = (size_t *) app.dynv[i+1]; ++ *ptr = (size_t)&debug; ++ } ++ } + + /* The main program must be relocated LAST since it may contin + * copy relocations which depend on libraries' relocations. */ +--- a/src/internal/dynlink.h ++++ b/src/internal/dynlink.h +@@ -83,6 +83,10 @@ struct fdpic_dummy_loadmap { + #define NEED_MIPS_GOT_RELOCS 0 + #endif + ++#ifndef DT_DEBUG_INDIRECT ++#define DT_DEBUG_INDIRECT 0 ++#endif ++ + #define AUX_CNT 32 + #define DYN_CNT 32 + |