summaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@imgtec.com>2016-11-23 12:39:39 +0000
committerMaciej W. Rozycki <macro@imgtec.com>2016-11-23 18:23:35 +0000
commitf7f7931e581271c678e0d38818c2022c2da81f8b (patch)
tree2c37b56590eb2f220167562c08b7f0d89595d739 /sysdeps
parent56ede9ed59684a5802cc88733055453901f1c2f0 (diff)
downloadglibc-f7f7931e581271c678e0d38818c2022c2da81f8b.tar.gz
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.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/mips/mips32/crti.S10
-rw-r--r--sysdeps/mips/mips64/n32/crti.S10
-rw-r--r--sysdeps/mips/mips64/n64/crti.S10
3 files changed, 24 insertions, 6 deletions
diff --git a/sysdeps/mips/mips32/crti.S b/sysdeps/mips/mips32/crti.S
index dfbbdc4f8f..a801f28820 100644
--- a/sysdeps/mips/mips32/crti.S
+++ b/sysdeps/mips/mips32/crti.S
@@ -40,6 +40,12 @@
#include <libc-symbols.h>
+#ifdef __mips_micromips
+# define JALR_RELOC R_MICROMIPS_JALR
+#else
+# define JALR_RELOC R_MIPS_JALR
+#endif
+
#ifndef PREINIT_FUNCTION
# define PREINIT_FUNCTION __gmon_start__
#endif
@@ -71,13 +77,13 @@ _init:
lw $2,%got(PREINIT_FUNCTION)($28)
beq $2,$0,.Lno_weak_fn
lw $25,%call16(PREINIT_FUNCTION)($28)
- .reloc 1f,R_MIPS_JALR,PREINIT_FUNCTION
+ .reloc 1f,JALR_RELOC,PREINIT_FUNCTION
1: jalr $25
.Lno_weak_fn:
.insn
#else
lw $25,%got(PREINIT_FUNCTION)($28)
- .reloc 1f,R_MIPS_JALR,PREINIT_FUNCTION
+ .reloc 1f,JALR_RELOC,PREINIT_FUNCTION
1: jalr $25
#endif
diff --git a/sysdeps/mips/mips64/n32/crti.S b/sysdeps/mips/mips64/n32/crti.S
index afe6d8edaa..376fa53c97 100644
--- a/sysdeps/mips/mips64/n32/crti.S
+++ b/sysdeps/mips/mips64/n32/crti.S
@@ -40,6 +40,12 @@
#include <libc-symbols.h>
+#ifdef __mips_micromips
+# define JALR_RELOC R_MICROMIPS_JALR
+#else
+# define JALR_RELOC R_MIPS_JALR
+#endif
+
#ifndef PREINIT_FUNCTION
# define PREINIT_FUNCTION __gmon_start__
#endif
@@ -71,13 +77,13 @@ _init:
lw $2,%got_disp(PREINIT_FUNCTION)($28)
beq $2,$0,.Lno_weak_fn
lw $25,%call16(PREINIT_FUNCTION)($28)
- .reloc 1f,R_MIPS_JALR,PREINIT_FUNCTION
+ .reloc 1f,JALR_RELOC,PREINIT_FUNCTION
1: jalr $25
.Lno_weak_fn:
.insn
#else
lw $25,%got_disp(PREINIT_FUNCTION)($28)
- .reloc 1f,R_MIPS_JALR,PREINIT_FUNCTION
+ .reloc 1f,JALR_RELOC,PREINIT_FUNCTION
1: jalr $25
#endif
diff --git a/sysdeps/mips/mips64/n64/crti.S b/sysdeps/mips/mips64/n64/crti.S
index 4049d29290..e7fdea453b 100644
--- a/sysdeps/mips/mips64/n64/crti.S
+++ b/sysdeps/mips/mips64/n64/crti.S
@@ -40,6 +40,12 @@
#include <libc-symbols.h>
+#ifdef __mips_micromips
+# define JALR_RELOC R_MICROMIPS_JALR
+#else
+# define JALR_RELOC R_MIPS_JALR
+#endif
+
#ifndef PREINIT_FUNCTION
# define PREINIT_FUNCTION __gmon_start__
#endif
@@ -71,13 +77,13 @@ _init:
ld $2,%got_disp(PREINIT_FUNCTION)($28)
beq $2,$0,.Lno_weak_fn
ld $25,%call16(PREINIT_FUNCTION)($28)
- .reloc 1f,R_MIPS_JALR,PREINIT_FUNCTION
+ .reloc 1f,JALR_RELOC,PREINIT_FUNCTION
1: jalr $25
.Lno_weak_fn:
.insn
#else
ld $25,%got_disp(PREINIT_FUNCTION)($28)
- .reloc 1f,R_MIPS_JALR,PREINIT_FUNCTION
+ .reloc 1f,JALR_RELOC,PREINIT_FUNCTION
1: jalr $25
#endif