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:
Petar Jovanovic 2014-12-02 23:04:43 +00:00 committed by Joseph Myers
parent 909e16d960
commit bbe4c142b0
3 changed files with 13 additions and 3 deletions

View File

@ -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>
* nptl/tst-stack4.c (dso_process): Use int not uintptr_t for t.

2
NEWS
View File

@ -13,7 +13,7 @@ Version 2.21
16619, 16740, 16857, 17192, 17266, 17344, 17363, 17370, 17371, 17411,
17460, 17475, 17485, 17501, 17506, 17508, 17522, 17555, 17570, 17571,
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
under certain input conditions resulting in the execution of a shell for

View File

@ -106,7 +106,8 @@ ENTRY_POINT:
move $9, $2 /* rtld_fini */
move $10, $29 /* stack_end */
# endif
jal __libc_start_main
PTR_LA $25, __libc_start_main
jalr $25
hlt: b hlt /* Crash if somehow it does return. */
#elif _MIPS_SIM == _ABIO32 /* __mips16 */
@ -157,7 +158,9 @@ ENTRY_POINT:
sw $4, 16($sp) /* fini */
lw $4, 3f /* main */
sw $2, 20($sp) /* rtld_fini */
jal __libc_start_main
/* Load and call __libc_start_main(). */
lw $3, 4f
jalr $3
# endif
hlt: b hlt /* Crash if somehow it does return. */
# ifndef __PIC__
@ -165,6 +168,7 @@ hlt: b hlt /* Crash if somehow it does return. */
1: .word __libc_csu_fini
2: .word __libc_csu_init
3: .word main
4: .word __libc_start_main
# endif
#else /* __mips16 && _MIPS_SIM != _ABIO32 */