[PATCH] D114275: [lld-macho] Include Objective-C functions in LC_FUNCTION_STARTS
Vy Nguyen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Nov 20 10:54:00 PST 2021
oontvoo added inline comments.
================
Comment at: lld/MachO/SyntheticSections.cpp:800
+
+ for (const InputFile *file : inputFiles) {
+ if (auto *objFile = dyn_cast<ObjFile>(file)) {
----------------
oontvoo wrote:
> int3 wrote:
> > int3 wrote:
> > > int3 wrote:
> > > > thevinster wrote:
> > > > > keith wrote:
> > > > > > oontvoo wrote:
> > > > > > > keith wrote:
> > > > > > > > oontvoo wrote:
> > > > > > > > > Do you happen to have performance data for this change?
> > > > > > > > > seems like it could take a hit here , esp. for cases where the number of input files is large - ie., most of our apps :)
> > > > > > > > >
> > > > > > > > > On the other hand, I agree debug experience is important...
> > > > > > > > >
> > > > > > > > I've haven't tested this on our large links yet so I'll have to check, I agree, I felt bad writing this
> > > > > > > How would people feel about making this configurable? ( either via making up some new flag or grouping it into an existing one)
> > > > > > Maybe -no-function-starts is enough for this level of configuration? We actually have that enabled today for our builds for binary size.
> > > > > Hmm... I think we can parallelize this. This might offset the need to gate it behind a flag. Although, we can hold off on this until more concrete data on how bad this affects the link speed.
> > > > >
> > > > > Why can't we add these symbols to the symtab?
> > > > > Why can't we add these symbols to the symtab?
> > > >
> > > > the symtab is for global (aka extern) symbols, which need to have unique names across all object files. local symbols do not have that constraint.
> > > >
> > > > Anyway, this is being done in parallel with other stuff (see `finalizeLinkEditSegment()`), so its perf impact might actually be negligible in practice
> > > I would prefer we not add too many config flags. I'm also not sure there's much value in having partially emitted debug info -- I figure you either want or don't want it. `-no-function-starts` is probably enough for now.
> > > I've haven't tested this on our large links yet
> >
> > We've been using chromium_framework as an ad-hoc benchmark, since it's something that all of us can repro: https://bugs.llvm.org/show_bug.cgi?id=48657#c0
> >
> > Would be nice to include some numbers for that in the commit message. For running the benchmark, I like to use https://github.com/asayers/cbdr/blob/master/cbdr.md
> >
> > My usual invocation is `cbdr sample "base:~/bench-base/ld64.lld @response.txt" "diff:~/bench-diff/ld64.lld @response.txt" --timeout=300s | tee results.csv | cbdr analyze -s 95`
> SG 👍
> > I've haven't tested this on our large links yet
>
> We've been using chromium_framework as an ad-hoc benchmark, since it's something that all of us can repro: https://bugs.llvm.org/show_bug.cgi?id=48657#c0
To be frank, chromium is good for most benchmarking purposes - but it isn't quite representative enough for most of our internal apps (for one, it's much smaller). Unfortunately it's the only thing we have public so ... ¯\_(ツ)_/¯
But anyways, I've run your diff on YT and int3 is right that there's negligible difference in link time.
```
x ./LLD_YT_released_base.txt
+ ./LLD_TY_released_diff.txt
N Min Max Median Avg Stddev
x 5 13.33 13.72 13.56 13.534 0.15565989
+ 5 13.56 13.92 13.79 13.76 0.15636496
No difference proven at 95.0% confidence
(No diff in CPU/SYS time either)
```
Sorry for the noise here :)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D114275/new/
https://reviews.llvm.org/D114275
More information about the llvm-commits
mailing list