Skip to content

Commit 86a1219

Browse files
committed
[ELF][MIPS] Add STO_MIPS_MICROMIPS flag to symbols point to microMIPS PLT records
llvm-svn: 331554
1 parent 3fc4067 commit 86a1219

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

lld/ELF/SyntheticSections.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1685,8 +1685,11 @@ template <class ELFT> void SymbolTableSection<ELFT>::writeTo(uint8_t *Buf) {
16851685
ESym->st_other |= STO_MIPS_PLT;
16861686
if (isMicroMips()) {
16871687
// Set STO_MIPS_MICROMIPS flag and less-significant bit for
1688-
// defined microMIPS symbols and shared symbols with PLT record.
1689-
if (Sym->isDefined() && (Sym->StOther & STO_MIPS_MICROMIPS)) {
1688+
// a defined microMIPS symbol and symbol should point to its
1689+
// PLT entry (in case of microMIPS, PLT entries always contain
1690+
// microMIPS code).
1691+
if (Sym->isDefined() &&
1692+
((Sym->StOther & STO_MIPS_MICROMIPS) || Sym->NeedsPltAddr)) {
16901693
if (StrTabSec.isDynamic())
16911694
ESym->st_value |= 1;
16921695
ESym->st_other |= STO_MIPS_MICROMIPS;

lld/test/ELF/mips-micro-plt.s

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
# CHECK-NEXT: Binding: Global
4343
# CHECK-NEXT: Type: Function
4444
# CHECK-NEXT: Other [
45+
# CHECK-NEXT: STO_MIPS_MICROMIPS
4546
# CHECK-NEXT: STO_MIPS_PLT
4647
# CHECK-NEXT: ]
4748
# CHECK-NEXT: Section: Undefined
@@ -50,11 +51,12 @@
5051
# CHECK: DynamicSymbols [
5152
# CHECK: Symbol {
5253
# CHECK: Name: foo0
53-
# CHECK-NEXT: Value: 0x20040
54+
# CHECK-NEXT: Value: 0x20041
5455
# CHECK-NEXT: Size:
5556
# CHECK-NEXT: Binding: Global
5657
# CHECK-NEXT: Type: Function
5758
# CHECK-NEXT: Other [
59+
# CHECK-NEXT: STO_MIPS_MICROMIPS
5860
# CHECK-NEXT: STO_MIPS_PLT
5961
# CHECK-NEXT: ]
6062
# CHECK-NEXT: Section: Undefined
@@ -76,7 +78,7 @@
7678
# CHECK-NEXT: Entry {
7779
# CHECK-NEXT: Address:
7880
# CHECK-NEXT: Initial: 0x20021
79-
# CHECK-NEXT: Value: 0x20040
81+
# CHECK-NEXT: Value: 0x20041
8082
# CHECK-NEXT: Type: Function
8183
# CHECK-NEXT: Section: Undefined
8284
# CHECK-NEXT: Name: foo0@

0 commit comments

Comments
 (0)