This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Remove unnecessary IFUNC dispatch for __memset_chk.


On Tue, 11 Aug 2015, OndÅej BÃlka wrote:
> > 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)
> {
>   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
> }
> gcc main.c -L. -lx
> void bar();
> int main()
> {
>   bar();
> }

This testcase does not segfault on glibc 2.20.  Perhaps old glibc that you're
running did not process data relocations to ifunc symbols (as opposed to
jump_slot relocations).  But anyway I don't see how the testcase is related to
what Zack was asking.

Alexander

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]