[PATCH] D66426: [lld] Enable a watermark of loadable sections to be generated and placed in a note section

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 20 05:05:46 PDT 2019


MaskRay added a comment.

I suggest adding a dumper to llvm-readobj and then adding a test to `test/ELF/partition-notes.s`



================
Comment at: lld/ELF/SyntheticSections.cpp:342
 
+lld::elf::WatermarkSection::WatermarkSection()
+:SyntheticSection(SHF_ALLOC, SHT_NOTE, 4, ".note.llvm.watermark")
----------------
Delete `lld::elf::`.


================
Comment at: lld/ELF/SyntheticSections.cpp:347
+void lld::elf::WatermarkSection::writeTo(uint8_t *buf) {
+  write32(buf, 5);                     // Name size
+  write32(buf + 4, watermarkSize);     // Content size
----------------
5 -> 8, otherwise it is incorrect to use `watermarkBuf = buf + 20;`


================
Comment at: lld/ELF/SyntheticSections.cpp:354
+
+ void lld::elf::WatermarkSection::writeWatermark(llvm::ArrayRef<uint8_t> buf) {
+  assert(buf.size() == watermarkSize);
----------------
Delete `lld::elf::`

Delete `llvm::`


================
Comment at: lld/ELF/Writer.cpp:642
 
+  // Compute and fill the watermark note.
+  writeWatermark();
----------------
Backfill .note.llvm.watermark section content. This is similar to .note.gnu.build-id.


================
Comment at: lld/ELF/Writer.cpp:2689
+
+  size_t hashSize = mainPart->buildId->hashSize;
+  std::vector<uint8_t> buildId(hashSize);
----------------
inline the only use of the variable


================
Comment at: lld/ELF/Writer.cpp:2692
+  llvm::ArrayRef<uint8_t> buf{Out::bufferStart, size_t(fileSize)};
+  std::vector<llvm::ArrayRef<uint8_t>> parts = {buf};
+
----------------
Delete `parts`


================
Comment at: lld/ELF/Writer.cpp:2716
+
+  if (first > last)
+    return;
----------------
`if (first >= last)` might be better (WriteHash asserts `first < last` though I haven't found a case where first can be equal to last)


================
Comment at: lld/test/ELF/watermark.s:1
+## Test that a watermark is generated placed in the correct section with the
+## correct alignment when using --watermark. Check also that the watermark can
----------------
`generated placed`?


================
Comment at: lld/test/ELF/watermark.s:5
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: ld.lld %t -o %t.default
----------------
`-triple=x86_64 %s -o %t.o` (this is generic, not Linux specific). Use .o for object files.


================
Comment at: lld/test/ELF/watermark.s:14
+# RUN: ld.lld --watermark %t -o %t.watermark
+# RUN: llvm-readobj -S %t.watermark | FileCheck -check-prefix=SECTION %s
+# RUN: llvm-objdump -s %t.watermark | FileCheck --strict-whitespace -check-prefix=CONTENT %s
----------------
Consider `llvm-readelf -S`. Its output is concise.


================
Comment at: lld/test/ELF/watermark.s:15
+# RUN: llvm-readobj -S %t.watermark | FileCheck -check-prefix=SECTION %s
+# RUN: llvm-objdump -s %t.watermark | FileCheck --strict-whitespace -check-prefix=CONTENT %s
+
----------------
`llvm-readelf -x .note.llvm.watermark` (Prefer llvm-readelf -x over llvm-objdump -s`)


================
Comment at: lld/test/ELF/watermark.s:23
+# SECTION-NEXT: Address:
+# SECTION-NEXT: Offset: [[_:0x[0-9A-Z]*(0|4|8|C)$]]
+# SECTION-NEXT: Size: 28
----------------
[048C]


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66426/new/

https://reviews.llvm.org/D66426





More information about the llvm-commits mailing list