LGTM. Not sure why buildbots are complaining, but they don't look super related.
Wed, Feb 1
Mon, Jan 23
After some internal discussions, I'm going to abandon this in favor of a local internal patch since the current behavior is easier to reason. If other folks run into this issue and also want this behavior, I'm happy to bring this back.
We do handle systemPaths as optional right now in L186-L194. The issue is that the link arguments contain an explicit -L/usr/local/lib that doesn't exist.
Fri, Jan 20
Dec 29 2022
Re-reading that, it seems to be the same issue (though our case is because of swift autolinking instead of symbols defined in the same archive). I think we should re-open that PR and track it for future references. Seeing that it could be more widespread, we might want to prioritize it.
Dec 28 2022
I'm happy to commit to the idea that hashing on the contents is the wrong implementation. But, do people think this specific behavior is one that should still be fixed within LLD (with another implementation) or be fixed directly in the codebase (assuming this is possible)?
Imho it'd be nicer to add this to the "list of places where lld is different from ld64". From what I can tell, this isn't a _huge_ problem in practice (we haven't needed it until now), and there's some value in both sensible semantics and in having behavior that's consistent with the other llds too.
Dec 27 2022
Dec 22 2022
Dec 19 2022
Dec 12 2022
Does this allow us to undo D115416?
Possibly, I'll have to do some benchmarks. However I think it is likely still a performance improvement to do it in parallel
Sure, but having simpler code makes it easier to parallelize other parts. Doing complicated parallelism too early makes it harder to do parallelize things that would otherwise be easier to parallelize and might get us stuck in a local optimum.
(This is admittedly very hand-wavy!)
Dec 6 2022
Nov 22 2022
Sep 30 2022
Rename dupSymReporter to dupSymDiags
Fixed up nits and naming
Sep 29 2022
Add flag to gate dead stripped duplicate symbols
Sep 28 2022
Do you have data how much harder these are to fix than (say) the text deduping failures?
FWIW, I don't agree with this argument, and our doc listing intentional differences doesn't either. (Not deduping strings by default is a big difference and we're stricter in various other areas too.)
Sep 17 2022
Sep 14 2022
Overall, lgtm. Thanks!
Sep 12 2022
Aug 29 2022
Some minor comments. Overall, LGTM, I'll leave it to people more familiar with the code to stamp.
Aug 25 2022
@int3 Thanks for the clarification! In that case, this change LGTM.
Aug 24 2022
we would actually produce an invalid __eh_frame section in that case because the CIE associated with the unnecessary FDE would still get dead-stripped and we'd end up with a dangling FDE
Aug 14 2022
Whoops, this might've been a copy paste error on my end. Thanks for catching it!
Aug 3 2022
Jul 28 2022
Jul 27 2022
Jul 20 2022
Could we run a benchmark on this just to see if it has any impact on link speed? I remember bind opcodes optimization had a slight link speed regression which was then put behind an -O2 flag since it isn't worth it for debug builds. I'm wondering if we need to do the same for the rebase opcodes.
Jul 15 2022
May 25 2022
May 24 2022
May 11 2022
Apr 22 2022
Fixed up comments and renaming
Apr 21 2022
Apr 20 2022
Mar 22 2022
Feb 18 2022
Feb 10 2022
Overall, I gave it some thought on the naming. To be consistent with a part of the naming (e.g. no_fatal_warnings_), it makes sense to have no-arg be as the prefix as well. We do have a mix of - and _ (e.g. lld-watchos and no_fatal_warnings_lld). I broke the tie and slightly prefer -. Hence, the result no-arg-lld.
Rename to no-arg-lld
Switch name to lld-noarg
Feb 9 2022
why doesn't re-using %lld plus additional args, which would override the defalut ones provided by %lld anyways, work?
Unfortunately, we can't start with %lld anymore otherwise it would get replaced with the value of %lld and then just append -noarg which makes the command invalid. I'm happy to change it to %no-arg-lld.
Bikeshedding: How about %lld-noarg? It's a bit more descriptive and only two characters longer.
Feb 7 2022
Jan 31 2022
Jan 27 2022
Jan 18 2022
Update differences in rst
It's worth noting that -no_deduplicate in ld64 actually turns off ICF, not string merging. I don't know if ld64 even has a way to turn off string merging, since IIRC it's implemented in the symbol table itself.
Jan 14 2022
Jan 13 2022
After reading through this thread, I'm going to try and argue for both fronts here and then give my final opinion at the end.
Jan 10 2022
Jan 6 2022
Do you think this needs to be changed?
Increase to 256
Maybe make it configurable too?
Jan 5 2022
Jan 2 2022
The output from ld64 doesn't look like what lld produces. Also the command you linked above doesn't pass in dead_strip. Is ld64 always outputting dead stripped symbols regardless of the flag or is the summary a typo?
Dec 15 2021
Don't enqueue if null osec