[lld] r336413 - [ELF][MIPS] Remove support for linking microMIPS 64-bit code
Simon Atanasyan via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 5 22:50:42 PDT 2018
Author: atanasyan
Date: Thu Jul 5 22:50:41 2018
New Revision: 336413
URL: http://llvm.org/viewvc/llvm-project?rev=336413&view=rev
Log:
[ELF][MIPS] Remove support for linking microMIPS 64-bit code
Remove support for linking microMIPS 64-bit code because this kind of
ISA is rarely used and unsupported by LLVM.
Differential revision: https://reviews.llvm.org/D48949
Added:
lld/trunk/test/ELF/mips-micro64-reject.test
Removed:
lld/trunk/test/ELF/mips-micro-got64.s
lld/trunk/test/ELF/mips-micro64-relocs.s
Modified:
lld/trunk/ELF/Arch/Mips.cpp
lld/trunk/ELF/Arch/MipsArchTree.cpp
lld/trunk/test/ELF/mips-non-zero-gp0.s
Modified: lld/trunk/ELF/Arch/Mips.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/Mips.cpp?rev=336413&r1=336412&r2=336413&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/Mips.cpp (original)
+++ lld/trunk/ELF/Arch/Mips.cpp Thu Jul 5 22:50:41 2018
@@ -101,8 +101,6 @@ RelExpr MIPS<ELFT>::getRelExpr(RelType T
case R_MIPS_HIGHEST:
case R_MICROMIPS_HI16:
case R_MICROMIPS_LO16:
- case R_MICROMIPS_HIGHER:
- case R_MICROMIPS_HIGHEST:
// R_MIPS_HI16/R_MIPS_LO16 relocations against _gp_disp calculate
// offset between start of function and 'gp' value which by default
// equal to the start of .got section. In that case we consider these
@@ -124,8 +122,6 @@ RelExpr MIPS<ELFT>::getRelExpr(RelType T
case R_MIPS_TLS_TPREL_LO16:
case R_MIPS_TLS_TPREL32:
case R_MIPS_TLS_TPREL64:
- case R_MICROMIPS_GOT_OFST:
- case R_MICROMIPS_SUB:
case R_MICROMIPS_TLS_DTPREL_HI16:
case R_MICROMIPS_TLS_DTPREL_LO16:
case R_MICROMIPS_TLS_TPREL_HI16:
@@ -155,7 +151,6 @@ RelExpr MIPS<ELFT>::getRelExpr(RelType T
case R_MIPS_GOT_DISP:
case R_MIPS_TLS_GOTTPREL:
case R_MICROMIPS_CALL16:
- case R_MICROMIPS_GOT_DISP:
case R_MICROMIPS_TLS_GOTTPREL:
return R_MIPS_GOT_OFF;
case R_MIPS_CALL_HI16:
@@ -168,7 +163,6 @@ RelExpr MIPS<ELFT>::getRelExpr(RelType T
case R_MICROMIPS_GOT_LO16:
return R_MIPS_GOT_OFF32;
case R_MIPS_GOT_PAGE:
- case R_MICROMIPS_GOT_PAGE:
return R_MIPS_GOT_LOCAL_PAGE;
case R_MIPS_TLS_GD:
case R_MICROMIPS_TLS_GD:
@@ -457,9 +451,6 @@ calculateMipsRelChain(uint8_t *Loc, RelT
return std::make_pair(Type2, Val);
if (Type2 == R_MIPS_SUB && (Type3 == R_MIPS_HI16 || Type3 == R_MIPS_LO16))
return std::make_pair(Type3, -Val);
- if (Type2 == R_MICROMIPS_SUB &&
- (Type3 == R_MICROMIPS_HI16 || Type3 == R_MICROMIPS_LO16))
- return std::make_pair(Type3, -Val);
error(getErrorLocation(Loc) + "unsupported relocations combination " +
Twine(Type));
return std::make_pair(Type & 0xff, Val);
@@ -538,8 +529,6 @@ void MIPS<ELFT>::relocateOne(uint8_t *Lo
case R_MIPS_TLS_TPREL_LO16:
writeValue<E>(Loc, Val, 16, 0);
break;
- case R_MICROMIPS_GOT_DISP:
- case R_MICROMIPS_GOT_PAGE:
case R_MICROMIPS_GPREL16:
case R_MICROMIPS_TLS_GD:
case R_MICROMIPS_TLS_LDM:
@@ -548,7 +537,6 @@ void MIPS<ELFT>::relocateOne(uint8_t *Lo
break;
case R_MICROMIPS_CALL16:
case R_MICROMIPS_CALL_LO16:
- case R_MICROMIPS_GOT_OFST:
case R_MICROMIPS_LO16:
case R_MICROMIPS_TLS_DTPREL_LO16:
case R_MICROMIPS_TLS_GOTTPREL:
@@ -580,12 +568,6 @@ void MIPS<ELFT>::relocateOne(uint8_t *Lo
case R_MIPS_HIGHEST:
writeValue<E>(Loc, Val + 0x800080008000, 16, 48);
break;
- case R_MICROMIPS_HIGHER:
- writeShuffleValue<E>(Loc, Val + 0x80008000, 16, 32);
- break;
- case R_MICROMIPS_HIGHEST:
- writeShuffleValue<E>(Loc, Val + 0x800080008000, 16, 48);
- break;
case R_MIPS_JALR:
case R_MICROMIPS_JALR:
// Ignore this optimization relocation for now
@@ -653,7 +635,7 @@ void MIPS<ELFT>::relocateOne(uint8_t *Lo
template <class ELFT> bool MIPS<ELFT>::usesOnlyLowPageBits(RelType Type) const {
return Type == R_MIPS_LO16 || Type == R_MIPS_GOT_OFST ||
- Type == R_MICROMIPS_LO16 || Type == R_MICROMIPS_GOT_OFST;
+ Type == R_MICROMIPS_LO16;
}
// Return true if the symbol is a PIC function.
Modified: lld/trunk/ELF/Arch/MipsArchTree.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/MipsArchTree.cpp?rev=336413&r1=336412&r2=336413&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/MipsArchTree.cpp (original)
+++ lld/trunk/ELF/Arch/MipsArchTree.cpp Thu Jul 5 22:50:41 2018
@@ -64,12 +64,21 @@ static StringRef getNanName(bool IsNan20
static StringRef getFpName(bool IsFp64) { return IsFp64 ? "64" : "32"; }
+static void rejectMicroMips64(const FileFlags &F) {
+ if (Config->Is64 && F.Flags & EF_MIPS_MICROMIPS)
+ error("linking microMIPS 64-bit files is unsupported: " + toString(F.File));
+}
+
static void checkFlags(ArrayRef<FileFlags> Files) {
uint32_t ABI = Files[0].Flags & (EF_MIPS_ABI | EF_MIPS_ABI2);
bool Nan = Files[0].Flags & EF_MIPS_NAN2008;
bool Fp = Files[0].Flags & EF_MIPS_FP64;
+ rejectMicroMips64(Files[0]);
+
for (const FileFlags &F : Files.slice(1)) {
+ rejectMicroMips64(F);
+
uint32_t ABI2 = F.Flags & (EF_MIPS_ABI | EF_MIPS_ABI2);
if (ABI != ABI2)
error("target ABI '" + getAbiName(ABI) + "' is incompatible with '" +
Removed: lld/trunk/test/ELF/mips-micro-got64.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/mips-micro-got64.s?rev=336412&view=auto
==============================================================================
--- lld/trunk/test/ELF/mips-micro-got64.s (original)
+++ lld/trunk/test/ELF/mips-micro-got64.s (removed)
@@ -1,53 +0,0 @@
-# REQUIRES: mips
-# Check microMIPS GOT relocations for N64 ABI.
-
-# microMIPS 64-bit is unsupported by LLVM starting from r335057.
-# But such code can be generated by GCC. Mark this test as XFAIL
-# while decide to drop microMIPS 64-bit support from LLD too or
-# use binary inputs for the test.
-# XFAIL: *
-
-# RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux -mattr=micromips \
-# RUN: %s -o %t1.o
-# RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux -mattr=micromips \
-# RUN: %S/Inputs/mips-dynamic.s -o %t2.o
-# RUN: ld.lld %t2.o -shared -o %t.so
-# RUN: ld.lld %t1.o %t.so -o %t.exe
-# RUN: llvm-readobj -mips-plt-got %t.exe | FileCheck %s
-
-# CHECK: Local entries [
-# CHECK-NEXT: Entry {
-# CHECK-NEXT: Address:
-# CHECK-NEXT: Access: -32736
-# CHECK-NEXT: Initial: 0x30000
-# CHECK-NEXT: }
-# CHECK-NEXT: Entry {
-# CHECK-NEXT: Address:
-# CHECK-NEXT: Access: -32728
-# CHECK-NEXT: Initial: 0x40000
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-# CHECK-NEXT: Global entries [
-# CHECK-NEXT: Entry {
-# CHECK-NEXT: Address:
-# CHECK-NEXT: Access: -32720
-# CHECK-NEXT: Initial: 0x0
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Type: Function
-# CHECK-NEXT: Section: Undefined
-# CHECK-NEXT: Name: foo0
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
- .text
- .global __start
-__start:
- lui $28, %hi(%neg(%gp_rel(foo0)))
- addiu $28, $28, %lo(%neg(%gp_rel(foo0)))
- lw $4, %got_page(data)($28)
- addiu $4, $4, %got_ofst(data)
- lw $25, %call16(foo0)($28)
-
- .data
-data:
- .word 0
Added: lld/trunk/test/ELF/mips-micro64-reject.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/mips-micro64-reject.test?rev=336413&view=auto
==============================================================================
--- lld/trunk/test/ELF/mips-micro64-reject.test (added)
+++ lld/trunk/test/ELF/mips-micro64-reject.test Thu Jul 5 22:50:41 2018
@@ -0,0 +1,23 @@
+# REQUIRES: mips
+#
+# Check that the linker rejects microMIPS64 input files.
+
+# RUN: yaml2obj %s -o %t.o
+# RUN: not ld.lld %t.o -shared -o %t.so 2>&1 | FileCheck %s
+
+# CHECK: linking microMIPS 64-bit files is unsupported: {{.*}}mips-micro64-reject.test
+
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_MICROMIPS, EF_MIPS_ARCH_64 ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Content: 00000000
+
Removed: lld/trunk/test/ELF/mips-micro64-relocs.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/mips-micro64-relocs.s?rev=336412&view=auto
==============================================================================
--- lld/trunk/test/ELF/mips-micro64-relocs.s (original)
+++ lld/trunk/test/ELF/mips-micro64-relocs.s (removed)
@@ -1,28 +0,0 @@
-# REQUIRES: mips
-
-# microMIPS 64-bit is unsupported by LLVM starting from r335057.
-# But such code can be generated by GCC. Mark this test as XFAIL
-# while decide to drop microMIPS 64-bit support from LLD too or
-# use binary inputs for the test.
-# XFAIL: *
-
-# Check handling of some microMIPS relocations in 64-bit mode.
-
-# RUN: llvm-mc -filetype=obj -triple=mips64el-unknown-linux \
-# RUN: -mattr=micromips %s -o %t1.o
-# RUN: llvm-mc -filetype=obj -triple=mips64el-unknown-linux \
-# RUN: -mattr=micromips %S/Inputs/mips-dynamic.s -o %t2.o
-# RUN: ld.lld %t1.o %t2.o -o %t.exe
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
- .global __start
-__start:
- lui $7, %highest(_foo+0x300047FFF7FF8)
- lui $7, %higher (_foo+0x300047FFF7FF8)
- lui $gp, %hi(%neg(%gp_rel(__start)))
- lui $gp, %lo(%neg(%gp_rel(__start)))
-
-# CHECK: 20000: a7 41 03 00 lui $7, 3
-# CHECK-NEXT: 20004: a7 41 05 00 lui $7, 5
-# CHECK-NEXT: 20008: bc 41 02 00 lui $gp, 2
-# CHECK-NEXT: 2000c: bc 41 00 80 lui $gp, 32768
Modified: lld/trunk/test/ELF/mips-non-zero-gp0.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/mips-non-zero-gp0.s?rev=336413&r1=336412&r2=336413&view=diff
==============================================================================
--- lld/trunk/test/ELF/mips-non-zero-gp0.s (original)
+++ lld/trunk/test/ELF/mips-non-zero-gp0.s Thu Jul 5 22:50:41 2018
@@ -8,8 +8,6 @@
#
# as -mips32 -o test.o \
# && ld.bfd -m elf32btsmip -r test.o -o mips-gp0-non-zero.o
-# as -mips64 -mmicromips -o test.o \
-# && ld.bfd -m elf64btsmip -r test.o -o mips-micro-gp0-non-zero.o
# as -mips64 -o test.o \
# && ld.bfd -m elf64btsmip -r test.o -o mips-n64-gp0-non-zero.o
@@ -44,11 +42,6 @@
# RUN: llvm-readobj -r %S/Inputs/mips-n64-gp0-non-zero.o %t-64.r \
# RUN: | FileCheck --check-prefix=ADDEND64 %s
-# RUN: ld.lld -r -o %t-micro.r %S/Inputs/mips-micro-gp0-non-zero.o
-# RUN: llvm-readobj -mips-options %t-micro.r | FileCheck --check-prefix=GPVAL %s
-# RUN: llvm-readobj -r %S/Inputs/mips-micro-gp0-non-zero.o %t-micro.r \
-# RUN: | FileCheck --check-prefix=ADDENDMM %s
-
# GPVAL: GP: 0x0
# ADDEND32: Contents of section .rodata:
@@ -59,8 +52,3 @@
# ADDEND64: .text 0xFFFFFFFFFFFF8011
# ADDEND64: File: {{.*}}{{/|\\}}mips-non-zero-gp0.s.tmp-64.r
# ADDEND64: .text 0x0
-
-# ADDENDMM: File: {{.*}}{{/|\\}}mips-micro-gp0-non-zero.o
-# ADDENDMM: .text 0xFFFFFFFFFFFF8012
-# ADDENDMM: File: {{.*}}{{/|\\}}mips-non-zero-gp0.s.tmp-micro.r
-# ADDENDMM: .text 0x1
More information about the llvm-commits
mailing list