This is an archive of the discontinued LLVM Phabricator instance.

[ELF] - Adjust rangeToString to report ranges in a different format.
ClosedPublic

Authored by grimar on Mar 7 2018, 6:54 AM.

Details

Summary

It was raised during the review of D43819.
I think LLD usually use [X, Y] for reporting ranges, like below:
relocation R_386_16 out of range: 65536 is not in [0, 65535]

Patch changes rangeToString() to do the same.

Diff Detail

Repository
rLLD LLVM Linker

Event Timeline

grimar created this revision.Mar 7 2018, 6:54 AM
This revision is now accepted and ready to land.Mar 7 2018, 6:58 AM
ruiu accepted this revision.Mar 7 2018, 9:40 AM

LGTM

This revision was automatically updated to reflect the committed changes.

LGTM

George Rimar via Phabricator via llvm-commits
<llvm-commits@lists.llvm.org> writes:

grimar created this revision.
grimar added reviewers: ruiu, espindola, jhenderson.
Herald added subscribers: arichardson, emaste.

It was raised during the review of https://reviews.llvm.org/D43819.
I think LLD usually use [X, Y] for reporting ranges, like below:
relocation R_386_16 out of range: 65536 is not in [0, 65535]

Patch changes rangeToString() to do the same.

https://reviews.llvm.org/D44207

Files:

ELF/Writer.cpp
test/ELF/linkerscript/overlapping-sections.s

Index: test/ELF/linkerscript/overlapping-sections.s

  • test/ELF/linkerscript/overlapping-sections.s

+++ test/ELF/linkerscript/overlapping-sections.s
@@ -63,8 +63,8 @@

  1. RUN: }" > %t-lma.script
  2. RUN: not ld.lld -o %t.so --script %t-lma.script %t.o -shared 2>&1 | FileCheck %s -check-prefix LMA-OVERLAP-ERR
  3. LMA-OVERLAP-ERR: error: section .sec1 load address range overlaps with .sec2
  4. LMA-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000 -> 0x80FF]
  5. LMA-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8080 -> 0x817F]

+# LMA-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000, 0x80FF]
+# LMA-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8080, 0x817F]

  1. Check that we create the expected binary with --noinhibit-exec or --no-check-sections:
  2. RUN: ld.lld -o %t.so --script %t-lma.script %t.o -shared --noinhibit-exec

@@ -95,8 +95,8 @@

  1. RUN: }" > %t-vaddr.script
  2. RUN: not ld.lld -o %t.so --script %t-vaddr.script %t.o -shared 2>&1 | FileCheck %s -check-prefix VADDR-OVERLAP-ERR
  3. VADDR-OVERLAP-ERR: error: section .sec1 virtual address range overlaps with .sec2
  4. VADDR-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000 -> 0x80FF]
  5. VADDR-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8020 -> 0x811F]

+# VADDR-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000, 0x80FF]
+# VADDR-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8020, 0x811F]

  1. Check that the expected binary was created with --noinhibit-exec:
  2. RUN: ld.lld -o %t.so --script %t-vaddr.script %t.o -shared --noinhibit-exec

@@ -123,14 +123,14 @@

  1. RUN: not ld.lld -o %t.so --script %t-both-overlap.script %t.o -shared 2>&1 | FileCheck %s -check-prefix BOTH-OVERLAP-ERR
  2. BOTH-OVERLAP-ERR: error: section .sec1 file range overlaps with .sec2
  3. BOTH-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x18000 -> 0x180FF]
  4. BOTH-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x18040 -> 0x1813F]

+# BOTH-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x18000, 0x180FF]
+# BOTH-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x18040, 0x1813F]

  1. BOTH-OVERLAP-ERR: error: section .sec1 virtual address range overlaps with .sec2
  2. BOTH-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000 -> 0x80FF]
  3. BOTH-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8040 -> 0x813F]

+# BOTH-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000, 0x80FF]
+# BOTH-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8040, 0x813F]

  1. BOTH-OVERLAP-ERR: error: section .sec1 load address range overlaps with .sec2
  2. BOTH-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000 -> 0x80FF]
  3. BOTH-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8040 -> 0x813F]

+# BOTH-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000, 0x80FF]
+# BOTH-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8040, 0x813F]

  1. RUN: ld.lld -o %t.so --script %t-both-overlap.script %t.o -shared --noinhibit-exec
  2. Note: I case everything overlaps we create a binary with overlapping file

Index: ELF/Writer.cpp

  • ELF/Writer.cpp

+++ ELF/Writer.cpp
@@ -1937,7 +1937,7 @@
static std::string rangeToString(uint64_t Addr, uint64_t Len) {

if (Len == 0)
  return "<empty range at 0x" + utohexstr(Addr) + ">";
  • return "[0x" + utohexstr(Addr) + " -> 0x" + utohexstr(Addr + Len - 1) + "]";

+ return "[0x" + utohexstr(Addr) + ", 0x" + utohexstr(Addr + Len - 1) + "]";
}

// Check whether sections overlap for a specific address range (file offsets,

Index: test/ELF/linkerscript/overlapping-sections.s

  • test/ELF/linkerscript/overlapping-sections.s

+++ test/ELF/linkerscript/overlapping-sections.s
@@ -63,8 +63,8 @@

  1. RUN: }" > %t-lma.script
  2. RUN: not ld.lld -o %t.so --script %t-lma.script %t.o -shared 2>&1 | FileCheck %s -check-prefix LMA-OVERLAP-ERR
  3. LMA-OVERLAP-ERR: error: section .sec1 load address range overlaps with .sec2
  4. LMA-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000 -> 0x80FF]
  5. LMA-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8080 -> 0x817F]

+# LMA-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000, 0x80FF]
+# LMA-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8080, 0x817F]

  1. Check that we create the expected binary with --noinhibit-exec or --no-check-sections:
  2. RUN: ld.lld -o %t.so --script %t-lma.script %t.o -shared --noinhibit-exec

@@ -95,8 +95,8 @@

  1. RUN: }" > %t-vaddr.script
  2. RUN: not ld.lld -o %t.so --script %t-vaddr.script %t.o -shared 2>&1 | FileCheck %s -check-prefix VADDR-OVERLAP-ERR
  3. VADDR-OVERLAP-ERR: error: section .sec1 virtual address range overlaps with .sec2
  4. VADDR-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000 -> 0x80FF]
  5. VADDR-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8020 -> 0x811F]

+# VADDR-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000, 0x80FF]
+# VADDR-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8020, 0x811F]

  1. Check that the expected binary was created with --noinhibit-exec:
  2. RUN: ld.lld -o %t.so --script %t-vaddr.script %t.o -shared --noinhibit-exec

@@ -123,14 +123,14 @@

  1. RUN: not ld.lld -o %t.so --script %t-both-overlap.script %t.o -shared 2>&1 | FileCheck %s -check-prefix BOTH-OVERLAP-ERR
  2. BOTH-OVERLAP-ERR: error: section .sec1 file range overlaps with .sec2
  3. BOTH-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x18000 -> 0x180FF]
  4. BOTH-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x18040 -> 0x1813F]

+# BOTH-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x18000, 0x180FF]
+# BOTH-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x18040, 0x1813F]

  1. BOTH-OVERLAP-ERR: error: section .sec1 virtual address range overlaps with .sec2
  2. BOTH-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000 -> 0x80FF]
  3. BOTH-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8040 -> 0x813F]

+# BOTH-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000, 0x80FF]
+# BOTH-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8040, 0x813F]

  1. BOTH-OVERLAP-ERR: error: section .sec1 load address range overlaps with .sec2
  2. BOTH-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000 -> 0x80FF]
  3. BOTH-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8040 -> 0x813F]

+# BOTH-OVERLAP-ERR-NEXT: >>> .sec1 range is [0x8000, 0x80FF]
+# BOTH-OVERLAP-ERR-NEXT: >>> .sec2 range is [0x8040, 0x813F]

  1. RUN: ld.lld -o %t.so --script %t-both-overlap.script %t.o -shared --noinhibit-exec
  2. Note: I case everything overlaps we create a binary with overlapping file

Index: ELF/Writer.cpp

  • ELF/Writer.cpp

+++ ELF/Writer.cpp
@@ -1937,7 +1937,7 @@
static std::string rangeToString(uint64_t Addr, uint64_t Len) {

if (Len == 0)
  return "<empty range at 0x" + utohexstr(Addr) + ">";
  • return "[0x" + utohexstr(Addr) + " -> 0x" + utohexstr(Addr + Len - 1) + "]";

+ return "[0x" + utohexstr(Addr) + ", 0x" + utohexstr(Addr + Len - 1) + "]";
}

// Check whether sections overlap for a specific address range (file offsets,


llvm-commits mailing list
llvm-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits