[PATCH] D70048: [LLD] Add NetBSD support as a new flavor of LLD (nb.lld)

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 13 14:05:04 PST 2019


MaskRay added a comment.

In D58892#1784119 <https://reviews.llvm.org/D58892#1784119>, @mgorny wrote:

> In D58892#1783042 <https://reviews.llvm.org/D58892#1783042>, @MaskRay wrote:
>
> > In D58892#1783029 <https://reviews.llvm.org/D58892#1783029>, @mgorny wrote:
> >
> > > I know I'm late to the party but this change thoroughly destroyed NetBSD support. The NetBSD loader doesn't support having more than two PT_LOAD sections. `-z norosegment` helped with that so far but after this change practically everything fails to run.
> >
> >
> > This seems to be a very serious limitation. I have difficult to understand how such limitation could exist at all, but I think this should be straightforward to fix.
>
>
> Yes, it is a serious limitation, and no, it's not straightforward to fix. The loader has making a lot of assumptions, especially what PT_LOAD segments to expect and in which order. I've previously made a patch that allowed third segment but it was rejected as apparently 'not doing it the right way'. Almost a year has passed, and I am entirely powerless to fix it.


@mgorny told me that NetBSD ld.so has a limitation that it can only handle 2 PT_LOAD segments.

I think the NetBSD toolchain team's attitude toward certain ELF things should probably be made more flexible. For that particular PT_LOAD limitation issue (a.out heritage?), if @mgorny don't mind giving me a pointer, I'd like to help argue fixing the limitation.

> If 200 LOC for NetBSD is a show stopper, please see e.g. compiler-rt where we maintain 2 orders of magnitude more NetBSD-only LOC.

I am not sure compiler-rt is a good example here. The "2 orders of magnitude more" OS specific things make compiler-rt difficult to maintain. Innovations can be easily constrained by the numerous OS specific customization. I am glad that lld hasn't entered that situation.

I feel that NetBSD's stubborn attitude is adding complexity to many other projects.

> I try to avoid forking LLD for downstream and this shall be appreciated.

If you can accept `DT_RUNPATH` and fix the PT_LOAD limitation, then it seems NetBSD just needs its own ld wrapper that adds -L, and probably -znognustack which saves you 56 bytes. I don't understand why such customization should still be upstreamed.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D70048





More information about the llvm-commits mailing list