diff --git a/include/ChangeLog b/include/ChangeLog index 34f66f056..d1e9a1df7 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,15 @@ +2003-10-22 Jakub Jelinek + + * 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 * elf/xtensa.h: Formatting. Fix comments about property section diff --git a/include/bfdlink.h b/include/bfdlink.h index c174dcdc6..fd77c2944 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -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