bfd/
* elflink.c (_bfd_elf_export_symbol): Adjust for globals and locals field changes. (_bfd_elf_link_assign_sym_version): Likewise. * elflink.h (size_dynamic_sections): Likewise. include/ * bfdlink.h (struct bfd_elf_version_expr): Remove match field. Add wildcard and mask fields. (BFD_ELF_VERSION_C_TYPE): Define. (BFD_ELF_VERSION_CXX_TYPE): Likewise. (BFD_ELF_VERSION_JAVA_TYPE): Likewise. (struct bfd_elf_version_expr_head): New. (struct bfd_elf_version_tree): Add match field. Change type of globals and locals fields to struct bfd_elf_version_expr_head. ld/ * ldlang.c: Include hashtab.h. (lang_vers_match_lang_c, lang_vers_match_lang_cplusplus, lang_vers_match_lang_java): Remove. (lang_vers_match): New function. (lang_new_vers_pattern): Initialize wildcard and mask fields, don't initialize match. (lang_new_vers_node): Use xcalloc. Adjust for globals and locals field type changes. Set match field. (version_expr_head_hash, version_expr_head_eq): New functions. (lang_finalize_version_expr_head): New function. (lang_register_vers_node): Call lang_finalize_version_expr_head. Search in hash table if not wildcard when looking for duplicates. * emultempl/ppc64elf.em (new_vers_pattern): Don't bother with duplicate checking. Initialize all fields of dot_entry from entry with the exception of pattern and next.
This commit is contained in:
		| @@ -1,3 +1,15 @@ | ||||
| 2003-10-22  Jakub Jelinek  <jakub@redhat.com> | ||||
|  | ||||
| 	* bfdlink.h (struct bfd_elf_version_expr): Remove match field. | ||||
| 	Add wildcard and mask fields. | ||||
| 	(BFD_ELF_VERSION_C_TYPE): Define. | ||||
| 	(BFD_ELF_VERSION_CXX_TYPE): Likewise. | ||||
| 	(BFD_ELF_VERSION_JAVA_TYPE): Likewise. | ||||
| 	(struct bfd_elf_version_expr_head): New. | ||||
| 	(struct bfd_elf_version_tree): Add match field. | ||||
| 	Change type of globals and locals fields | ||||
| 	to struct bfd_elf_version_expr_head. | ||||
|  | ||||
| 2003-10-14  Bob Wilson  <bob.wilson@acm.org> | ||||
|  | ||||
| 	* elf/xtensa.h: Formatting.  Fix comments about property section | ||||
|   | ||||
| @@ -617,20 +617,37 @@ extern struct bfd_link_order *bfd_new_link_order (bfd *, asection *); | ||||
|    BFD, but it would be a pain.  Instead, the regular linker sets up | ||||
|    these structures, and then passes them into BFD.  */ | ||||
|  | ||||
| /* Regular expressions for a version.  */ | ||||
| /* Glob pattern for a version.  */ | ||||
|  | ||||
| struct bfd_elf_version_expr | ||||
| { | ||||
|   /* Next regular expression for this version.  */ | ||||
|   /* Next glob pattern for this version.  */ | ||||
|   struct bfd_elf_version_expr *next; | ||||
|   /* Regular expression.  */ | ||||
|   /* Glob pattern.  */ | ||||
|   const char *pattern; | ||||
|   /* Matching function.  */ | ||||
|   int (*match) (struct bfd_elf_version_expr *, const char *); | ||||
|   /* Defined by ".symver".  */ | ||||
|   unsigned int symver: 1; | ||||
|   unsigned int symver : 1; | ||||
|   /* Defined by version script.  */ | ||||
|   unsigned int script : 1; | ||||
|   /* Is this a wildcard?.  */ | ||||
|   unsigned int wildcard : 1; | ||||
|   /* Pattern type.  */ | ||||
| #define BFD_ELF_VERSION_C_TYPE		1 | ||||
| #define BFD_ELF_VERSION_CXX_TYPE	2 | ||||
| #define BFD_ELF_VERSION_JAVA_TYPE	4 | ||||
|   unsigned int mask : 3; | ||||
| }; | ||||
|  | ||||
| struct bfd_elf_version_expr_head | ||||
| { | ||||
|   /* List of all patterns, both wildcards and non-wildcards.  */ | ||||
|   struct bfd_elf_version_expr *list; | ||||
|   /* Hash table for non-wildcards.  */ | ||||
|   void *htab; | ||||
|   /* Remaining patterns.  */ | ||||
|   struct bfd_elf_version_expr *remaining; | ||||
|   /* What kind of pattern types are present in list (bitmask).  */ | ||||
|   unsigned int mask; | ||||
| }; | ||||
|  | ||||
| /* Version dependencies.  */ | ||||
| @@ -654,15 +671,19 @@ struct bfd_elf_version_tree | ||||
|   /* Version number.  */ | ||||
|   unsigned int vernum; | ||||
|   /* Regular expressions for global symbols in this version.  */ | ||||
|   struct bfd_elf_version_expr *globals; | ||||
|   struct bfd_elf_version_expr_head globals; | ||||
|   /* Regular expressions for local symbols in this version.  */ | ||||
|   struct bfd_elf_version_expr *locals; | ||||
|   struct bfd_elf_version_expr_head locals; | ||||
|   /* List of versions which this version depends upon.  */ | ||||
|   struct bfd_elf_version_deps *deps; | ||||
|   /* Index of the version name.  This is used within BFD.  */ | ||||
|   unsigned int name_indx; | ||||
|   /* Whether this version tree was used.  This is used within BFD.  */ | ||||
|   int used; | ||||
|   /* Matching hook.  */ | ||||
|   struct bfd_elf_version_expr *(*match) | ||||
|     (struct bfd_elf_version_expr_head *head, | ||||
|      struct bfd_elf_version_expr *prev, const char *sym); | ||||
| }; | ||||
|  | ||||
| #endif | ||||
|   | ||||
		Reference in New Issue
	
	Block a user