mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 01:59:02 +00:00
fcdd407e8e
Fix DT_DEBUG handling on MIPS in musl libc. With this change gdb will load the symbol files for shared libraries on MIPS too. This patch was taken from this thread: https://www.openwall.com/lists/musl/2022/01/09/4 Signed-off-by: Hauke Mehrtens <hmehrtens@maxlinear.com>
62 lines
1.8 KiB
Diff
62 lines
1.8 KiB
Diff
Fix DT_DEBUG handling on MIPS in musl libc.
|
|
With this change gdb will load the symbol files for shared libraries on MIPS too.
|
|
|
|
This patch was taken from this thread: https://www.openwall.com/lists/musl/2022/01/09/4
|
|
|
|
--- a/arch/mips/reloc.h
|
|
+++ b/arch/mips/reloc.h
|
|
@@ -29,6 +29,7 @@
|
|
|
|
#define NEED_MIPS_GOT_RELOCS 1
|
|
#define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP
|
|
+#define DT_DEBUG_INDIRECT_REL DT_MIPS_RLD_MAP_REL
|
|
#define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT))
|
|
|
|
#define CRTJMP(pc,sp) __asm__ __volatile__( \
|
|
--- a/arch/mips64/reloc.h
|
|
+++ b/arch/mips64/reloc.h
|
|
@@ -38,6 +38,7 @@
|
|
|
|
#define NEED_MIPS_GOT_RELOCS 1
|
|
#define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP
|
|
+#define DT_DEBUG_INDIRECT_REL DT_MIPS_RLD_MAP_REL
|
|
#define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT))
|
|
|
|
#define CRTJMP(pc,sp) __asm__ __volatile__( \
|
|
--- a/arch/mipsn32/reloc.h
|
|
+++ b/arch/mipsn32/reloc.h
|
|
@@ -29,6 +29,7 @@
|
|
|
|
#define NEED_MIPS_GOT_RELOCS 1
|
|
#define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP
|
|
+#define DT_DEBUG_INDIRECT_REL DT_MIPS_RLD_MAP_REL
|
|
#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
|
|
@@ -1923,6 +1923,10 @@ void __dls3(size_t *sp, size_t *auxv)
|
|
size_t *ptr = (size_t *) app.dynv[i+1];
|
|
*ptr = (size_t)&debug;
|
|
}
|
|
+ if (app.dynv[i]==DT_DEBUG_INDIRECT_REL) {
|
|
+ size_t *ptr = (size_t *)((size_t)&app.dynv[i] + app.dynv[i+1]);
|
|
+ *ptr = (size_t)&debug;
|
|
+ }
|
|
}
|
|
|
|
/* This must be done before final relocations, since it calls
|
|
--- a/src/internal/dynlink.h
|
|
+++ b/src/internal/dynlink.h
|
|
@@ -92,6 +92,10 @@ struct fdpic_dummy_loadmap {
|
|
#define DT_DEBUG_INDIRECT 0
|
|
#endif
|
|
|
|
+#ifndef DT_DEBUG_INDIRECT_REL
|
|
+#define DT_DEBUG_INDIRECT_REL 0
|
|
+#endif
|
|
+
|
|
#define AUX_CNT 32
|
|
#define DYN_CNT 32
|
|
|