This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] Remove unnecessary IFUNC dispatch for __memset_chk.
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: OndÅej BÃlka <neleai at seznam dot cz>
- Cc: Zack Weinberg <zackw at panix dot com>, Andreas Schwab <schwab at linux-m68k dot org>, GNU C Library <libc-alpha at sourceware dot org>
- Date: Tue, 11 Aug 2015 10:00:39 -0700
- Subject: Re: [PATCH] Remove unnecessary IFUNC dispatch for __memset_chk.
- Authentication-results: sourceware.org; auth=none
- References: <20150809013434 dot 0B16814B9A at panix1 dot panix dot com> <m28u9lotfk dot fsf at linux-m68k dot org> <55C76FCD dot 5020607 at panix dot com> <CAMe9rOoAWjRma_mG_FazVh3FGOyiGJ=g82=bsfGqa-COnt5p1g at mail dot gmail dot com> <55C78525 dot 40402 at panix dot com> <CAMe9rOrKg8nzB67+OCXz5n1u7ZLnJncpX7J6KkEXqe0Bra843w at mail dot gmail dot com> <55C79AD8 dot 3070301 at panix dot com> <20150810030920 dot GE23550 at vapier> <20150810211200 dot GA17734 at domone> <CAKCAbMia4RCA7X0YHYeXC6eAGCxzDqhWrMiGS4NxA-cDxFioVw at mail dot gmail dot com> <20150811080451 dot GA6280 at domone>
On Tue, Aug 11, 2015 at 1:04 AM, OndÅej BÃlka <neleai@seznam.cz> wrote:
> On Mon, Aug 10, 2015 at 07:41:49PM -0400, Zack Weinberg wrote:
>> On Mon, Aug 10, 2015 at 5:12 PM, OndÅej BÃlka <neleai@seznam.cz> wrote:
>> > On Sun, Aug 09, 2015 at 11:09:20PM -0400, Mike Frysinger wrote:
>> >> On 09 Aug 2015 14:24, Zack Weinberg wrote:
>> >> > Is an IFUNC's variant-selecting function called only once per process,
>> >> > or every time?
>> >>
>> >> it's once-per-process. if it were every time, it'd defeat the point of the
>> >> optimization.
>> >
>> > No, its once per each shared library.
>>
>> I don't see how that can possibly be right. Doesn't each shared
>> library provide the one true PLT entry for each function it exports?
>
> No, what you said couldn't possibly work as you would need resolver for resolver to see where these plt entries are.
>
> Its completely opposite as each library generates plt stub for each
> function it uses to save space of repeatedly setting up tables for
> different dso.
>
>> If not, how can we be obeying the C standard's rules about function
>> pointer equality?
>>
> Simple, we return null. Following causes segmentation fault.
>
> gcc -fPIC -shared x.c -o libx.so
> void foo (int x) __attribute__ ((ifunc ("resolve_foo")));
>
> int foo_impl(int x)
^^^^^^^^^^^^^^^^^^^^
This should be static.
> {
> return 42;
> }
> int bar()
> {
> foo(5);
> void (*f)(int) = foo;
> f(42);
> }
>
>
> static void (*resolve_foo (void)) (void)
> {
> // printf("ifunc\n");
> return foo_impl; // we'll just always select this routine
> }
--
H.J.