James Y Knight via llvm-dev
2020-Aug-31 21:21 UTC
[llvm-dev] [RFC][LLVM] New Constant type for representing function PLT entries
IIUC, the actual requirements for the proposed pltentry(@X) constant is: 1. The returned address MUST have a constant offset at link-time from some other unspecified but defined-in-the-same-binary/DSO symbol Y. Which symbol it is is presumed not to matter because all locally-defined symbols have constant offsets from each-other, anyhow. 2. The address is otherwise insignificant. (Therefore, coming up with a brand new unique address, by creating a local stub function, would be an acceptable implementation.) These requirements do seem somewhat generic: even on a system which has a different way to make a call could still create a local stub function, and give you the address of that. However, "unnamed address" isn't a good name, because it doesn't capture the first requirement, only the second. On Mon, Aug 31, 2020 at 4:46 PM Leonard Chan via llvm-dev < llvm-dev at lists.llvm.org> wrote:> I think I follow. So in this case, it's better to be explicit and say > "this could lower to a PLT entry (which is only supported on specific > targets)" rather than making something general that can exist on all > targets. Makes sense. I wasn't sure if there was perhaps something > equivalent on other targets that this could lower to, but we can make this > target/PLT specific. > > On Sun, Aug 30, 2020 at 3:55 PM Chris Lattner <clattner at nondot.org> wrote: > >> >> >> On Aug 29, 2020, at 6:53 PM, Hal Finkel <hfinkel at anl.gov> wrote: >> >> >> Sorry for the delay responding Leonard. I don’t really understand your >> rationale here. A PLT entry is a completely target specific concept >> because some targets don’t have PLTs. I don’t think there is any reason >> that a frontend would abstractly generate this unless they already have a >> target-specific plan in mind. >> >> If you go with your “unnamedfunc” approach, you’ll have to define the >> semantics of what that means, and it will need to mean something on targets >> without a PLT. If it isn’t generally implementable, then it is target >> specific again. >> >> I feel like you are trying (earnestly!) to make the IR better here, but >> by making this abstract it is actually just making it more opaque for no >> obvious benefit. >> >> >> +1 to this. LLVM already has a large issue with implicit ABI contracts >> between Clang (and other frontends) and the various backends. We should not >> make that worse. The problem here is that there are multiple ways to >> represent the reference to the function symbol, and in this case, there's >> an ABI requirement to pick a specific one of them. We should make that >> clear and explicit. If there's an abstraction here that's useful, it's in >> the way to pass along that target-specific information -- I think of this >> like a target-specific attribute. >> >> Completely agreed, a lot of my perspective comes from bitter experience >> having messed up the ABI lowering design :-). Sorry for that :) >> >> -Chris >> > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200831/d555a3e6/attachment.html>
Leonard Chan via llvm-dev
2020-Sep-01 18:01 UTC
[llvm-dev] [RFC][LLVM] New Constant type for representing function PLT entries
I see. Perhaps something like "dso_local_stub" or "dso_local_unnamed_stub" would be better naming? The dso_local bit I think captures the first requirement and, if kept generic, we could have the default implementation be this local stub. On Mon, Aug 31, 2020 at 2:22 PM James Y Knight <jyknight at google.com> wrote:> IIUC, the actual requirements for the proposed pltentry(@X) constant is: > 1. The returned address MUST have a constant offset at link-time from some > other unspecified but defined-in-the-same-binary/DSO symbol Y. Which symbol > it is is presumed not to matter because all locally-defined symbols have > constant offsets from each-other, anyhow. > 2. The address is otherwise insignificant. (Therefore, coming up with a > brand new unique address, by creating a local stub function, would be an > acceptable implementation.) > > These requirements do seem somewhat generic: even on a system which has a > different way to make a call could still create a local stub function, and > give you the address of that. However, "unnamed address" isn't a good > name, because it doesn't capture the first requirement, only the second. > > > > On Mon, Aug 31, 2020 at 4:46 PM Leonard Chan via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> I think I follow. So in this case, it's better to be explicit and say >> "this could lower to a PLT entry (which is only supported on specific >> targets)" rather than making something general that can exist on all >> targets. Makes sense. I wasn't sure if there was perhaps something >> equivalent on other targets that this could lower to, but we can make this >> target/PLT specific. >> >> On Sun, Aug 30, 2020 at 3:55 PM Chris Lattner <clattner at nondot.org> >> wrote: >> >>> >>> >>> On Aug 29, 2020, at 6:53 PM, Hal Finkel <hfinkel at anl.gov> wrote: >>> >>> >>> Sorry for the delay responding Leonard. I don’t really understand your >>> rationale here. A PLT entry is a completely target specific concept >>> because some targets don’t have PLTs. I don’t think there is any reason >>> that a frontend would abstractly generate this unless they already have a >>> target-specific plan in mind. >>> >>> If you go with your “unnamedfunc” approach, you’ll have to define the >>> semantics of what that means, and it will need to mean something on targets >>> without a PLT. If it isn’t generally implementable, then it is target >>> specific again. >>> >>> I feel like you are trying (earnestly!) to make the IR better here, but >>> by making this abstract it is actually just making it more opaque for no >>> obvious benefit. >>> >>> >>> +1 to this. LLVM already has a large issue with implicit ABI contracts >>> between Clang (and other frontends) and the various backends. We should not >>> make that worse. The problem here is that there are multiple ways to >>> represent the reference to the function symbol, and in this case, there's >>> an ABI requirement to pick a specific one of them. We should make that >>> clear and explicit. If there's an abstraction here that's useful, it's in >>> the way to pass along that target-specific information -- I think of this >>> like a target-specific attribute. >>> >>> Completely agreed, a lot of my perspective comes from bitter experience >>> having messed up the ABI lowering design :-). Sorry for that :) >>> >>> -Chris >>> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200901/0087ee56/attachment.html>
Leonard Chan via llvm-dev
2020-Sep-17 22:00 UTC
[llvm-dev] [RFC][LLVM] New Constant type for representing function PLT entries
Hi all. Are there any thoughts on the new name idea ("dso_local_stub"
or
"dso_local_unnamed_stub")? I'd like to see if I can move forward
with my
patch.
On Tue, Sep 1, 2020 at 11:01 AM Leonard Chan <leonardchan at google.com>
wrote:
> I see. Perhaps something like "dso_local_stub" or
"dso_local_unnamed_stub"
> would be better naming? The dso_local bit I think captures the first
> requirement and, if kept generic, we could have the default implementation
> be this local stub.
>
> On Mon, Aug 31, 2020 at 2:22 PM James Y Knight <jyknight at
google.com>
> wrote:
>
>> IIUC, the actual requirements for the proposed pltentry(@X) constant
is:
>> 1. The returned address MUST have a constant offset at link-time from
>> some other unspecified but defined-in-the-same-binary/DSO symbol Y.
Which
>> symbol it is is presumed not to matter because all locally-defined
symbols
>> have constant offsets from each-other, anyhow.
>> 2. The address is otherwise insignificant. (Therefore, coming up with a
>> brand new unique address, by creating a local stub function, would be
an
>> acceptable implementation.)
>>
>> These requirements do seem somewhat generic: even on a system which has
a
>> different way to make a call could still create a local stub function,
and
>> give you the address of that. However, "unnamed address"
isn't a good
>> name, because it doesn't capture the first requirement, only the
second.
>>
>>
>>
>> On Mon, Aug 31, 2020 at 4:46 PM Leonard Chan via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>>> I think I follow. So in this case, it's better to be explicit
and say
>>> "this could lower to a PLT entry (which is only supported on
specific
>>> targets)" rather than making something general that can exist
on all
>>> targets. Makes sense. I wasn't sure if there was perhaps
something
>>> equivalent on other targets that this could lower to, but we can
make this
>>> target/PLT specific.
>>>
>>> On Sun, Aug 30, 2020 at 3:55 PM Chris Lattner <clattner at
nondot.org>
>>> wrote:
>>>
>>>>
>>>>
>>>> On Aug 29, 2020, at 6:53 PM, Hal Finkel <hfinkel at
anl.gov> wrote:
>>>>
>>>>
>>>> Sorry for the delay responding Leonard. I don’t really
understand your
>>>> rationale here. A PLT entry is a completely target specific
concept
>>>> because some targets don’t have PLTs. I don’t think there is
any reason
>>>> that a frontend would abstractly generate this unless they
already have a
>>>> target-specific plan in mind.
>>>>
>>>> If you go with your “unnamedfunc” approach, you’ll have to
define the
>>>> semantics of what that means, and it will need to mean
something on targets
>>>> without a PLT. If it isn’t generally implementable, then it is
target
>>>> specific again.
>>>>
>>>> I feel like you are trying (earnestly!) to make the IR better
here, but
>>>> by making this abstract it is actually just making it more
opaque for no
>>>> obvious benefit.
>>>>
>>>>
>>>> +1 to this. LLVM already has a large issue with implicit ABI
contracts
>>>> between Clang (and other frontends) and the various backends.
We should not
>>>> make that worse. The problem here is that there are multiple
ways to
>>>> represent the reference to the function symbol, and in this
case, there's
>>>> an ABI requirement to pick a specific one of them. We should
make that
>>>> clear and explicit. If there's an abstraction here
that's useful, it's in
>>>> the way to pass along that target-specific information -- I
think of this
>>>> like a target-specific attribute.
>>>>
>>>> Completely agreed, a lot of my perspective comes from bitter
experience
>>>> having messed up the ABI lowering design :-). Sorry for that
:)
>>>>
>>>> -Chris
>>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20200917/7d832a29/attachment.html>
Reasonably Related Threads
- [RFC][LLVM] New Constant type for representing function PLT entries
- [RFC][LLVM] New Constant type for representing function PLT entries
- [RFC][LLVM] New Constant type for representing function PLT entries
- [RFC][LLVM] New Constant type for representing function PLT entries
- [RFC][LLVM] New Constant type for representing function PLT entries