[llvm-dev] [cfe-dev] [RFC] Open sourcing and contributing TAPI back to the LLVM community

John Ericson via llvm-dev llvm-dev at lists.llvm.org
Mon Apr 9 19:11:40 PDT 2018


 > Regardless of any of that, given that TBD files _are_ an integral 
part of the apple platform, supporting them is certainly a necessity in 
order to have a working apple linker. So, if making LLD work for 
Apple/MachO is the justification for adding TBD support to LLVM, that 
seems self-evidently a reasonable thing to do. On the other hand, it 
looks like the LLD mach-o code is unmaintained and nobody seems to be 
much interested in it. And having code for reading TBD files in 
LLVM seems not terribly interesting, unless it is as part of a project 
to make the LLD MachO linker actually functional and supported.

Yes. I hope this can be reason enough. Hobbyists could push for LLD 
support for Mach-O besides Apple, and if LLD is to displace other 
linkers this is a necessary component as you say. Better to upstream now 
before the code diverges than more work later? Conversely if nothing 
happens, I doubt libtapi would be a greater drag on the codebase than 
the MachO LLD code, so whatever cost/benefit analysis exists for keeping 
that around could also apply to this.

 > On 04/09/2018 06:39 PM, Greg Parker via cfe-dev wrote:

 >> On Apr 9, 2018, at 3:23 PM, James Y Knight via cfe-dev 
<cfe-dev at lists.llvm.org> wrote:

 >> I'm not really clear on the actual benefits of the TBD file, and why 
Apple migrated to them in the first place. Shouldn't a dynamic library 
containing only the relevant parts (e.g. the dynamic symbol table) be 
roughly comparable in size?...

 > File size is one reason...

For the record, other small benefits are

  - The inclusion of the path to the actual library, which as far as I 
know is not something that can be done with a stub library. This allows 
easy absolute or relative (with R(UN)PATH) linking. Comparatively, 
passing the right -rpath and -rpath link is manual and (in my opinion) 
harder to understand and cumbersome, and also not a solution for 
absolute linking. I work with Nixpkgs of NixOS, where absolute path 
linking is frequently an objective as part of a general principle of 
avoiding indirection.

  - YAML. The option for line-oriented structure allows for easy diffing 
with conventional line-based diffing tools, which is useful for 
debugging compatability issues. (e.g. Why did my new version remove 
symbols? Why did my security update change anything at all?). Of course 
one can just objdump and diff, but that wouldn't happen automatically 
with version control, for example.

John


More information about the llvm-dev mailing list