diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-06-12 07:37:15 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-06-12 07:37:56 -0700 |
commit | 5c3ce2bc8adea307917d3bfeef53114795764db6 (patch) | |
tree | a3481bc43858592cf3fd95099928cf454f61ecc5 | |
parent | 3704e3589d3d187fbf76e688388b1a92fd627c8d (diff) | |
download | gdb-5c3ce2bc8adea307917d3bfeef53114795764db6.zip gdb-5c3ce2bc8adea307917d3bfeef53114795764db6.tar.gz gdb-5c3ce2bc8adea307917d3bfeef53114795764db6.tar.bz2 |
ELF: Pass bfd_link_info to merge_gnu_properties
Pass struct bfd_link_info * to merge_gnu_properties to give backend
control of how GNU properties are merged based on linker command line
options.
* elf-bfd.h (elf_backend_data): Add struct bfd_link_info *
to merge_gnu_properties.
* elf-properties.c (elf_merge_gnu_properties): Add struct
bfd_link_info * and pass it to merge_gnu_properties.
(elf_merge_gnu_property_list): Add struct bfd_link_info *
and pass it to elf_merge_gnu_properties.
(_bfd_elf_link_setup_gnu_properties): Pass info to
elf_merge_gnu_property_list.
* elf32-i386.c (elf_i386_merge_gnu_properties): Add struct
bfd_link_info *.
* elf64-x86-64.c (elf_x86_64_merge_gnu_properties): Likewise.
-rw-r--r-- | bfd/ChangeLog | 14 | ||||
-rw-r--r-- | bfd/elf-bfd.h | 4 | ||||
-rw-r--r-- | bfd/elf-properties.c | 15 | ||||
-rw-r--r-- | bfd/elf32-i386.c | 3 | ||||
-rw-r--r-- | bfd/elf64-x86-64.c | 3 |
5 files changed, 28 insertions, 11 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a0c2681..daea173 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,17 @@ +2017-06-12 H.J. Lu <hongjiu.lu@intel.com> + + * elf-bfd.h (elf_backend_data): Add struct bfd_link_info * + to merge_gnu_properties. + * elf-properties.c (elf_merge_gnu_properties): Add struct + bfd_link_info * and pass it to merge_gnu_properties. + (elf_merge_gnu_property_list): Add struct bfd_link_info * + and pass it to elf_merge_gnu_properties. + (_bfd_elf_link_setup_gnu_properties): Pass info to + elf_merge_gnu_property_list. + * elf32-i386.c (elf_i386_merge_gnu_properties): Add struct + bfd_link_info *. + * elf64-x86-64.c (elf_x86_64_merge_gnu_properties): Likewise. + 2017-06-11 Joe Zbiciak <joe.zbiciak@leftturnonly.info> PR 21564 diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 820bc98..567b63a 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -1437,8 +1437,8 @@ struct elf_backend_data unsigned int); /* Merge GNU properties. Return TRUE if property is updated. */ - bfd_boolean (*merge_gnu_properties) (bfd *, elf_property *, - elf_property *); + bfd_boolean (*merge_gnu_properties) (struct bfd_link_info *, bfd *, + elf_property *, elf_property *); /* Set up GNU properties. */ bfd *(*setup_gnu_properties) (struct bfd_link_info *); diff --git a/bfd/elf-properties.c b/bfd/elf-properties.c index fda8875..2d054dd 100644 --- a/bfd/elf-properties.c +++ b/bfd/elf-properties.c @@ -197,8 +197,8 @@ next: with ABFD. */ static bfd_boolean -elf_merge_gnu_properties (bfd *abfd, elf_property *aprop, - elf_property *bprop) +elf_merge_gnu_properties (struct bfd_link_info *info, bfd *abfd, + elf_property *aprop, elf_property *bprop) { const struct elf_backend_data *bed = get_elf_backend_data (abfd); unsigned int pr_type = aprop != NULL ? aprop->pr_type : bprop->pr_type; @@ -206,7 +206,7 @@ elf_merge_gnu_properties (bfd *abfd, elf_property *aprop, if (bed->merge_gnu_properties != NULL && pr_type >= GNU_PROPERTY_LOPROC && pr_type < GNU_PROPERTY_LOUSER) - return bed->merge_gnu_properties (abfd, aprop, bprop); + return bed->merge_gnu_properties (info, abfd, aprop, bprop); switch (pr_type) { @@ -263,7 +263,8 @@ elf_find_and_remove_property (elf_property_list **listp, /* Merge GNU property list *LISTP with ABFD. */ static void -elf_merge_gnu_property_list (bfd *abfd, elf_property_list **listp) +elf_merge_gnu_property_list (struct bfd_link_info *info, bfd *abfd, + elf_property_list **listp) { elf_property_list *p, **lastp; elf_property *pr; @@ -275,7 +276,7 @@ elf_merge_gnu_property_list (bfd *abfd, elf_property_list **listp) pr = elf_find_and_remove_property (listp, p->property.pr_type); /* Pass NULL to elf_merge_gnu_properties for the property which isn't on *LISTP. */ - elf_merge_gnu_properties (abfd, &p->property, pr); + elf_merge_gnu_properties (info, abfd, &p->property, pr); if (p->property.pr_kind == property_remove) { /* Remove this property. */ @@ -287,7 +288,7 @@ elf_merge_gnu_property_list (bfd *abfd, elf_property_list **listp) /* Merge the remaining properties on *LISTP with ABFD. */ for (p = *listp; p != NULL; p = p->next) - if (elf_merge_gnu_properties (abfd, NULL, &p->property)) + if (elf_merge_gnu_properties (info, abfd, NULL, &p->property)) { pr = _bfd_elf_get_property (abfd, p->property.pr_type, p->property.pr_datasz); @@ -365,7 +366,7 @@ _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info) when all properties are from ELF objects with different machine code or class. */ if (first_pbfd != NULL) - elf_merge_gnu_property_list (first_pbfd, listp); + elf_merge_gnu_property_list (info, first_pbfd, listp); if (list != NULL) { diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index e447e3d..f9142a9 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -6388,7 +6388,8 @@ elf_i386_parse_gnu_properties (bfd *abfd, unsigned int type, should be merged with ABFD. */ static bfd_boolean -elf_i386_merge_gnu_properties (bfd *abfd ATTRIBUTE_UNUSED, +elf_i386_merge_gnu_properties (struct bfd_link_info *info ATTRIBUTE_UNUSED, + bfd *abfd ATTRIBUTE_UNUSED, elf_property *aprop, elf_property *bprop) { diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index c94d7ff..5306019 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -7035,7 +7035,8 @@ elf_x86_64_parse_gnu_properties (bfd *abfd, unsigned int type, should be merged with ABFD. */ static bfd_boolean -elf_x86_64_merge_gnu_properties (bfd *abfd ATTRIBUTE_UNUSED, +elf_x86_64_merge_gnu_properties (struct bfd_link_info *info ATTRIBUTE_UNUSED, + bfd *abfd ATTRIBUTE_UNUSED, elf_property *aprop, elf_property *bprop) { |