From 148437ec14d18450dcfa0ebe7cfa2db57e263392 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 31 Dec 1996 19:46:37 +0000 Subject: [PATCH] * elflink.h (NAME(bfd_elf,size_dynamic_sections)): Add filter_shlib and auxiliary_filter_shlib parameters. * elf.c (_bfd_elf_print_private_bfd_data): Handle DT_AUXILIARY and DT_FILTER. * bfd-in.h (bfd_elf32_size_dynamic_sections): Update declaration. (bfd_elf64_size_dynamic_sections): Likewise. * bfd-in2.h: Rebuild. --- bfd/ChangeLog | 10 ++++++++++ bfd/bfd-in.h | 10 +++++----- bfd/bfd-in2.h | 8 ++++---- bfd/elf.c | 2 ++ bfd/elflink.h | 27 ++++++++++++++++++++++++++- 5 files changed, 47 insertions(+), 10 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a8a3372e655..971d7e6150b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,13 @@ +Tue Dec 31 14:44:50 1996 Ian Lance Taylor + + * elflink.h (NAME(bfd_elf,size_dynamic_sections)): Add + filter_shlib and auxiliary_filter_shlib parameters. + * elf.c (_bfd_elf_print_private_bfd_data): Handle DT_AUXILIARY and + DT_FILTER. + * bfd-in.h (bfd_elf32_size_dynamic_sections): Update declaration. + (bfd_elf64_size_dynamic_sections): Likewise. + * bfd-in2.h: Rebuild. + Mon Dec 30 18:48:52 1996 Ian Lance Taylor * xcofflink.c (xcoff_build_ldsyms): When exporting all defined diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h index fadbd041ac2..7378e41aeb4 100644 --- a/bfd/bfd-in.h +++ b/bfd/bfd-in.h @@ -199,7 +199,7 @@ typedef enum bfd_format { to another, and are not necessarily correct). */ /* No flags. */ -#define NO_FLAGS 0x00 +#define BFD_NO_FLAGS 0x00 /* BFD contains relocation entries. */ #define HAS_RELOC 0x01 @@ -605,11 +605,11 @@ extern boolean bfd_elf64_record_link_assignment extern struct bfd_link_needed_list *bfd_elf_get_needed_list PARAMS ((bfd *, struct bfd_link_info *)); extern boolean bfd_elf32_size_dynamic_sections - PARAMS ((bfd *, const char *, const char *, boolean, - struct bfd_link_info *, struct sec **)); + PARAMS ((bfd *, const char *, const char *, boolean, const char *, + const char *, struct bfd_link_info *, struct sec **)); extern boolean bfd_elf64_size_dynamic_sections - PARAMS ((bfd *, const char *, const char *, boolean, - struct bfd_link_info *, struct sec **)); + PARAMS ((bfd *, const char *, const char *, boolean, const char *, + const char *, struct bfd_link_info *, struct sec **)); extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *)); extern const char *bfd_elf_get_dt_soname PARAMS ((bfd *)); diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 2c1580791a4..d93a1f198ec 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -605,11 +605,11 @@ extern boolean bfd_elf64_record_link_assignment extern struct bfd_link_needed_list *bfd_elf_get_needed_list PARAMS ((bfd *, struct bfd_link_info *)); extern boolean bfd_elf32_size_dynamic_sections - PARAMS ((bfd *, const char *, const char *, boolean, - struct bfd_link_info *, struct sec **)); + PARAMS ((bfd *, const char *, const char *, boolean, const char *, + const char *, struct bfd_link_info *, struct sec **)); extern boolean bfd_elf64_size_dynamic_sections - PARAMS ((bfd *, const char *, const char *, boolean, - struct bfd_link_info *, struct sec **)); + PARAMS ((bfd *, const char *, const char *, boolean, const char *, + const char *, struct bfd_link_info *, struct sec **)); extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *)); extern const char *bfd_elf_get_dt_soname PARAMS ((bfd *)); diff --git a/bfd/elf.c b/bfd/elf.c index 0ea1bb836da..90c74ad2a54 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -473,6 +473,8 @@ _bfd_elf_print_private_bfd_data (abfd, farg) case DT_DEBUG: name = "DEBUG"; break; case DT_TEXTREL: name = "TEXTREL"; break; case DT_JMPREL: name = "JMPREL"; break; + case DT_AUXILIARY: name = "AUXILIARY"; stringp = true; break; + case DT_FILTER: name = "FILTER"; stringp = true; break; } fprintf (f, " %-11s ", name); diff --git a/bfd/elflink.h b/bfd/elflink.h index 3086a4b2f82..81dcc9b6af3 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -1352,11 +1352,14 @@ static const size_t elf_buckets[] = boolean NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath, - export_dynamic, info, sinterpptr) + export_dynamic, filter_shlib, + auxiliary_filter_shlib, info, sinterpptr) bfd *output_bfd; const char *soname; const char *rpath; boolean export_dynamic; + const char *filter_shlib; + const char *auxiliary_filter_shlib; struct bfd_link_info *info; asection **sinterpptr; { @@ -1426,6 +1429,28 @@ NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath, return false; } + if (filter_shlib != NULL) + { + bfd_size_type indx; + + indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, + filter_shlib, true, true); + if (indx == (bfd_size_type) -1 + || ! elf_add_dynamic_entry (info, DT_FILTER, indx)) + return false; + } + + if (auxiliary_filter_shlib != NULL) + { + bfd_size_type indx; + + indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, + auxiliary_filter_shlib, true, true); + if (indx == (bfd_size_type) -1 + || ! elf_add_dynamic_entry (info, DT_AUXILIARY, indx)) + return false; + } + /* Find all symbols which were defined in a dynamic object and make the backend pick a reasonable value for them. */ eif.failed = false; -- 2.30.2