[PATCH] D82812: [llvm-install-name-tool] Merge rpath with id/change

Kellie Medlin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 30 10:50:15 PDT 2020


Ktwu added inline comments.


================
Comment at: llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp:275
 
+  std::set<std::string> OriginalRPaths;
+  auto FindPair =
----------------
alexshap wrote:
> jhenderson wrote:
> > sameerarora101 wrote:
> > > NOTE: Cannot store `StringRef` in OriginlRPaths (i.e cannot have `set<StringRef> OriginalRPaths`). This is because the StringRef `CurrentRPath` is a reference to the string stored inside LC and thus when we change the payload (via `-rpath` option) `CurrentRPath` is also updated to hold a reference to the new string. Hence I need to store the actual strings inside the set.
> > You probably don't want a `std::set` here. Have you reviewed [[ https://llvm.org/docs/ProgrammersManual.html#set-like-containers-std-set-smallset-setvector-etc | the Programmer's Manual ]] on what set type to use?
> 1. I wanted to mention it on one of the previous diffs but looks like I forgot - it would be better to place all the details related to updating load commands into a separate helper function rather than directly into handleArgs.
>    
> ```
> static Error updateLoadCommands(const CopyConfig &Config, Object &Obj)
> ```
> handleArgs would invoke this function (updateLoadCommands) similarly to removeSections, updateAndRemoveSymbols etc.
> 
> Probably it would be even better first to refactor the code this way (on a separate diff) before moving forward if you don't mind
> (now handleArgs is accumulating the details it should not really be aware of)
> 
> 2. Please, take a look at StringSet, StringMap and their interfaces 
> (in particular, if I am not mistaken they would help you avoid some str() calls below)
>  
> Also this probably suggests that Config.RPathsToUpdate, Config.RPathsToUpdate should really be StringMap-s.
> Also this probably suggests that Config.RPathsToUpdate, Config.RPathsToUpdate should really be StringMap-s.

+1, although does StringMap have deterministic iteration? Maybe SetVector would work as well?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82812





More information about the llvm-commits mailing list