[PATCH] D34618: [LLD] Add basic 64-bit SPARC support
    Rui Ueyama via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Mon Jun 26 08:00:02 PDT 2017
    
    
  
ruiu added a comment.
Overall looking good. Thank you for doing this!
Can you give me a pointer to the ABI documentation?
================
Comment at: lld/ELF/Arch/SPARCV9.cpp:44
+
+  PageSize = 8192;
+  DefaultMaxPageSize = 0x100000;
----------------
Is SPARC always 8k page?
================
Comment at: lld/ELF/Arch/SPARCV9.cpp:59
+  case R_SPARC_PC22:
+    if (S.getName() == "_GLOBAL_OFFSET_TABLE_")
+      return R_GOTONLY_PC;
----------------
In lld we try to avoid string comparison as it is slow. If you need to do this, you can add a new member `GlobalOffsetTable` to `ElfSym` defined in Symbols.h and compare a given symbol with that.
================
Comment at: lld/ELF/Arch/SPARCV9.cpp:61
+      return R_GOTONLY_PC;
+  // fallthrough
+  case R_SPARC_DISP32:
----------------
Use LLVM_FALLTHROUGH.
================
Comment at: lld/ELF/Arch/SPARCV9.cpp:86
+    checkUInt<32>(Loc, Val, Type);
+    write32be(Loc, Val);
+    break;
----------------
Is SPARCV9 big-endian only?
================
Comment at: lld/ELF/SyntheticSections.cpp:1093
     add({DT_PLTRELSZ, In<ELFT>::RelaPlt->getParent()->Size});
-    add({Config->EMachine == EM_MIPS ? DT_MIPS_PLTGOT : DT_PLTGOT,
-         InX::GotPlt});
+    switch (Config->EMachine) {
+    case EM_MIPS:
----------------
nit: since there are only three choices, I'd do it with if ~ else if ~ else ~.
================
Comment at: lld/ELF/SyntheticSections.cpp:1638-1639
+      HeaderSize(S) {
+  if (Config->EMachine == EM_SPARCV9)
+    this->Flags |= SHF_WRITE;
+}
----------------
This is interesting. Can you describe why the .plt segment has to be writable on Sparc? I'd like to add a comment here about the background.
https://reviews.llvm.org/D34618
    
    
More information about the llvm-commits
mailing list