[lld] 93c16e7 - [ELF] Actually sort IRELATIVE by offset
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 2 19:34:19 PDT 2024
Author: Fangrui Song
Date: 2024-04-02T19:34:14-07:00
New Revision: 93c16e75b8935f6a3f5f39301007f9a42a1f7da1
URL: https://github.com/llvm/llvm-project/commit/93c16e75b8935f6a3f5f39301007f9a42a1f7da1
DIFF: https://github.com/llvm/llvm-project/commit/93c16e75b8935f6a3f5f39301007f9a42a1f7da1.diff
LOG: [ELF] Actually sort IRELATIVE by offset
The unstable partition in partitionRels might reverse IRELATIVE
relocations, so stable_partition in computeRels would lead to IRELATIVE
relocations ordered by decreasing offset. Use stable_partition in
partitionRels to get IRELATIVE relocations ordered by increasing offset.
Added:
Modified:
lld/ELF/SyntheticSections.cpp
lld/test/ELF/gnu-ifunc-nonpreemptible.s
Removed:
################################################################################
diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp
index 3494352ee8271c..d4dc713b4e2703 100644
--- a/lld/ELF/SyntheticSections.cpp
+++ b/lld/ELF/SyntheticSections.cpp
@@ -1633,7 +1633,8 @@ void RelocationBaseSection::partitionRels() {
return;
const RelType relativeRel = target->relativeRel;
numRelativeRelocs =
- llvm::partition(relocs, [=](auto &r) { return r.type == relativeRel; }) -
+ std::stable_partition(relocs.begin(), relocs.end(),
+ [=](auto &r) { return r.type == relativeRel; }) -
relocs.begin();
}
diff --git a/lld/test/ELF/gnu-ifunc-nonpreemptible.s b/lld/test/ELF/gnu-ifunc-nonpreemptible.s
index e03429de230c32..f3f90083cebb22 100644
--- a/lld/test/ELF/gnu-ifunc-nonpreemptible.s
+++ b/lld/test/ELF/gnu-ifunc-nonpreemptible.s
@@ -23,12 +23,13 @@
# RUN: ld.lld -shared a.o b.so -o a2
# RUN: llvm-readelf -rs a2 | FileCheck %s --check-prefix=PIC
-# PIC: R_X86_64_GLOB_DAT 0000000000000000 ext + 0
-# PIC-NEXT: {{0*}}[[#%x,O:]] [[#%x,]] R_X86_64_64 0000000000000000 __rela_iplt_start + 0
-# PIC-NEXT: {{0*}}[[#O+8]] [[#%x,]] R_X86_64_64 0000000000000000 __rela_iplt_end + 0
-# PIE-NEXT: {{0*}}[[#O+16]] [[#%x,]] R_X86_64_IRELATIVE
-# PIE-NEXT: {{0*}}[[#O+24]] [[#%x,]] R_X86_64_IRELATIVE
-# PIE-NEXT: {{0*}}[[#O+32]] [[#%x,]] R_X86_64_IRELATIVE
+# PIC: {{0*}}[[#%x,O:]] [[#%x,]] R_X86_64_RELATIVE
+# PIC-NEXT: R_X86_64_GLOB_DAT 0000000000000000 ext + 0
+# PIC-NEXT: {{0*}}[[#O-16]] [[#%x,]] R_X86_64_64 0000000000000000 __rela_iplt_start + 0
+# PIC-NEXT: {{0*}}[[#O-8]] [[#%x,]] R_X86_64_64 0000000000000000 __rela_iplt_end + 0
+# PIE-NEXT: {{0*}}[[#O+8]] [[#%x,]] R_X86_64_IRELATIVE
+# PIE-NEXT: {{0*}}[[#O+16]] [[#%x,]] R_X86_64_IRELATIVE
+# PIE-NEXT: {{0*}}[[#O+24]] [[#%x,]] R_X86_64_IRELATIVE
# PIC: 0 NOTYPE WEAK DEFAULT UND __rela_iplt_start
# PIC-NEXT: 0 NOTYPE WEAK DEFAULT UND __rela_iplt_end
@@ -83,6 +84,7 @@ _start:
.data
.quad __rela_iplt_start
.quad __rela_iplt_end
+ .quad .data
#--- b.s
.globl ext
More information about the llvm-commits
mailing list