mips: Do not use jal to reach __libc_start_main
Since __libc_start_main may not be in the same 256MB-aligned region as the function __start, replace use of jal instruction with la/jalr. This fixes linker issue reported in: https://sourceware.org/bugzilla/show_bug.cgi?id=17601 [BZ #17601] * sysdeps/mips/start.S (__start): Use indirect jump to call __libc_start_main.
This commit is contained in:
parent
909e16d960
commit
bbe4c142b0
|
@ -1,3 +1,9 @@
|
||||||
|
2014-12-02 Petar Jovanovic <petar.jovanovic@rt-rk.com>
|
||||||
|
|
||||||
|
[BZ #17601]
|
||||||
|
* sysdeps/mips/start.S (__start): Use indirect jump to call
|
||||||
|
__libc_start_main.
|
||||||
|
|
||||||
2014-12-02 Joseph Myers <joseph@codesourcery.com>
|
2014-12-02 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
* nptl/tst-stack4.c (dso_process): Use int not uintptr_t for t.
|
* nptl/tst-stack4.c (dso_process): Use int not uintptr_t for t.
|
||||||
|
|
2
NEWS
2
NEWS
|
@ -13,7 +13,7 @@ Version 2.21
|
||||||
16619, 16740, 16857, 17192, 17266, 17344, 17363, 17370, 17371, 17411,
|
16619, 16740, 16857, 17192, 17266, 17344, 17363, 17370, 17371, 17411,
|
||||||
17460, 17475, 17485, 17501, 17506, 17508, 17522, 17555, 17570, 17571,
|
17460, 17475, 17485, 17501, 17506, 17508, 17522, 17555, 17570, 17571,
|
||||||
17572, 17573, 17574, 17581, 17582, 17583, 17584, 17585, 17589, 17594,
|
17572, 17573, 17574, 17581, 17582, 17583, 17584, 17585, 17589, 17594,
|
||||||
17608, 17616, 17625, 17633, 17664, 17665.
|
17601, 17608, 17616, 17625, 17633, 17664, 17665.
|
||||||
|
|
||||||
* CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
|
* CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
|
||||||
under certain input conditions resulting in the execution of a shell for
|
under certain input conditions resulting in the execution of a shell for
|
||||||
|
|
|
@ -106,7 +106,8 @@ ENTRY_POINT:
|
||||||
move $9, $2 /* rtld_fini */
|
move $9, $2 /* rtld_fini */
|
||||||
move $10, $29 /* stack_end */
|
move $10, $29 /* stack_end */
|
||||||
# endif
|
# endif
|
||||||
jal __libc_start_main
|
PTR_LA $25, __libc_start_main
|
||||||
|
jalr $25
|
||||||
hlt: b hlt /* Crash if somehow it does return. */
|
hlt: b hlt /* Crash if somehow it does return. */
|
||||||
|
|
||||||
#elif _MIPS_SIM == _ABIO32 /* __mips16 */
|
#elif _MIPS_SIM == _ABIO32 /* __mips16 */
|
||||||
|
@ -157,7 +158,9 @@ ENTRY_POINT:
|
||||||
sw $4, 16($sp) /* fini */
|
sw $4, 16($sp) /* fini */
|
||||||
lw $4, 3f /* main */
|
lw $4, 3f /* main */
|
||||||
sw $2, 20($sp) /* rtld_fini */
|
sw $2, 20($sp) /* rtld_fini */
|
||||||
jal __libc_start_main
|
/* Load and call __libc_start_main(). */
|
||||||
|
lw $3, 4f
|
||||||
|
jalr $3
|
||||||
# endif
|
# endif
|
||||||
hlt: b hlt /* Crash if somehow it does return. */
|
hlt: b hlt /* Crash if somehow it does return. */
|
||||||
# ifndef __PIC__
|
# ifndef __PIC__
|
||||||
|
@ -165,6 +168,7 @@ hlt: b hlt /* Crash if somehow it does return. */
|
||||||
1: .word __libc_csu_fini
|
1: .word __libc_csu_fini
|
||||||
2: .word __libc_csu_init
|
2: .word __libc_csu_init
|
||||||
3: .word main
|
3: .word main
|
||||||
|
4: .word __libc_start_main
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#else /* __mips16 && _MIPS_SIM != _ABIO32 */
|
#else /* __mips16 && _MIPS_SIM != _ABIO32 */
|
||||||
|
|
Loading…
Reference in New Issue