This is the mail archive of the binutils@sourceware.org mailing list for the binutils 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] PR ld/18720: Properly merge non-default versioned symbol


> diff --git a/ld/testsuite/ld-elf/pr18720.out b/ld/testsuite/ld-elf/pr18720.out
> new file mode 100644
> index 0000000..482e981
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr18720.out
> @@ -0,0 +1,2 @@
> +MAIN
> +DSO

Why should the direct call to foo from the main program bind to the
non-default versioned symbol? It seems to me that both calls should
bind to the version in the DSO.

> diff --git a/ld/testsuite/ld-elf/pr18720a.c b/ld/testsuite/ld-elf/pr18720a.c
> new file mode 100644
> index 0000000..39bbcb1
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr18720a.c
> @@ -0,0 +1,18 @@
> +extern void bar (void);
> +extern void foo (void);
> +
> +__attribute__ ((noinline, noclone))
> +int
> +foo_p (void)
> +{
> +  return (long) &foo == 0x12345678 ? 1 : 0;
> +}

You don't have any checks to see which version the indirect reference
actually binds to.

-cary


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