[PATCH] D48247: lld: add experimental support for SHT_RELR sections.
Rui Ueyama via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 1 23:59:27 PDT 2018
ruiu added a comment.
Overall looking good.
================
Comment at: ELF/Driver.cpp:887-888
}
+ Config->UseAndroidRelrTags = Args.hasFlag(
+ OPT_use_android_relr_tags, OPT_no_use_android_relr_tags, false);
----------------
Move this before the code to initialize Config->UnresolvedSymbols.
================
Comment at: ELF/Relocations.cpp:715
+static void addRelativeReloc(InputSectionBase *IS, uint64_t OffsetInSec,
+ Symbol *Sym, int64_t Addend, RelExpr Expr,
----------------
This function needs comment. (Any non-trivial code needs comment so that the code can be understood by first-time readers.)
================
Comment at: ELF/SyntheticSections.cpp:1711
+template <class ELFT> RelrSection<ELFT>::RelrSection() {
+ this->Entsize = sizeof(Elf_Relr);
+}
----------------
Elf_Relr -> Config->Wordsize
================
Comment at: ELF/SyntheticSections.cpp:1761
+ typename std::vector<uint64_t>::iterator Curr = Offsets.begin();
+ while (Curr != Offsets.end()) {
+ uint64_t Current = *Curr;
----------------
This loop looks odd to me because it doesn't reflect the logic that this loop should implement. Currently, the loop looks like this
while () {
do_something();
if (...)
add_a_leading_address_entry();
else
add_a_bitmap();
}
However, IIUC, the straightforward translation of the logic in the pseudo code should look like this:
while (there's remaining relocation) {
add_a_first_address(the first remaining relocation);
while (more relocations can be folded)
add_a_bitmap(foldable relocations);
}
As a result, I think you had to write non-obvious code to determine whether you need to add a leading address entry or a bitmap. I believe this code can be (and perhaps should be) improved. That said, I'm fine if you submit this code as-is. I'll try to address that as a follow-up patch.
================
Comment at: ELF/SyntheticSections.cpp:1783
+
+ Elf_Relr R;
+ if (Bits == 0) {
----------------
Please use `typename ELFT::uint` instead of Elf_Relr.
================
Comment at: ELF/SyntheticSections.h:534
+
+template <class ELFT> class RelrSection final : public RelrBaseSection {
+ typedef typename ELFT::Relr Elf_Relr;
----------------
Please write a comment as to what this class represents.
================
Comment at: ELF/SyntheticSections.h:547
+private:
+ std::vector<Elf_Relr> RelrRelocs;
+};
----------------
Use `typename ELFT::uint` instead of ELF_Relr.
Repository:
rLLD LLVM Linker
https://reviews.llvm.org/D48247
More information about the llvm-commits
mailing list