Peter Smith via llvm-dev
2019-Jun-21 12:27 UTC
[llvm-dev] LLD handling of orphaned sections
On Fri, 21 Jun 2019 at 13:05, Rui Ueyama via llvm-dev <llvm-dev at lists.llvm.org> wrote:> > I think Geroge (cc'ed) knows better than me in that area. > > lld is underdocumented, and in particular there is virtually no documentation about its linker script support. Our basic strategy is to follow the GNU's documentation and the implementations unless it is too hard or doesn't match with the rest of lld. So, as long as it works just like GNU, it's fine, but if not, it is hard to say whether it is intended or not, just as you explained. This is an area that we need to improve. >I think it would be helpful if we could come up with some user-level documentation on the intentional differences between LLD and GNU ld, particularly in the less well specified areas like orphan section assignment and program header generation. I think we'd have to be very careful with what we wrote down though, to a first approximation we have differences that are intentional or non-intentional; and on a separate axis differences that are stable or subject to change. We'd want to concentrate on documenting differences that are intentional and stable, such as back references being allowed in library selection. If there is interest in working this out I'm willing to start a list of the differences, whether it is in the document or just a text file alongside the source. It is something that could be built up incrementally and over time we can identify the stable differences? Peter> On Thu, Jun 20, 2019 at 11:18 PM Roger Pau Monné via llvm-dev <llvm-dev at lists.llvm.org> wrote: >> >> Hello, >> >> The handling of orphaned sections in LLD 8 has changed from GNU LD >> behavior (note that LLD 7 didn't show this behavior). I've reported >> this as: >> >> https://bugs.llvm.org/show_bug.cgi?id=42327 >> >> It's not clear to me however whether this is intentional or a >> regression when compared to LLD 7. >> >> As stated in that bug report it would be helpful for me to get some >> kind of documentation that describes LLD intended handling of orphaned >> sections, so that I can justify fixes in order to support LLD, and >> that I can be sure what I modify is going to be robust against future >> changes in LLD. For example GNU LD has: >> >> https://sourceware.org/binutils/docs/ld/Orphan-Sections.html >> >> Having something like this for LLD (if it's going to diverge from GNU >> LD behavior) would be very helpful, and would allow me to implement >> future proof support for LLD in Xen. >> >> Thanks, Roger. >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
George Rimar via llvm-dev
2019-Jun-21 12:41 UTC
[llvm-dev] LLD handling of orphaned sections
> I think it would be helpful if we could come up with some user-level > documentation on the intentional differences between LLD and GNU ld, > particularly in the less well specified areas like orphan section > assignmentI agree. As we all know even GNU ld and GNU gold can layout the sections differently. And when a question like "what is the differences between LLD and GNU ld in this part" arise, I afraid I do not have a good answer. We have a more or less clear documented general heuristics that usually work, but also had to implement/fix too many corner cases probably. Having a documentation about this would be great I think. (My general suggestion for people is usually: try to avoid having orphans if you can. I know that is not always can be a solution though.) Best regards, George | Developer | Access Softek, Inc ________________________________________ От: Peter Smith <peter.smith at linaro.org> Отправлено: 21 июня 2019 г. 15:27 Кому: Rui Ueyama Копия: Roger Pau Monné; George Rimar; llvm-dev Тема: Re: [llvm-dev] LLD handling of orphaned sections CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe. If you suspect potential phishing or spam email, report it to ReportSpam at accesssoftek.com On Fri, 21 Jun 2019 at 13:05, Rui Ueyama via llvm-dev <llvm-dev at lists.llvm.org> wrote:> > I think Geroge (cc'ed) knows better than me in that area. > > lld is underdocumented, and in particular there is virtually no documentation about its linker script support. Our basic strategy is to follow the GNU's documentation and the implementations unless it is too hard or doesn't match with the rest of lld. So, as long as it works just like GNU, it's fine, but if not, it is hard to say whether it is intended or not, just as you explained. This is an area that we need to improve. >I think it would be helpful if we could come up with some user-level documentation on the intentional differences between LLD and GNU ld, particularly in the less well specified areas like orphan section assignment and program header generation. I think we'd have to be very careful with what we wrote down though, to a first approximation we have differences that are intentional or non-intentional; and on a separate axis differences that are stable or subject to change. We'd want to concentrate on documenting differences that are intentional and stable, such as back references being allowed in library selection. If there is interest in working this out I'm willing to start a list of the differences, whether it is in the document or just a text file alongside the source. It is something that could be built up incrementally and over time we can identify the stable differences? Peter> On Thu, Jun 20, 2019 at 11:18 PM Roger Pau Monné via llvm-dev <llvm-dev at lists.llvm.org> wrote: >> >> Hello, >> >> The handling of orphaned sections in LLD 8 has changed from GNU LD >> behavior (note that LLD 7 didn't show this behavior). I've reported >> this as: >> >> https://bugs.llvm.org/show_bug.cgi?id=42327 >> >> It's not clear to me however whether this is intentional or a >> regression when compared to LLD 7. >> >> As stated in that bug report it would be helpful for me to get some >> kind of documentation that describes LLD intended handling of orphaned >> sections, so that I can justify fixes in order to support LLD, and >> that I can be sure what I modify is going to be robust against future >> changes in LLD. For example GNU LD has: >> >> https://sourceware.org/binutils/docs/ld/Orphan-Sections.html >> >> Having something like this for LLD (if it's going to diverge from GNU >> LD behavior) would be very helpful, and would allow me to implement >> future proof support for LLD in Xen. >> >> Thanks, Roger. >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Roger Pau Monné via llvm-dev
2019-Jun-21 15:20 UTC
[llvm-dev] LLD handling of orphaned sections
On Fri, Jun 21, 2019 at 12:41:46PM +0000, George Rimar wrote:> > I think it would be helpful if we could come up with some user-level > > documentation on the intentional differences between LLD and GNU ld, > > particularly in the less well specified areas like orphan section > > assignment > > I agree. As we all know even GNU ld and GNU gold can > layout the sections differently. And when a question like "what is the differences > between LLD and GNU ld in this part" arise, I afraid I do not have a good answer. > We have a more or less clear documented general heuristics that usually work, > but also had to implement/fix too many corner cases probably. > > Having a documentation about this would be great I think.I think this would be a good start, IMO it's important to have diverging GNU ld behaviour documented, or else it's painful to add LLD support to projects using GNU ld. After all it's still not clear to me whether the current orphan section handling in LLD 8 is intentional or a regression when compared to LLD 7.> (My general suggestion for people is usually: try to avoid having orphans if you can. > I know that is not always can be a solution though.)That would indeed be an option, but I'm afraid it's going to be hard to justify switching to --orphan-handling=error in order to add support to LLD. Also I'm worried that different compiler versions could generate diverging section names, thus forcing us to expand the linker script with tons of sections, and having to modify it in order to support newer versions. Thanks, Roger.> Best regards, > George | Developer | Access Softek, Inc > > ________________________________________ > От: Peter Smith <peter.smith at linaro.org> > Отправлено: 21 июня 2019 г. 15:27 > Кому: Rui Ueyama > Копия: Roger Pau Monné; George Rimar; llvm-dev > Тема: Re: [llvm-dev] LLD handling of orphaned sections > > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe. If you suspect potential phishing or spam email, report it to ReportSpam at accesssoftek.com > > On Fri, 21 Jun 2019 at 13:05, Rui Ueyama via llvm-dev > <llvm-dev at lists.llvm.org> wrote: > > > > I think Geroge (cc'ed) knows better than me in that area. > > > > lld is underdocumented, and in particular there is virtually no documentation about its linker script support. Our basic strategy is to follow the GNU's documentation and the implementations unless it is too hard or doesn't match with the rest of lld. So, as long as it works just like GNU, it's fine, but if not, it is hard to say whether it is intended or not, just as you explained. This is an area that we need to improve. > > > > I think it would be helpful if we could come up with some user-level > documentation on the intentional differences between LLD and GNU ld, > particularly in the less well specified areas like orphan section > assignment and program header generation. I think we'd have to be very > careful with what we wrote down though, to a first approximation we > have differences that are intentional or non-intentional; and on a > separate axis differences that are stable or subject to change. We'd > want to concentrate on documenting differences that are intentional > and stable, such as back references being allowed in library > selection. > > If there is interest in working this out I'm willing to start a list > of the differences, whether it is in the document or just a text file > alongside the source. It is something that could be built up > incrementally and over time we can identify the stable differences? > > Peter > > > On Thu, Jun 20, 2019 at 11:18 PM Roger Pau Monné via llvm-dev <llvm-dev at lists.llvm.org> wrote: > >> > >> Hello, > >> > >> The handling of orphaned sections in LLD 8 has changed from GNU LD > >> behavior (note that LLD 7 didn't show this behavior). I've reported > >> this as: > >> > >> https://bugs.llvm.org/show_bug.cgi?id=42327 > >> > >> It's not clear to me however whether this is intentional or a > >> regression when compared to LLD 7. > >> > >> As stated in that bug report it would be helpful for me to get some > >> kind of documentation that describes LLD intended handling of orphaned > >> sections, so that I can justify fixes in order to support LLD, and > >> that I can be sure what I modify is going to be robust against future > >> changes in LLD. For example GNU LD has: > >> > >> https://sourceware.org/binutils/docs/ld/Orphan-Sections.html > >> > >> Having something like this for LLD (if it's going to diverge from GNU > >> LD behavior) would be very helpful, and would allow me to implement > >> future proof support for LLD in Xen. > >> > >> Thanks, Roger. > >> _______________________________________________ > >> LLVM Developers mailing list > >> llvm-dev at lists.llvm.org > >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > > > > _______________________________________________ > > LLVM Developers mailing list > > llvm-dev at lists.llvm.org > > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev