MIPS: Use R_MICROMIPS_JALR rather than R_MIPS_JALR in microMIPS code

In a microMIPS compilation of `.init' code use the R_MICROMIPS_JALR
relocation intended for PIC call relaxation in microMIPS code rather
than the corresponding R_MIPS_JALR relocation meant for regular MIPS
code only.

	* sysdeps/mips/mips32/crti.S (JALR_RELOC): New macro.
	(_init): Use it in place of hardcoded R_MIPS_JALR.
	* sysdeps/mips/mips64/n32/crti.S (JALR_RELOC): New macro.
	(_init): Use it in place of hardcoded R_MIPS_JALR.
	* sysdeps/mips/mips64/n64/crti.S (JALR_RELOC): New macro.
	(_init): Use it in place of hardcoded R_MIPS_JALR.
This commit is contained in:
Maciej W. Rozycki 2016-11-23 12:39:39 +00:00
parent 56ede9ed59
commit f7f7931e58
4 changed files with 33 additions and 6 deletions

View File

@ -1,3 +1,12 @@
2016-11-23 Maciej W. Rozycki <macro@imgtec.com>
* sysdeps/mips/mips32/crti.S (JALR_RELOC): New macro.
(_init): Use it in place of hardcoded R_MIPS_JALR.
* sysdeps/mips/mips64/n32/crti.S (JALR_RELOC): New macro.
(_init): Use it in place of hardcoded R_MIPS_JALR.
* sysdeps/mips/mips64/n64/crti.S (JALR_RELOC): New macro.
(_init): Use it in place of hardcoded R_MIPS_JALR.
2016-11-23 Joseph Myers <joseph@codesourcery.com> 2016-11-23 Joseph Myers <joseph@codesourcery.com>
[BZ #20787] [BZ #20787]

View File

@ -40,6 +40,12 @@
#include <libc-symbols.h> #include <libc-symbols.h>
#ifdef __mips_micromips
# define JALR_RELOC R_MICROMIPS_JALR
#else
# define JALR_RELOC R_MIPS_JALR
#endif
#ifndef PREINIT_FUNCTION #ifndef PREINIT_FUNCTION
# define PREINIT_FUNCTION __gmon_start__ # define PREINIT_FUNCTION __gmon_start__
#endif #endif
@ -71,13 +77,13 @@ _init:
lw $2,%got(PREINIT_FUNCTION)($28) lw $2,%got(PREINIT_FUNCTION)($28)
beq $2,$0,.Lno_weak_fn beq $2,$0,.Lno_weak_fn
lw $25,%call16(PREINIT_FUNCTION)($28) lw $25,%call16(PREINIT_FUNCTION)($28)
.reloc 1f,R_MIPS_JALR,PREINIT_FUNCTION .reloc 1f,JALR_RELOC,PREINIT_FUNCTION
1: jalr $25 1: jalr $25
.Lno_weak_fn: .Lno_weak_fn:
.insn .insn
#else #else
lw $25,%got(PREINIT_FUNCTION)($28) lw $25,%got(PREINIT_FUNCTION)($28)
.reloc 1f,R_MIPS_JALR,PREINIT_FUNCTION .reloc 1f,JALR_RELOC,PREINIT_FUNCTION
1: jalr $25 1: jalr $25
#endif #endif

View File

@ -40,6 +40,12 @@
#include <libc-symbols.h> #include <libc-symbols.h>
#ifdef __mips_micromips
# define JALR_RELOC R_MICROMIPS_JALR
#else
# define JALR_RELOC R_MIPS_JALR
#endif
#ifndef PREINIT_FUNCTION #ifndef PREINIT_FUNCTION
# define PREINIT_FUNCTION __gmon_start__ # define PREINIT_FUNCTION __gmon_start__
#endif #endif
@ -71,13 +77,13 @@ _init:
lw $2,%got_disp(PREINIT_FUNCTION)($28) lw $2,%got_disp(PREINIT_FUNCTION)($28)
beq $2,$0,.Lno_weak_fn beq $2,$0,.Lno_weak_fn
lw $25,%call16(PREINIT_FUNCTION)($28) lw $25,%call16(PREINIT_FUNCTION)($28)
.reloc 1f,R_MIPS_JALR,PREINIT_FUNCTION .reloc 1f,JALR_RELOC,PREINIT_FUNCTION
1: jalr $25 1: jalr $25
.Lno_weak_fn: .Lno_weak_fn:
.insn .insn
#else #else
lw $25,%got_disp(PREINIT_FUNCTION)($28) lw $25,%got_disp(PREINIT_FUNCTION)($28)
.reloc 1f,R_MIPS_JALR,PREINIT_FUNCTION .reloc 1f,JALR_RELOC,PREINIT_FUNCTION
1: jalr $25 1: jalr $25
#endif #endif

View File

@ -40,6 +40,12 @@
#include <libc-symbols.h> #include <libc-symbols.h>
#ifdef __mips_micromips
# define JALR_RELOC R_MICROMIPS_JALR
#else
# define JALR_RELOC R_MIPS_JALR
#endif
#ifndef PREINIT_FUNCTION #ifndef PREINIT_FUNCTION
# define PREINIT_FUNCTION __gmon_start__ # define PREINIT_FUNCTION __gmon_start__
#endif #endif
@ -71,13 +77,13 @@ _init:
ld $2,%got_disp(PREINIT_FUNCTION)($28) ld $2,%got_disp(PREINIT_FUNCTION)($28)
beq $2,$0,.Lno_weak_fn beq $2,$0,.Lno_weak_fn
ld $25,%call16(PREINIT_FUNCTION)($28) ld $25,%call16(PREINIT_FUNCTION)($28)
.reloc 1f,R_MIPS_JALR,PREINIT_FUNCTION .reloc 1f,JALR_RELOC,PREINIT_FUNCTION
1: jalr $25 1: jalr $25
.Lno_weak_fn: .Lno_weak_fn:
.insn .insn
#else #else
ld $25,%got_disp(PREINIT_FUNCTION)($28) ld $25,%got_disp(PREINIT_FUNCTION)($28)
.reloc 1f,R_MIPS_JALR,PREINIT_FUNCTION .reloc 1f,JALR_RELOC,PREINIT_FUNCTION
1: jalr $25 1: jalr $25
#endif #endif