Define __start/__stop symbols when there is only a dynamic def
Fri Jan 26 12:55:00 GMT 2018
On Thu, Jan 25, 2018 at 9:29 PM, Alan Modra <email@example.com> wrote:
> This patch fixes a case where a user had a C-representable named
> section in both the executable and shared libraries, and of course
> wanted the size of the local section in the executable, not the
> dynamic section. It does mean that __start and __stop symbols don't
> behave exactly like PROVIDEd symbols, but I think that's a reasonable
> difference particularly since this is the way they used to behave.
> Nick, I'd like to apply this to the branch. I think it should be
> quite safe.
> * elflink.c (bfd_elf_define_start_stop): Override symbols when
> they are defined dynamically.
> diff --git a/bfd/elflink.c b/bfd/elflink.c
> index e3751fa..e81f6c6 100644
> --- a/bfd/elflink.c
> +++ b/bfd/elflink.c
> @@ -14338,7 +14338,7 @@ bfd_elf_define_start_stop (struct bfd_link_info *info,
> if (h != NULL
> && (h->root.type == bfd_link_hash_undefined
> || h->root.type == bfd_link_hash_undefweak
> - || (h->ref_regular && !h->def_regular)))
> + || ((h->ref_regular || h->def_dynamic) && !h->def_regular)))
> h->root.type = bfd_link_hash_defined;
> h->root.u.def.section = sec;
Can you please add a testcase to verify that your patch does what you intended
and make linker stay this way?
More information about the Binutils