diff options
author | dim <dim@FreeBSD.org> | 2010-10-18 20:57:43 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2010-10-18 20:57:43 +0000 |
commit | 1139501487c85d0b5b86a8ba974095042248203b (patch) | |
tree | 1f5bc59dc9e7535ab5494172772ab2598d0217d2 | |
parent | 7b8fe338b947c7c347312cf77c20a3a7d112d73f (diff) | |
download | FreeBSD-src-1139501487c85d0b5b86a8ba974095042248203b.zip FreeBSD-src-1139501487c85d0b5b86a8ba974095042248203b.tar.gz |
Merge ^vendor/binutils/dist@213996 into contrib/binutils. Skip adding
any files we do not need, delete some files that were removed upstream,
but keep our own customizations and backports from later binutils.
46 files changed, 1194 insertions, 19852 deletions
diff --git a/contrib/binutils/bfd/elflink.h b/contrib/binutils/bfd/elflink.h deleted file mode 100644 index 6887e50..0000000 --- a/contrib/binutils/bfd/elflink.h +++ /dev/null @@ -1,8532 +0,0 @@ -/* ELF linker support. - Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 - Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* ELF linker code. */ - -/* This struct is used to pass information to routines called via - elf_link_hash_traverse which must return failure. */ - -struct elf_info_failed -{ - boolean failed; - struct bfd_link_info *info; - struct bfd_elf_version_tree *verdefs; -}; - -static boolean is_global_data_symbol_definition - PARAMS ((bfd *, Elf_Internal_Sym *)); -static boolean elf_link_is_defined_archive_symbol - PARAMS ((bfd *, carsym *)); -static boolean elf_link_add_object_symbols - PARAMS ((bfd *, struct bfd_link_info *)); -static boolean elf_link_add_archive_symbols - PARAMS ((bfd *, struct bfd_link_info *)); -static boolean elf_merge_symbol - PARAMS ((bfd *, struct bfd_link_info *, const char *, - Elf_Internal_Sym *, asection **, bfd_vma *, - struct elf_link_hash_entry **, boolean *, boolean *, - boolean *, boolean)); -static boolean elf_add_default_symbol - PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *, - const char *, Elf_Internal_Sym *, asection **, bfd_vma *, - boolean *, boolean, boolean)); -static boolean elf_export_symbol - PARAMS ((struct elf_link_hash_entry *, PTR)); -static boolean elf_finalize_dynstr - PARAMS ((bfd *, struct bfd_link_info *)); -static boolean elf_fix_symbol_flags - PARAMS ((struct elf_link_hash_entry *, struct elf_info_failed *)); -static boolean elf_adjust_dynamic_symbol - PARAMS ((struct elf_link_hash_entry *, PTR)); -static boolean elf_link_find_version_dependencies - PARAMS ((struct elf_link_hash_entry *, PTR)); -static boolean elf_link_assign_sym_version - PARAMS ((struct elf_link_hash_entry *, PTR)); -static boolean elf_collect_hash_codes - PARAMS ((struct elf_link_hash_entry *, PTR)); -static boolean elf_link_read_relocs_from_section - PARAMS ((bfd *, Elf_Internal_Shdr *, PTR, Elf_Internal_Rela *)); -static size_t compute_bucket_count - PARAMS ((struct bfd_link_info *)); -static boolean elf_link_output_relocs - PARAMS ((bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *)); -static boolean elf_link_size_reloc_section - PARAMS ((bfd *, Elf_Internal_Shdr *, asection *)); -static void elf_link_adjust_relocs - PARAMS ((bfd *, Elf_Internal_Shdr *, unsigned int, - struct elf_link_hash_entry **)); -static int elf_link_sort_cmp1 - PARAMS ((const void *, const void *)); -static int elf_link_sort_cmp2 - PARAMS ((const void *, const void *)); -static size_t elf_link_sort_relocs - PARAMS ((bfd *, struct bfd_link_info *, asection **)); -static boolean elf_section_ignore_discarded_relocs - PARAMS ((asection *)); - -/* Given an ELF BFD, add symbols to the global hash table as - appropriate. */ - -boolean -elf_bfd_link_add_symbols (abfd, info) - bfd *abfd; - struct bfd_link_info *info; -{ - switch (bfd_get_format (abfd)) - { - case bfd_object: - return elf_link_add_object_symbols (abfd, info); - case bfd_archive: - return elf_link_add_archive_symbols (abfd, info); - default: - bfd_set_error (bfd_error_wrong_format); - return false; - } -} - -/* Return true iff this is a non-common, definition of a non-function symbol. */ -static boolean -is_global_data_symbol_definition (abfd, sym) - bfd * abfd ATTRIBUTE_UNUSED; - Elf_Internal_Sym * sym; -{ - /* Local symbols do not count, but target specific ones might. */ - if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL - && ELF_ST_BIND (sym->st_info) < STB_LOOS) - return false; - - /* Function symbols do not count. */ - if (ELF_ST_TYPE (sym->st_info) == STT_FUNC) - return false; - - /* If the section is undefined, then so is the symbol. */ - if (sym->st_shndx == SHN_UNDEF) - return false; - - /* If the symbol is defined in the common section, then - it is a common definition and so does not count. */ - if (sym->st_shndx == SHN_COMMON) - return false; - - /* If the symbol is in a target specific section then we - must rely upon the backend to tell us what it is. */ - if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS) - /* FIXME - this function is not coded yet: - - return _bfd_is_global_symbol_definition (abfd, sym); - - Instead for now assume that the definition is not global, - Even if this is wrong, at least the linker will behave - in the same way that it used to do. */ - return false; - - return true; -} - -/* Search the symbol table of the archive element of the archive ABFD - whose archive map contains a mention of SYMDEF, and determine if - the symbol is defined in this element. */ -static boolean -elf_link_is_defined_archive_symbol (abfd, symdef) - bfd * abfd; - carsym * symdef; -{ - Elf_Internal_Shdr * hdr; - bfd_size_type symcount; - bfd_size_type extsymcount; - bfd_size_type extsymoff; - Elf_Internal_Sym *isymbuf; - Elf_Internal_Sym *isym; - Elf_Internal_Sym *isymend; - boolean result; - - abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset); - if (abfd == (bfd *) NULL) - return false; - - if (! bfd_check_format (abfd, bfd_object)) - return false; - - /* If we have already included the element containing this symbol in the - link then we do not need to include it again. Just claim that any symbol - it contains is not a definition, so that our caller will not decide to - (re)include this element. */ - if (abfd->archive_pass) - return false; - - /* Select the appropriate symbol table. */ - if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0) - hdr = &elf_tdata (abfd)->symtab_hdr; - else - hdr = &elf_tdata (abfd)->dynsymtab_hdr; - - symcount = hdr->sh_size / sizeof (Elf_External_Sym); - - /* The sh_info field of the symtab header tells us where the - external symbols start. We don't care about the local symbols. */ - if (elf_bad_symtab (abfd)) - { - extsymcount = symcount; - extsymoff = 0; - } - else - { - extsymcount = symcount - hdr->sh_info; - extsymoff = hdr->sh_info; - } - - if (extsymcount == 0) - return false; - - /* Read in the symbol table. */ - isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff, - NULL, NULL, NULL); - if (isymbuf == NULL) - return false; - - /* Scan the symbol table looking for SYMDEF. */ - result = false; - for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++) - { - const char *name; - - name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, - isym->st_name); - if (name == (const char *) NULL) - break; - - if (strcmp (name, symdef->name) == 0) - { - result = is_global_data_symbol_definition (abfd, isym); - break; - } - } - - free (isymbuf); - - return result; -} - -/* Add symbols from an ELF archive file to the linker hash table. We - don't use _bfd_generic_link_add_archive_symbols because of a - problem which arises on UnixWare. The UnixWare libc.so is an - archive which includes an entry libc.so.1 which defines a bunch of - symbols. The libc.so archive also includes a number of other - object files, which also define symbols, some of which are the same - as those defined in libc.so.1. Correct linking requires that we - consider each object file in turn, and include it if it defines any - symbols we need. _bfd_generic_link_add_archive_symbols does not do - this; it looks through the list of undefined symbols, and includes - any object file which defines them. When this algorithm is used on - UnixWare, it winds up pulling in libc.so.1 early and defining a - bunch of symbols. This means that some of the other objects in the - archive are not included in the link, which is incorrect since they - precede libc.so.1 in the archive. - - Fortunately, ELF archive handling is simpler than that done by - _bfd_generic_link_add_archive_symbols, which has to allow for a.out - oddities. In ELF, if we find a symbol in the archive map, and the - symbol is currently undefined, we know that we must pull in that - object file. - - Unfortunately, we do have to make multiple passes over the symbol - table until nothing further is resolved. */ - -static boolean -elf_link_add_archive_symbols (abfd, info) - bfd *abfd; - struct bfd_link_info *info; -{ - symindex c; - boolean *defined = NULL; - boolean *included = NULL; - carsym *symdefs; - boolean loop; - bfd_size_type amt; - - if (! bfd_has_map (abfd)) - { - /* An empty archive is a special case. */ - if (bfd_openr_next_archived_file (abfd, (bfd *) NULL) == NULL) - return true; - bfd_set_error (bfd_error_no_armap); - return false; - } - - /* Keep track of all symbols we know to be already defined, and all - files we know to be already included. This is to speed up the - second and subsequent passes. */ - c = bfd_ardata (abfd)->symdef_count; - if (c == 0) - return true; - amt = c; - amt *= sizeof (boolean); - defined = (boolean *) bfd_zmalloc (amt); - included = (boolean *) bfd_zmalloc (amt); - if (defined == (boolean *) NULL || included == (boolean *) NULL) - goto error_return; - - symdefs = bfd_ardata (abfd)->symdefs; - - do - { - file_ptr last; - symindex i; - carsym *symdef; - carsym *symdefend; - - loop = false; - last = -1; - - symdef = symdefs; - symdefend = symdef + c; - for (i = 0; symdef < symdefend; symdef++, i++) - { - struct elf_link_hash_entry *h; - bfd *element; - struct bfd_link_hash_entry *undefs_tail; - symindex mark; - - if (defined[i] || included[i]) - continue; - if (symdef->file_offset == last) - { - included[i] = true; - continue; - } - - h = elf_link_hash_lookup (elf_hash_table (info), symdef->name, - false, false, false); - - if (h == NULL) - { - char *p, *copy; - size_t len, first; - - /* If this is a default version (the name contains @@), - look up the symbol again with only one `@' as well - as without the version. The effect is that references - to the symbol with and without the version will be - matched by the default symbol in the archive. */ - - p = strchr (symdef->name, ELF_VER_CHR); - if (p == NULL || p[1] != ELF_VER_CHR) - continue; - - /* First check with only one `@'. */ - len = strlen (symdef->name); - copy = bfd_alloc (abfd, (bfd_size_type) len); - if (copy == NULL) - goto error_return; - first = p - symdef->name + 1; - memcpy (copy, symdef->name, first); - memcpy (copy + first, symdef->name + first + 1, len - first); - - h = elf_link_hash_lookup (elf_hash_table (info), copy, - false, false, false); - - if (h == NULL) - { - /* We also need to check references to the symbol - without the version. */ - - copy[first - 1] = '\0'; - h = elf_link_hash_lookup (elf_hash_table (info), - copy, false, false, false); - } - - bfd_release (abfd, copy); - } - - if (h == NULL) - continue; - - if (h->root.type == bfd_link_hash_common) - { - /* We currently have a common symbol. The archive map contains - a reference to this symbol, so we may want to include it. We - only want to include it however, if this archive element - contains a definition of the symbol, not just another common - declaration of it. - - Unfortunately some archivers (including GNU ar) will put - declarations of common symbols into their archive maps, as - well as real definitions, so we cannot just go by the archive - map alone. Instead we must read in the element's symbol - table and check that to see what kind of symbol definition - this is. */ - if (! elf_link_is_defined_archive_symbol (abfd, symdef)) - continue; - } - else if (h->root.type != bfd_link_hash_undefined) - { - if (h->root.type != bfd_link_hash_undefweak) - defined[i] = true; - continue; - } - - /* We need to include this archive member. */ - element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset); - if (element == (bfd *) NULL) - goto error_return; - - if (! bfd_check_format (element, bfd_object)) - goto error_return; - - /* Doublecheck that we have not included this object - already--it should be impossible, but there may be - something wrong with the archive. */ - if (element->archive_pass != 0) - { - bfd_set_error (bfd_error_bad_value); - goto error_return; - } - element->archive_pass = 1; - - undefs_tail = info->hash->undefs_tail; - - if (! (*info->callbacks->add_archive_element) (info, element, - symdef->name)) - goto error_return; - if (! elf_link_add_object_symbols (element, info)) - goto error_return; - - /* If there are any new undefined symbols, we need to make - another pass through the archive in order to see whether - they can be defined. FIXME: This isn't perfect, because - common symbols wind up on undefs_tail and because an - undefined symbol which is defined later on in this pass - does not require another pass. This isn't a bug, but it - does make the code less efficient than it could be. */ - if (undefs_tail != info->hash->undefs_tail) - loop = true; - - /* Look backward to mark all symbols from this object file - which we have already seen in this pass. */ - mark = i; - do - { - included[mark] = true; - if (mark == 0) - break; - --mark; - } - while (symdefs[mark].file_offset == symdef->file_offset); - - /* We mark subsequent symbols from this object file as we go - on through the loop. */ - last = symdef->file_offset; - } - } - while (loop); - - free (defined); - free (included); - - return true; - - error_return: - if (defined != (boolean *) NULL) - free (defined); - if (included != (boolean *) NULL) - free (included); - return false; -} - -/* This function is called when we want to define a new symbol. It - handles the various cases which arise when we find a definition in - a dynamic object, or when there is already a definition in a - dynamic object. The new symbol is described by NAME, SYM, PSEC, - and PVALUE. We set SYM_HASH to the hash table entry. We set - OVERRIDE if the old symbol is overriding a new definition. We set - TYPE_CHANGE_OK if it is OK for the type to change. We set - SIZE_CHANGE_OK if it is OK for the size to change. By OK to - change, we mean that we shouldn't warn if the type or size does - change. DT_NEEDED indicates if it comes from a DT_NEEDED entry of - a shared object. */ - -static boolean -elf_merge_symbol (abfd, info, name, sym, psec, pvalue, sym_hash, - override, type_change_ok, size_change_ok, dt_needed) - bfd *abfd; - struct bfd_link_info *info; - const char *name; - Elf_Internal_Sym *sym; - asection **psec; - bfd_vma *pvalue; - struct elf_link_hash_entry **sym_hash; - boolean *override; - boolean *type_change_ok; - boolean *size_change_ok; - boolean dt_needed; -{ - asection *sec; - struct elf_link_hash_entry *h; - int bind; - bfd *oldbfd; - boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon; - - *override = false; - - sec = *psec; - bind = ELF_ST_BIND (sym->st_info); - - if (! bfd_is_und_section (sec)) - h = elf_link_hash_lookup (elf_hash_table (info), name, true, false, false); - else - h = ((struct elf_link_hash_entry *) - bfd_wrapped_link_hash_lookup (abfd, info, name, true, false, false)); - if (h == NULL) - return false; - *sym_hash = h; - - /* This code is for coping with dynamic objects, and is only useful - if we are doing an ELF link. */ - if (info->hash->creator != abfd->xvec) - return true; - - /* For merging, we only care about real symbols. */ - - while (h->root.type == bfd_link_hash_indirect - || h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - /* If we just created the symbol, mark it as being an ELF symbol. - Other than that, there is nothing to do--there is no merge issue - with a newly defined symbol--so we just return. */ - - if (h->root.type == bfd_link_hash_new) - { - h->elf_link_hash_flags &=~ ELF_LINK_NON_ELF; - return true; - } - - /* OLDBFD is a BFD associated with the existing symbol. */ - - switch (h->root.type) - { - default: - oldbfd = NULL; - break; - - case bfd_link_hash_undefined: - case bfd_link_hash_undefweak: - oldbfd = h->root.u.undef.abfd; - break; - - case bfd_link_hash_defined: - case bfd_link_hash_defweak: - oldbfd = h->root.u.def.section->owner; - break; - - case bfd_link_hash_common: - oldbfd = h->root.u.c.p->section->owner; - break; - } - - /* In cases involving weak versioned symbols, we may wind up trying - to merge a symbol with itself. Catch that here, to avoid the - confusion that results if we try to override a symbol with - itself. The additional tests catch cases like - _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a - dynamic object, which we do want to handle here. */ - if (abfd == oldbfd - && ((abfd->flags & DYNAMIC) == 0 - || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)) - return true; - - /* NEWDYN and OLDDYN indicate whether the new or old symbol, - respectively, is from a dynamic object. */ - - if ((abfd->flags & DYNAMIC) != 0) - newdyn = true; - else - newdyn = false; - - if (oldbfd != NULL) - olddyn = (oldbfd->flags & DYNAMIC) != 0; - else - { - asection *hsec; - - /* This code handles the special SHN_MIPS_{TEXT,DATA} section - indices used by MIPS ELF. */ - switch (h->root.type) - { - default: - hsec = NULL; - break; - - case bfd_link_hash_defined: - case bfd_link_hash_defweak: - hsec = h->root.u.def.section; - break; - - case bfd_link_hash_common: - hsec = h->root.u.c.p->section; - break; - } - - if (hsec == NULL) - olddyn = false; - else - olddyn = (hsec->symbol->flags & BSF_DYNAMIC) != 0; - } - - /* NEWDEF and OLDDEF indicate whether the new or old symbol, - respectively, appear to be a definition rather than reference. */ - - if (bfd_is_und_section (sec) || bfd_is_com_section (sec)) - newdef = false; - else - newdef = true; - - if (h->root.type == bfd_link_hash_undefined - || h->root.type == bfd_link_hash_undefweak - || h->root.type == bfd_link_hash_common) - olddef = false; - else - olddef = true; - - /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old - symbol, respectively, appears to be a common symbol in a dynamic - object. If a symbol appears in an uninitialized section, and is - not weak, and is not a function, then it may be a common symbol - which was resolved when the dynamic object was created. We want - to treat such symbols specially, because they raise special - considerations when setting the symbol size: if the symbol - appears as a common symbol in a regular object, and the size in - the regular object is larger, we must make sure that we use the - larger size. This problematic case can always be avoided in C, - but it must be handled correctly when using Fortran shared - libraries. - - Note that if NEWDYNCOMMON is set, NEWDEF will be set, and - likewise for OLDDYNCOMMON and OLDDEF. - - Note that this test is just a heuristic, and that it is quite - possible to have an uninitialized symbol in a shared object which - is really a definition, rather than a common symbol. This could - lead to some minor confusion when the symbol really is a common - symbol in some regular object. However, I think it will be - harmless. */ - - if (newdyn - && newdef - && (sec->flags & SEC_ALLOC) != 0 - && (sec->flags & SEC_LOAD) == 0 - && sym->st_size > 0 - && bind != STB_WEAK - && ELF_ST_TYPE (sym->st_info) != STT_FUNC) - newdyncommon = true; - else - newdyncommon = false; - - if (olddyn - && olddef - && h->root.type == bfd_link_hash_defined - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0 - && (h->root.u.def.section->flags & SEC_ALLOC) != 0 - && (h->root.u.def.section->flags & SEC_LOAD) == 0 - && h->size > 0 - && h->type != STT_FUNC) - olddyncommon = true; - else - olddyncommon = false; - - /* It's OK to change the type if either the existing symbol or the - new symbol is weak unless it comes from a DT_NEEDED entry of - a shared object, in which case, the DT_NEEDED entry may not be - required at the run time. */ - - if ((! dt_needed && h->root.type == bfd_link_hash_defweak) - || h->root.type == bfd_link_hash_undefweak - || bind == STB_WEAK) - *type_change_ok = true; - - /* It's OK to change the size if either the existing symbol or the - new symbol is weak, or if the old symbol is undefined. */ - - if (*type_change_ok - || h->root.type == bfd_link_hash_undefined) - *size_change_ok = true; - - /* If both the old and the new symbols look like common symbols in a - dynamic object, set the size of the symbol to the larger of the - two. */ - - if (olddyncommon - && newdyncommon - && sym->st_size != h->size) - { - /* Since we think we have two common symbols, issue a multiple - common warning if desired. Note that we only warn if the - size is different. If the size is the same, we simply let - the old symbol override the new one as normally happens with - symbols defined in dynamic objects. */ - - if (! ((*info->callbacks->multiple_common) - (info, h->root.root.string, oldbfd, bfd_link_hash_common, - h->size, abfd, bfd_link_hash_common, sym->st_size))) - return false; - - if (sym->st_size > h->size) - h->size = sym->st_size; - - *size_change_ok = true; - } - - /* If we are looking at a dynamic object, and we have found a - definition, we need to see if the symbol was already defined by - some other object. If so, we want to use the existing - definition, and we do not want to report a multiple symbol - definition error; we do this by clobbering *PSEC to be - bfd_und_section_ptr. - - We treat a common symbol as a definition if the symbol in the - shared library is a function, since common symbols always - represent variables; this can cause confusion in principle, but - any such confusion would seem to indicate an erroneous program or - shared library. We also permit a common symbol in a regular - object to override a weak symbol in a shared object. - - We prefer a non-weak definition in a shared library to a weak - definition in the executable unless it comes from a DT_NEEDED - entry of a shared object, in which case, the DT_NEEDED entry - may not be required at the run time. */ - - if (newdyn - && newdef - && (olddef - || (h->root.type == bfd_link_hash_common - && (bind == STB_WEAK - || ELF_ST_TYPE (sym->st_info) == STT_FUNC))) - && (h->root.type != bfd_link_hash_defweak - || dt_needed - || bind == STB_WEAK)) - { - *override = true; - newdef = false; - newdyncommon = false; - - *psec = sec = bfd_und_section_ptr; - *size_change_ok = true; - - /* If we get here when the old symbol is a common symbol, then - we are explicitly letting it override a weak symbol or - function in a dynamic object, and we don't want to warn about - a type change. If the old symbol is a defined symbol, a type - change warning may still be appropriate. */ - - if (h->root.type == bfd_link_hash_common) - *type_change_ok = true; - } - - /* Handle the special case of an old common symbol merging with a - new symbol which looks like a common symbol in a shared object. - We change *PSEC and *PVALUE to make the new symbol look like a - common symbol, and let _bfd_generic_link_add_one_symbol will do - the right thing. */ - - if (newdyncommon - && h->root.type == bfd_link_hash_common) - { - *override = true; - newdef = false; - newdyncommon = false; - *pvalue = sym->st_size; - *psec = sec = bfd_com_section_ptr; - *size_change_ok = true; - } - - /* If the old symbol is from a dynamic object, and the new symbol is - a definition which is not from a dynamic object, then the new - symbol overrides the old symbol. Symbols from regular files - always take precedence over symbols from dynamic objects, even if - they are defined after the dynamic object in the link. - - As above, we again permit a common symbol in a regular object to - override a definition in a shared object if the shared object - symbol is a function or is weak. - - As above, we permit a non-weak definition in a shared object to - override a weak definition in a regular object. */ - - if (! newdyn - && (newdef - || (bfd_is_com_section (sec) - && (h->root.type == bfd_link_hash_defweak - || h->type == STT_FUNC))) - && olddyn - && olddef - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0 - && (bind != STB_WEAK - || h->root.type == bfd_link_hash_defweak)) - { - /* Change the hash table entry to undefined, and let - _bfd_generic_link_add_one_symbol do the right thing with the - new definition. */ - - h->root.type = bfd_link_hash_undefined; - h->root.u.undef.abfd = h->root.u.def.section->owner; - *size_change_ok = true; - - olddef = false; - olddyncommon = false; - - /* We again permit a type change when a common symbol may be - overriding a function. */ - - if (bfd_is_com_section (sec)) - *type_change_ok = true; - - /* This union may have been set to be non-NULL when this symbol - was seen in a dynamic object. We must force the union to be - NULL, so that it is correct for a regular symbol. */ - - h->verinfo.vertree = NULL; - - /* In this special case, if H is the target of an indirection, - we want the caller to frob with H rather than with the - indirect symbol. That will permit the caller to redefine the - target of the indirection, rather than the indirect symbol - itself. FIXME: This will break the -y option if we store a - symbol with a different name. */ - *sym_hash = h; - } - - /* Handle the special case of a new common symbol merging with an - old symbol that looks like it might be a common symbol defined in - a shared object. Note that we have already handled the case in - which a new common symbol should simply override the definition - in the shared library. */ - - if (! newdyn - && bfd_is_com_section (sec) - && olddyncommon) - { - /* It would be best if we could set the hash table entry to a - common symbol, but we don't know what to use for the section - or the alignment. */ - if (! ((*info->callbacks->multiple_common) - (info, h->root.root.string, oldbfd, bfd_link_hash_common, - h->size, abfd, bfd_link_hash_common, sym->st_size))) - return false; - - /* If the predumed common symbol in the dynamic object is - larger, pretend that the new symbol has its size. */ - - if (h->size > *pvalue) - *pvalue = h->size; - - /* FIXME: We no longer know the alignment required by the symbol - in the dynamic object, so we just wind up using the one from - the regular object. */ - - olddef = false; - olddyncommon = false; - - h->root.type = bfd_link_hash_undefined; - h->root.u.undef.abfd = h->root.u.def.section->owner; - - *size_change_ok = true; - *type_change_ok = true; - - h->verinfo.vertree = NULL; - } - - /* Handle the special case of a weak definition in a regular object - followed by a non-weak definition in a shared object. In this - case, we prefer the definition in the shared object unless it - comes from a DT_NEEDED entry of a shared object, in which case, - the DT_NEEDED entry may not be required at the run time. */ - if (olddef - && ! dt_needed - && h->root.type == bfd_link_hash_defweak - && newdef - && newdyn - && bind != STB_WEAK) - { - /* To make this work we have to frob the flags so that the rest - of the code does not think we are using the regular - definition. */ - if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0) - h->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR; - else if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0) - h->elf_link_hash_flags |= ELF_LINK_HASH_REF_DYNAMIC; - h->elf_link_hash_flags &= ~ (ELF_LINK_HASH_DEF_REGULAR - | ELF_LINK_HASH_DEF_DYNAMIC); - - /* If H is the target of an indirection, we want the caller to - use H rather than the indirect symbol. Otherwise if we are - defining a new indirect symbol we will wind up attaching it - to the entry we are overriding. */ - *sym_hash = h; - } - - /* Handle the special case of a non-weak definition in a shared - object followed by a weak definition in a regular object. In - this case we prefer to definition in the shared object. To make - this work we have to tell the caller to not treat the new symbol - as a definition. */ - if (olddef - && olddyn - && h->root.type != bfd_link_hash_defweak - && newdef - && ! newdyn - && bind == STB_WEAK) - *override = true; - - return true; -} - -/* This function is called to create an indirect symbol from the - default for the symbol with the default version if needed. The - symbol is described by H, NAME, SYM, PSEC, VALUE, and OVERRIDE. We - set DYNSYM if the new indirect symbol is dynamic. DT_NEEDED - indicates if it comes from a DT_NEEDED entry of a shared object. */ - -static boolean -elf_add_default_symbol (abfd, info, h, name, sym, psec, value, - dynsym, override, dt_needed) - bfd *abfd; - struct bfd_link_info *info; - struct elf_link_hash_entry *h; - const char *name; - Elf_Internal_Sym *sym; - asection **psec; - bfd_vma *value; - boolean *dynsym; - boolean override; - boolean dt_needed; -{ - boolean type_change_ok; - boolean size_change_ok; - char *shortname; - struct elf_link_hash_entry *hi; - struct bfd_link_hash_entry *bh; - struct elf_backend_data *bed; - boolean collect; - boolean dynamic; - char *p; - size_t len, shortlen; - asection *sec; - - /* If this symbol has a version, and it is the default version, we - create an indirect symbol from the default name to the fully - decorated name. This will cause external references which do not - specify a version to be bound to this version of the symbol. */ - p = strchr (name, ELF_VER_CHR); - if (p == NULL || p[1] != ELF_VER_CHR) - return true; - - if (override) - { - /* We are overridden by an old defition. We need to check if we - need to create the indirect symbol from the default name. */ - hi = elf_link_hash_lookup (elf_hash_table (info), name, true, - false, false); - BFD_ASSERT (hi != NULL); - if (hi == h) - return true; - while (hi->root.type == bfd_link_hash_indirect - || hi->root.type == bfd_link_hash_warning) - { - hi = (struct elf_link_hash_entry *) hi->root.u.i.link; - if (hi == h) - return true; - } - } - - bed = get_elf_backend_data (abfd); - collect = bed->collect; - dynamic = (abfd->flags & DYNAMIC) != 0; - - shortlen = p - name; - shortname = bfd_hash_allocate (&info->hash->table, shortlen + 1); - if (shortname == NULL) - return false; - memcpy (shortname, name, shortlen); - shortname[shortlen] = '\0'; - - /* We are going to create a new symbol. Merge it with any existing - symbol with this name. For the purposes of the merge, act as - though we were defining the symbol we just defined, although we - actually going to define an indirect symbol. */ - type_change_ok = false; - size_change_ok = false; - sec = *psec; - if (! elf_merge_symbol (abfd, info, shortname, sym, &sec, value, - &hi, &override, &type_change_ok, - &size_change_ok, dt_needed)) - return false; - - if (! override) - { - bh = &hi->root; - if (! (_bfd_generic_link_add_one_symbol - (info, abfd, shortname, BSF_INDIRECT, bfd_ind_section_ptr, - (bfd_vma) 0, name, false, collect, &bh))) - return false; - hi = (struct elf_link_hash_entry *) bh; - } - else - { - /* In this case the symbol named SHORTNAME is overriding the - indirect symbol we want to add. We were planning on making - SHORTNAME an indirect symbol referring to NAME. SHORTNAME - is the name without a version. NAME is the fully versioned - name, and it is the default version. - - Overriding means that we already saw a definition for the - symbol SHORTNAME in a regular object, and it is overriding - the symbol defined in the dynamic object. - - When this happens, we actually want to change NAME, the - symbol we just added, to refer to SHORTNAME. This will cause - references to NAME in the shared object to become references - to SHORTNAME in the regular object. This is what we expect - when we override a function in a shared object: that the - references in the shared object will be mapped to the - definition in the regular object. */ - - while (hi->root.type == bfd_link_hash_indirect - || hi->root.type == bfd_link_hash_warning) - hi = (struct elf_link_hash_entry *) hi->root.u.i.link; - - h->root.type = bfd_link_hash_indirect; - h->root.u.i.link = (struct bfd_link_hash_entry *) hi; - if (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) - { - h->elf_link_hash_flags &=~ ELF_LINK_HASH_DEF_DYNAMIC; - hi->elf_link_hash_flags |= ELF_LINK_HASH_REF_DYNAMIC; - if (hi->elf_link_hash_flags - & (ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_DEF_REGULAR)) - { - if (! _bfd_elf_link_record_dynamic_symbol (info, hi)) - return false; - } - } - - /* Now set HI to H, so that the following code will set the - other fields correctly. */ - hi = h; - } - - /* If there is a duplicate definition somewhere, then HI may not - point to an indirect symbol. We will have reported an error to - the user in that case. */ - - if (hi->root.type == bfd_link_hash_indirect) - { - struct elf_link_hash_entry *ht; - - /* If the symbol became indirect, then we assume that we have - not seen a definition before. */ - BFD_ASSERT ((hi->elf_link_hash_flags - & (ELF_LINK_HASH_DEF_DYNAMIC - | ELF_LINK_HASH_DEF_REGULAR)) == 0); - - ht = (struct elf_link_hash_entry *) hi->root.u.i.link; - (*bed->elf_backend_copy_indirect_symbol) (bed, ht, hi); - - /* See if the new flags lead us to realize that the symbol must - be dynamic. */ - if (! *dynsym) - { - if (! dynamic) - { - if (info->shared - || ((hi->elf_link_hash_flags - & ELF_LINK_HASH_REF_DYNAMIC) != 0)) - *dynsym = true; - } - else - { - if ((hi->elf_link_hash_flags - & ELF_LINK_HASH_REF_REGULAR) != 0) - *dynsym = true; - } - } - } - - /* We also need to define an indirection from the nondefault version - of the symbol. */ - - len = strlen (name); - shortname = bfd_hash_allocate (&info->hash->table, len); - if (shortname == NULL) - return false; - memcpy (shortname, name, shortlen); - memcpy (shortname + shortlen, p + 1, len - shortlen); - - /* Once again, merge with any existing symbol. */ - type_change_ok = false; - size_change_ok = false; - sec = *psec; - if (! elf_merge_symbol (abfd, info, shortname, sym, &sec, value, - &hi, &override, &type_change_ok, - &size_change_ok, dt_needed)) - return false; - - if (override) - { - /* Here SHORTNAME is a versioned name, so we don't expect to see - the type of override we do in the case above unless it is - overridden by a versioned definiton. */ - if (hi->root.type != bfd_link_hash_defined - && hi->root.type != bfd_link_hash_defweak) - (*_bfd_error_handler) - (_("%s: warning: unexpected redefinition of indirect versioned symbol `%s'"), - bfd_archive_filename (abfd), shortname); - } - else - { - bh = &hi->root; - if (! (_bfd_generic_link_add_one_symbol - (info, abfd, shortname, BSF_INDIRECT, - bfd_ind_section_ptr, (bfd_vma) 0, name, false, collect, &bh))) - return false; - hi = (struct elf_link_hash_entry *) bh; - - /* If there is a duplicate definition somewhere, then HI may not - point to an indirect symbol. We will have reported an error - to the user in that case. */ - - if (hi->root.type == bfd_link_hash_indirect) - { - /* If the symbol became indirect, then we assume that we have - not seen a definition before. */ - BFD_ASSERT ((hi->elf_link_hash_flags - & (ELF_LINK_HASH_DEF_DYNAMIC - | ELF_LINK_HASH_DEF_REGULAR)) == 0); - - (*bed->elf_backend_copy_indirect_symbol) (bed, h, hi); - - /* See if the new flags lead us to realize that the symbol - must be dynamic. */ - if (! *dynsym) - { - if (! dynamic) - { - if (info->shared - || ((hi->elf_link_hash_flags - & ELF_LINK_HASH_REF_DYNAMIC) != 0)) - *dynsym = true; - } - else - { - if ((hi->elf_link_hash_flags - & ELF_LINK_HASH_REF_REGULAR) != 0) - *dynsym = true; - } - } - } - } - - return true; -} - -/* Add symbols from an ELF object file to the linker hash table. */ - -static boolean -elf_link_add_object_symbols (abfd, info) - bfd *abfd; - struct bfd_link_info *info; -{ - boolean (*add_symbol_hook) PARAMS ((bfd *, struct bfd_link_info *, - const Elf_Internal_Sym *, - const char **, flagword *, - asection **, bfd_vma *)); - boolean (*check_relocs) PARAMS ((bfd *, struct bfd_link_info *, - asection *, const Elf_Internal_Rela *)); - boolean collect; - Elf_Internal_Shdr *hdr; - bfd_size_type symcount; - bfd_size_type extsymcount; - bfd_size_type extsymoff; - struct elf_link_hash_entry **sym_hash; - boolean dynamic; - Elf_External_Versym *extversym = NULL; - Elf_External_Versym *ever; - struct elf_link_hash_entry *weaks; - Elf_Internal_Sym *isymbuf = NULL; - Elf_Internal_Sym *isym; - Elf_Internal_Sym *isymend; - struct elf_backend_data *bed; - boolean dt_needed; - struct elf_link_hash_table * hash_table; - bfd_size_type amt; - - hash_table = elf_hash_table (info); - - bed = get_elf_backend_data (abfd); - add_symbol_hook = bed->elf_add_symbol_hook; - collect = bed->collect; - - if ((abfd->flags & DYNAMIC) == 0) - dynamic = false; - else - { - dynamic = true; - - /* You can't use -r against a dynamic object. Also, there's no - hope of using a dynamic object which does not exactly match - the format of the output file. */ - if (info->relocateable || info->hash->creator != abfd->xvec) - { - bfd_set_error (bfd_error_invalid_operation); - goto error_return; - } - } - - /* As a GNU extension, any input sections which are named - .gnu.warning.SYMBOL are treated as warning symbols for the given - symbol. This differs from .gnu.warning sections, which generate - warnings when they are included in an output file. */ - if (! info->shared) - { - asection *s; - - for (s = abfd->sections; s != NULL; s = s->next) - { - const char *name; - - name = bfd_get_section_name (abfd, s); - if (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0) - { - char *msg; - bfd_size_type sz; - - name += sizeof ".gnu.warning." - 1; - - /* If this is a shared object, then look up the symbol - in the hash table. If it is there, and it is already - been defined, then we will not be using the entry - from this shared object, so we don't need to warn. - FIXME: If we see the definition in a regular object - later on, we will warn, but we shouldn't. The only - fix is to keep track of what warnings we are supposed - to emit, and then handle them all at the end of the - link. */ - if (dynamic && abfd->xvec == info->hash->creator) - { - struct elf_link_hash_entry *h; - - h = elf_link_hash_lookup (hash_table, name, - false, false, true); - - /* FIXME: What about bfd_link_hash_common? */ - if (h != NULL - && (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak)) - { - /* We don't want to issue this warning. Clobber - the section size so that the warning does not - get copied into the output file. */ - s->_raw_size = 0; - continue; - } - } - - sz = bfd_section_size (abfd, s); - msg = (char *) bfd_alloc (abfd, sz + 1); - if (msg == NULL) - goto error_return; - - if (! bfd_get_section_contents (abfd, s, msg, (file_ptr) 0, sz)) - goto error_return; - - msg[sz] = '\0'; - - if (! (_bfd_generic_link_add_one_symbol - (info, abfd, name, BSF_WARNING, s, (bfd_vma) 0, msg, - false, collect, (struct bfd_link_hash_entry **) NULL))) - goto error_return; - - if (! info->relocateable) - { - /* Clobber the section size so that the warning does - not get copied into the output file. */ - s->_raw_size = 0; - } - } - } - } - - dt_needed = false; - if (! dynamic) - { - /* If we are creating a shared library, create all the dynamic - sections immediately. We need to attach them to something, - so we attach them to this BFD, provided it is the right - format. FIXME: If there are no input BFD's of the same - format as the output, we can't make a shared library. */ - if (info->shared - && is_elf_hash_table (info) - && ! hash_table->dynamic_sections_created - && abfd->xvec == info->hash->creator) - { - if (! elf_link_create_dynamic_sections (abfd, info)) - goto error_return; - } - } - else if (! is_elf_hash_table (info)) - goto error_return; - else - { - asection *s; - boolean add_needed; - const char *name; - bfd_size_type oldsize; - bfd_size_type strindex; - struct bfd_link_needed_list *rpath = NULL, *runpath = NULL; - - /* ld --just-symbols and dynamic objects don't mix very well. - Test for --just-symbols by looking at info set up by - _bfd_elf_link_just_syms. */ - if ((s = abfd->sections) != NULL - && elf_section_data (s)->sec_info_type == ELF_INFO_TYPE_JUST_SYMS) - goto error_return; - - /* Find the name to use in a DT_NEEDED entry that refers to this - object. If the object has a DT_SONAME entry, we use it. - Otherwise, if the generic linker stuck something in - elf_dt_name, we use that. Otherwise, we just use the file - name. If the generic linker put a null string into - elf_dt_name, we don't make a DT_NEEDED entry at all, even if - there is a DT_SONAME entry. */ - add_needed = true; - name = bfd_get_filename (abfd); - if (elf_dt_name (abfd) != NULL) - { - name = elf_dt_name (abfd); - if (*name == '\0') - { - if (elf_dt_soname (abfd) != NULL) - dt_needed = true; - - add_needed = false; - } - } - s = bfd_get_section_by_name (abfd, ".dynamic"); - if (s != NULL) - { - Elf_External_Dyn *dynbuf = NULL; - Elf_External_Dyn *extdyn; - Elf_External_Dyn *extdynend; - int elfsec; - unsigned long shlink; - - dynbuf = (Elf_External_Dyn *) bfd_malloc (s->_raw_size); - if (dynbuf == NULL) - goto error_return; - - if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf, - (file_ptr) 0, s->_raw_size)) - goto error_free_dyn; - - elfsec = _bfd_elf_section_from_bfd_section (abfd, s); - if (elfsec == -1) - goto error_free_dyn; - shlink = elf_elfsections (abfd)[elfsec]->sh_link; - - extdyn = dynbuf; - extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn); - for (; extdyn < extdynend; extdyn++) - { - Elf_Internal_Dyn dyn; - - elf_swap_dyn_in (abfd, extdyn, &dyn); - if (dyn.d_tag == DT_SONAME) - { - unsigned int tagv = dyn.d_un.d_val; - name = bfd_elf_string_from_elf_section (abfd, shlink, tagv); - if (name == NULL) - goto error_free_dyn; - } - if (dyn.d_tag == DT_NEEDED) - { - struct bfd_link_needed_list *n, **pn; - char *fnm, *anm; - unsigned int tagv = dyn.d_un.d_val; - - amt = sizeof (struct bfd_link_needed_list); - n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); - fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); - if (n == NULL || fnm == NULL) - goto error_free_dyn; - amt = strlen (fnm) + 1; - anm = bfd_alloc (abfd, amt); - if (anm == NULL) - goto error_free_dyn; - memcpy (anm, fnm, (size_t) amt); - n->name = anm; - n->by = abfd; - n->next = NULL; - for (pn = & hash_table->needed; - *pn != NULL; - pn = &(*pn)->next) - ; - *pn = n; - } - if (dyn.d_tag == DT_RUNPATH) - { - struct bfd_link_needed_list *n, **pn; - char *fnm, *anm; - unsigned int tagv = dyn.d_un.d_val; - - amt = sizeof (struct bfd_link_needed_list); - n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); - fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); - if (n == NULL || fnm == NULL) - goto error_free_dyn; - amt = strlen (fnm) + 1; - anm = bfd_alloc (abfd, amt); - if (anm == NULL) - goto error_free_dyn; - memcpy (anm, fnm, (size_t) amt); - n->name = anm; - n->by = abfd; - n->next = NULL; - for (pn = & runpath; - *pn != NULL; - pn = &(*pn)->next) - ; - *pn = n; - } - /* Ignore DT_RPATH if we have seen DT_RUNPATH. */ - if (!runpath && dyn.d_tag == DT_RPATH) - { - struct bfd_link_needed_list *n, **pn; - char *fnm, *anm; - unsigned int tagv = dyn.d_un.d_val; - - amt = sizeof (struct bfd_link_needed_list); - n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); - fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); - if (n == NULL || fnm == NULL) - goto error_free_dyn; - amt = strlen (fnm) + 1; - anm = bfd_alloc (abfd, amt); - if (anm == NULL) - { - error_free_dyn: - free (dynbuf); - goto error_return; - } - memcpy (anm, fnm, (size_t) amt); - n->name = anm; - n->by = abfd; - n->next = NULL; - for (pn = & rpath; - *pn != NULL; - pn = &(*pn)->next) - ; - *pn = n; - } - } - - free (dynbuf); - } - - /* DT_RUNPATH overrides DT_RPATH. Do _NOT_ bfd_release, as that - frees all more recently bfd_alloc'd blocks as well. */ - if (runpath) - rpath = runpath; - - if (rpath) - { - struct bfd_link_needed_list **pn; - for (pn = & hash_table->runpath; - *pn != NULL; - pn = &(*pn)->next) - ; - *pn = rpath; - } - - /* We do not want to include any of the sections in a dynamic - object in the output file. We hack by simply clobbering the - list of sections in the BFD. This could be handled more - cleanly by, say, a new section flag; the existing - SEC_NEVER_LOAD flag is not the one we want, because that one - still implies that the section takes up space in the output - file. */ - bfd_section_list_clear (abfd); - - /* If this is the first dynamic object found in the link, create - the special sections required for dynamic linking. */ - if (! hash_table->dynamic_sections_created) - if (! elf_link_create_dynamic_sections (abfd, info)) - goto error_return; - - if (add_needed) - { - /* Add a DT_NEEDED entry for this dynamic object. */ - oldsize = _bfd_elf_strtab_size (hash_table->dynstr); - strindex = _bfd_elf_strtab_add (hash_table->dynstr, name, false); - if (strindex == (bfd_size_type) -1) - goto error_return; - - if (oldsize == _bfd_elf_strtab_size (hash_table->dynstr)) - { - asection *sdyn; - Elf_External_Dyn *dyncon, *dynconend; - - /* The hash table size did not change, which means that - the dynamic object name was already entered. If we - have already included this dynamic object in the - link, just ignore it. There is no reason to include - a particular dynamic object more than once. */ - sdyn = bfd_get_section_by_name (hash_table->dynobj, ".dynamic"); - BFD_ASSERT (sdyn != NULL); - - dyncon = (Elf_External_Dyn *) sdyn->contents; - dynconend = (Elf_External_Dyn *) (sdyn->contents + - sdyn->_raw_size); - for (; dyncon < dynconend; dyncon++) - { - Elf_Internal_Dyn dyn; - - elf_swap_dyn_in (hash_table->dynobj, dyncon, & dyn); - if (dyn.d_tag == DT_NEEDED - && dyn.d_un.d_val == strindex) - { - _bfd_elf_strtab_delref (hash_table->dynstr, strindex); - return true; - } - } - } - - if (! elf_add_dynamic_entry (info, (bfd_vma) DT_NEEDED, strindex)) - goto error_return; - } - - /* Save the SONAME, if there is one, because sometimes the - linker emulation code will need to know it. */ - if (*name == '\0') - name = basename (bfd_get_filename (abfd)); - elf_dt_name (abfd) = name; - } - - /* If this is a dynamic object, we always link against the .dynsym - symbol table, not the .symtab symbol table. The dynamic linker - will only see the .dynsym symbol table, so there is no reason to - look at .symtab for a dynamic object. */ - - if (! dynamic || elf_dynsymtab (abfd) == 0) - hdr = &elf_tdata (abfd)->symtab_hdr; - else - hdr = &elf_tdata (abfd)->dynsymtab_hdr; - - symcount = hdr->sh_size / sizeof (Elf_External_Sym); - - /* The sh_info field of the symtab header tells us where the - external symbols start. We don't care about the local symbols at - this point. */ - if (elf_bad_symtab (abfd)) - { - extsymcount = symcount; - extsymoff = 0; - } - else - { - extsymcount = symcount - hdr->sh_info; - extsymoff = hdr->sh_info; - } - - sym_hash = NULL; - if (extsymcount != 0) - { - isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff, - NULL, NULL, NULL); - if (isymbuf == NULL) - goto error_return; - - /* We store a pointer to the hash table entry for each external - symbol. */ - amt = extsymcount * sizeof (struct elf_link_hash_entry *); - sym_hash = (struct elf_link_hash_entry **) bfd_alloc (abfd, amt); - if (sym_hash == NULL) - goto error_free_sym; - elf_sym_hashes (abfd) = sym_hash; - } - - if (dynamic) - { - /* Read in any version definitions. */ - if (! _bfd_elf_slurp_version_tables (abfd)) - goto error_free_sym; - - /* Read in the symbol versions, but don't bother to convert them - to internal format. */ - if (elf_dynversym (abfd) != 0) - { - Elf_Internal_Shdr *versymhdr; - - versymhdr = &elf_tdata (abfd)->dynversym_hdr; - extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size); - if (extversym == NULL) - goto error_free_sym; - amt = versymhdr->sh_size; - if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0 - || bfd_bread ((PTR) extversym, amt, abfd) != amt) - goto error_free_vers; - } - } - - weaks = NULL; - - ever = extversym != NULL ? extversym + extsymoff : NULL; - for (isym = isymbuf, isymend = isymbuf + extsymcount; - isym < isymend; - isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL)) - { - int bind; - bfd_vma value; - asection *sec; - flagword flags; - const char *name; - struct elf_link_hash_entry *h; - boolean definition; - boolean size_change_ok, type_change_ok; - boolean new_weakdef; - unsigned int old_alignment; - boolean override; - - override = false; - - flags = BSF_NO_FLAGS; - sec = NULL; - value = isym->st_value; - *sym_hash = NULL; - - bind = ELF_ST_BIND (isym->st_info); - if (bind == STB_LOCAL) - { - /* This should be impossible, since ELF requires that all - global symbols follow all local symbols, and that sh_info - point to the first global symbol. Unfortunatealy, Irix 5 - screws this up. */ - continue; - } - else if (bind == STB_GLOBAL) - { - if (isym->st_shndx != SHN_UNDEF - && isym->st_shndx != SHN_COMMON) - flags = BSF_GLOBAL; - } - else if (bind == STB_WEAK) - flags = BSF_WEAK; - else - { - /* Leave it up to the processor backend. */ - } - - if (isym->st_shndx == SHN_UNDEF) - sec = bfd_und_section_ptr; - else if (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE) - { - sec = section_from_elf_index (abfd, isym->st_shndx); - if (sec == NULL) - sec = bfd_abs_section_ptr; - else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0) - value -= sec->vma; - } - else if (isym->st_shndx == SHN_ABS) - sec = bfd_abs_section_ptr; - else if (isym->st_shndx == SHN_COMMON) - { - sec = bfd_com_section_ptr; - /* What ELF calls the size we call the value. What ELF - calls the value we call the alignment. */ - value = isym->st_size; - } - else - { - /* Leave it up to the processor backend. */ - } - - name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, - isym->st_name); - if (name == (const char *) NULL) - goto error_free_vers; - - if (isym->st_shndx == SHN_COMMON - && ELF_ST_TYPE (isym->st_info) == STT_TLS) - { - asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon"); - - if (tcomm == NULL) - { - tcomm = bfd_make_section (abfd, ".tcommon"); - if (tcomm == NULL - || !bfd_set_section_flags (abfd, tcomm, (SEC_ALLOC - | SEC_IS_COMMON - | SEC_LINKER_CREATED - | SEC_THREAD_LOCAL))) - goto error_free_vers; - } - sec = tcomm; - } - else if (add_symbol_hook) - { - if (! (*add_symbol_hook) (abfd, info, isym, &name, &flags, &sec, - &value)) - goto error_free_vers; - - /* The hook function sets the name to NULL if this symbol - should be skipped for some reason. */ - if (name == (const char *) NULL) - continue; - } - - /* Sanity check that all possibilities were handled. */ - if (sec == (asection *) NULL) - { - bfd_set_error (bfd_error_bad_value); - goto error_free_vers; - } - - if (bfd_is_und_section (sec) - || bfd_is_com_section (sec)) - definition = false; - else - definition = true; - - size_change_ok = false; - type_change_ok = get_elf_backend_data (abfd)->type_change_ok; - old_alignment = 0; - if (info->hash->creator->flavour == bfd_target_elf_flavour) - { - Elf_Internal_Versym iver; - unsigned int vernum = 0; - - if (ever != NULL) - { - _bfd_elf_swap_versym_in (abfd, ever, &iver); - vernum = iver.vs_vers & VERSYM_VERSION; - - /* If this is a hidden symbol, or if it is not version - 1, we append the version name to the symbol name. - However, we do not modify a non-hidden absolute - symbol, because it might be the version symbol - itself. FIXME: What if it isn't? */ - if ((iver.vs_vers & VERSYM_HIDDEN) != 0 - || (vernum > 1 && ! bfd_is_abs_section (sec))) - { - const char *verstr; - size_t namelen, verlen, newlen; - char *newname, *p; - - if (isym->st_shndx != SHN_UNDEF) - { - if (vernum > elf_tdata (abfd)->dynverdef_hdr.sh_info) - { - (*_bfd_error_handler) - (_("%s: %s: invalid version %u (max %d)"), - bfd_archive_filename (abfd), name, vernum, - elf_tdata (abfd)->dynverdef_hdr.sh_info); - bfd_set_error (bfd_error_bad_value); - goto error_free_vers; - } - else if (vernum > 1) - verstr = - elf_tdata (abfd)->verdef[vernum - 1].vd_nodename; - else - verstr = ""; - } - else - { - /* We cannot simply test for the number of - entries in the VERNEED section since the - numbers for the needed versions do not start - at 0. */ - Elf_Internal_Verneed *t; - - verstr = NULL; - for (t = elf_tdata (abfd)->verref; - t != NULL; - t = t->vn_nextref) - { - Elf_Internal_Vernaux *a; - - for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) - { - if (a->vna_other == vernum) - { - verstr = a->vna_nodename; - break; - } - } - if (a != NULL) - break; - } - if (verstr == NULL) - { - (*_bfd_error_handler) - (_("%s: %s: invalid needed version %d"), - bfd_archive_filename (abfd), name, vernum); - bfd_set_error (bfd_error_bad_value); - goto error_free_vers; - } - } - - namelen = strlen (name); - verlen = strlen (verstr); - newlen = namelen + verlen + 2; - if ((iver.vs_vers & VERSYM_HIDDEN) == 0 - && isym->st_shndx != SHN_UNDEF) - ++newlen; - - newname = (char *) bfd_alloc (abfd, (bfd_size_type) newlen); - if (newname == NULL) - goto error_free_vers; - memcpy (newname, name, namelen); - p = newname + namelen; - *p++ = ELF_VER_CHR; - /* If this is a defined non-hidden version symbol, - we add another @ to the name. This indicates the - default version of the symbol. */ - if ((iver.vs_vers & VERSYM_HIDDEN) == 0 - && isym->st_shndx != SHN_UNDEF) - *p++ = ELF_VER_CHR; - memcpy (p, verstr, verlen + 1); - - name = newname; - } - } - - if (! elf_merge_symbol (abfd, info, name, isym, &sec, &value, - sym_hash, &override, &type_change_ok, - &size_change_ok, dt_needed)) - goto error_free_vers; - - if (override) - definition = false; - - h = *sym_hash; - while (h->root.type == bfd_link_hash_indirect - || h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - /* Remember the old alignment if this is a common symbol, so - that we don't reduce the alignment later on. We can't - check later, because _bfd_generic_link_add_one_symbol - will set a default for the alignment which we want to - override. */ - if (h->root.type == bfd_link_hash_common) - old_alignment = h->root.u.c.p->alignment_power; - - if (elf_tdata (abfd)->verdef != NULL - && ! override - && vernum > 1 - && definition) - h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1]; - } - - if (! (_bfd_generic_link_add_one_symbol - (info, abfd, name, flags, sec, value, (const char *) NULL, - false, collect, (struct bfd_link_hash_entry **) sym_hash))) - goto error_free_vers; - - h = *sym_hash; - while (h->root.type == bfd_link_hash_indirect - || h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - *sym_hash = h; - - new_weakdef = false; - if (dynamic - && definition - && (flags & BSF_WEAK) != 0 - && ELF_ST_TYPE (isym->st_info) != STT_FUNC - && info->hash->creator->flavour == bfd_target_elf_flavour - && h->weakdef == NULL) - { - /* Keep a list of all weak defined non function symbols from - a dynamic object, using the weakdef field. Later in this - function we will set the weakdef field to the correct - value. We only put non-function symbols from dynamic - objects on this list, because that happens to be the only - time we need to know the normal symbol corresponding to a - weak symbol, and the information is time consuming to - figure out. If the weakdef field is not already NULL, - then this symbol was already defined by some previous - dynamic object, and we will be using that previous - definition anyhow. */ - - h->weakdef = weaks; - weaks = h; - new_weakdef = true; - } - - /* Set the alignment of a common symbol. */ - if (isym->st_shndx == SHN_COMMON - && h->root.type == bfd_link_hash_common) - { - unsigned int align; - - align = bfd_log2 (isym->st_value); - if (align > old_alignment - /* Permit an alignment power of zero if an alignment of one - is specified and no other alignments have been specified. */ - || (isym->st_value == 1 && old_alignment == 0)) - h->root.u.c.p->alignment_power = align; - } - - if (info->hash->creator->flavour == bfd_target_elf_flavour) - { - int old_flags; - boolean dynsym; - int new_flag; - - /* Remember the symbol size and type. */ - if (isym->st_size != 0 - && (definition || h->size == 0)) - { - if (h->size != 0 && h->size != isym->st_size && ! size_change_ok) - (*_bfd_error_handler) - (_("Warning: size of symbol `%s' changed from %lu to %lu in %s"), - name, (unsigned long) h->size, - (unsigned long) isym->st_size, bfd_archive_filename (abfd)); - - h->size = isym->st_size; - } - - /* If this is a common symbol, then we always want H->SIZE - to be the size of the common symbol. The code just above - won't fix the size if a common symbol becomes larger. We - don't warn about a size change here, because that is - covered by --warn-common. */ - if (h->root.type == bfd_link_hash_common) - h->size = h->root.u.c.size; - - if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE - && (definition || h->type == STT_NOTYPE)) - { - if (h->type != STT_NOTYPE - && h->type != ELF_ST_TYPE (isym->st_info) - && ! type_change_ok) - (*_bfd_error_handler) - (_("Warning: type of symbol `%s' changed from %d to %d in %s"), - name, h->type, ELF_ST_TYPE (isym->st_info), - bfd_archive_filename (abfd)); - - h->type = ELF_ST_TYPE (isym->st_info); - } - - /* If st_other has a processor-specific meaning, specific code - might be needed here. */ - if (isym->st_other != 0) - { - unsigned char hvis, symvis, other; - - /* Take the balance of OTHER from the definition. */ - other = (definition ? isym->st_other : h->other); - other &= ~ ELF_ST_VISIBILITY (-1); - - /* Combine visibilities, using the most constraining one. */ - hvis = ELF_ST_VISIBILITY (h->other); - symvis = ELF_ST_VISIBILITY (isym->st_other); - - h->other = other | (hvis > symvis ? hvis : symvis); - } - - /* Set a flag in the hash table entry indicating the type of - reference or definition we just found. Keep a count of - the number of dynamic symbols we find. A dynamic symbol - is one which is referenced or defined by both a regular - object and a shared object. */ - old_flags = h->elf_link_hash_flags; - dynsym = false; - if (! dynamic) - { - if (! definition) - { - new_flag = ELF_LINK_HASH_REF_REGULAR; - if (bind != STB_WEAK) - new_flag |= ELF_LINK_HASH_REF_REGULAR_NONWEAK; - } - else - new_flag = ELF_LINK_HASH_DEF_REGULAR; - if (info->shared - || (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC - | ELF_LINK_HASH_REF_DYNAMIC)) != 0) - dynsym = true; - } - else - { - if (! definition) - new_flag = ELF_LINK_HASH_REF_DYNAMIC; - else - new_flag = ELF_LINK_HASH_DEF_DYNAMIC; - if ((old_flags & (ELF_LINK_HASH_DEF_REGULAR - | ELF_LINK_HASH_REF_REGULAR)) != 0 - || (h->weakdef != NULL - && ! new_weakdef - && h->weakdef->dynindx != -1)) - dynsym = true; - } - - h->elf_link_hash_flags |= new_flag; - - /* Check to see if we need to add an indirect symbol for - the default name. */ - if (definition || h->root.type == bfd_link_hash_common) - if (! elf_add_default_symbol (abfd, info, h, name, isym, - &sec, &value, &dynsym, - override, dt_needed)) - goto error_free_vers; - - if (dynsym && h->dynindx == -1) - { - if (! _bfd_elf_link_record_dynamic_symbol (info, h)) - goto error_free_vers; - if (h->weakdef != NULL - && ! new_weakdef - && h->weakdef->dynindx == -1) - { - if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef)) - goto error_free_vers; - } - } - else if (dynsym && h->dynindx != -1) - /* If the symbol already has a dynamic index, but - visibility says it should not be visible, turn it into - a local symbol. */ - switch (ELF_ST_VISIBILITY (h->other)) - { - case STV_INTERNAL: - case STV_HIDDEN: - (*bed->elf_backend_hide_symbol) (info, h, true); - break; - } - - if (dt_needed && definition - && (h->elf_link_hash_flags - & ELF_LINK_HASH_REF_REGULAR) != 0) - { - bfd_size_type oldsize; - bfd_size_type strindex; - - if (! is_elf_hash_table (info)) - goto error_free_vers; - - /* The symbol from a DT_NEEDED object is referenced from - the regular object to create a dynamic executable. We - have to make sure there is a DT_NEEDED entry for it. */ - - dt_needed = false; - oldsize = _bfd_elf_strtab_size (hash_table->dynstr); - strindex = _bfd_elf_strtab_add (hash_table->dynstr, - elf_dt_soname (abfd), false); - if (strindex == (bfd_size_type) -1) - goto error_free_vers; - - if (oldsize == _bfd_elf_strtab_size (hash_table->dynstr)) - { - asection *sdyn; - Elf_External_Dyn *dyncon, *dynconend; - - sdyn = bfd_get_section_by_name (hash_table->dynobj, - ".dynamic"); - BFD_ASSERT (sdyn != NULL); - - dyncon = (Elf_External_Dyn *) sdyn->contents; - dynconend = (Elf_External_Dyn *) (sdyn->contents + - sdyn->_raw_size); - for (; dyncon < dynconend; dyncon++) - { - Elf_Internal_Dyn dyn; - - elf_swap_dyn_in (hash_table->dynobj, - dyncon, &dyn); - BFD_ASSERT (dyn.d_tag != DT_NEEDED || - dyn.d_un.d_val != strindex); - } - } - - if (! elf_add_dynamic_entry (info, (bfd_vma) DT_NEEDED, strindex)) - goto error_free_vers; - } - } - } - - if (extversym != NULL) - { - free (extversym); - extversym = NULL; - } - - if (isymbuf != NULL) - free (isymbuf); - isymbuf = NULL; - - /* Now set the weakdefs field correctly for all the weak defined - symbols we found. The only way to do this is to search all the - symbols. Since we only need the information for non functions in - dynamic objects, that's the only time we actually put anything on - the list WEAKS. We need this information so that if a regular - object refers to a symbol defined weakly in a dynamic object, the - real symbol in the dynamic object is also put in the dynamic - symbols; we also must arrange for both symbols to point to the - same memory location. We could handle the general case of symbol - aliasing, but a general symbol alias can only be generated in - assembler code, handling it correctly would be very time - consuming, and other ELF linkers don't handle general aliasing - either. */ - while (weaks != NULL) - { - struct elf_link_hash_entry *hlook; - asection *slook; - bfd_vma vlook; - struct elf_link_hash_entry **hpp; - struct elf_link_hash_entry **hppend; - - hlook = weaks; - weaks = hlook->weakdef; - hlook->weakdef = NULL; - - BFD_ASSERT (hlook->root.type == bfd_link_hash_defined - || hlook->root.type == bfd_link_hash_defweak - || hlook->root.type == bfd_link_hash_common - || hlook->root.type == bfd_link_hash_indirect); - slook = hlook->root.u.def.section; - vlook = hlook->root.u.def.value; - - hpp = elf_sym_hashes (abfd); - hppend = hpp + extsymcount; - for (; hpp < hppend; hpp++) - { - struct elf_link_hash_entry *h; - - h = *hpp; - if (h != NULL && h != hlook - && h->root.type == bfd_link_hash_defined - && h->root.u.def.section == slook - && h->root.u.def.value == vlook) - { - hlook->weakdef = h; - - /* If the weak definition is in the list of dynamic - symbols, make sure the real definition is put there - as well. */ - if (hlook->dynindx != -1 - && h->dynindx == -1) - { - if (! _bfd_elf_link_record_dynamic_symbol (info, h)) - goto error_return; - } - - /* If the real definition is in the list of dynamic - symbols, make sure the weak definition is put there - as well. If we don't do this, then the dynamic - loader might not merge the entries for the real - definition and the weak definition. */ - if (h->dynindx != -1 - && hlook->dynindx == -1) - { - if (! _bfd_elf_link_record_dynamic_symbol (info, hlook)) - goto error_return; - } - break; - } - } - } - - /* If this object is the same format as the output object, and it is - not a shared library, then let the backend look through the - relocs. - - This is required to build global offset table entries and to - arrange for dynamic relocs. It is not required for the - particular common case of linking non PIC code, even when linking - against shared libraries, but unfortunately there is no way of - knowing whether an object file has been compiled PIC or not. - Looking through the relocs is not particularly time consuming. - The problem is that we must either (1) keep the relocs in memory, - which causes the linker to require additional runtime memory or - (2) read the relocs twice from the input file, which wastes time. - This would be a good case for using mmap. - - I have no idea how to handle linking PIC code into a file of a - different format. It probably can't be done. */ - check_relocs = get_elf_backend_data (abfd)->check_relocs; - if (! dynamic - && abfd->xvec == info->hash->creator - && check_relocs != NULL) - { - asection *o; - - for (o = abfd->sections; o != NULL; o = o->next) - { - Elf_Internal_Rela *internal_relocs; - boolean ok; - - if ((o->flags & SEC_RELOC) == 0 - || o->reloc_count == 0 - || ((info->strip == strip_all || info->strip == strip_debugger) - && (o->flags & SEC_DEBUGGING) != 0) - || bfd_is_abs_section (o->output_section)) - continue; - - internal_relocs = (NAME(_bfd_elf,link_read_relocs) - (abfd, o, (PTR) NULL, - (Elf_Internal_Rela *) NULL, - info->keep_memory)); - if (internal_relocs == NULL) - goto error_return; - - ok = (*check_relocs) (abfd, info, o, internal_relocs); - - if (elf_section_data (o)->relocs != internal_relocs) - free (internal_relocs); - - if (! ok) - goto error_return; - } - } - - /* If this is a non-traditional, non-relocateable link, try to - optimize the handling of the .stab/.stabstr sections. */ - if (! dynamic - && ! info->relocateable - && ! info->traditional_format - && info->hash->creator->flavour == bfd_target_elf_flavour - && is_elf_hash_table (info) - && (info->strip != strip_all && info->strip != strip_debugger)) - { - asection *stab, *stabstr; - - stab = bfd_get_section_by_name (abfd, ".stab"); - if (stab != NULL - && (stab->flags & SEC_MERGE) == 0 - && !bfd_is_abs_section (stab->output_section)) - { - stabstr = bfd_get_section_by_name (abfd, ".stabstr"); - - if (stabstr != NULL) - { - struct bfd_elf_section_data *secdata; - - secdata = elf_section_data (stab); - if (! _bfd_link_section_stabs (abfd, - & hash_table->stab_info, - stab, stabstr, - &secdata->sec_info)) - goto error_return; - if (secdata->sec_info) - secdata->sec_info_type = ELF_INFO_TYPE_STABS; - } - } - } - - if (! info->relocateable && ! dynamic - && is_elf_hash_table (info)) - { - asection *s; - - for (s = abfd->sections; s != NULL; s = s->next) - if ((s->flags & SEC_MERGE) != 0 - && !bfd_is_abs_section (s->output_section)) - { - struct bfd_elf_section_data *secdata; - - secdata = elf_section_data (s); - if (! _bfd_merge_section (abfd, - & hash_table->merge_info, - s, &secdata->sec_info)) - goto error_return; - else if (secdata->sec_info) - secdata->sec_info_type = ELF_INFO_TYPE_MERGE; - } - } - - if (is_elf_hash_table (info)) - { - /* Add this bfd to the loaded list. */ - struct elf_link_loaded_list *n; - - n = ((struct elf_link_loaded_list *) - bfd_alloc (abfd, sizeof (struct elf_link_loaded_list))); - if (n == NULL) - goto error_return; - n->abfd = abfd; - n->next = hash_table->loaded; - hash_table->loaded = n; - } - - return true; - - error_free_vers: - if (extversym != NULL) - free (extversym); - error_free_sym: - if (isymbuf != NULL) - free (isymbuf); - error_return: - return false; -} - -/* Create some sections which will be filled in with dynamic linking - information. ABFD is an input file which requires dynamic sections - to be created. The dynamic sections take up virtual memory space - when the final executable is run, so we need to create them before - addresses are assigned to the output sections. We work out the - actual contents and size of these sections later. */ - -boolean -elf_link_create_dynamic_sections (abfd, info) - bfd *abfd; - struct bfd_link_info *info; -{ - flagword flags; - register asection *s; - struct elf_link_hash_entry *h; - struct bfd_link_hash_entry *bh; - struct elf_backend_data *bed; - - if (! is_elf_hash_table (info)) - return false; - - if (elf_hash_table (info)->dynamic_sections_created) - return true; - - /* Make sure that all dynamic sections use the same input BFD. */ - if (elf_hash_table (info)->dynobj == NULL) - elf_hash_table (info)->dynobj = abfd; - else - abfd = elf_hash_table (info)->dynobj; - - /* Note that we set the SEC_IN_MEMORY flag for all of these - sections. */ - flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - - /* A dynamically linked executable has a .interp section, but a - shared library does not. */ - if (! info->shared) - { - s = bfd_make_section (abfd, ".interp"); - if (s == NULL - || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)) - return false; - } - - if (! info->traditional_format - && info->hash->creator->flavour == bfd_target_elf_flavour) - { - s = bfd_make_section (abfd, ".eh_frame_hdr"); - if (s == NULL - || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY) - || ! bfd_set_section_alignment (abfd, s, 2)) - return false; - } - - /* Create sections to hold version informations. These are removed - if they are not needed. */ - s = bfd_make_section (abfd, ".gnu.version_d"); - if (s == NULL - || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY) - || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN)) - return false; - - s = bfd_make_section (abfd, ".gnu.version"); - if (s == NULL - || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY) - || ! bfd_set_section_alignment (abfd, s, 1)) - return false; - - s = bfd_make_section (abfd, ".gnu.version_r"); - if (s == NULL - || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY) - || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN)) - return false; - - s = bfd_make_section (abfd, ".dynsym"); - if (s == NULL - || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY) - || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN)) - return false; - - s = bfd_make_section (abfd, ".dynstr"); - if (s == NULL - || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)) - return false; - - /* Create a strtab to hold the dynamic symbol names. */ - if (elf_hash_table (info)->dynstr == NULL) - { - elf_hash_table (info)->dynstr = _bfd_elf_strtab_init (); - if (elf_hash_table (info)->dynstr == NULL) - return false; - } - - s = bfd_make_section (abfd, ".dynamic"); - if (s == NULL - || ! bfd_set_section_flags (abfd, s, flags) - || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN)) - return false; - - /* The special symbol _DYNAMIC is always set to the start of the - .dynamic section. This call occurs before we have processed the - symbols for any dynamic object, so we don't have to worry about - overriding a dynamic definition. We could set _DYNAMIC in a - linker script, but we only want to define it if we are, in fact, - creating a .dynamic section. We don't want to define it if there - is no .dynamic section, since on some ELF platforms the start up - code examines it to decide how to initialize the process. */ - bh = NULL; - if (! (_bfd_generic_link_add_one_symbol - (info, abfd, "_DYNAMIC", BSF_GLOBAL, s, (bfd_vma) 0, - (const char *) 0, false, get_elf_backend_data (abfd)->collect, &bh))) - return false; - h = (struct elf_link_hash_entry *) bh; - h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR; - h->type = STT_OBJECT; - - if (info->shared - && ! _bfd_elf_link_record_dynamic_symbol (info, h)) - return false; - - bed = get_elf_backend_data (abfd); - - s = bfd_make_section (abfd, ".hash"); - if (s == NULL - || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY) - || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN)) - return false; - elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry; - - /* Let the backend create the rest of the sections. This lets the - backend set the right flags. The backend will normally create - the .got and .plt sections. */ - if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info)) - return false; - - elf_hash_table (info)->dynamic_sections_created = true; - - return true; -} - -/* Add an entry to the .dynamic table. */ - -boolean -elf_add_dynamic_entry (info, tag, val) - struct bfd_link_info *info; - bfd_vma tag; - bfd_vma val; -{ - Elf_Internal_Dyn dyn; - bfd *dynobj; - asection *s; - bfd_size_type newsize; - bfd_byte *newcontents; - - if (! is_elf_hash_table (info)) - return false; - - dynobj = elf_hash_table (info)->dynobj; - - s = bfd_get_section_by_name (dynobj, ".dynamic"); - BFD_ASSERT (s != NULL); - - newsize = s->_raw_size + sizeof (Elf_External_Dyn); - newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize); - if (newcontents == NULL) - return false; - - dyn.d_tag = tag; - dyn.d_un.d_val = val; - elf_swap_dyn_out (dynobj, &dyn, - (Elf_External_Dyn *) (newcontents + s->_raw_size)); - - s->_raw_size = newsize; - s->contents = newcontents; - - return true; -} - -/* Read and swap the relocs from the section indicated by SHDR. This - may be either a REL or a RELA section. The relocations are - translated into RELA relocations and stored in INTERNAL_RELOCS, - which should have already been allocated to contain enough space. - The EXTERNAL_RELOCS are a buffer where the external form of the - relocations should be stored. - - Returns false if something goes wrong. */ - -static boolean -elf_link_read_relocs_from_section (abfd, shdr, external_relocs, - internal_relocs) - bfd *abfd; - Elf_Internal_Shdr *shdr; - PTR external_relocs; - Elf_Internal_Rela *internal_relocs; -{ - struct elf_backend_data *bed; - bfd_size_type amt; - - /* If there aren't any relocations, that's OK. */ - if (!shdr) - return true; - - /* Position ourselves at the start of the section. */ - if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0) - return false; - - /* Read the relocations. */ - if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size) - return false; - - bed = get_elf_backend_data (abfd); - - /* Convert the external relocations to the internal format. */ - if (shdr->sh_entsize == sizeof (Elf_External_Rel)) - { - Elf_External_Rel *erel; - Elf_External_Rel *erelend; - Elf_Internal_Rela *irela; - Elf_Internal_Rel *irel; - - erel = (Elf_External_Rel *) external_relocs; - erelend = erel + NUM_SHDR_ENTRIES (shdr); - irela = internal_relocs; - amt = bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rel); - irel = bfd_alloc (abfd, amt); - for (; erel < erelend; erel++, irela += bed->s->int_rels_per_ext_rel) - { - unsigned int i; - - if (bed->s->swap_reloc_in) - (*bed->s->swap_reloc_in) (abfd, (bfd_byte *) erel, irel); - else - elf_swap_reloc_in (abfd, erel, irel); - - for (i = 0; i < bed->s->int_rels_per_ext_rel; ++i) - { - irela[i].r_offset = irel[i].r_offset; - irela[i].r_info = irel[i].r_info; - irela[i].r_addend = 0; - } - } - } - else - { - Elf_External_Rela *erela; - Elf_External_Rela *erelaend; - Elf_Internal_Rela *irela; - - BFD_ASSERT (shdr->sh_entsize == sizeof (Elf_External_Rela)); - - erela = (Elf_External_Rela *) external_relocs; - erelaend = erela + NUM_SHDR_ENTRIES (shdr); - irela = internal_relocs; - for (; erela < erelaend; erela++, irela += bed->s->int_rels_per_ext_rel) - { - if (bed->s->swap_reloca_in) - (*bed->s->swap_reloca_in) (abfd, (bfd_byte *) erela, irela); - else - elf_swap_reloca_in (abfd, erela, irela); - } - } - - return true; -} - -/* Read and swap the relocs for a section O. They may have been - cached. If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are - not NULL, they are used as buffers to read into. They are known to - be large enough. If the INTERNAL_RELOCS relocs argument is NULL, - the return value is allocated using either malloc or bfd_alloc, - according to the KEEP_MEMORY argument. If O has two relocation - sections (both REL and RELA relocations), then the REL_HDR - relocations will appear first in INTERNAL_RELOCS, followed by the - REL_HDR2 relocations. */ - -Elf_Internal_Rela * -NAME(_bfd_elf,link_read_relocs) (abfd, o, external_relocs, internal_relocs, - keep_memory) - bfd *abfd; - asection *o; - PTR external_relocs; - Elf_Internal_Rela *internal_relocs; - boolean keep_memory; -{ - Elf_Internal_Shdr *rel_hdr; - PTR alloc1 = NULL; - Elf_Internal_Rela *alloc2 = NULL; - struct elf_backend_data *bed = get_elf_backend_data (abfd); - - if (elf_section_data (o)->relocs != NULL) - return elf_section_data (o)->relocs; - - if (o->reloc_count == 0) - return NULL; - - rel_hdr = &elf_section_data (o)->rel_hdr; - - if (internal_relocs == NULL) - { - bfd_size_type size; - - size = o->reloc_count; - size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela); - if (keep_memory) - internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size); - else - internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size); - if (internal_relocs == NULL) - goto error_return; - } - - if (external_relocs == NULL) - { - bfd_size_type size = rel_hdr->sh_size; - - if (elf_section_data (o)->rel_hdr2) - size += elf_section_data (o)->rel_hdr2->sh_size; - alloc1 = (PTR) bfd_malloc (size); - if (alloc1 == NULL) - goto error_return; - external_relocs = alloc1; - } - - if (!elf_link_read_relocs_from_section (abfd, rel_hdr, - external_relocs, - internal_relocs)) - goto error_return; - if (!elf_link_read_relocs_from_section - (abfd, - elf_section_data (o)->rel_hdr2, - ((bfd_byte *) external_relocs) + rel_hdr->sh_size, - internal_relocs + (NUM_SHDR_ENTRIES (rel_hdr) - * bed->s->int_rels_per_ext_rel))) - goto error_return; - - /* Cache the results for next time, if we can. */ - if (keep_memory) - elf_section_data (o)->relocs = internal_relocs; - - if (alloc1 != NULL) - free (alloc1); - - /* Don't free alloc2, since if it was allocated we are passing it - back (under the name of internal_relocs). */ - - return internal_relocs; - - error_return: - if (alloc1 != NULL) - free (alloc1); - if (alloc2 != NULL) - free (alloc2); - return NULL; -} - -/* Record an assignment to a symbol made by a linker script. We need - this in case some dynamic object refers to this symbol. */ - -boolean -NAME(bfd_elf,record_link_assignment) (output_bfd, info, name, provide) - bfd *output_bfd ATTRIBUTE_UNUSED; - struct bfd_link_info *info; - const char *name; - boolean provide; -{ - struct elf_link_hash_entry *h; - - if (info->hash->creator->flavour != bfd_target_elf_flavour) - return true; - - h = elf_link_hash_lookup (elf_hash_table (info), name, true, true, false); - if (h == NULL) - return false; - - if (h->root.type == bfd_link_hash_new) - h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF; - - /* If this symbol is being provided by the linker script, and it is - currently defined by a dynamic object, but not by a regular - object, then mark it as undefined so that the generic linker will - force the correct value. */ - if (provide - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0 - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0) - h->root.type = bfd_link_hash_undefined; - - /* If this symbol is not being provided by the linker script, and it is - currently defined by a dynamic object, but not by a regular object, - then clear out any version information because the symbol will not be - associated with the dynamic object any more. */ - if (!provide - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0 - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0) - h->verinfo.verdef = NULL; - - h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR; - - if (((h->elf_link_hash_flags & (ELF_LINK_HASH_DEF_DYNAMIC - | ELF_LINK_HASH_REF_DYNAMIC)) != 0 - || info->shared) - && h->dynindx == -1) - { - if (! _bfd_elf_link_record_dynamic_symbol (info, h)) - return false; - - /* If this is a weak defined symbol, and we know a corresponding - real symbol from the same dynamic object, make sure the real - symbol is also made into a dynamic symbol. */ - if (h->weakdef != NULL - && h->weakdef->dynindx == -1) - { - if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef)) - return false; - } - } - - return true; -} - -/* This structure is used to pass information to - elf_link_assign_sym_version. */ - -struct elf_assign_sym_version_info -{ - /* Output BFD. */ - bfd *output_bfd; - /* General link information. */ - struct bfd_link_info *info; - /* Version tree. */ - struct bfd_elf_version_tree *verdefs; - /* Whether we had a failure. */ - boolean failed; -}; - -/* This structure is used to pass information to - elf_link_find_version_dependencies. */ - -struct elf_find_verdep_info -{ - /* Output BFD. */ - bfd *output_bfd; - /* General link information. */ - struct bfd_link_info *info; - /* The number of dependencies. */ - unsigned int vers; - /* Whether we had a failure. */ - boolean failed; -}; - -/* Array used to determine the number of hash table buckets to use - based on the number of symbols there are. If there are fewer than - 3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets, - fewer than 37 we use 17 buckets, and so forth. We never use more - than 32771 buckets. */ - -static const size_t elf_buckets[] = -{ - 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209, - 16411, 32771, 0 -}; - -/* Compute bucket count for hashing table. We do not use a static set - of possible tables sizes anymore. Instead we determine for all - possible reasonable sizes of the table the outcome (i.e., the - number of collisions etc) and choose the best solution. The - weighting functions are not too simple to allow the table to grow - without bounds. Instead one of the weighting factors is the size. - Therefore the result is always a good payoff between few collisions - (= short chain lengths) and table size. */ -static size_t -compute_bucket_count (info) - struct bfd_link_info *info; -{ - size_t dynsymcount = elf_hash_table (info)->dynsymcount; - size_t best_size = 0; - unsigned long int *hashcodes; - unsigned long int *hashcodesp; - unsigned long int i; - bfd_size_type amt; - - /* Compute the hash values for all exported symbols. At the same - time store the values in an array so that we could use them for - optimizations. */ - amt = dynsymcount; - amt *= sizeof (unsigned long int); - hashcodes = (unsigned long int *) bfd_malloc (amt); - if (hashcodes == NULL) - return 0; - hashcodesp = hashcodes; - - /* Put all hash values in HASHCODES. */ - elf_link_hash_traverse (elf_hash_table (info), - elf_collect_hash_codes, &hashcodesp); - - /* We have a problem here. The following code to optimize the table - size requires an integer type with more the 32 bits. If - BFD_HOST_U_64_BIT is set we know about such a type. */ -#ifdef BFD_HOST_U_64_BIT - if (info->optimize) - { - unsigned long int nsyms = hashcodesp - hashcodes; - size_t minsize; - size_t maxsize; - BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0); - unsigned long int *counts ; - - /* Possible optimization parameters: if we have NSYMS symbols we say - that the hashing table must at least have NSYMS/4 and at most - 2*NSYMS buckets. */ - minsize = nsyms / 4; - if (minsize == 0) - minsize = 1; - best_size = maxsize = nsyms * 2; - - /* Create array where we count the collisions in. We must use bfd_malloc - since the size could be large. */ - amt = maxsize; - amt *= sizeof (unsigned long int); - counts = (unsigned long int *) bfd_malloc (amt); - if (counts == NULL) - { - free (hashcodes); - return 0; - } - - /* Compute the "optimal" size for the hash table. The criteria is a - minimal chain length. The minor criteria is (of course) the size - of the table. */ - for (i = minsize; i < maxsize; ++i) - { - /* Walk through the array of hashcodes and count the collisions. */ - BFD_HOST_U_64_BIT max; - unsigned long int j; - unsigned long int fact; - - memset (counts, '\0', i * sizeof (unsigned long int)); - - /* Determine how often each hash bucket is used. */ - for (j = 0; j < nsyms; ++j) - ++counts[hashcodes[j] % i]; - - /* For the weight function we need some information about the - pagesize on the target. This is information need not be 100% - accurate. Since this information is not available (so far) we - define it here to a reasonable default value. If it is crucial - to have a better value some day simply define this value. */ -# ifndef BFD_TARGET_PAGESIZE -# define BFD_TARGET_PAGESIZE (4096) -# endif - - /* We in any case need 2 + NSYMS entries for the size values and - the chains. */ - max = (2 + nsyms) * (ARCH_SIZE / 8); - -# if 1 - /* Variant 1: optimize for short chains. We add the squares - of all the chain lengths (which favous many small chain - over a few long chains). */ - for (j = 0; j < i; ++j) - max += counts[j] * counts[j]; - - /* This adds penalties for the overall size of the table. */ - fact = i / (BFD_TARGET_PAGESIZE / (ARCH_SIZE / 8)) + 1; - max *= fact * fact; -# else - /* Variant 2: Optimize a lot more for small table. Here we - also add squares of the size but we also add penalties for - empty slots (the +1 term). */ - for (j = 0; j < i; ++j) - max += (1 + counts[j]) * (1 + counts[j]); - - /* The overall size of the table is considered, but not as - strong as in variant 1, where it is squared. */ - fact = i / (BFD_TARGET_PAGESIZE / (ARCH_SIZE / 8)) + 1; - max *= fact; -# endif - - /* Compare with current best results. */ - if (max < best_chlen) - { - best_chlen = max; - best_size = i; - } - } - - free (counts); - } - else -#endif /* defined (BFD_HOST_U_64_BIT) */ - { - /* This is the fallback solution if no 64bit type is available or if we - are not supposed to spend much time on optimizations. We select the - bucket count using a fixed set of numbers. */ - for (i = 0; elf_buckets[i] != 0; i++) - { - best_size = elf_buckets[i]; - if (dynsymcount < elf_buckets[i + 1]) - break; - } - } - - /* Free the arrays we needed. */ - free (hashcodes); - - return best_size; -} - -/* Set up the sizes and contents of the ELF dynamic sections. This is - called by the ELF linker emulation before_allocation routine. We - must set the sizes of the sections before the linker sets the - addresses of the various sections. */ - -boolean -NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath, - filter_shlib, - auxiliary_filters, info, sinterpptr, - verdefs) - bfd *output_bfd; - const char *soname; - const char *rpath; - const char *filter_shlib; - const char * const *auxiliary_filters; - struct bfd_link_info *info; - asection **sinterpptr; - struct bfd_elf_version_tree *verdefs; -{ - bfd_size_type soname_indx; - bfd *dynobj; - struct elf_backend_data *bed; - struct elf_assign_sym_version_info asvinfo; - - *sinterpptr = NULL; - - soname_indx = (bfd_size_type) -1; - - if (info->hash->creator->flavour != bfd_target_elf_flavour) - return true; - - if (! is_elf_hash_table (info)) - return true; - - /* Any syms created from now on start with -1 in - got.refcount/offset and plt.refcount/offset. */ - elf_hash_table (info)->init_refcount = -1; - - /* The backend may have to create some sections regardless of whether - we're dynamic or not. */ - bed = get_elf_backend_data (output_bfd); - if (bed->elf_backend_always_size_sections - && ! (*bed->elf_backend_always_size_sections) (output_bfd, info)) - return false; - - dynobj = elf_hash_table (info)->dynobj; - - /* If there were no dynamic objects in the link, there is nothing to - do here. */ - if (dynobj == NULL) - return true; - - if (! _bfd_elf_maybe_strip_eh_frame_hdr (info)) - return false; - - if (elf_hash_table (info)->dynamic_sections_created) - { - struct elf_info_failed eif; - struct elf_link_hash_entry *h; - asection *dynstr; - struct bfd_elf_version_tree *t; - struct bfd_elf_version_expr *d; - boolean all_defined; - - *sinterpptr = bfd_get_section_by_name (dynobj, ".interp"); - BFD_ASSERT (*sinterpptr != NULL || info->shared); - - if (soname != NULL) - { - soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, - soname, true); - if (soname_indx == (bfd_size_type) -1 - || ! elf_add_dynamic_entry (info, (bfd_vma) DT_SONAME, - soname_indx)) - return false; - } - - if (info->symbolic) - { - if (! elf_add_dynamic_entry (info, (bfd_vma) DT_SYMBOLIC, - (bfd_vma) 0)) - return false; - info->flags |= DF_SYMBOLIC; - } - - if (rpath != NULL) - { - bfd_size_type indx; - - indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath, - true); - if (info->new_dtags) - _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, indx); - if (indx == (bfd_size_type) -1 - || ! elf_add_dynamic_entry (info, (bfd_vma) DT_RPATH, indx) - || (info->new_dtags - && ! elf_add_dynamic_entry (info, (bfd_vma) DT_RUNPATH, - indx))) - return false; - } - - if (filter_shlib != NULL) - { - bfd_size_type indx; - - indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, - filter_shlib, true); - if (indx == (bfd_size_type) -1 - || ! elf_add_dynamic_entry (info, (bfd_vma) DT_FILTER, indx)) - return false; - } - - if (auxiliary_filters != NULL) - { - const char * const *p; - - for (p = auxiliary_filters; *p != NULL; p++) - { - bfd_size_type indx; - - indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, - *p, true); - if (indx == (bfd_size_type) -1 - || ! elf_add_dynamic_entry (info, (bfd_vma) DT_AUXILIARY, - indx)) - return false; - } - } - - eif.info = info; - eif.verdefs = verdefs; - eif.failed = false; - - /* If we are supposed to export all symbols into the dynamic symbol - table (this is not the normal case), then do so. */ - if (info->export_dynamic) - { - elf_link_hash_traverse (elf_hash_table (info), elf_export_symbol, - (PTR) &eif); - if (eif.failed) - return false; - } - - /* Make all global versions with definiton. */ - for (t = verdefs; t != NULL; t = t->next) - for (d = t->globals; d != NULL; d = d->next) - if (!d->symver && strchr (d->pattern, '*') == NULL) - { - const char *verstr, *name; - size_t namelen, verlen, newlen; - char *newname, *p; - struct elf_link_hash_entry *newh; - - name = d->pattern; - namelen = strlen (name); - verstr = t->name; - verlen = strlen (verstr); - newlen = namelen + verlen + 3; - - newname = (char *) bfd_malloc ((bfd_size_type) newlen); - if (newname == NULL) - return false; - memcpy (newname, name, namelen); - - /* Check the hidden versioned definition. */ - p = newname + namelen; - *p++ = ELF_VER_CHR; - memcpy (p, verstr, verlen + 1); - newh = elf_link_hash_lookup (elf_hash_table (info), - newname, false, false, - false); - if (newh == NULL - || (newh->root.type != bfd_link_hash_defined - && newh->root.type != bfd_link_hash_defweak)) - { - /* Check the default versioned definition. */ - *p++ = ELF_VER_CHR; - memcpy (p, verstr, verlen + 1); - newh = elf_link_hash_lookup (elf_hash_table (info), - newname, false, false, - false); - } - free (newname); - - /* Mark this version if there is a definition and it is - not defined in a shared object. */ - if (newh != NULL - && ((newh->elf_link_hash_flags - & ELF_LINK_HASH_DEF_DYNAMIC) == 0) - && (newh->root.type == bfd_link_hash_defined - || newh->root.type == bfd_link_hash_defweak)) - d->symver = 1; - } - - /* Attach all the symbols to their version information. */ - asvinfo.output_bfd = output_bfd; - asvinfo.info = info; - asvinfo.verdefs = verdefs; - asvinfo.failed = false; - - elf_link_hash_traverse (elf_hash_table (info), - elf_link_assign_sym_version, - (PTR) &asvinfo); - if (asvinfo.failed) - return false; - - if (!info->allow_undefined_version) - { - /* Check if all global versions have a definiton. */ - all_defined = true; - for (t = verdefs; t != NULL; t = t->next) - for (d = t->globals; d != NULL; d = d->next) - if (!d->symver && !d->script - && strchr (d->pattern, '*') == NULL) - { - (*_bfd_error_handler) - (_("%s: undefined version: %s"), - d->pattern, t->name); - all_defined = false; - } - - if (!all_defined) - { - bfd_set_error (bfd_error_bad_value); - return false; - } - } - - /* Find all symbols which were defined in a dynamic object and make - the backend pick a reasonable value for them. */ - elf_link_hash_traverse (elf_hash_table (info), - elf_adjust_dynamic_symbol, - (PTR) &eif); - if (eif.failed) - return false; - - /* Add some entries to the .dynamic section. We fill in some of the - values later, in elf_bfd_final_link, but we must add the entries - now so that we know the final size of the .dynamic section. */ - - /* If there are initialization and/or finalization functions to - call then add the corresponding DT_INIT/DT_FINI entries. */ - h = (info->init_function - ? elf_link_hash_lookup (elf_hash_table (info), - info->init_function, false, - false, false) - : NULL); - if (h != NULL - && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_DEF_REGULAR)) != 0) - { - if (! elf_add_dynamic_entry (info, (bfd_vma) DT_INIT, (bfd_vma) 0)) - return false; - } - h = (info->fini_function - ? elf_link_hash_lookup (elf_hash_table (info), - info->fini_function, false, - false, false) - : NULL); - if (h != NULL - && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_DEF_REGULAR)) != 0) - { - if (! elf_add_dynamic_entry (info, (bfd_vma) DT_FINI, (bfd_vma) 0)) - return false; - } - - if (bfd_get_section_by_name (output_bfd, ".preinit_array") != NULL) - { - /* DT_PREINIT_ARRAY is not allowed in shared library. */ - if (info->shared) - { - bfd *sub; - asection *o; - - for (sub = info->input_bfds; sub != NULL; - sub = sub->link_next) - for (o = sub->sections; o != NULL; o = o->next) - if (elf_section_data (o)->this_hdr.sh_type - == SHT_PREINIT_ARRAY) - { - (*_bfd_error_handler) - (_("%s: .preinit_array section is not allowed in DSO"), - bfd_archive_filename (sub)); - break; - } - - bfd_set_error (bfd_error_nonrepresentable_section); - return false; - } - - if (!elf_add_dynamic_entry (info, (bfd_vma) DT_PREINIT_ARRAY, - (bfd_vma) 0) - || !elf_add_dynamic_entry (info, (bfd_vma) DT_PREINIT_ARRAYSZ, - (bfd_vma) 0)) - return false; - } - if (bfd_get_section_by_name (output_bfd, ".init_array") != NULL) - { - if (!elf_add_dynamic_entry (info, (bfd_vma) DT_INIT_ARRAY, - (bfd_vma) 0) - || !elf_add_dynamic_entry (info, (bfd_vma) DT_INIT_ARRAYSZ, - (bfd_vma) 0)) - return false; - } - if (bfd_get_section_by_name (output_bfd, ".fini_array") != NULL) - { - if (!elf_add_dynamic_entry (info, (bfd_vma) DT_FINI_ARRAY, - (bfd_vma) 0) - || !elf_add_dynamic_entry (info, (bfd_vma) DT_FINI_ARRAYSZ, - (bfd_vma) 0)) - return false; - } - - dynstr = bfd_get_section_by_name (dynobj, ".dynstr"); - /* If .dynstr is excluded from the link, we don't want any of - these tags. Strictly, we should be checking each section - individually; This quick check covers for the case where - someone does a /DISCARD/ : { *(*) }. */ - if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr) - { - bfd_size_type strsize; - - strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr); - if (! elf_add_dynamic_entry (info, (bfd_vma) DT_HASH, (bfd_vma) 0) - || ! elf_add_dynamic_entry (info, (bfd_vma) DT_STRTAB, (bfd_vma) 0) - || ! elf_add_dynamic_entry (info, (bfd_vma) DT_SYMTAB, (bfd_vma) 0) - || ! elf_add_dynamic_entry (info, (bfd_vma) DT_STRSZ, strsize) - || ! elf_add_dynamic_entry (info, (bfd_vma) DT_SYMENT, - (bfd_vma) sizeof (Elf_External_Sym))) - return false; - } - } - - /* The backend must work out the sizes of all the other dynamic - sections. */ - if (bed->elf_backend_size_dynamic_sections - && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info)) - return false; - - if (elf_hash_table (info)->dynamic_sections_created) - { - bfd_size_type dynsymcount; - asection *s; - size_t bucketcount = 0; - size_t hash_entry_size; - unsigned int dtagcount; - - /* Set up the version definition section. */ - s = bfd_get_section_by_name (dynobj, ".gnu.version_d"); - BFD_ASSERT (s != NULL); - - /* We may have created additional version definitions if we are - just linking a regular application. */ - verdefs = asvinfo.verdefs; - - /* Skip anonymous version tag. */ - if (verdefs != NULL && verdefs->vernum == 0) - verdefs = verdefs->next; - - if (verdefs == NULL) - _bfd_strip_section_from_output (info, s); - else - { - unsigned int cdefs; - bfd_size_type size; - struct bfd_elf_version_tree *t; - bfd_byte *p; - Elf_Internal_Verdef def; - Elf_Internal_Verdaux defaux; - - cdefs = 0; - size = 0; - - /* Make space for the base version. */ - size += sizeof (Elf_External_Verdef); - size += sizeof (Elf_External_Verdaux); - ++cdefs; - - for (t = verdefs; t != NULL; t = t->next) - { - struct bfd_elf_version_deps *n; - - size += sizeof (Elf_External_Verdef); - size += sizeof (Elf_External_Verdaux); - ++cdefs; - - for (n = t->deps; n != NULL; n = n->next) - size += sizeof (Elf_External_Verdaux); - } - - s->_raw_size = size; - s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size); - if (s->contents == NULL && s->_raw_size != 0) - return false; - - /* Fill in the version definition section. */ - - p = s->contents; - - def.vd_version = VER_DEF_CURRENT; - def.vd_flags = VER_FLG_BASE; - def.vd_ndx = 1; - def.vd_cnt = 1; - def.vd_aux = sizeof (Elf_External_Verdef); - def.vd_next = (sizeof (Elf_External_Verdef) - + sizeof (Elf_External_Verdaux)); - - if (soname_indx != (bfd_size_type) -1) - { - _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, - soname_indx); - def.vd_hash = bfd_elf_hash (soname); - defaux.vda_name = soname_indx; - } - else - { - const char *name; - bfd_size_type indx; - - name = basename (output_bfd->filename); - def.vd_hash = bfd_elf_hash (name); - indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, - name, false); - if (indx == (bfd_size_type) -1) - return false; - defaux.vda_name = indx; - } - defaux.vda_next = 0; - - _bfd_elf_swap_verdef_out (output_bfd, &def, - (Elf_External_Verdef *) p); - p += sizeof (Elf_External_Verdef); - _bfd_elf_swap_verdaux_out (output_bfd, &defaux, - (Elf_External_Verdaux *) p); - p += sizeof (Elf_External_Verdaux); - - for (t = verdefs; t != NULL; t = t->next) - { - unsigned int cdeps; - struct bfd_elf_version_deps *n; - struct elf_link_hash_entry *h; - struct bfd_link_hash_entry *bh; - - cdeps = 0; - for (n = t->deps; n != NULL; n = n->next) - ++cdeps; - - /* Add a symbol representing this version. */ - bh = NULL; - if (! (_bfd_generic_link_add_one_symbol - (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr, - (bfd_vma) 0, (const char *) NULL, false, - get_elf_backend_data (dynobj)->collect, &bh))) - return false; - h = (struct elf_link_hash_entry *) bh; - h->elf_link_hash_flags &= ~ ELF_LINK_NON_ELF; - h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR; - h->type = STT_OBJECT; - h->verinfo.vertree = t; - - if (! _bfd_elf_link_record_dynamic_symbol (info, h)) - return false; - - def.vd_version = VER_DEF_CURRENT; - def.vd_flags = 0; - if (t->globals == NULL && t->locals == NULL && ! t->used) - def.vd_flags |= VER_FLG_WEAK; - def.vd_ndx = t->vernum + 1; - def.vd_cnt = cdeps + 1; - def.vd_hash = bfd_elf_hash (t->name); - def.vd_aux = sizeof (Elf_External_Verdef); - if (t->next != NULL) - def.vd_next = (sizeof (Elf_External_Verdef) - + (cdeps + 1) * sizeof (Elf_External_Verdaux)); - else - def.vd_next = 0; - - _bfd_elf_swap_verdef_out (output_bfd, &def, - (Elf_External_Verdef *) p); - p += sizeof (Elf_External_Verdef); - - defaux.vda_name = h->dynstr_index; - _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, - h->dynstr_index); - if (t->deps == NULL) - defaux.vda_next = 0; - else - defaux.vda_next = sizeof (Elf_External_Verdaux); - t->name_indx = defaux.vda_name; - - _bfd_elf_swap_verdaux_out (output_bfd, &defaux, - (Elf_External_Verdaux *) p); - p += sizeof (Elf_External_Verdaux); - - for (n = t->deps; n != NULL; n = n->next) - { - if (n->version_needed == NULL) - { - /* This can happen if there was an error in the - version script. */ - defaux.vda_name = 0; - } - else - { - defaux.vda_name = n->version_needed->name_indx; - _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, - defaux.vda_name); - } - if (n->next == NULL) - defaux.vda_next = 0; - else - defaux.vda_next = sizeof (Elf_External_Verdaux); - - _bfd_elf_swap_verdaux_out (output_bfd, &defaux, - (Elf_External_Verdaux *) p); - p += sizeof (Elf_External_Verdaux); - } - } - - if (! elf_add_dynamic_entry (info, (bfd_vma) DT_VERDEF, (bfd_vma) 0) - || ! elf_add_dynamic_entry (info, (bfd_vma) DT_VERDEFNUM, - (bfd_vma) cdefs)) - return false; - - elf_tdata (output_bfd)->cverdefs = cdefs; - } - - if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS)) - { - if (! elf_add_dynamic_entry (info, (bfd_vma) DT_FLAGS, info->flags)) - return false; - } - - if (info->flags_1) - { - if (! info->shared) - info->flags_1 &= ~ (DF_1_INITFIRST - | DF_1_NODELETE - | DF_1_NOOPEN); - if (! elf_add_dynamic_entry (info, (bfd_vma) DT_FLAGS_1, - info->flags_1)) - return false; - } - - /* Work out the size of the version reference section. */ - - s = bfd_get_section_by_name (dynobj, ".gnu.version_r"); - BFD_ASSERT (s != NULL); - { - struct elf_find_verdep_info sinfo; - - sinfo.output_bfd = output_bfd; - sinfo.info = info; - sinfo.vers = elf_tdata (output_bfd)->cverdefs; - if (sinfo.vers == 0) - sinfo.vers = 1; - sinfo.failed = false; - - elf_link_hash_traverse (elf_hash_table (info), - elf_link_find_version_dependencies, - (PTR) &sinfo); - - if (elf_tdata (output_bfd)->verref == NULL) - _bfd_strip_section_from_output (info, s); - else - { - Elf_Internal_Verneed *t; - unsigned int size; - unsigned int crefs; - bfd_byte *p; - - /* Build the version definition section. */ - size = 0; - crefs = 0; - for (t = elf_tdata (output_bfd)->verref; - t != NULL; - t = t->vn_nextref) - { - Elf_Internal_Vernaux *a; - - size += sizeof (Elf_External_Verneed); - ++crefs; - for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) - size += sizeof (Elf_External_Vernaux); - } - - s->_raw_size = size; - s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size); - if (s->contents == NULL) - return false; - - p = s->contents; - for (t = elf_tdata (output_bfd)->verref; - t != NULL; - t = t->vn_nextref) - { - unsigned int caux; - Elf_Internal_Vernaux *a; - bfd_size_type indx; - - caux = 0; - for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) - ++caux; - - t->vn_version = VER_NEED_CURRENT; - t->vn_cnt = caux; - indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, - elf_dt_name (t->vn_bfd) != NULL - ? elf_dt_name (t->vn_bfd) - : basename (t->vn_bfd->filename), - false); - if (indx == (bfd_size_type) -1) - return false; - t->vn_file = indx; - t->vn_aux = sizeof (Elf_External_Verneed); - if (t->vn_nextref == NULL) - t->vn_next = 0; - else - t->vn_next = (sizeof (Elf_External_Verneed) - + caux * sizeof (Elf_External_Vernaux)); - - _bfd_elf_swap_verneed_out (output_bfd, t, - (Elf_External_Verneed *) p); - p += sizeof (Elf_External_Verneed); - - for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) - { - a->vna_hash = bfd_elf_hash (a->vna_nodename); - indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, - a->vna_nodename, false); - if (indx == (bfd_size_type) -1) - return false; - a->vna_name = indx; - if (a->vna_nextptr == NULL) - a->vna_next = 0; - else - a->vna_next = sizeof (Elf_External_Vernaux); - - _bfd_elf_swap_vernaux_out (output_bfd, a, - (Elf_External_Vernaux *) p); - p += sizeof (Elf_External_Vernaux); - } - } - - if (! elf_add_dynamic_entry (info, (bfd_vma) DT_VERNEED, - (bfd_vma) 0) - || ! elf_add_dynamic_entry (info, (bfd_vma) DT_VERNEEDNUM, - (bfd_vma) crefs)) - return false; - - elf_tdata (output_bfd)->cverrefs = crefs; - } - } - - /* Assign dynsym indicies. In a shared library we generate a - section symbol for each output section, which come first. - Next come all of the back-end allocated local dynamic syms, - followed by the rest of the global symbols. */ - - dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info); - - /* Work out the size of the symbol version section. */ - s = bfd_get_section_by_name (dynobj, ".gnu.version"); - BFD_ASSERT (s != NULL); - if (dynsymcount == 0 - || (verdefs == NULL && elf_tdata (output_bfd)->verref == NULL)) - { - _bfd_strip_section_from_output (info, s); - /* The DYNSYMCOUNT might have changed if we were going to - output a dynamic symbol table entry for S. */ - dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info); - } - else - { - s->_raw_size = dynsymcount * sizeof (Elf_External_Versym); - s->contents = (bfd_byte *) bfd_zalloc (output_bfd, s->_raw_size); - if (s->contents == NULL) - return false; - - if (! elf_add_dynamic_entry (info, (bfd_vma) DT_VERSYM, (bfd_vma) 0)) - return false; - } - - /* Set the size of the .dynsym and .hash sections. We counted - the number of dynamic symbols in elf_link_add_object_symbols. - We will build the contents of .dynsym and .hash when we build - the final symbol table, because until then we do not know the - correct value to give the symbols. We built the .dynstr - section as we went along in elf_link_add_object_symbols. */ - s = bfd_get_section_by_name (dynobj, ".dynsym"); - BFD_ASSERT (s != NULL); - s->_raw_size = dynsymcount * sizeof (Elf_External_Sym); - s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size); - if (s->contents == NULL && s->_raw_size != 0) - return false; - - if (dynsymcount != 0) - { - Elf_Internal_Sym isym; - - /* The first entry in .dynsym is a dummy symbol. */ - isym.st_value = 0; - isym.st_size = 0; - isym.st_name = 0; - isym.st_info = 0; - isym.st_other = 0; - isym.st_shndx = 0; - elf_swap_symbol_out (output_bfd, &isym, (PTR) s->contents, (PTR) 0); - } - - /* Compute the size of the hashing table. As a side effect this - computes the hash values for all the names we export. */ - bucketcount = compute_bucket_count (info); - - s = bfd_get_section_by_name (dynobj, ".hash"); - BFD_ASSERT (s != NULL); - hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize; - s->_raw_size = ((2 + bucketcount + dynsymcount) * hash_entry_size); - s->contents = (bfd_byte *) bfd_zalloc (output_bfd, s->_raw_size); - if (s->contents == NULL) - return false; - - bfd_put (8 * hash_entry_size, output_bfd, (bfd_vma) bucketcount, - s->contents); - bfd_put (8 * hash_entry_size, output_bfd, (bfd_vma) dynsymcount, - s->contents + hash_entry_size); - - elf_hash_table (info)->bucketcount = bucketcount; - - s = bfd_get_section_by_name (dynobj, ".dynstr"); - BFD_ASSERT (s != NULL); - - elf_finalize_dynstr (output_bfd, info); - - s->_raw_size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr); - - for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount) - if (! elf_add_dynamic_entry (info, (bfd_vma) DT_NULL, (bfd_vma) 0)) - return false; - } - - return true; -} - -/* This function is used to adjust offsets into .dynstr for - dynamic symbols. This is called via elf_link_hash_traverse. */ - -static boolean elf_adjust_dynstr_offsets -PARAMS ((struct elf_link_hash_entry *, PTR)); - -static boolean -elf_adjust_dynstr_offsets (h, data) - struct elf_link_hash_entry *h; - PTR data; -{ - struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data; - - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - if (h->dynindx != -1) - h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index); - return true; -} - -/* Assign string offsets in .dynstr, update all structures referencing - them. */ - -static boolean -elf_finalize_dynstr (output_bfd, info) - bfd *output_bfd; - struct bfd_link_info *info; -{ - struct elf_link_local_dynamic_entry *entry; - struct elf_strtab_hash *dynstr = elf_hash_table (info)->dynstr; - bfd *dynobj = elf_hash_table (info)->dynobj; - asection *sdyn; - bfd_size_type size; - Elf_External_Dyn *dyncon, *dynconend; - - _bfd_elf_strtab_finalize (dynstr); - size = _bfd_elf_strtab_size (dynstr); - - /* Update all .dynamic entries referencing .dynstr strings. */ - sdyn = bfd_get_section_by_name (dynobj, ".dynamic"); - BFD_ASSERT (sdyn != NULL); - - dyncon = (Elf_External_Dyn *) sdyn->contents; - dynconend = (Elf_External_Dyn *) (sdyn->contents + - sdyn->_raw_size); - for (; dyncon < dynconend; dyncon++) - { - Elf_Internal_Dyn dyn; - - elf_swap_dyn_in (dynobj, dyncon, & dyn); - switch (dyn.d_tag) - { - case DT_STRSZ: - dyn.d_un.d_val = size; - elf_swap_dyn_out (dynobj, & dyn, dyncon); - break; - case DT_NEEDED: - case DT_SONAME: - case DT_RPATH: - case DT_RUNPATH: - case DT_FILTER: - case DT_AUXILIARY: - dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val); - elf_swap_dyn_out (dynobj, & dyn, dyncon); - break; - default: - break; - } - } - - /* Now update local dynamic symbols. */ - for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next) - entry->isym.st_name = _bfd_elf_strtab_offset (dynstr, - entry->isym.st_name); - - /* And the rest of dynamic symbols. */ - elf_link_hash_traverse (elf_hash_table (info), - elf_adjust_dynstr_offsets, dynstr); - - /* Adjust version definitions. */ - if (elf_tdata (output_bfd)->cverdefs) - { - asection *s; - bfd_byte *p; - bfd_size_type i; - Elf_Internal_Verdef def; - Elf_Internal_Verdaux defaux; - - s = bfd_get_section_by_name (dynobj, ".gnu.version_d"); - p = (bfd_byte *) s->contents; - do - { - _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p, - &def); - p += sizeof (Elf_External_Verdef); - for (i = 0; i < def.vd_cnt; ++i) - { - _bfd_elf_swap_verdaux_in (output_bfd, - (Elf_External_Verdaux *) p, &defaux); - defaux.vda_name = _bfd_elf_strtab_offset (dynstr, - defaux.vda_name); - _bfd_elf_swap_verdaux_out (output_bfd, - &defaux, (Elf_External_Verdaux *) p); - p += sizeof (Elf_External_Verdaux); - } - } - while (def.vd_next); - } - - /* Adjust version references. */ - if (elf_tdata (output_bfd)->verref) - { - asection *s; - bfd_byte *p; - bfd_size_type i; - Elf_Internal_Verneed need; - Elf_Internal_Vernaux needaux; - - s = bfd_get_section_by_name (dynobj, ".gnu.version_r"); - p = (bfd_byte *) s->contents; - do - { - _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p, - &need); - need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file); - _bfd_elf_swap_verneed_out (output_bfd, &need, - (Elf_External_Verneed *) p); - p += sizeof (Elf_External_Verneed); - for (i = 0; i < need.vn_cnt; ++i) - { - _bfd_elf_swap_vernaux_in (output_bfd, - (Elf_External_Vernaux *) p, &needaux); - needaux.vna_name = _bfd_elf_strtab_offset (dynstr, - needaux.vna_name); - _bfd_elf_swap_vernaux_out (output_bfd, - &needaux, - (Elf_External_Vernaux *) p); - p += sizeof (Elf_External_Vernaux); - } - } - while (need.vn_next); - } - - return true; -} - -/* Fix up the flags for a symbol. This handles various cases which - can only be fixed after all the input files are seen. This is - currently called by both adjust_dynamic_symbol and - assign_sym_version, which is unnecessary but perhaps more robust in - the face of future changes. */ - -static boolean -elf_fix_symbol_flags (h, eif) - struct elf_link_hash_entry *h; - struct elf_info_failed *eif; -{ - /* If this symbol was mentioned in a non-ELF file, try to set - DEF_REGULAR and REF_REGULAR correctly. This is the only way to - permit a non-ELF file to correctly refer to a symbol defined in - an ELF dynamic object. */ - if ((h->elf_link_hash_flags & ELF_LINK_NON_ELF) != 0) - { - while (h->root.type == bfd_link_hash_indirect) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - if (h->root.type != bfd_link_hash_defined - && h->root.type != bfd_link_hash_defweak) - h->elf_link_hash_flags |= (ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_REF_REGULAR_NONWEAK); - else - { - if (h->root.u.def.section->owner != NULL - && (bfd_get_flavour (h->root.u.def.section->owner) - == bfd_target_elf_flavour)) - h->elf_link_hash_flags |= (ELF_LINK_HASH_REF_REGULAR - | ELF_LINK_HASH_REF_REGULAR_NONWEAK); - else - h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR; - } - - if (h->dynindx == -1 - && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0 - || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)) - { - if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h)) - { - eif->failed = true; - return false; - } - } - } - else - { - /* Unfortunately, ELF_LINK_NON_ELF is only correct if the symbol - was first seen in a non-ELF file. Fortunately, if the symbol - was first seen in an ELF file, we're probably OK unless the - symbol was defined in a non-ELF file. Catch that case here. - FIXME: We're still in trouble if the symbol was first seen in - a dynamic object, and then later in a non-ELF regular object. */ - if ((h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0 - && (h->root.u.def.section->owner != NULL - ? (bfd_get_flavour (h->root.u.def.section->owner) - != bfd_target_elf_flavour) - : (bfd_is_abs_section (h->root.u.def.section) - && (h->elf_link_hash_flags - & ELF_LINK_HASH_DEF_DYNAMIC) == 0))) - h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR; - } - - /* If this is a final link, and the symbol was defined as a common - symbol in a regular object file, and there was no definition in - any dynamic object, then the linker will have allocated space for - the symbol in a common section but the ELF_LINK_HASH_DEF_REGULAR - flag will not have been set. */ - if (h->root.type == bfd_link_hash_defined - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0 - && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0 - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0 - && (h->root.u.def.section->owner->flags & DYNAMIC) == 0) - h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR; - - /* If -Bsymbolic was used (which means to bind references to global - symbols to the definition within the shared object), and this - symbol was defined in a regular object, then it actually doesn't - need a PLT entry, and we can accomplish that by forcing it local. - Likewise, if the symbol has hidden or internal visibility. - FIXME: It might be that we also do not need a PLT for other - non-hidden visibilities, but we would have to tell that to the - backend specifically; we can't just clear PLT-related data here. */ - if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0 - && eif->info->shared - && is_elf_hash_table (eif->info) - && (eif->info->symbolic - || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL - || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN) - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0) - { - struct elf_backend_data *bed; - boolean force_local; - - bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj); - - force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL - || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN); - (*bed->elf_backend_hide_symbol) (eif->info, h, force_local); - } - - /* If this is a weak defined symbol in a dynamic object, and we know - the real definition in the dynamic object, copy interesting flags - over to the real definition. */ - if (h->weakdef != NULL) - { - struct elf_link_hash_entry *weakdef; - - weakdef = h->weakdef; - if (h->root.type == bfd_link_hash_indirect) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - BFD_ASSERT (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak); - BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined - || weakdef->root.type == bfd_link_hash_defweak); - BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC); - - /* If the real definition is defined by a regular object file, - don't do anything special. See the longer description in - elf_adjust_dynamic_symbol, below. */ - if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0) - h->weakdef = NULL; - else - { - struct elf_backend_data *bed; - - bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj); - (*bed->elf_backend_copy_indirect_symbol) (bed, weakdef, h); - } - } - - return true; -} - -/* Make the backend pick a good value for a dynamic symbol. This is - called via elf_link_hash_traverse, and also calls itself - recursively. */ - -static boolean -elf_adjust_dynamic_symbol (h, data) - struct elf_link_hash_entry *h; - PTR data; -{ - struct elf_info_failed *eif = (struct elf_info_failed *) data; - bfd *dynobj; - struct elf_backend_data *bed; - - if (h->root.type == bfd_link_hash_warning) - { - h->plt.offset = (bfd_vma) -1; - h->got.offset = (bfd_vma) -1; - - /* When warning symbols are created, they **replace** the "real" - entry in the hash table, thus we never get to see the real - symbol in a hash traversal. So look at it now. */ - h = (struct elf_link_hash_entry *) h->root.u.i.link; - } - - /* Ignore indirect symbols. These are added by the versioning code. */ - if (h->root.type == bfd_link_hash_indirect) - return true; - - if (! is_elf_hash_table (eif->info)) - return false; - - /* Fix the symbol flags. */ - if (! elf_fix_symbol_flags (h, eif)) - return false; - - /* If this symbol does not require a PLT entry, and it is not - defined by a dynamic object, or is not referenced by a regular - object, ignore it. We do have to handle a weak defined symbol, - even if no regular object refers to it, if we decided to add it - to the dynamic symbol table. FIXME: Do we normally need to worry - about symbols which are defined by one dynamic object and - referenced by another one? */ - if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0 - && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0 - || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0 - || ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0 - && (h->weakdef == NULL || h->weakdef->dynindx == -1)))) - { - h->plt.offset = (bfd_vma) -1; - return true; - } - - /* If we've already adjusted this symbol, don't do it again. This - can happen via a recursive call. */ - if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0) - return true; - - /* Don't look at this symbol again. Note that we must set this - after checking the above conditions, because we may look at a - symbol once, decide not to do anything, and then get called - recursively later after REF_REGULAR is set below. */ - h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED; - - /* If this is a weak definition, and we know a real definition, and - the real symbol is not itself defined by a regular object file, - then get a good value for the real definition. We handle the - real symbol first, for the convenience of the backend routine. - - Note that there is a confusing case here. If the real definition - is defined by a regular object file, we don't get the real symbol - from the dynamic object, but we do get the weak symbol. If the - processor backend uses a COPY reloc, then if some routine in the - dynamic object changes the real symbol, we will not see that - change in the corresponding weak symbol. This is the way other - ELF linkers work as well, and seems to be a result of the shared - library model. - - I will clarify this issue. Most SVR4 shared libraries define the - variable _timezone and define timezone as a weak synonym. The - tzset call changes _timezone. If you write - extern int timezone; - int _timezone = 5; - int main () { tzset (); printf ("%d %d\n", timezone, _timezone); } - you might expect that, since timezone is a synonym for _timezone, - the same number will print both times. However, if the processor - backend uses a COPY reloc, then actually timezone will be copied - into your process image, and, since you define _timezone - yourself, _timezone will not. Thus timezone and _timezone will - wind up at different memory locations. The tzset call will set - _timezone, leaving timezone unchanged. */ - - if (h->weakdef != NULL) - { - /* If we get to this point, we know there is an implicit - reference by a regular object file via the weak symbol H. - FIXME: Is this really true? What if the traversal finds - H->WEAKDEF before it finds H? */ - h->weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR; - - if (! elf_adjust_dynamic_symbol (h->weakdef, (PTR) eif)) - return false; - } - - /* If a symbol has no type and no size and does not require a PLT - entry, then we are probably about to do the wrong thing here: we - are probably going to create a COPY reloc for an empty object. - This case can arise when a shared object is built with assembly - code, and the assembly code fails to set the symbol type. */ - if (h->size == 0 - && h->type == STT_NOTYPE - && (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0) - (*_bfd_error_handler) - (_("warning: type and size of dynamic symbol `%s' are not defined"), - h->root.root.string); - - dynobj = elf_hash_table (eif->info)->dynobj; - bed = get_elf_backend_data (dynobj); - if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h)) - { - eif->failed = true; - return false; - } - - return true; -} - -/* This routine is used to export all defined symbols into the dynamic - symbol table. It is called via elf_link_hash_traverse. */ - -static boolean -elf_export_symbol (h, data) - struct elf_link_hash_entry *h; - PTR data; -{ - struct elf_info_failed *eif = (struct elf_info_failed *) data; - - /* Ignore indirect symbols. These are added by the versioning code. */ - if (h->root.type == bfd_link_hash_indirect) - return true; - - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - if (h->dynindx == -1 - && (h->elf_link_hash_flags - & (ELF_LINK_HASH_DEF_REGULAR | ELF_LINK_HASH_REF_REGULAR)) != 0) - { - struct bfd_elf_version_tree *t; - struct bfd_elf_version_expr *d; - - for (t = eif->verdefs; t != NULL; t = t->next) - { - if (t->globals != NULL) - { - for (d = t->globals; d != NULL; d = d->next) - { - if ((*d->match) (d, h->root.root.string)) - goto doit; - } - } - - if (t->locals != NULL) - { - for (d = t->locals ; d != NULL; d = d->next) - { - if ((*d->match) (d, h->root.root.string)) - return true; - } - } - } - - if (!eif->verdefs) - { - doit: - if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h)) - { - eif->failed = true; - return false; - } - } - } - - return true; -} - -/* Look through the symbols which are defined in other shared - libraries and referenced here. Update the list of version - dependencies. This will be put into the .gnu.version_r section. - This function is called via elf_link_hash_traverse. */ - -static boolean -elf_link_find_version_dependencies (h, data) - struct elf_link_hash_entry *h; - PTR data; -{ - struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data; - Elf_Internal_Verneed *t; - Elf_Internal_Vernaux *a; - bfd_size_type amt; - - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - /* We only care about symbols defined in shared objects with version - information. */ - if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0 - || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0 - || h->dynindx == -1 - || h->verinfo.verdef == NULL) - return true; - - /* See if we already know about this version. */ - for (t = elf_tdata (rinfo->output_bfd)->verref; t != NULL; t = t->vn_nextref) - { - if (t->vn_bfd != h->verinfo.verdef->vd_bfd) - continue; - - for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr) - if (a->vna_nodename == h->verinfo.verdef->vd_nodename) - return true; - - break; - } - - /* This is a new version. Add it to tree we are building. */ - - if (t == NULL) - { - amt = sizeof *t; - t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->output_bfd, amt); - if (t == NULL) - { - rinfo->failed = true; - return false; - } - - t->vn_bfd = h->verinfo.verdef->vd_bfd; - t->vn_nextref = elf_tdata (rinfo->output_bfd)->verref; - elf_tdata (rinfo->output_bfd)->verref = t; - } - - amt = sizeof *a; - a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->output_bfd, amt); - - /* Note that we are copying a string pointer here, and testing it - above. If bfd_elf_string_from_elf_section is ever changed to - discard the string data when low in memory, this will have to be - fixed. */ - a->vna_nodename = h->verinfo.verdef->vd_nodename; - - a->vna_flags = h->verinfo.verdef->vd_flags; - a->vna_nextptr = t->vn_auxptr; - - h->verinfo.verdef->vd_exp_refno = rinfo->vers; - ++rinfo->vers; - - a->vna_other = h->verinfo.verdef->vd_exp_refno + 1; - - t->vn_auxptr = a; - - return true; -} - -/* Figure out appropriate versions for all the symbols. We may not - have the version number script until we have read all of the input - files, so until that point we don't know which symbols should be - local. This function is called via elf_link_hash_traverse. */ - -static boolean -elf_link_assign_sym_version (h, data) - struct elf_link_hash_entry *h; - PTR data; -{ - struct elf_assign_sym_version_info *sinfo; - struct bfd_link_info *info; - struct elf_backend_data *bed; - struct elf_info_failed eif; - char *p; - bfd_size_type amt; - - sinfo = (struct elf_assign_sym_version_info *) data; - info = sinfo->info; - - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - /* Fix the symbol flags. */ - eif.failed = false; - eif.info = info; - if (! elf_fix_symbol_flags (h, &eif)) - { - if (eif.failed) - sinfo->failed = true; - return false; - } - - /* We only need version numbers for symbols defined in regular - objects. */ - if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0) - return true; - - bed = get_elf_backend_data (sinfo->output_bfd); - p = strchr (h->root.root.string, ELF_VER_CHR); - if (p != NULL && h->verinfo.vertree == NULL) - { - struct bfd_elf_version_tree *t; - boolean hidden; - - hidden = true; - - /* There are two consecutive ELF_VER_CHR characters if this is - not a hidden symbol. */ - ++p; - if (*p == ELF_VER_CHR) - { - hidden = false; - ++p; - } - - /* If there is no version string, we can just return out. */ - if (*p == '\0') - { - if (hidden) - h->elf_link_hash_flags |= ELF_LINK_HIDDEN; - return true; - } - - /* Look for the version. If we find it, it is no longer weak. */ - for (t = sinfo->verdefs; t != NULL; t = t->next) - { - if (strcmp (t->name, p) == 0) - { - size_t len; - char *alc; - struct bfd_elf_version_expr *d; - - len = p - h->root.root.string; - alc = bfd_malloc ((bfd_size_type) len); - if (alc == NULL) - return false; - memcpy (alc, h->root.root.string, len - 1); - alc[len - 1] = '\0'; - if (alc[len - 2] == ELF_VER_CHR) - alc[len - 2] = '\0'; - - h->verinfo.vertree = t; - t->used = true; - d = NULL; - - if (t->globals != NULL) - { - for (d = t->globals; d != NULL; d = d->next) - if ((*d->match) (d, alc)) - break; - } - - /* See if there is anything to force this symbol to - local scope. */ - if (d == NULL && t->locals != NULL) - { - for (d = t->locals; d != NULL; d = d->next) - { - if ((*d->match) (d, alc)) - { - if (h->dynindx != -1 - && info->shared - && ! info->export_dynamic) - { - (*bed->elf_backend_hide_symbol) (info, h, true); - } - - break; - } - } - } - - free (alc); - break; - } - } - - /* If we are building an application, we need to create a - version node for this version. */ - if (t == NULL && ! info->shared) - { - struct bfd_elf_version_tree **pp; - int version_index; - - /* If we aren't going to export this symbol, we don't need - to worry about it. */ - if (h->dynindx == -1) - return true; - - amt = sizeof *t; - t = ((struct bfd_elf_version_tree *) - bfd_alloc (sinfo->output_bfd, amt)); - if (t == NULL) - { - sinfo->failed = true; - return false; - } - - t->next = NULL; - t->name = p; - t->globals = NULL; - t->locals = NULL; - t->deps = NULL; - t->name_indx = (unsigned int) -1; - t->used = true; - - version_index = 1; - /* Don't count anonymous version tag. */ - if (sinfo->verdefs != NULL && sinfo->verdefs->vernum == 0) - version_index = 0; - for (pp = &sinfo->verdefs; *pp != NULL; pp = &(*pp)->next) - ++version_index; - t->vernum = version_index; - - *pp = t; - - h->verinfo.vertree = t; - } - else if (t == NULL) - { - /* We could not find the version for a symbol when - generating a shared archive. Return an error. */ - (*_bfd_error_handler) - (_("%s: undefined versioned symbol name %s"), - bfd_get_filename (sinfo->output_bfd), h->root.root.string); - bfd_set_error (bfd_error_bad_value); - sinfo->failed = true; - return false; - } - - if (hidden) - h->elf_link_hash_flags |= ELF_LINK_HIDDEN; - } - - /* If we don't have a version for this symbol, see if we can find - something. */ - if (h->verinfo.vertree == NULL && sinfo->verdefs != NULL) - { - struct bfd_elf_version_tree *t; - struct bfd_elf_version_tree *local_ver; - struct bfd_elf_version_expr *d; - - /* See if can find what version this symbol is in. If the - symbol is supposed to be local, then don't actually register - it. */ - local_ver = NULL; - for (t = sinfo->verdefs; t != NULL; t = t->next) - { - if (t->globals != NULL) - { - boolean matched; - - matched = false; - for (d = t->globals; d != NULL; d = d->next) - { - if ((*d->match) (d, h->root.root.string)) - { - if (d->symver) - matched = true; - else - { - /* There is a version without definition. Make - the symbol the default definition for this - version. */ - h->verinfo.vertree = t; - local_ver = NULL; - d->script = 1; - break; - } - } - } - - if (d != NULL) - break; - else if (matched) - /* There is no undefined version for this symbol. Hide the - default one. */ - (*bed->elf_backend_hide_symbol) (info, h, true); - } - - if (t->locals != NULL) - { - for (d = t->locals; d != NULL; d = d->next) - { - /* If the match is "*", keep looking for a more - explicit, perhaps even global, match. */ - if (d->pattern[0] == '*' && d->pattern[1] == '\0') - local_ver = t; - else if ((*d->match) (d, h->root.root.string)) - { - local_ver = t; - break; - } - } - - if (d != NULL) - break; - } - } - - if (local_ver != NULL) - { - h->verinfo.vertree = local_ver; - if (h->dynindx != -1 - && info->shared - && ! info->export_dynamic) - { - (*bed->elf_backend_hide_symbol) (info, h, true); - } - } - } - - return true; -} - -/* Final phase of ELF linker. */ - -/* A structure we use to avoid passing large numbers of arguments. */ - -struct elf_final_link_info -{ - /* General link information. */ - struct bfd_link_info *info; - /* Output BFD. */ - bfd *output_bfd; - /* Symbol string table. */ - struct bfd_strtab_hash *symstrtab; - /* .dynsym section. */ - asection *dynsym_sec; - /* .hash section. */ - asection *hash_sec; - /* symbol version section (.gnu.version). */ - asection *symver_sec; - /* first SHF_TLS section (if any). */ - asection *first_tls_sec; - /* Buffer large enough to hold contents of any section. */ - bfd_byte *contents; - /* Buffer large enough to hold external relocs of any section. */ - PTR external_relocs; - /* Buffer large enough to hold internal relocs of any section. */ - Elf_Internal_Rela *internal_relocs; - /* Buffer large enough to hold external local symbols of any input - BFD. */ - Elf_External_Sym *external_syms; - /* And a buffer for symbol section indices. */ - Elf_External_Sym_Shndx *locsym_shndx; - /* Buffer large enough to hold internal local symbols of any input - BFD. */ - Elf_Internal_Sym *internal_syms; - /* Array large enough to hold a symbol index for each local symbol - of any input BFD. */ - long *indices; - /* Array large enough to hold a section pointer for each local - symbol of any input BFD. */ - asection **sections; - /* Buffer to hold swapped out symbols. */ - Elf_External_Sym *symbuf; - /* And one for symbol section indices. */ - Elf_External_Sym_Shndx *symshndxbuf; - /* Number of swapped out symbols in buffer. */ - size_t symbuf_count; - /* Number of symbols which fit in symbuf. */ - size_t symbuf_size; -}; - -static boolean elf_link_output_sym - PARAMS ((struct elf_final_link_info *, const char *, - Elf_Internal_Sym *, asection *)); -static boolean elf_link_flush_output_syms - PARAMS ((struct elf_final_link_info *)); -static boolean elf_link_output_extsym - PARAMS ((struct elf_link_hash_entry *, PTR)); -static boolean elf_link_sec_merge_syms - PARAMS ((struct elf_link_hash_entry *, PTR)); -static boolean elf_link_check_versioned_symbol - PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *)); -static boolean elf_link_input_bfd - PARAMS ((struct elf_final_link_info *, bfd *)); -static boolean elf_reloc_link_order - PARAMS ((bfd *, struct bfd_link_info *, asection *, - struct bfd_link_order *)); - -/* This struct is used to pass information to elf_link_output_extsym. */ - -struct elf_outext_info -{ - boolean failed; - boolean localsyms; - struct elf_final_link_info *finfo; -}; - -/* Compute the size of, and allocate space for, REL_HDR which is the - section header for a section containing relocations for O. */ - -static boolean -elf_link_size_reloc_section (abfd, rel_hdr, o) - bfd *abfd; - Elf_Internal_Shdr *rel_hdr; - asection *o; -{ - bfd_size_type reloc_count; - bfd_size_type num_rel_hashes; - - /* Figure out how many relocations there will be. */ - if (rel_hdr == &elf_section_data (o)->rel_hdr) - reloc_count = elf_section_data (o)->rel_count; - else - reloc_count = elf_section_data (o)->rel_count2; - - num_rel_hashes = o->reloc_count; - if (num_rel_hashes < reloc_count) - num_rel_hashes = reloc_count; - - /* That allows us to calculate the size of the section. */ - rel_hdr->sh_size = rel_hdr->sh_entsize * reloc_count; - - /* The contents field must last into write_object_contents, so we - allocate it with bfd_alloc rather than malloc. Also since we - cannot be sure that the contents will actually be filled in, - we zero the allocated space. */ - rel_hdr->contents = (PTR) bfd_zalloc (abfd, rel_hdr->sh_size); - if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0) - return false; - - /* We only allocate one set of hash entries, so we only do it the - first time we are called. */ - if (elf_section_data (o)->rel_hashes == NULL - && num_rel_hashes) - { - struct elf_link_hash_entry **p; - - p = ((struct elf_link_hash_entry **) - bfd_zmalloc (num_rel_hashes - * sizeof (struct elf_link_hash_entry *))); - if (p == NULL) - return false; - - elf_section_data (o)->rel_hashes = p; - } - - return true; -} - -/* When performing a relocateable link, the input relocations are - preserved. But, if they reference global symbols, the indices - referenced must be updated. Update all the relocations in - REL_HDR (there are COUNT of them), using the data in REL_HASH. */ - -static void -elf_link_adjust_relocs (abfd, rel_hdr, count, rel_hash) - bfd *abfd; - Elf_Internal_Shdr *rel_hdr; - unsigned int count; - struct elf_link_hash_entry **rel_hash; -{ - unsigned int i; - struct elf_backend_data *bed = get_elf_backend_data (abfd); - Elf_Internal_Rel *irel; - Elf_Internal_Rela *irela; - bfd_size_type amt = sizeof (Elf_Internal_Rel) * bed->s->int_rels_per_ext_rel; - - irel = (Elf_Internal_Rel *) bfd_zmalloc (amt); - if (irel == NULL) - { - (*_bfd_error_handler) (_("Error: out of memory")); - abort (); - } - - amt = sizeof (Elf_Internal_Rela) * bed->s->int_rels_per_ext_rel; - irela = (Elf_Internal_Rela *) bfd_zmalloc (amt); - if (irela == NULL) - { - (*_bfd_error_handler) (_("Error: out of memory")); - abort (); - } - - for (i = 0; i < count; i++, rel_hash++) - { - if (*rel_hash == NULL) - continue; - - BFD_ASSERT ((*rel_hash)->indx >= 0); - - if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel)) - { - Elf_External_Rel *erel; - unsigned int j; - - erel = (Elf_External_Rel *) rel_hdr->contents + i; - if (bed->s->swap_reloc_in) - (*bed->s->swap_reloc_in) (abfd, (bfd_byte *) erel, irel); - else - elf_swap_reloc_in (abfd, erel, irel); - - for (j = 0; j < bed->s->int_rels_per_ext_rel; j++) - irel[j].r_info = ELF_R_INFO ((*rel_hash)->indx, - ELF_R_TYPE (irel[j].r_info)); - - if (bed->s->swap_reloc_out) - (*bed->s->swap_reloc_out) (abfd, irel, (bfd_byte *) erel); - else - elf_swap_reloc_out (abfd, irel, erel); - } - else - { - Elf_External_Rela *erela; - unsigned int j; - - BFD_ASSERT (rel_hdr->sh_entsize - == sizeof (Elf_External_Rela)); - - erela = (Elf_External_Rela *) rel_hdr->contents + i; - if (bed->s->swap_reloca_in) - (*bed->s->swap_reloca_in) (abfd, (bfd_byte *) erela, irela); - else - elf_swap_reloca_in (abfd, erela, irela); - - for (j = 0; j < bed->s->int_rels_per_ext_rel; j++) - irela[j].r_info = ELF_R_INFO ((*rel_hash)->indx, - ELF_R_TYPE (irela[j].r_info)); - - if (bed->s->swap_reloca_out) - (*bed->s->swap_reloca_out) (abfd, irela, (bfd_byte *) erela); - else - elf_swap_reloca_out (abfd, irela, erela); - } - } - - free (irel); - free (irela); -} - -struct elf_link_sort_rela -{ - bfd_vma offset; - enum elf_reloc_type_class type; - union - { - Elf_Internal_Rel rel; - Elf_Internal_Rela rela; - } u; -}; - -static int -elf_link_sort_cmp1 (A, B) - const PTR A; - const PTR B; -{ - struct elf_link_sort_rela *a = (struct elf_link_sort_rela *) A; - struct elf_link_sort_rela *b = (struct elf_link_sort_rela *) B; - int relativea, relativeb; - - relativea = a->type == reloc_class_relative; - relativeb = b->type == reloc_class_relative; - - if (relativea < relativeb) - return 1; - if (relativea > relativeb) - return -1; - if (ELF_R_SYM (a->u.rel.r_info) < ELF_R_SYM (b->u.rel.r_info)) - return -1; - if (ELF_R_SYM (a->u.rel.r_info) > ELF_R_SYM (b->u.rel.r_info)) - return 1; - if (a->u.rel.r_offset < b->u.rel.r_offset) - return -1; - if (a->u.rel.r_offset > b->u.rel.r_offset) - return 1; - return 0; -} - -static int -elf_link_sort_cmp2 (A, B) - const PTR A; - const PTR B; -{ - struct elf_link_sort_rela *a = (struct elf_link_sort_rela *) A; - struct elf_link_sort_rela *b = (struct elf_link_sort_rela *) B; - int copya, copyb; - - if (a->offset < b->offset) - return -1; - if (a->offset > b->offset) - return 1; - copya = (a->type == reloc_class_copy) * 2 + (a->type == reloc_class_plt); - copyb = (b->type == reloc_class_copy) * 2 + (b->type == reloc_class_plt); - if (copya < copyb) - return -1; - if (copya > copyb) - return 1; - if (a->u.rel.r_offset < b->u.rel.r_offset) - return -1; - if (a->u.rel.r_offset > b->u.rel.r_offset) - return 1; - return 0; -} - -static size_t -elf_link_sort_relocs (abfd, info, psec) - bfd *abfd; - struct bfd_link_info *info; - asection **psec; -{ - bfd *dynobj = elf_hash_table (info)->dynobj; - asection *reldyn, *o; - boolean rel = false; - bfd_size_type count, size; - size_t i, j, ret; - struct elf_link_sort_rela *rela; - struct elf_backend_data *bed = get_elf_backend_data (abfd); - - reldyn = bfd_get_section_by_name (abfd, ".rela.dyn"); - if (reldyn == NULL || reldyn->_raw_size == 0) - { - reldyn = bfd_get_section_by_name (abfd, ".rel.dyn"); - if (reldyn == NULL || reldyn->_raw_size == 0) - return 0; - rel = true; - count = reldyn->_raw_size / sizeof (Elf_External_Rel); - } - else - count = reldyn->_raw_size / sizeof (Elf_External_Rela); - - size = 0; - for (o = dynobj->sections; o != NULL; o = o->next) - if ((o->flags & (SEC_HAS_CONTENTS|SEC_LINKER_CREATED)) - == (SEC_HAS_CONTENTS|SEC_LINKER_CREATED) - && o->output_section == reldyn) - size += o->_raw_size; - - if (size != reldyn->_raw_size) - return 0; - - rela = (struct elf_link_sort_rela *) bfd_zmalloc (sizeof (*rela) * count); - if (rela == NULL) - { - (*info->callbacks->warning) - (info, _("Not enough memory to sort relocations"), 0, abfd, 0, - (bfd_vma) 0); - return 0; - } - - for (o = dynobj->sections; o != NULL; o = o->next) - if ((o->flags & (SEC_HAS_CONTENTS|SEC_LINKER_CREATED)) - == (SEC_HAS_CONTENTS|SEC_LINKER_CREATED) - && o->output_section == reldyn) - { - if (rel) - { - Elf_External_Rel *erel, *erelend; - struct elf_link_sort_rela *s; - - erel = (Elf_External_Rel *) o->contents; - erelend = (Elf_External_Rel *) (o->contents + o->_raw_size); - s = rela + o->output_offset / sizeof (Elf_External_Rel); - for (; erel < erelend; erel++, s++) - { - if (bed->s->swap_reloc_in) - (*bed->s->swap_reloc_in) (abfd, (bfd_byte *) erel, &s->u.rel); - else - elf_swap_reloc_in (abfd, erel, &s->u.rel); - - s->type = (*bed->elf_backend_reloc_type_class) (&s->u.rela); - } - } - else - { - Elf_External_Rela *erela, *erelaend; - struct elf_link_sort_rela *s; - - erela = (Elf_External_Rela *) o->contents; - erelaend = (Elf_External_Rela *) (o->contents + o->_raw_size); - s = rela + o->output_offset / sizeof (Elf_External_Rela); - for (; erela < erelaend; erela++, s++) - { - if (bed->s->swap_reloca_in) - (*bed->s->swap_reloca_in) (dynobj, (bfd_byte *) erela, - &s->u.rela); - else - elf_swap_reloca_in (dynobj, erela, &s->u.rela); - - s->type = (*bed->elf_backend_reloc_type_class) (&s->u.rela); - } - } - } - - qsort (rela, (size_t) count, sizeof (*rela), elf_link_sort_cmp1); - for (ret = 0; ret < count && rela[ret].type == reloc_class_relative; ret++) - ; - for (i = ret, j = ret; i < count; i++) - { - if (ELF_R_SYM (rela[i].u.rel.r_info) != ELF_R_SYM (rela[j].u.rel.r_info)) - j = i; - rela[i].offset = rela[j].u.rel.r_offset; - } - qsort (rela + ret, (size_t) count - ret, sizeof (*rela), elf_link_sort_cmp2); - - for (o = dynobj->sections; o != NULL; o = o->next) - if ((o->flags & (SEC_HAS_CONTENTS|SEC_LINKER_CREATED)) - == (SEC_HAS_CONTENTS|SEC_LINKER_CREATED) - && o->output_section == reldyn) - { - if (rel) - { - Elf_External_Rel *erel, *erelend; - struct elf_link_sort_rela *s; - - erel = (Elf_External_Rel *) o->contents; - erelend = (Elf_External_Rel *) (o->contents + o->_raw_size); - s = rela + o->output_offset / sizeof (Elf_External_Rel); - for (; erel < erelend; erel++, s++) - { - if (bed->s->swap_reloc_out) - (*bed->s->swap_reloc_out) (abfd, &s->u.rel, - (bfd_byte *) erel); - else - elf_swap_reloc_out (abfd, &s->u.rel, erel); - } - } - else - { - Elf_External_Rela *erela, *erelaend; - struct elf_link_sort_rela *s; - - erela = (Elf_External_Rela *) o->contents; - erelaend = (Elf_External_Rela *) (o->contents + o->_raw_size); - s = rela + o->output_offset / sizeof (Elf_External_Rela); - for (; erela < erelaend; erela++, s++) - { - if (bed->s->swap_reloca_out) - (*bed->s->swap_reloca_out) (dynobj, &s->u.rela, - (bfd_byte *) erela); - else - elf_swap_reloca_out (dynobj, &s->u.rela, erela); - } - } - } - - free (rela); - *psec = reldyn; - return ret; -} - -/* Do the final step of an ELF link. */ - -boolean -elf_bfd_final_link (abfd, info) - bfd *abfd; - struct bfd_link_info *info; -{ - boolean dynamic; - boolean emit_relocs; - bfd *dynobj; - struct elf_final_link_info finfo; - register asection *o; - register struct bfd_link_order *p; - register bfd *sub; - bfd_size_type max_contents_size; - bfd_size_type max_external_reloc_size; - bfd_size_type max_internal_reloc_count; - bfd_size_type max_sym_count; - bfd_size_type max_sym_shndx_count; - file_ptr off; - Elf_Internal_Sym elfsym; - unsigned int i; - Elf_Internal_Shdr *symtab_hdr; - Elf_Internal_Shdr *symstrtab_hdr; - struct elf_backend_data *bed = get_elf_backend_data (abfd); - struct elf_outext_info eoinfo; - boolean merged; - size_t relativecount = 0; - asection *reldyn = 0; - bfd_size_type amt; - - if (! is_elf_hash_table (info)) - return false; - - if (info->shared) - abfd->flags |= DYNAMIC; - - dynamic = elf_hash_table (info)->dynamic_sections_created; - dynobj = elf_hash_table (info)->dynobj; - - emit_relocs = (info->relocateable - || info->emitrelocations - || bed->elf_backend_emit_relocs); - - finfo.info = info; - finfo.output_bfd = abfd; - finfo.symstrtab = elf_stringtab_init (); - if (finfo.symstrtab == NULL) - return false; - - if (! dynamic) - { - finfo.dynsym_sec = NULL; - finfo.hash_sec = NULL; - finfo.symver_sec = NULL; - } - else - { - finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym"); - finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash"); - BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL); - finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version"); - /* Note that it is OK if symver_sec is NULL. */ - } - - finfo.contents = NULL; - finfo.external_relocs = NULL; - finfo.internal_relocs = NULL; - finfo.external_syms = NULL; - finfo.locsym_shndx = NULL; - finfo.internal_syms = NULL; - finfo.indices = NULL; - finfo.sections = NULL; - finfo.symbuf = NULL; - finfo.symshndxbuf = NULL; - finfo.symbuf_count = 0; - finfo.first_tls_sec = NULL; - for (o = abfd->sections; o != (asection *) NULL; o = o->next) - if ((o->flags & SEC_THREAD_LOCAL) != 0 - && (o->flags & SEC_LOAD) != 0) - { - finfo.first_tls_sec = o; - break; - } - - /* Count up the number of relocations we will output for each output - section, so that we know the sizes of the reloc sections. We - also figure out some maximum sizes. */ - max_contents_size = 0; - max_external_reloc_size = 0; - max_internal_reloc_count = 0; - max_sym_count = 0; - max_sym_shndx_count = 0; - merged = false; - for (o = abfd->sections; o != (asection *) NULL; o = o->next) - { - o->reloc_count = 0; - - for (p = o->link_order_head; p != NULL; p = p->next) - { - if (p->type == bfd_section_reloc_link_order - || p->type == bfd_symbol_reloc_link_order) - ++o->reloc_count; - else if (p->type == bfd_indirect_link_order) - { - asection *sec; - - sec = p->u.indirect.section; - - /* Mark all sections which are to be included in the - link. This will normally be every section. We need - to do this so that we can identify any sections which - the linker has decided to not include. */ - sec->linker_mark = true; - - if (sec->flags & SEC_MERGE) - merged = true; - - if (info->relocateable || info->emitrelocations) - o->reloc_count += sec->reloc_count; - else if (bed->elf_backend_count_relocs) - { - Elf_Internal_Rela * relocs; - - relocs = (NAME(_bfd_elf,link_read_relocs) - (abfd, sec, (PTR) NULL, - (Elf_Internal_Rela *) NULL, info->keep_memory)); - - o->reloc_count - += (*bed->elf_backend_count_relocs) (sec, relocs); - - if (elf_section_data (o)->relocs != relocs) - free (relocs); - } - - if (sec->_raw_size > max_contents_size) - max_contents_size = sec->_raw_size; - if (sec->_cooked_size > max_contents_size) - max_contents_size = sec->_cooked_size; - - /* We are interested in just local symbols, not all - symbols. */ - if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour - && (sec->owner->flags & DYNAMIC) == 0) - { - size_t sym_count; - - if (elf_bad_symtab (sec->owner)) - sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size - / sizeof (Elf_External_Sym)); - else - sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info; - - if (sym_count > max_sym_count) - max_sym_count = sym_count; - - if (sym_count > max_sym_shndx_count - && elf_symtab_shndx (sec->owner) != 0) - max_sym_shndx_count = sym_count; - - if ((sec->flags & SEC_RELOC) != 0) - { - size_t ext_size; - - ext_size = elf_section_data (sec)->rel_hdr.sh_size; - if (ext_size > max_external_reloc_size) - max_external_reloc_size = ext_size; - if (sec->reloc_count > max_internal_reloc_count) - max_internal_reloc_count = sec->reloc_count; - } - } - } - } - - if (o->reloc_count > 0) - o->flags |= SEC_RELOC; - else - { - /* Explicitly clear the SEC_RELOC flag. The linker tends to - set it (this is probably a bug) and if it is set - assign_section_numbers will create a reloc section. */ - o->flags &=~ SEC_RELOC; - } - - /* If the SEC_ALLOC flag is not set, force the section VMA to - zero. This is done in elf_fake_sections as well, but forcing - the VMA to 0 here will ensure that relocs against these - sections are handled correctly. */ - if ((o->flags & SEC_ALLOC) == 0 - && ! o->user_set_vma) - o->vma = 0; - } - - if (! info->relocateable && merged) - elf_link_hash_traverse (elf_hash_table (info), - elf_link_sec_merge_syms, (PTR) abfd); - - /* Figure out the file positions for everything but the symbol table - and the relocs. We set symcount to force assign_section_numbers - to create a symbol table. */ - bfd_get_symcount (abfd) = info->strip == strip_all ? 0 : 1; - BFD_ASSERT (! abfd->output_has_begun); - if (! _bfd_elf_compute_section_file_positions (abfd, info)) - goto error_return; - - /* Figure out how many relocations we will have in each section. - Just using RELOC_COUNT isn't good enough since that doesn't - maintain a separate value for REL vs. RELA relocations. */ - if (emit_relocs) - for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) - for (o = sub->sections; o != NULL; o = o->next) - { - asection *output_section; - - if (! o->linker_mark) - { - /* This section was omitted from the link. */ - continue; - } - - output_section = o->output_section; - - if (output_section != NULL - && (o->flags & SEC_RELOC) != 0) - { - struct bfd_elf_section_data *esdi - = elf_section_data (o); - struct bfd_elf_section_data *esdo - = elf_section_data (output_section); - unsigned int *rel_count; - unsigned int *rel_count2; - bfd_size_type entsize; - bfd_size_type entsize2; - - /* We must be careful to add the relocations from the - input section to the right output count. */ - entsize = esdi->rel_hdr.sh_entsize; - entsize2 = esdi->rel_hdr2 ? esdi->rel_hdr2->sh_entsize : 0; - BFD_ASSERT ((entsize == sizeof (Elf_External_Rel) - || entsize == sizeof (Elf_External_Rela)) - && entsize2 != entsize - && (entsize2 == 0 - || entsize2 == sizeof (Elf_External_Rel) - || entsize2 == sizeof (Elf_External_Rela))); - if (entsize == esdo->rel_hdr.sh_entsize) - { - rel_count = &esdo->rel_count; - rel_count2 = &esdo->rel_count2; - } - else - { - rel_count = &esdo->rel_count2; - rel_count2 = &esdo->rel_count; - } - - *rel_count += NUM_SHDR_ENTRIES (& esdi->rel_hdr); - if (esdi->rel_hdr2) - *rel_count2 += NUM_SHDR_ENTRIES (esdi->rel_hdr2); - output_section->flags |= SEC_RELOC; - } - } - - /* That created the reloc sections. Set their sizes, and assign - them file positions, and allocate some buffers. */ - for (o = abfd->sections; o != NULL; o = o->next) - { - if ((o->flags & SEC_RELOC) != 0) - { - if (!elf_link_size_reloc_section (abfd, - &elf_section_data (o)->rel_hdr, - o)) - goto error_return; - - if (elf_section_data (o)->rel_hdr2 - && !elf_link_size_reloc_section (abfd, - elf_section_data (o)->rel_hdr2, - o)) - goto error_return; - } - - /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them - to count upwards while actually outputting the relocations. */ - elf_section_data (o)->rel_count = 0; - elf_section_data (o)->rel_count2 = 0; - } - - _bfd_elf_assign_file_positions_for_relocs (abfd); - - /* We have now assigned file positions for all the sections except - .symtab and .strtab. We start the .symtab section at the current - file position, and write directly to it. We build the .strtab - section in memory. */ - bfd_get_symcount (abfd) = 0; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; - /* sh_name is set in prep_headers. */ - symtab_hdr->sh_type = SHT_SYMTAB; - symtab_hdr->sh_flags = 0; - symtab_hdr->sh_addr = 0; - symtab_hdr->sh_size = 0; - symtab_hdr->sh_entsize = sizeof (Elf_External_Sym); - /* sh_link is set in assign_section_numbers. */ - /* sh_info is set below. */ - /* sh_offset is set just below. */ - symtab_hdr->sh_addralign = bed->s->file_align; - - off = elf_tdata (abfd)->next_file_pos; - off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, true); - - /* Note that at this point elf_tdata (abfd)->next_file_pos is - incorrect. We do not yet know the size of the .symtab section. - We correct next_file_pos below, after we do know the size. */ - - /* Allocate a buffer to hold swapped out symbols. This is to avoid - continuously seeking to the right position in the file. */ - if (! info->keep_memory || max_sym_count < 20) - finfo.symbuf_size = 20; - else - finfo.symbuf_size = max_sym_count; - amt = finfo.symbuf_size; - amt *= sizeof (Elf_External_Sym); - finfo.symbuf = (Elf_External_Sym *) bfd_malloc (amt); - if (finfo.symbuf == NULL) - goto error_return; - if (elf_numsections (abfd) > SHN_LORESERVE) - { - amt = finfo.symbuf_size; - amt *= sizeof (Elf_External_Sym_Shndx); - finfo.symshndxbuf = (Elf_External_Sym_Shndx *) bfd_malloc (amt); - if (finfo.symshndxbuf == NULL) - goto error_return; - } - - /* Start writing out the symbol table. The first symbol is always a - dummy symbol. */ - if (info->strip != strip_all - || emit_relocs) - { - elfsym.st_value = 0; - elfsym.st_size = 0; - elfsym.st_info = 0; - elfsym.st_other = 0; - elfsym.st_shndx = SHN_UNDEF; - if (! elf_link_output_sym (&finfo, (const char *) NULL, - &elfsym, bfd_und_section_ptr)) - goto error_return; - } - -#if 0 - /* Some standard ELF linkers do this, but we don't because it causes - bootstrap comparison failures. */ - /* Output a file symbol for the output file as the second symbol. - We output this even if we are discarding local symbols, although - I'm not sure if this is correct. */ - elfsym.st_value = 0; - elfsym.st_size = 0; - elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE); - elfsym.st_other = 0; - elfsym.st_shndx = SHN_ABS; - if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd), - &elfsym, bfd_abs_section_ptr)) - goto error_return; -#endif - - /* Output a symbol for each section. We output these even if we are - discarding local symbols, since they are used for relocs. These - symbols have no names. We store the index of each one in the - index field of the section, so that we can find it again when - outputting relocs. */ - if (info->strip != strip_all - || emit_relocs) - { - elfsym.st_size = 0; - elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION); - elfsym.st_other = 0; - for (i = 1; i < elf_numsections (abfd); i++) - { - o = section_from_elf_index (abfd, i); - if (o != NULL) - o->target_index = bfd_get_symcount (abfd); - elfsym.st_shndx = i; - if (info->relocateable || o == NULL) - elfsym.st_value = 0; - else - elfsym.st_value = o->vma; - if (! elf_link_output_sym (&finfo, (const char *) NULL, - &elfsym, o)) - goto error_return; - if (i == SHN_LORESERVE) - i += SHN_HIRESERVE + 1 - SHN_LORESERVE; - } - } - - /* Allocate some memory to hold information read in from the input - files. */ - if (max_contents_size != 0) - { - finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size); - if (finfo.contents == NULL) - goto error_return; - } - - if (max_external_reloc_size != 0) - { - finfo.external_relocs = (PTR) bfd_malloc (max_external_reloc_size); - if (finfo.external_relocs == NULL) - goto error_return; - } - - if (max_internal_reloc_count != 0) - { - amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel; - amt *= sizeof (Elf_Internal_Rela); - finfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt); - if (finfo.internal_relocs == NULL) - goto error_return; - } - - if (max_sym_count != 0) - { - amt = max_sym_count * sizeof (Elf_External_Sym); - finfo.external_syms = (Elf_External_Sym *) bfd_malloc (amt); - if (finfo.external_syms == NULL) - goto error_return; - - amt = max_sym_count * sizeof (Elf_Internal_Sym); - finfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt); - if (finfo.internal_syms == NULL) - goto error_return; - - amt = max_sym_count * sizeof (long); - finfo.indices = (long *) bfd_malloc (amt); - if (finfo.indices == NULL) - goto error_return; - - amt = max_sym_count * sizeof (asection *); - finfo.sections = (asection **) bfd_malloc (amt); - if (finfo.sections == NULL) - goto error_return; - } - - if (max_sym_shndx_count != 0) - { - amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx); - finfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt); - if (finfo.locsym_shndx == NULL) - goto error_return; - } - - if (finfo.first_tls_sec) - { - unsigned int align = 0; - bfd_vma base = finfo.first_tls_sec->vma, end = 0; - asection *sec; - - for (sec = finfo.first_tls_sec; - sec && (sec->flags & SEC_THREAD_LOCAL); - sec = sec->next) - { - bfd_vma size = sec->_raw_size; - - if (bfd_get_section_alignment (abfd, sec) > align) - align = bfd_get_section_alignment (abfd, sec); - if (sec->_raw_size == 0 && (sec->flags & SEC_HAS_CONTENTS) == 0) - { - struct bfd_link_order *o; - - size = 0; - for (o = sec->link_order_head; o != NULL; o = o->next) - if (size < o->offset + o->size) - size = o->offset + o->size; - } - end = sec->vma + size; - } - elf_hash_table (info)->tls_segment - = bfd_zalloc (abfd, sizeof (struct elf_link_tls_segment)); - if (elf_hash_table (info)->tls_segment == NULL) - goto error_return; - elf_hash_table (info)->tls_segment->start = base; - elf_hash_table (info)->tls_segment->size = end - base; - elf_hash_table (info)->tls_segment->align = align; - } - - /* Since ELF permits relocations to be against local symbols, we - must have the local symbols available when we do the relocations. - Since we would rather only read the local symbols once, and we - would rather not keep them in memory, we handle all the - relocations for a single input file at the same time. - - Unfortunately, there is no way to know the total number of local - symbols until we have seen all of them, and the local symbol - indices precede the global symbol indices. This means that when - we are generating relocateable output, and we see a reloc against - a global symbol, we can not know the symbol index until we have - finished examining all the local symbols to see which ones we are - going to output. To deal with this, we keep the relocations in - memory, and don't output them until the end of the link. This is - an unfortunate waste of memory, but I don't see a good way around - it. Fortunately, it only happens when performing a relocateable - link, which is not the common case. FIXME: If keep_memory is set - we could write the relocs out and then read them again; I don't - know how bad the memory loss will be. */ - - for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) - sub->output_has_begun = false; - for (o = abfd->sections; o != NULL; o = o->next) - { - for (p = o->link_order_head; p != NULL; p = p->next) - { - if (p->type == bfd_indirect_link_order - && (bfd_get_flavour ((sub = p->u.indirect.section->owner)) - == bfd_target_elf_flavour) - && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass) - { - if (! sub->output_has_begun) - { - if (! elf_link_input_bfd (&finfo, sub)) - goto error_return; - sub->output_has_begun = true; - } - } - else if (p->type == bfd_section_reloc_link_order - || p->type == bfd_symbol_reloc_link_order) - { - if (! elf_reloc_link_order (abfd, info, o, p)) - goto error_return; - } - else - { - if (! _bfd_default_link_order (abfd, info, o, p)) - goto error_return; - } - } - } - - /* Output any global symbols that got converted to local in a - version script or due to symbol visibility. We do this in a - separate step since ELF requires all local symbols to appear - prior to any global symbols. FIXME: We should only do this if - some global symbols were, in fact, converted to become local. - FIXME: Will this work correctly with the Irix 5 linker? */ - eoinfo.failed = false; - eoinfo.finfo = &finfo; - eoinfo.localsyms = true; - elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym, - (PTR) &eoinfo); - if (eoinfo.failed) - return false; - - /* That wrote out all the local symbols. Finish up the symbol table - with the global symbols. Even if we want to strip everything we - can, we still need to deal with those global symbols that got - converted to local in a version script. */ - - /* The sh_info field records the index of the first non local symbol. */ - symtab_hdr->sh_info = bfd_get_symcount (abfd); - - if (dynamic - && finfo.dynsym_sec->output_section != bfd_abs_section_ptr) - { - Elf_Internal_Sym sym; - Elf_External_Sym *dynsym = - (Elf_External_Sym *) finfo.dynsym_sec->contents; - long last_local = 0; - - /* Write out the section symbols for the output sections. */ - if (info->shared) - { - asection *s; - - sym.st_size = 0; - sym.st_name = 0; - sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION); - sym.st_other = 0; - - for (s = abfd->sections; s != NULL; s = s->next) - { - int indx; - Elf_External_Sym *dest; - - indx = elf_section_data (s)->this_idx; - BFD_ASSERT (indx > 0); - sym.st_shndx = indx; - sym.st_value = s->vma; - dest = dynsym + elf_section_data (s)->dynindx; - elf_swap_symbol_out (abfd, &sym, (PTR) dest, (PTR) 0); - } - - last_local = bfd_count_sections (abfd); - } - - /* Write out the local dynsyms. */ - if (elf_hash_table (info)->dynlocal) - { - struct elf_link_local_dynamic_entry *e; - for (e = elf_hash_table (info)->dynlocal; e ; e = e->next) - { - asection *s; - Elf_External_Sym *dest; - - sym.st_size = e->isym.st_size; - sym.st_other = e->isym.st_other; - - /* Copy the internal symbol as is. - Note that we saved a word of storage and overwrote - the original st_name with the dynstr_index. */ - sym = e->isym; - - if (e->isym.st_shndx != SHN_UNDEF - && (e->isym.st_shndx < SHN_LORESERVE - || e->isym.st_shndx > SHN_HIRESERVE)) - { - s = bfd_section_from_elf_index (e->input_bfd, - e->isym.st_shndx); - - sym.st_shndx = - elf_section_data (s->output_section)->this_idx; - sym.st_value = (s->output_section->vma - + s->output_offset - + e->isym.st_value); - } - - if (last_local < e->dynindx) - last_local = e->dynindx; - - dest = dynsym + e->dynindx; - elf_swap_symbol_out (abfd, &sym, (PTR) dest, (PTR) 0); - } - } - - elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = - last_local + 1; - } - - /* We get the global symbols from the hash table. */ - eoinfo.failed = false; - eoinfo.localsyms = false; - eoinfo.finfo = &finfo; - elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym, - (PTR) &eoinfo); - if (eoinfo.failed) - return false; - - /* If backend needs to output some symbols not present in the hash - table, do it now. */ - if (bed->elf_backend_output_arch_syms) - { - typedef boolean (*out_sym_func) PARAMS ((PTR, const char *, - Elf_Internal_Sym *, - asection *)); - - if (! ((*bed->elf_backend_output_arch_syms) - (abfd, info, (PTR) &finfo, (out_sym_func) elf_link_output_sym))) - return false; - } - - /* Flush all symbols to the file. */ - if (! elf_link_flush_output_syms (&finfo)) - return false; - - /* Now we know the size of the symtab section. */ - off += symtab_hdr->sh_size; - - /* Finish up and write out the symbol string table (.strtab) - section. */ - symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr; - /* sh_name was set in prep_headers. */ - symstrtab_hdr->sh_type = SHT_STRTAB; - symstrtab_hdr->sh_flags = 0; - symstrtab_hdr->sh_addr = 0; - symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab); - symstrtab_hdr->sh_entsize = 0; - symstrtab_hdr->sh_link = 0; - symstrtab_hdr->sh_info = 0; - /* sh_offset is set just below. */ - symstrtab_hdr->sh_addralign = 1; - - off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, true); - elf_tdata (abfd)->next_file_pos = off; - - if (bfd_get_symcount (abfd) > 0) - { - if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0 - || ! _bfd_stringtab_emit (abfd, finfo.symstrtab)) - return false; - } - - /* Adjust the relocs to have the correct symbol indices. */ - for (o = abfd->sections; o != NULL; o = o->next) - { - if ((o->flags & SEC_RELOC) == 0) - continue; - - elf_link_adjust_relocs (abfd, &elf_section_data (o)->rel_hdr, - elf_section_data (o)->rel_count, - elf_section_data (o)->rel_hashes); - if (elf_section_data (o)->rel_hdr2 != NULL) - elf_link_adjust_relocs (abfd, elf_section_data (o)->rel_hdr2, - elf_section_data (o)->rel_count2, - (elf_section_data (o)->rel_hashes - + elf_section_data (o)->rel_count)); - - /* Set the reloc_count field to 0 to prevent write_relocs from - trying to swap the relocs out itself. */ - o->reloc_count = 0; - } - - if (dynamic && info->combreloc && dynobj != NULL) - relativecount = elf_link_sort_relocs (abfd, info, &reldyn); - - /* If we are linking against a dynamic object, or generating a - shared library, finish up the dynamic linking information. */ - if (dynamic) - { - Elf_External_Dyn *dyncon, *dynconend; - - /* Fix up .dynamic entries. */ - o = bfd_get_section_by_name (dynobj, ".dynamic"); - BFD_ASSERT (o != NULL); - - dyncon = (Elf_External_Dyn *) o->contents; - dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size); - for (; dyncon < dynconend; dyncon++) - { - Elf_Internal_Dyn dyn; - const char *name; - unsigned int type; - - elf_swap_dyn_in (dynobj, dyncon, &dyn); - - switch (dyn.d_tag) - { - default: - break; - case DT_NULL: - if (relativecount > 0 && dyncon + 1 < dynconend) - { - switch (elf_section_data (reldyn)->this_hdr.sh_type) - { - case SHT_REL: dyn.d_tag = DT_RELCOUNT; break; - case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break; - default: break; - } - if (dyn.d_tag != DT_NULL) - { - dyn.d_un.d_val = relativecount; - elf_swap_dyn_out (dynobj, &dyn, dyncon); - relativecount = 0; - } - } - break; - case DT_INIT: - name = info->init_function; - goto get_sym; - case DT_FINI: - name = info->fini_function; - get_sym: - { - struct elf_link_hash_entry *h; - - h = elf_link_hash_lookup (elf_hash_table (info), name, - false, false, true); - if (h != NULL - && (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak)) - { - dyn.d_un.d_val = h->root.u.def.value; - o = h->root.u.def.section; - if (o->output_section != NULL) - dyn.d_un.d_val += (o->output_section->vma - + o->output_offset); - else - { - /* The symbol is imported from another shared - library and does not apply to this one. */ - dyn.d_un.d_val = 0; - } - - elf_swap_dyn_out (dynobj, &dyn, dyncon); - } - } - break; - - case DT_PREINIT_ARRAYSZ: - name = ".preinit_array"; - goto get_size; - case DT_INIT_ARRAYSZ: - name = ".init_array"; - goto get_size; - case DT_FINI_ARRAYSZ: - name = ".fini_array"; - get_size: - o = bfd_get_section_by_name (abfd, name); - if (o == NULL) - { - (*_bfd_error_handler) - (_("%s: could not find output section %s"), - bfd_get_filename (abfd), name); - goto error_return; - } - if (o->_raw_size == 0) - (*_bfd_error_handler) - (_("warning: %s section has zero size"), name); - dyn.d_un.d_val = o->_raw_size; - elf_swap_dyn_out (dynobj, &dyn, dyncon); - break; - - case DT_PREINIT_ARRAY: - name = ".preinit_array"; - goto get_vma; - case DT_INIT_ARRAY: - name = ".init_array"; - goto get_vma; - case DT_FINI_ARRAY: - name = ".fini_array"; - goto get_vma; - - case DT_HASH: - name = ".hash"; - goto get_vma; - case DT_STRTAB: - name = ".dynstr"; - goto get_vma; - case DT_SYMTAB: - name = ".dynsym"; - goto get_vma; - case DT_VERDEF: - name = ".gnu.version_d"; - goto get_vma; - case DT_VERNEED: - name = ".gnu.version_r"; - goto get_vma; - case DT_VERSYM: - name = ".gnu.version"; - get_vma: - o = bfd_get_section_by_name (abfd, name); - if (o == NULL) - { - (*_bfd_error_handler) - (_("%s: could not find output section %s"), - bfd_get_filename (abfd), name); - goto error_return; - } - dyn.d_un.d_ptr = o->vma; - elf_swap_dyn_out (dynobj, &dyn, dyncon); - break; - - case DT_REL: - case DT_RELA: - case DT_RELSZ: - case DT_RELASZ: - if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ) - type = SHT_REL; - else - type = SHT_RELA; - dyn.d_un.d_val = 0; - for (i = 1; i < elf_numsections (abfd); i++) - { - Elf_Internal_Shdr *hdr; - - hdr = elf_elfsections (abfd)[i]; - if (hdr->sh_type == type - && (hdr->sh_flags & SHF_ALLOC) != 0) - { - if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ) - dyn.d_un.d_val += hdr->sh_size; - else - { - if (dyn.d_un.d_val == 0 - || hdr->sh_addr < dyn.d_un.d_val) - dyn.d_un.d_val = hdr->sh_addr; - } - } - } - elf_swap_dyn_out (dynobj, &dyn, dyncon); - break; - } - } - } - - /* If we have created any dynamic sections, then output them. */ - if (dynobj != NULL) - { - if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info)) - goto error_return; - - for (o = dynobj->sections; o != NULL; o = o->next) - { - if ((o->flags & SEC_HAS_CONTENTS) == 0 - || o->_raw_size == 0 - || o->output_section == bfd_abs_section_ptr) - continue; - if ((o->flags & SEC_LINKER_CREATED) == 0) - { - /* At this point, we are only interested in sections - created by elf_link_create_dynamic_sections. */ - continue; - } - if ((elf_section_data (o->output_section)->this_hdr.sh_type - != SHT_STRTAB) - || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0) - { - if (! bfd_set_section_contents (abfd, o->output_section, - o->contents, - (file_ptr) o->output_offset, - o->_raw_size)) - goto error_return; - } - else - { - /* The contents of the .dynstr section are actually in a - stringtab. */ - off = elf_section_data (o->output_section)->this_hdr.sh_offset; - if (bfd_seek (abfd, off, SEEK_SET) != 0 - || ! _bfd_elf_strtab_emit (abfd, - elf_hash_table (info)->dynstr)) - goto error_return; - } - } - } - - if (info->relocateable) - { - boolean failed = false; - - bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed); - if (failed) - goto error_return; - } - - /* If we have optimized stabs strings, output them. */ - if (elf_hash_table (info)->stab_info != NULL) - { - if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info)) - goto error_return; - } - - if (info->eh_frame_hdr && elf_hash_table (info)->dynobj) - { - o = bfd_get_section_by_name (elf_hash_table (info)->dynobj, - ".eh_frame_hdr"); - if (o - && (elf_section_data (o)->sec_info_type - == ELF_INFO_TYPE_EH_FRAME_HDR)) - { - if (! _bfd_elf_write_section_eh_frame_hdr (abfd, o)) - goto error_return; - } - } - - if (finfo.symstrtab != NULL) - _bfd_stringtab_free (finfo.symstrtab); - if (finfo.contents != NULL) - free (finfo.contents); - if (finfo.external_relocs != NULL) - free (finfo.external_relocs); - if (finfo.internal_relocs != NULL) - free (finfo.internal_relocs); - if (finfo.external_syms != NULL) - free (finfo.external_syms); - if (finfo.locsym_shndx != NULL) - free (finfo.locsym_shndx); - if (finfo.internal_syms != NULL) - free (finfo.internal_syms); - if (finfo.indices != NULL) - free (finfo.indices); - if (finfo.sections != NULL) - free (finfo.sections); - if (finfo.symbuf != NULL) - free (finfo.symbuf); - if (finfo.symshndxbuf != NULL) - free (finfo.symbuf); - for (o = abfd->sections; o != NULL; o = o->next) - { - if ((o->flags & SEC_RELOC) != 0 - && elf_section_data (o)->rel_hashes != NULL) - free (elf_section_data (o)->rel_hashes); - } - - elf_tdata (abfd)->linker = true; - - return true; - - error_return: - if (finfo.symstrtab != NULL) - _bfd_stringtab_free (finfo.symstrtab); - if (finfo.contents != NULL) - free (finfo.contents); - if (finfo.external_relocs != NULL) - free (finfo.external_relocs); - if (finfo.internal_relocs != NULL) - free (finfo.internal_relocs); - if (finfo.external_syms != NULL) - free (finfo.external_syms); - if (finfo.locsym_shndx != NULL) - free (finfo.locsym_shndx); - if (finfo.internal_syms != NULL) - free (finfo.internal_syms); - if (finfo.indices != NULL) - free (finfo.indices); - if (finfo.sections != NULL) - free (finfo.sections); - if (finfo.symbuf != NULL) - free (finfo.symbuf); - if (finfo.symshndxbuf != NULL) - free (finfo.symbuf); - for (o = abfd->sections; o != NULL; o = o->next) - { - if ((o->flags & SEC_RELOC) != 0 - && elf_section_data (o)->rel_hashes != NULL) - free (elf_section_data (o)->rel_hashes); - } - - return false; -} - -/* Add a symbol to the output symbol table. */ - -static boolean -elf_link_output_sym (finfo, name, elfsym, input_sec) - struct elf_final_link_info *finfo; - const char *name; - Elf_Internal_Sym *elfsym; - asection *input_sec; -{ - Elf_External_Sym *dest; - Elf_External_Sym_Shndx *destshndx; - - boolean (*output_symbol_hook) PARAMS ((bfd *, - struct bfd_link_info *info, - const char *, - Elf_Internal_Sym *, - asection *)); - - output_symbol_hook = get_elf_backend_data (finfo->output_bfd)-> - elf_backend_link_output_symbol_hook; - if (output_symbol_hook != NULL) - { - if (! ((*output_symbol_hook) - (finfo->output_bfd, finfo->info, name, elfsym, input_sec))) - return false; - } - - if (name == (const char *) NULL || *name == '\0') - elfsym->st_name = 0; - else if (input_sec->flags & SEC_EXCLUDE) - elfsym->st_name = 0; - else - { - elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab, - name, true, false); - if (elfsym->st_name == (unsigned long) -1) - return false; - } - - if (finfo->symbuf_count >= finfo->symbuf_size) - { - if (! elf_link_flush_output_syms (finfo)) - return false; - } - - dest = finfo->symbuf + finfo->symbuf_count; - destshndx = finfo->symshndxbuf; - if (destshndx != NULL) - destshndx += finfo->symbuf_count; - elf_swap_symbol_out (finfo->output_bfd, elfsym, (PTR) dest, (PTR) destshndx); - ++finfo->symbuf_count; - - ++ bfd_get_symcount (finfo->output_bfd); - - return true; -} - -/* Flush the output symbols to the file. */ - -static boolean -elf_link_flush_output_syms (finfo) - struct elf_final_link_info *finfo; -{ - if (finfo->symbuf_count > 0) - { - Elf_Internal_Shdr *hdr; - file_ptr pos; - bfd_size_type amt; - - hdr = &elf_tdata (finfo->output_bfd)->symtab_hdr; - pos = hdr->sh_offset + hdr->sh_size; - amt = finfo->symbuf_count * sizeof (Elf_External_Sym); - if (bfd_seek (finfo->output_bfd, pos, SEEK_SET) != 0 - || bfd_bwrite ((PTR) finfo->symbuf, amt, finfo->output_bfd) != amt) - return false; - - hdr->sh_size += amt; - - if (finfo->symshndxbuf != NULL) - { - hdr = &elf_tdata (finfo->output_bfd)->symtab_shndx_hdr; - pos = hdr->sh_offset + hdr->sh_size; - amt = finfo->symbuf_count * sizeof (Elf_External_Sym_Shndx); - if (bfd_seek (finfo->output_bfd, pos, SEEK_SET) != 0 - || (bfd_bwrite ((PTR) finfo->symshndxbuf, amt, finfo->output_bfd) - != amt)) - return false; - - hdr->sh_size += amt; - } - - finfo->symbuf_count = 0; - } - - return true; -} - -/* Adjust all external symbols pointing into SEC_MERGE sections - to reflect the object merging within the sections. */ - -static boolean -elf_link_sec_merge_syms (h, data) - struct elf_link_hash_entry *h; - PTR data; -{ - asection *sec; - - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - if ((h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - && ((sec = h->root.u.def.section)->flags & SEC_MERGE) - && elf_section_data (sec)->sec_info_type == ELF_INFO_TYPE_MERGE) - { - bfd *output_bfd = (bfd *) data; - - h->root.u.def.value = - _bfd_merged_section_offset (output_bfd, - &h->root.u.def.section, - elf_section_data (sec)->sec_info, - h->root.u.def.value, (bfd_vma) 0); - } - - return true; -} - -/* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in - allowing an unsatisfied unversioned symbol in the DSO to match a - versioned symbol that would normally require an explicit version. */ - -static boolean -elf_link_check_versioned_symbol (info, h) - struct bfd_link_info *info; - struct elf_link_hash_entry *h; -{ - bfd *undef_bfd = h->root.u.undef.abfd; - struct elf_link_loaded_list *loaded; - - if ((undef_bfd->flags & DYNAMIC) == 0 - || info->hash->creator->flavour != bfd_target_elf_flavour - || elf_dt_soname (h->root.u.undef.abfd) == NULL) - return false; - - for (loaded = elf_hash_table (info)->loaded; - loaded != NULL; - loaded = loaded->next) - { - bfd *input; - Elf_Internal_Shdr *hdr; - bfd_size_type symcount; - bfd_size_type extsymcount; - bfd_size_type extsymoff; - Elf_Internal_Shdr *versymhdr; - Elf_Internal_Sym *isym; - Elf_Internal_Sym *isymend; - Elf_Internal_Sym *isymbuf; - Elf_External_Versym *ever; - Elf_External_Versym *extversym; - - input = loaded->abfd; - - /* We check each DSO for a possible hidden versioned definition. */ - if (input == undef_bfd - || (input->flags & DYNAMIC) == 0 - || elf_dynversym (input) == 0) - continue; - - hdr = &elf_tdata (input)->dynsymtab_hdr; - - symcount = hdr->sh_size / sizeof (Elf_External_Sym); - if (elf_bad_symtab (input)) - { - extsymcount = symcount; - extsymoff = 0; - } - else - { - extsymcount = symcount - hdr->sh_info; - extsymoff = hdr->sh_info; - } - - if (extsymcount == 0) - continue; - - isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff, - NULL, NULL, NULL); - if (isymbuf == NULL) - return false; - - /* Read in any version definitions. */ - versymhdr = &elf_tdata (input)->dynversym_hdr; - extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size); - if (extversym == NULL) - goto error_ret; - - if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0 - || (bfd_bread ((PTR) extversym, versymhdr->sh_size, input) - != versymhdr->sh_size)) - { - free (extversym); - error_ret: - free (isymbuf); - return false; - } - - ever = extversym + extsymoff; - isymend = isymbuf + extsymcount; - for (isym = isymbuf; isym < isymend; isym++, ever++) - { - const char *name; - Elf_Internal_Versym iver; - - if (ELF_ST_BIND (isym->st_info) == STB_LOCAL - || isym->st_shndx == SHN_UNDEF) - continue; - - name = bfd_elf_string_from_elf_section (input, - hdr->sh_link, - isym->st_name); - if (strcmp (name, h->root.root.string) != 0) - continue; - - _bfd_elf_swap_versym_in (input, ever, &iver); - - if ((iver.vs_vers & VERSYM_HIDDEN) == 0) - { - /* If we have a non-hidden versioned sym, then it should - have provided a definition for the undefined sym. */ - abort (); - } - - if ((iver.vs_vers & VERSYM_VERSION) == 2) - { - /* This is the oldest (default) sym. We can use it. */ - free (extversym); - free (isymbuf); - return true; - } - } - - free (extversym); - free (isymbuf); - } - - return false; -} - -/* Add an external symbol to the symbol table. This is called from - the hash table traversal routine. When generating a shared object, - we go through the symbol table twice. The first time we output - anything that might have been forced to local scope in a version - script. The second time we output the symbols that are still - global symbols. */ - -static boolean -elf_link_output_extsym (h, data) - struct elf_link_hash_entry *h; - PTR data; -{ - struct elf_outext_info *eoinfo = (struct elf_outext_info *) data; - struct elf_final_link_info *finfo = eoinfo->finfo; - boolean strip; - Elf_Internal_Sym sym; - asection *input_sec; - - if (h->root.type == bfd_link_hash_warning) - { - h = (struct elf_link_hash_entry *) h->root.u.i.link; - if (h->root.type == bfd_link_hash_new) - return true; - } - - /* Decide whether to output this symbol in this pass. */ - if (eoinfo->localsyms) - { - if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0) - return true; - } - else - { - if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0) - return true; - } - - /* If we are not creating a shared library, and this symbol is - referenced by a shared library but is not defined anywhere, then - warn that it is undefined. If we do not do this, the runtime - linker will complain that the symbol is undefined when the - program is run. We don't have to worry about symbols that are - referenced by regular files, because we will already have issued - warnings for them. */ - if (! finfo->info->relocateable - && ! finfo->info->allow_shlib_undefined - && ! finfo->info->shared - && h->root.type == bfd_link_hash_undefined - && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0 - && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0 - && ! elf_link_check_versioned_symbol (finfo->info, h)) - { - if (! ((*finfo->info->callbacks->undefined_symbol) - (finfo->info, h->root.root.string, h->root.u.undef.abfd, - (asection *) NULL, (bfd_vma) 0, true))) - { - eoinfo->failed = true; - return false; - } - } - - /* We don't want to output symbols that have never been mentioned by - a regular file, or that we have been told to strip. However, if - h->indx is set to -2, the symbol is used by a reloc and we must - output it. */ - if (h->indx == -2) - strip = false; - else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0 - || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0) - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0 - && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0) - strip = true; - else if (finfo->info->strip == strip_all - || (finfo->info->strip == strip_some - && bfd_hash_lookup (finfo->info->keep_hash, - h->root.root.string, - false, false) == NULL)) - strip = true; - else - strip = false; - - /* If we're stripping it, and it's not a dynamic symbol, there's - nothing else to do unless it is a forced local symbol. */ - if (strip - && h->dynindx == -1 - && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0) - return true; - - sym.st_value = 0; - sym.st_size = h->size; - sym.st_other = h->other; - if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0) - sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type); - else if (h->root.type == bfd_link_hash_undefweak - || h->root.type == bfd_link_hash_defweak) - sym.st_info = ELF_ST_INFO (STB_WEAK, h->type); - else - sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type); - - switch (h->root.type) - { - default: - case bfd_link_hash_new: - case bfd_link_hash_warning: - abort (); - return false; - - case bfd_link_hash_undefined: - case bfd_link_hash_undefweak: - input_sec = bfd_und_section_ptr; - sym.st_shndx = SHN_UNDEF; - break; - - case bfd_link_hash_defined: - case bfd_link_hash_defweak: - { - input_sec = h->root.u.def.section; - if (input_sec->output_section != NULL) - { - sym.st_shndx = - _bfd_elf_section_from_bfd_section (finfo->output_bfd, - input_sec->output_section); - if (sym.st_shndx == SHN_BAD) - { - (*_bfd_error_handler) - (_("%s: could not find output section %s for input section %s"), - bfd_get_filename (finfo->output_bfd), - input_sec->output_section->name, - input_sec->name); - eoinfo->failed = true; - return false; - } - - /* ELF symbols in relocateable files are section relative, - but in nonrelocateable files they are virtual - addresses. */ - sym.st_value = h->root.u.def.value + input_sec->output_offset; - if (! finfo->info->relocateable) - { - sym.st_value += input_sec->output_section->vma; - if (h->type == STT_TLS) - { - /* STT_TLS symbols are relative to PT_TLS segment - base. */ - BFD_ASSERT (finfo->first_tls_sec != NULL); - sym.st_value -= finfo->first_tls_sec->vma; - } - } - } - else - { - BFD_ASSERT (input_sec->owner == NULL - || (input_sec->owner->flags & DYNAMIC) != 0); - sym.st_shndx = SHN_UNDEF; - input_sec = bfd_und_section_ptr; - } - } - break; - - case bfd_link_hash_common: - input_sec = h->root.u.c.p->section; - sym.st_shndx = SHN_COMMON; - sym.st_value = 1 << h->root.u.c.p->alignment_power; - break; - - case bfd_link_hash_indirect: - /* These symbols are created by symbol versioning. They point - to the decorated version of the name. For example, if the - symbol foo@@GNU_1.2 is the default, which should be used when - foo is used with no version, then we add an indirect symbol - foo which points to foo@@GNU_1.2. We ignore these symbols, - since the indirected symbol is already in the hash table. */ - return true; - } - - /* Give the processor backend a chance to tweak the symbol value, - and also to finish up anything that needs to be done for this - symbol. FIXME: Not calling elf_backend_finish_dynamic_symbol for - forced local syms when non-shared is due to a historical quirk. */ - if ((h->dynindx != -1 - || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0) - && (finfo->info->shared - || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0) - && elf_hash_table (finfo->info)->dynamic_sections_created) - { - struct elf_backend_data *bed; - - bed = get_elf_backend_data (finfo->output_bfd); - if (! ((*bed->elf_backend_finish_dynamic_symbol) - (finfo->output_bfd, finfo->info, h, &sym))) - { - eoinfo->failed = true; - return false; - } - } - - /* If we are marking the symbol as undefined, and there are no - non-weak references to this symbol from a regular object, then - mark the symbol as weak undefined; if there are non-weak - references, mark the symbol as strong. We can't do this earlier, - because it might not be marked as undefined until the - finish_dynamic_symbol routine gets through with it. */ - if (sym.st_shndx == SHN_UNDEF - && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0 - && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL - || ELF_ST_BIND (sym.st_info) == STB_WEAK)) - { - int bindtype; - - if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK) != 0) - bindtype = STB_GLOBAL; - else - bindtype = STB_WEAK; - sym.st_info = ELF_ST_INFO (bindtype, ELF_ST_TYPE (sym.st_info)); - } - - /* If a symbol is not defined locally, we clear the visibility field. */ - if (! finfo->info->relocateable - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0) - sym.st_other &= ~ ELF_ST_VISIBILITY (-1); - - /* If this symbol should be put in the .dynsym section, then put it - there now. We already know the symbol index. We also fill in - the entry in the .hash section. */ - if (h->dynindx != -1 - && elf_hash_table (finfo->info)->dynamic_sections_created) - { - size_t bucketcount; - size_t bucket; - size_t hash_entry_size; - bfd_byte *bucketpos; - bfd_vma chain; - Elf_External_Sym *esym; - - sym.st_name = h->dynstr_index; - esym = (Elf_External_Sym *) finfo->dynsym_sec->contents + h->dynindx; - elf_swap_symbol_out (finfo->output_bfd, &sym, (PTR) esym, (PTR) 0); - - bucketcount = elf_hash_table (finfo->info)->bucketcount; - bucket = h->elf_hash_value % bucketcount; - hash_entry_size - = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize; - bucketpos = ((bfd_byte *) finfo->hash_sec->contents - + (bucket + 2) * hash_entry_size); - chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos); - bfd_put (8 * hash_entry_size, finfo->output_bfd, (bfd_vma) h->dynindx, - bucketpos); - bfd_put (8 * hash_entry_size, finfo->output_bfd, chain, - ((bfd_byte *) finfo->hash_sec->contents - + (bucketcount + 2 + h->dynindx) * hash_entry_size)); - - if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL) - { - Elf_Internal_Versym iversym; - Elf_External_Versym *eversym; - - if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0) - { - if (h->verinfo.verdef == NULL) - iversym.vs_vers = 0; - else - iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1; - } - else - { - if (h->verinfo.vertree == NULL) - iversym.vs_vers = 1; - else - iversym.vs_vers = h->verinfo.vertree->vernum + 1; - } - - if ((h->elf_link_hash_flags & ELF_LINK_HIDDEN) != 0) - iversym.vs_vers |= VERSYM_HIDDEN; - - eversym = (Elf_External_Versym *) finfo->symver_sec->contents; - eversym += h->dynindx; - _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym, eversym); - } - } - - /* If we're stripping it, then it was just a dynamic symbol, and - there's nothing else to do. */ - if (strip || (input_sec->flags & SEC_EXCLUDE) != 0) - return true; - - h->indx = bfd_get_symcount (finfo->output_bfd); - - if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec)) - { - eoinfo->failed = true; - return false; - } - - return true; -} - -/* Copy the relocations indicated by the INTERNAL_RELOCS (which - originated from the section given by INPUT_REL_HDR) to the - OUTPUT_BFD. */ - -static boolean -elf_link_output_relocs (output_bfd, input_section, input_rel_hdr, - internal_relocs) - bfd *output_bfd; - asection *input_section; - Elf_Internal_Shdr *input_rel_hdr; - Elf_Internal_Rela *internal_relocs; -{ - Elf_Internal_Rela *irela; - Elf_Internal_Rela *irelaend; - Elf_Internal_Shdr *output_rel_hdr; - asection *output_section; - unsigned int *rel_countp = NULL; - struct elf_backend_data *bed; - bfd_size_type amt; - - output_section = input_section->output_section; - output_rel_hdr = NULL; - - if (elf_section_data (output_section)->rel_hdr.sh_entsize - == input_rel_hdr->sh_entsize) - { - output_rel_hdr = &elf_section_data (output_section)->rel_hdr; - rel_countp = &elf_section_data (output_section)->rel_count; - } - else if (elf_section_data (output_section)->rel_hdr2 - && (elf_section_data (output_section)->rel_hdr2->sh_entsize - == input_rel_hdr->sh_entsize)) - { - output_rel_hdr = elf_section_data (output_section)->rel_hdr2; - rel_countp = &elf_section_data (output_section)->rel_count2; - } - else - { - (*_bfd_error_handler) - (_("%s: relocation size mismatch in %s section %s"), - bfd_get_filename (output_bfd), - bfd_archive_filename (input_section->owner), - input_section->name); - bfd_set_error (bfd_error_wrong_object_format); - return false; - } - - bed = get_elf_backend_data (output_bfd); - irela = internal_relocs; - irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr) - * bed->s->int_rels_per_ext_rel); - - if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel)) - { - Elf_External_Rel *erel; - Elf_Internal_Rel *irel; - - amt = bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rel); - irel = (Elf_Internal_Rel *) bfd_zmalloc (amt); - if (irel == NULL) - { - (*_bfd_error_handler) (_("Error: out of memory")); - abort (); - } - - erel = ((Elf_External_Rel *) output_rel_hdr->contents + *rel_countp); - for (; irela < irelaend; irela += bed->s->int_rels_per_ext_rel, erel++) - { - unsigned int i; - - for (i = 0; i < bed->s->int_rels_per_ext_rel; i++) - { - irel[i].r_offset = irela[i].r_offset; - irel[i].r_info = irela[i].r_info; - BFD_ASSERT (irela[i].r_addend == 0); - } - - if (bed->s->swap_reloc_out) - (*bed->s->swap_reloc_out) (output_bfd, irel, (PTR) erel); - else - elf_swap_reloc_out (output_bfd, irel, erel); - } - - free (irel); - } - else - { - Elf_External_Rela *erela; - - BFD_ASSERT (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rela)); - - erela = ((Elf_External_Rela *) output_rel_hdr->contents + *rel_countp); - for (; irela < irelaend; irela += bed->s->int_rels_per_ext_rel, erela++) - if (bed->s->swap_reloca_out) - (*bed->s->swap_reloca_out) (output_bfd, irela, (PTR) erela); - else - elf_swap_reloca_out (output_bfd, irela, erela); - } - - /* Bump the counter, so that we know where to add the next set of - relocations. */ - *rel_countp += NUM_SHDR_ENTRIES (input_rel_hdr); - - return true; -} - -/* Link an input file into the linker output file. This function - handles all the sections and relocations of the input file at once. - This is so that we only have to read the local symbols once, and - don't have to keep them in memory. */ - -static boolean -elf_link_input_bfd (finfo, input_bfd) - struct elf_final_link_info *finfo; - bfd *input_bfd; -{ - boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *, - bfd *, asection *, bfd_byte *, - Elf_Internal_Rela *, - Elf_Internal_Sym *, asection **)); - bfd *output_bfd; - Elf_Internal_Shdr *symtab_hdr; - size_t locsymcount; - size_t extsymoff; - Elf_Internal_Sym *isymbuf; - Elf_Internal_Sym *isym; - Elf_Internal_Sym *isymend; - long *pindex; - asection **ppsection; - asection *o; - struct elf_backend_data *bed; - boolean emit_relocs; - struct elf_link_hash_entry **sym_hashes; - - output_bfd = finfo->output_bfd; - bed = get_elf_backend_data (output_bfd); - relocate_section = bed->elf_backend_relocate_section; - - /* If this is a dynamic object, we don't want to do anything here: - we don't want the local symbols, and we don't want the section - contents. */ - if ((input_bfd->flags & DYNAMIC) != 0) - return true; - - emit_relocs = (finfo->info->relocateable - || finfo->info->emitrelocations - || bed->elf_backend_emit_relocs); - - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; - if (elf_bad_symtab (input_bfd)) - { - locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym); - extsymoff = 0; - } - else - { - locsymcount = symtab_hdr->sh_info; - extsymoff = symtab_hdr->sh_info; - } - - /* Read the local symbols. */ - isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; - if (isymbuf == NULL && locsymcount != 0) - { - isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0, - finfo->internal_syms, - finfo->external_syms, - finfo->locsym_shndx); - if (isymbuf == NULL) - return false; - } - - /* Find local symbol sections and adjust values of symbols in - SEC_MERGE sections. Write out those local symbols we know are - going into the output file. */ - isymend = isymbuf + locsymcount; - for (isym = isymbuf, pindex = finfo->indices, ppsection = finfo->sections; - isym < isymend; - isym++, pindex++, ppsection++) - { - asection *isec; - const char *name; - Elf_Internal_Sym osym; - - *pindex = -1; - - if (elf_bad_symtab (input_bfd)) - { - if (ELF_ST_BIND (isym->st_info) != STB_LOCAL) - { - *ppsection = NULL; - continue; - } - } - - if (isym->st_shndx == SHN_UNDEF) - isec = bfd_und_section_ptr; - else if (isym->st_shndx < SHN_LORESERVE - || isym->st_shndx > SHN_HIRESERVE) - { - isec = section_from_elf_index (input_bfd, isym->st_shndx); - if (isec - && elf_section_data (isec)->sec_info_type == ELF_INFO_TYPE_MERGE - && ELF_ST_TYPE (isym->st_info) != STT_SECTION) - isym->st_value = - _bfd_merged_section_offset (output_bfd, &isec, - elf_section_data (isec)->sec_info, - isym->st_value, (bfd_vma) 0); - } - else if (isym->st_shndx == SHN_ABS) - isec = bfd_abs_section_ptr; - else if (isym->st_shndx == SHN_COMMON) - isec = bfd_com_section_ptr; - else - { - /* Who knows? */ - isec = NULL; - } - - *ppsection = isec; - - /* Don't output the first, undefined, symbol. */ - if (ppsection == finfo->sections) - continue; - - if (ELF_ST_TYPE (isym->st_info) == STT_SECTION) - { - /* We never output section symbols. Instead, we use the - section symbol of the corresponding section in the output - file. */ - continue; - } - - /* If we are stripping all symbols, we don't want to output this - one. */ - if (finfo->info->strip == strip_all) - continue; - - /* If we are discarding all local symbols, we don't want to - output this one. If we are generating a relocateable output - file, then some of the local symbols may be required by - relocs; we output them below as we discover that they are - needed. */ - if (finfo->info->discard == discard_all) - continue; - - /* If this symbol is defined in a section which we are - discarding, we don't need to keep it, but note that - linker_mark is only reliable for sections that have contents. - For the benefit of the MIPS ELF linker, we check SEC_EXCLUDE - as well as linker_mark. */ - if ((isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE) - && isec != NULL - && ((! isec->linker_mark && (isec->flags & SEC_HAS_CONTENTS) != 0) - || (! finfo->info->relocateable - && (isec->flags & SEC_EXCLUDE) != 0))) - continue; - - /* Get the name of the symbol. */ - name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link, - isym->st_name); - if (name == NULL) - return false; - - /* See if we are discarding symbols with this name. */ - if ((finfo->info->strip == strip_some - && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false) - == NULL)) - || (((finfo->info->discard == discard_sec_merge - && (isec->flags & SEC_MERGE) && ! finfo->info->relocateable) - || finfo->info->discard == discard_l) - && bfd_is_local_label_name (input_bfd, name))) - continue; - - /* If we get here, we are going to output this symbol. */ - - osym = *isym; - - /* Adjust the section index for the output file. */ - osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd, - isec->output_section); - if (osym.st_shndx == SHN_BAD) - return false; - - *pindex = bfd_get_symcount (output_bfd); - - /* ELF symbols in relocateable files are section relative, but - in executable files they are virtual addresses. Note that - this code assumes that all ELF sections have an associated - BFD section with a reasonable value for output_offset; below - we assume that they also have a reasonable value for - output_section. Any special sections must be set up to meet - these requirements. */ - osym.st_value += isec->output_offset; - if (! finfo->info->relocateable) - { - osym.st_value += isec->output_section->vma; - if (ELF_ST_TYPE (osym.st_info) == STT_TLS) - { - /* STT_TLS symbols are relative to PT_TLS segment base. */ - BFD_ASSERT (finfo->first_tls_sec != NULL); - osym.st_value -= finfo->first_tls_sec->vma; - } - } - - if (! elf_link_output_sym (finfo, name, &osym, isec)) - return false; - } - - /* Relocate the contents of each section. */ - sym_hashes = elf_sym_hashes (input_bfd); - for (o = input_bfd->sections; o != NULL; o = o->next) - { - bfd_byte *contents; - - if (! o->linker_mark) - { - /* This section was omitted from the link. */ - continue; - } - - if ((o->flags & SEC_HAS_CONTENTS) == 0 - || (o->_raw_size == 0 && (o->flags & SEC_RELOC) == 0)) - continue; - - if ((o->flags & SEC_LINKER_CREATED) != 0) - { - /* Section was created by elf_link_create_dynamic_sections - or somesuch. */ - continue; - } - - /* Get the contents of the section. They have been cached by a - relaxation routine. Note that o is a section in an input - file, so the contents field will not have been set by any of - the routines which work on output files. */ - if (elf_section_data (o)->this_hdr.contents != NULL) - contents = elf_section_data (o)->this_hdr.contents; - else - { - contents = finfo->contents; - if (! bfd_get_section_contents (input_bfd, o, contents, - (file_ptr) 0, o->_raw_size)) - return false; - } - - if ((o->flags & SEC_RELOC) != 0) - { - Elf_Internal_Rela *internal_relocs; - - /* Get the swapped relocs. */ - internal_relocs = (NAME(_bfd_elf,link_read_relocs) - (input_bfd, o, finfo->external_relocs, - finfo->internal_relocs, false)); - if (internal_relocs == NULL - && o->reloc_count > 0) - return false; - - /* Run through the relocs looking for any against symbols - from discarded sections and section symbols from - removed link-once sections. Complain about relocs - against discarded sections. Zero relocs against removed - link-once sections. We should really complain if - anything in the final link tries to use it, but - DWARF-based exception handling might have an entry in - .eh_frame to describe a routine in the linkonce section, - and it turns out to be hard to remove the .eh_frame - entry too. FIXME. */ - if (!finfo->info->relocateable - && !elf_section_ignore_discarded_relocs (o)) - { - Elf_Internal_Rela *rel, *relend; - - rel = internal_relocs; - relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel; - for ( ; rel < relend; rel++) - { - unsigned long r_symndx = ELF_R_SYM (rel->r_info); - - if (r_symndx >= locsymcount - || (elf_bad_symtab (input_bfd) - && finfo->sections[r_symndx] == NULL)) - { - struct elf_link_hash_entry *h; - - h = sym_hashes[r_symndx - extsymoff]; - while (h->root.type == bfd_link_hash_indirect - || h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - /* Complain if the definition comes from a - discarded section. */ - if ((h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - && elf_discarded_section (h->root.u.def.section)) - { - if ((o->flags & SEC_DEBUGGING) != 0) - { - BFD_ASSERT (r_symndx != 0); - memset (rel, 0, sizeof (*rel)); - } - else - { - if (! ((*finfo->info->callbacks->undefined_symbol) - (finfo->info, h->root.root.string, - input_bfd, o, rel->r_offset, - true))) - return false; - } - } - } - else - { - asection *sec = finfo->sections[r_symndx]; - - if (sec != NULL && elf_discarded_section (sec)) - { - if ((o->flags & SEC_DEBUGGING) != 0 - || (sec->flags & SEC_LINK_ONCE) != 0) - { - BFD_ASSERT (r_symndx != 0); - rel->r_info - = ELF_R_INFO (0, ELF_R_TYPE (rel->r_info)); - rel->r_addend = 0; - } - else - { - boolean ok; - const char *msg - = _("local symbols in discarded section %s"); - bfd_size_type amt - = strlen (sec->name) + strlen (msg) - 1; - char *buf = (char *) bfd_malloc (amt); - - if (buf != NULL) - sprintf (buf, msg, sec->name); - else - buf = (char *) sec->name; - ok = (*finfo->info->callbacks - ->undefined_symbol) (finfo->info, buf, - input_bfd, o, - rel->r_offset, - true); - if (buf != sec->name) - free (buf); - if (!ok) - return false; - } - } - } - } - } - - /* Relocate the section by invoking a back end routine. - - The back end routine is responsible for adjusting the - section contents as necessary, and (if using Rela relocs - and generating a relocateable output file) adjusting the - reloc addend as necessary. - - The back end routine does not have to worry about setting - the reloc address or the reloc symbol index. - - The back end routine is given a pointer to the swapped in - internal symbols, and can access the hash table entries - for the external symbols via elf_sym_hashes (input_bfd). - - When generating relocateable output, the back end routine - must handle STB_LOCAL/STT_SECTION symbols specially. The - output symbol is going to be a section symbol - corresponding to the output section, which will require - the addend to be adjusted. */ - - if (! (*relocate_section) (output_bfd, finfo->info, - input_bfd, o, contents, - internal_relocs, - isymbuf, - finfo->sections)) - return false; - - if (emit_relocs) - { - Elf_Internal_Rela *irela; - Elf_Internal_Rela *irelaend; - struct elf_link_hash_entry **rel_hash; - Elf_Internal_Shdr *input_rel_hdr, *input_rel_hdr2; - unsigned int next_erel; - boolean (*reloc_emitter) PARAMS ((bfd *, asection *, - Elf_Internal_Shdr *, - Elf_Internal_Rela *)); - boolean rela_normal; - - input_rel_hdr = &elf_section_data (o)->rel_hdr; - rela_normal = (bed->rela_normal - && (input_rel_hdr->sh_entsize - == sizeof (Elf_External_Rela))); - - /* Adjust the reloc addresses and symbol indices. */ - - irela = internal_relocs; - irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel; - rel_hash = (elf_section_data (o->output_section)->rel_hashes - + elf_section_data (o->output_section)->rel_count - + elf_section_data (o->output_section)->rel_count2); - for (next_erel = 0; irela < irelaend; irela++, next_erel++) - { - unsigned long r_symndx; - asection *sec; - Elf_Internal_Sym sym; - - if (next_erel == bed->s->int_rels_per_ext_rel) - { - rel_hash++; - next_erel = 0; - } - - irela->r_offset += o->output_offset; - - /* Relocs in an executable have to be virtual addresses. */ - if (!finfo->info->relocateable) - irela->r_offset += o->output_section->vma; - - r_symndx = ELF_R_SYM (irela->r_info); - - if (r_symndx == 0) - continue; - - if (r_symndx >= locsymcount - || (elf_bad_symtab (input_bfd) - && finfo->sections[r_symndx] == NULL)) - { - struct elf_link_hash_entry *rh; - unsigned long indx; - - /* This is a reloc against a global symbol. We - have not yet output all the local symbols, so - we do not know the symbol index of any global - symbol. We set the rel_hash entry for this - reloc to point to the global hash table entry - for this symbol. The symbol index is then - set at the end of elf_bfd_final_link. */ - indx = r_symndx - extsymoff; - rh = elf_sym_hashes (input_bfd)[indx]; - while (rh->root.type == bfd_link_hash_indirect - || rh->root.type == bfd_link_hash_warning) - rh = (struct elf_link_hash_entry *) rh->root.u.i.link; - - /* Setting the index to -2 tells - elf_link_output_extsym that this symbol is - used by a reloc. */ - BFD_ASSERT (rh->indx < 0); - rh->indx = -2; - - *rel_hash = rh; - - continue; - } - - /* This is a reloc against a local symbol. */ - - *rel_hash = NULL; - sym = isymbuf[r_symndx]; - sec = finfo->sections[r_symndx]; - if (ELF_ST_TYPE (sym.st_info) == STT_SECTION) - { - /* I suppose the backend ought to fill in the - section of any STT_SECTION symbol against a - processor specific section. If we have - discarded a section, the output_section will - be the absolute section. */ - if (bfd_is_abs_section (sec) - || (sec != NULL - && bfd_is_abs_section (sec->output_section))) - r_symndx = 0; - else if (sec == NULL || sec->owner == NULL) - { - bfd_set_error (bfd_error_bad_value); - return false; - } - else - { - r_symndx = sec->output_section->target_index; - BFD_ASSERT (r_symndx != 0); - } - - /* Adjust the addend according to where the - section winds up in the output section. */ - if (rela_normal) - irela->r_addend += sec->output_offset; - } - else - { - if (finfo->indices[r_symndx] == -1) - { - unsigned long shlink; - const char *name; - asection *osec; - - if (finfo->info->strip == strip_all) - { - /* You can't do ld -r -s. */ - bfd_set_error (bfd_error_invalid_operation); - return false; - } - - /* This symbol was skipped earlier, but - since it is needed by a reloc, we - must output it now. */ - shlink = symtab_hdr->sh_link; - name = (bfd_elf_string_from_elf_section - (input_bfd, shlink, sym.st_name)); - if (name == NULL) - return false; - - osec = sec->output_section; - sym.st_shndx = - _bfd_elf_section_from_bfd_section (output_bfd, - osec); - if (sym.st_shndx == SHN_BAD) - return false; - - sym.st_value += sec->output_offset; - if (! finfo->info->relocateable) - { - sym.st_value += osec->vma; - if (ELF_ST_TYPE (sym.st_info) == STT_TLS) - { - /* STT_TLS symbols are relative to PT_TLS - segment base. */ - BFD_ASSERT (finfo->first_tls_sec != NULL); - sym.st_value -= finfo->first_tls_sec->vma; - } - } - - finfo->indices[r_symndx] - = bfd_get_symcount (output_bfd); - - if (! elf_link_output_sym (finfo, name, &sym, sec)) - return false; - } - - r_symndx = finfo->indices[r_symndx]; - } - - irela->r_info = ELF_R_INFO (r_symndx, - ELF_R_TYPE (irela->r_info)); - } - - /* Swap out the relocs. */ - if (bed->elf_backend_emit_relocs - && !(finfo->info->relocateable - || finfo->info->emitrelocations)) - reloc_emitter = bed->elf_backend_emit_relocs; - else - reloc_emitter = elf_link_output_relocs; - - if (input_rel_hdr->sh_size != 0 - && ! (*reloc_emitter) (output_bfd, o, input_rel_hdr, - internal_relocs)) - return false; - - input_rel_hdr2 = elf_section_data (o)->rel_hdr2; - if (input_rel_hdr2 && input_rel_hdr2->sh_size != 0) - { - internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr) - * bed->s->int_rels_per_ext_rel); - if (! (*reloc_emitter) (output_bfd, o, input_rel_hdr2, - internal_relocs)) - return false; - } - } - } - - /* Write out the modified section contents. */ - if (bed->elf_backend_write_section - && (*bed->elf_backend_write_section) (output_bfd, o, contents)) - { - /* Section written out. */ - } - else switch (elf_section_data (o)->sec_info_type) - { - case ELF_INFO_TYPE_STABS: - if (! (_bfd_write_section_stabs - (output_bfd, - &elf_hash_table (finfo->info)->stab_info, - o, &elf_section_data (o)->sec_info, contents))) - return false; - break; - case ELF_INFO_TYPE_MERGE: - if (! (_bfd_write_merged_section - (output_bfd, o, elf_section_data (o)->sec_info))) - return false; - break; - case ELF_INFO_TYPE_EH_FRAME: - { - asection *ehdrsec; - - ehdrsec - = bfd_get_section_by_name (elf_hash_table (finfo->info)->dynobj, - ".eh_frame_hdr"); - if (! (_bfd_elf_write_section_eh_frame (output_bfd, o, ehdrsec, - contents))) - return false; - } - break; - default: - { - bfd_size_type sec_size; - - sec_size = (o->_cooked_size != 0 ? o->_cooked_size : o->_raw_size); - if (! (o->flags & SEC_EXCLUDE) - && ! bfd_set_section_contents (output_bfd, o->output_section, - contents, - (file_ptr) o->output_offset, - sec_size)) - return false; - } - break; - } - } - - return true; -} - -/* Generate a reloc when linking an ELF file. This is a reloc - requested by the linker, and does come from any input file. This - is used to build constructor and destructor tables when linking - with -Ur. */ - -static boolean -elf_reloc_link_order (output_bfd, info, output_section, link_order) - bfd *output_bfd; - struct bfd_link_info *info; - asection *output_section; - struct bfd_link_order *link_order; -{ - reloc_howto_type *howto; - long indx; - bfd_vma offset; - bfd_vma addend; - struct elf_link_hash_entry **rel_hash_ptr; - Elf_Internal_Shdr *rel_hdr; - struct elf_backend_data *bed = get_elf_backend_data (output_bfd); - - howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc); - if (howto == NULL) - { - bfd_set_error (bfd_error_bad_value); - return false; - } - - addend = link_order->u.reloc.p->addend; - - /* Figure out the symbol index. */ - rel_hash_ptr = (elf_section_data (output_section)->rel_hashes - + elf_section_data (output_section)->rel_count - + elf_section_data (output_section)->rel_count2); - if (link_order->type == bfd_section_reloc_link_order) - { - indx = link_order->u.reloc.p->u.section->target_index; - BFD_ASSERT (indx != 0); - *rel_hash_ptr = NULL; - } - else - { - struct elf_link_hash_entry *h; - - /* Treat a reloc against a defined symbol as though it were - actually against the section. */ - h = ((struct elf_link_hash_entry *) - bfd_wrapped_link_hash_lookup (output_bfd, info, - link_order->u.reloc.p->u.name, - false, false, true)); - if (h != NULL - && (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak)) - { - asection *section; - - section = h->root.u.def.section; - indx = section->output_section->target_index; - *rel_hash_ptr = NULL; - /* It seems that we ought to add the symbol value to the - addend here, but in practice it has already been added - because it was passed to constructor_callback. */ - addend += section->output_section->vma + section->output_offset; - } - else if (h != NULL) - { - /* Setting the index to -2 tells elf_link_output_extsym that - this symbol is used by a reloc. */ - h->indx = -2; - *rel_hash_ptr = h; - indx = 0; - } - else - { - if (! ((*info->callbacks->unattached_reloc) - (info, link_order->u.reloc.p->u.name, (bfd *) NULL, - (asection *) NULL, (bfd_vma) 0))) - return false; - indx = 0; - } - } - - /* If this is an inplace reloc, we must write the addend into the - object file. */ - if (howto->partial_inplace && addend != 0) - { - bfd_size_type size; - bfd_reloc_status_type rstat; - bfd_byte *buf; - boolean ok; - const char *sym_name; - - size = bfd_get_reloc_size (howto); - buf = (bfd_byte *) bfd_zmalloc (size); - if (buf == (bfd_byte *) NULL) - return false; - rstat = _bfd_relocate_contents (howto, output_bfd, (bfd_vma) addend, buf); - switch (rstat) - { - case bfd_reloc_ok: - break; - - default: - case bfd_reloc_outofrange: - abort (); - - case bfd_reloc_overflow: - if (link_order->type == bfd_section_reloc_link_order) - sym_name = bfd_section_name (output_bfd, - link_order->u.reloc.p->u.section); - else - sym_name = link_order->u.reloc.p->u.name; - if (! ((*info->callbacks->reloc_overflow) - (info, sym_name, howto->name, addend, - (bfd *) NULL, (asection *) NULL, (bfd_vma) 0))) - { - free (buf); - return false; - } - break; - } - ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf, - (file_ptr) link_order->offset, size); - free (buf); - if (! ok) - return false; - } - - /* The address of a reloc is relative to the section in a - relocateable file, and is a virtual address in an executable - file. */ - offset = link_order->offset; - if (! info->relocateable) - offset += output_section->vma; - - rel_hdr = &elf_section_data (output_section)->rel_hdr; - - if (rel_hdr->sh_type == SHT_REL) - { - bfd_size_type size; - Elf_Internal_Rel *irel; - Elf_External_Rel *erel; - unsigned int i; - - size = bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rel); - irel = (Elf_Internal_Rel *) bfd_zmalloc (size); - if (irel == NULL) - return false; - - for (i = 0; i < bed->s->int_rels_per_ext_rel; i++) - irel[i].r_offset = offset; - irel[0].r_info = ELF_R_INFO (indx, howto->type); - - erel = ((Elf_External_Rel *) rel_hdr->contents - + elf_section_data (output_section)->rel_count); - - if (bed->s->swap_reloc_out) - (*bed->s->swap_reloc_out) (output_bfd, irel, (bfd_byte *) erel); - else - elf_swap_reloc_out (output_bfd, irel, erel); - - free (irel); - } - else - { - bfd_size_type size; - Elf_Internal_Rela *irela; - Elf_External_Rela *erela; - unsigned int i; - - size = bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela); - irela = (Elf_Internal_Rela *) bfd_zmalloc (size); - if (irela == NULL) - return false; - - for (i = 0; i < bed->s->int_rels_per_ext_rel; i++) - irela[i].r_offset = offset; - irela[0].r_info = ELF_R_INFO (indx, howto->type); - irela[0].r_addend = addend; - - erela = ((Elf_External_Rela *) rel_hdr->contents - + elf_section_data (output_section)->rel_count); - - if (bed->s->swap_reloca_out) - (*bed->s->swap_reloca_out) (output_bfd, irela, (bfd_byte *) erela); - else - elf_swap_reloca_out (output_bfd, irela, erela); - } - - ++elf_section_data (output_section)->rel_count; - - return true; -} - -/* Allocate a pointer to live in a linker created section. */ - -boolean -elf_create_pointer_linker_section (abfd, info, lsect, h, rel) - bfd *abfd; - struct bfd_link_info *info; - elf_linker_section_t *lsect; - struct elf_link_hash_entry *h; - const Elf_Internal_Rela *rel; -{ - elf_linker_section_pointers_t **ptr_linker_section_ptr = NULL; - elf_linker_section_pointers_t *linker_section_ptr; - unsigned long r_symndx = ELF_R_SYM (rel->r_info); - bfd_size_type amt; - - BFD_ASSERT (lsect != NULL); - - /* Is this a global symbol? */ - if (h != NULL) - { - /* Has this symbol already been allocated? If so, our work is done. */ - if (_bfd_elf_find_pointer_linker_section (h->linker_section_pointer, - rel->r_addend, - lsect->which)) - return true; - - ptr_linker_section_ptr = &h->linker_section_pointer; - /* Make sure this symbol is output as a dynamic symbol. */ - if (h->dynindx == -1) - { - if (! elf_link_record_dynamic_symbol (info, h)) - return false; - } - - if (lsect->rel_section) - lsect->rel_section->_raw_size += sizeof (Elf_External_Rela); - } - else - { - /* Allocation of a pointer to a local symbol. */ - elf_linker_section_pointers_t **ptr = elf_local_ptr_offsets (abfd); - - /* Allocate a table to hold the local symbols if first time. */ - if (!ptr) - { - unsigned int num_symbols = elf_tdata (abfd)->symtab_hdr.sh_info; - register unsigned int i; - - amt = num_symbols; - amt *= sizeof (elf_linker_section_pointers_t *); - ptr = (elf_linker_section_pointers_t **) bfd_alloc (abfd, amt); - - if (!ptr) - return false; - - elf_local_ptr_offsets (abfd) = ptr; - for (i = 0; i < num_symbols; i++) - ptr[i] = (elf_linker_section_pointers_t *) 0; - } - - /* Has this symbol already been allocated? If so, our work is done. */ - if (_bfd_elf_find_pointer_linker_section (ptr[r_symndx], - rel->r_addend, - lsect->which)) - return true; - - ptr_linker_section_ptr = &ptr[r_symndx]; - - if (info->shared) - { - /* If we are generating a shared object, we need to - output a R_<xxx>_RELATIVE reloc so that the - dynamic linker can adjust this GOT entry. */ - BFD_ASSERT (lsect->rel_section != NULL); - lsect->rel_section->_raw_size += sizeof (Elf_External_Rela); - } - } - - /* Allocate space for a pointer in the linker section, and allocate - a new pointer record from internal memory. */ - BFD_ASSERT (ptr_linker_section_ptr != NULL); - amt = sizeof (elf_linker_section_pointers_t); - linker_section_ptr = (elf_linker_section_pointers_t *) bfd_alloc (abfd, amt); - - if (!linker_section_ptr) - return false; - - linker_section_ptr->next = *ptr_linker_section_ptr; - linker_section_ptr->addend = rel->r_addend; - linker_section_ptr->which = lsect->which; - linker_section_ptr->written_address_p = false; - *ptr_linker_section_ptr = linker_section_ptr; - -#if 0 - if (lsect->hole_size && lsect->hole_offset < lsect->max_hole_offset) - { - linker_section_ptr->offset = (lsect->section->_raw_size - - lsect->hole_size + (ARCH_SIZE / 8)); - lsect->hole_offset += ARCH_SIZE / 8; - lsect->sym_offset += ARCH_SIZE / 8; - if (lsect->sym_hash) - { - /* Bump up symbol value if needed. */ - lsect->sym_hash->root.u.def.value += ARCH_SIZE / 8; -#ifdef DEBUG - fprintf (stderr, "Bump up %s by %ld, current value = %ld\n", - lsect->sym_hash->root.root.string, - (long) ARCH_SIZE / 8, - (long) lsect->sym_hash->root.u.def.value); -#endif - } - } - else -#endif - linker_section_ptr->offset = lsect->section->_raw_size; - - lsect->section->_raw_size += ARCH_SIZE / 8; - -#ifdef DEBUG - fprintf (stderr, - "Create pointer in linker section %s, offset = %ld, section size = %ld\n", - lsect->name, (long) linker_section_ptr->offset, - (long) lsect->section->_raw_size); -#endif - - return true; -} - -#if ARCH_SIZE==64 -#define bfd_put_ptr(BFD,VAL,ADDR) bfd_put_64 (BFD, VAL, ADDR) -#endif -#if ARCH_SIZE==32 -#define bfd_put_ptr(BFD,VAL,ADDR) bfd_put_32 (BFD, VAL, ADDR) -#endif - -/* Fill in the address for a pointer generated in a linker section. */ - -bfd_vma -elf_finish_pointer_linker_section (output_bfd, input_bfd, info, lsect, h, - relocation, rel, relative_reloc) - bfd *output_bfd; - bfd *input_bfd; - struct bfd_link_info *info; - elf_linker_section_t *lsect; - struct elf_link_hash_entry *h; - bfd_vma relocation; - const Elf_Internal_Rela *rel; - int relative_reloc; -{ - elf_linker_section_pointers_t *linker_section_ptr; - - BFD_ASSERT (lsect != NULL); - - if (h != NULL) - { - /* Handle global symbol. */ - linker_section_ptr = (_bfd_elf_find_pointer_linker_section - (h->linker_section_pointer, - rel->r_addend, - lsect->which)); - - BFD_ASSERT (linker_section_ptr != NULL); - - if (! elf_hash_table (info)->dynamic_sections_created - || (info->shared - && info->symbolic - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR))) - { - /* This is actually a static link, or it is a - -Bsymbolic link and the symbol is defined - locally. We must initialize this entry in the - global section. - - When doing a dynamic link, we create a .rela.<xxx> - relocation entry to initialize the value. This - is done in the finish_dynamic_symbol routine. */ - if (!linker_section_ptr->written_address_p) - { - linker_section_ptr->written_address_p = true; - bfd_put_ptr (output_bfd, - relocation + linker_section_ptr->addend, - (lsect->section->contents - + linker_section_ptr->offset)); - } - } - } - else - { - /* Handle local symbol. */ - unsigned long r_symndx = ELF_R_SYM (rel->r_info); - BFD_ASSERT (elf_local_ptr_offsets (input_bfd) != NULL); - BFD_ASSERT (elf_local_ptr_offsets (input_bfd)[r_symndx] != NULL); - linker_section_ptr = (_bfd_elf_find_pointer_linker_section - (elf_local_ptr_offsets (input_bfd)[r_symndx], - rel->r_addend, - lsect->which)); - - BFD_ASSERT (linker_section_ptr != NULL); - - /* Write out pointer if it hasn't been rewritten out before. */ - if (!linker_section_ptr->written_address_p) - { - linker_section_ptr->written_address_p = true; - bfd_put_ptr (output_bfd, relocation + linker_section_ptr->addend, - lsect->section->contents + linker_section_ptr->offset); - - if (info->shared) - { - asection *srel = lsect->rel_section; - Elf_Internal_Rela *outrel; - Elf_External_Rela *erel; - struct elf_backend_data *bed = get_elf_backend_data (output_bfd); - unsigned int i; - bfd_size_type amt; - - amt = sizeof (Elf_Internal_Rela) * bed->s->int_rels_per_ext_rel; - outrel = (Elf_Internal_Rela *) bfd_zmalloc (amt); - if (outrel == NULL) - { - (*_bfd_error_handler) (_("Error: out of memory")); - return 0; - } - - /* We need to generate a relative reloc for the dynamic - linker. */ - if (!srel) - { - srel = bfd_get_section_by_name (elf_hash_table (info)->dynobj, - lsect->rel_name); - lsect->rel_section = srel; - } - - BFD_ASSERT (srel != NULL); - - for (i = 0; i < bed->s->int_rels_per_ext_rel; i++) - outrel[i].r_offset = (lsect->section->output_section->vma - + lsect->section->output_offset - + linker_section_ptr->offset); - outrel[0].r_info = ELF_R_INFO (0, relative_reloc); - outrel[0].r_addend = 0; - erel = (Elf_External_Rela *) lsect->section->contents; - erel += elf_section_data (lsect->section)->rel_count; - elf_swap_reloca_out (output_bfd, outrel, erel); - ++elf_section_data (lsect->section)->rel_count; - - free (outrel); - } - } - } - - relocation = (lsect->section->output_offset - + linker_section_ptr->offset - - lsect->hole_offset - - lsect->sym_offset); - -#ifdef DEBUG - fprintf (stderr, - "Finish pointer in linker section %s, offset = %ld (0x%lx)\n", - lsect->name, (long) relocation, (long) relocation); -#endif - - /* Subtract out the addend, because it will get added back in by the normal - processing. */ - return relocation - linker_section_ptr->addend; -} - -/* Garbage collect unused sections. */ - -static boolean elf_gc_mark - PARAMS ((struct bfd_link_info *, asection *, - asection * (*) (asection *, struct bfd_link_info *, - Elf_Internal_Rela *, struct elf_link_hash_entry *, - Elf_Internal_Sym *))); - -static boolean elf_gc_sweep - PARAMS ((struct bfd_link_info *, - boolean (*) (bfd *, struct bfd_link_info *, asection *, - const Elf_Internal_Rela *))); - -static boolean elf_gc_sweep_symbol - PARAMS ((struct elf_link_hash_entry *, PTR)); - -static boolean elf_gc_allocate_got_offsets - PARAMS ((struct elf_link_hash_entry *, PTR)); - -static boolean elf_gc_propagate_vtable_entries_used - PARAMS ((struct elf_link_hash_entry *, PTR)); - -static boolean elf_gc_smash_unused_vtentry_relocs - PARAMS ((struct elf_link_hash_entry *, PTR)); - -/* The mark phase of garbage collection. For a given section, mark - it and any sections in this section's group, and all the sections - which define symbols to which it refers. */ - -static boolean -elf_gc_mark (info, sec, gc_mark_hook) - struct bfd_link_info *info; - asection *sec; - asection * (*gc_mark_hook) PARAMS ((asection *, struct bfd_link_info *, - Elf_Internal_Rela *, - struct elf_link_hash_entry *, - Elf_Internal_Sym *)); -{ - boolean ret; - asection *group_sec; - - sec->gc_mark = 1; - - /* Mark all the sections in the group. */ - group_sec = elf_section_data (sec)->next_in_group; - if (group_sec && !group_sec->gc_mark) - if (!elf_gc_mark (info, group_sec, gc_mark_hook)) - return false; - - /* Look through the section relocs. */ - ret = true; - if ((sec->flags & SEC_RELOC) != 0 && sec->reloc_count > 0) - { - Elf_Internal_Rela *relstart, *rel, *relend; - Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes; - size_t nlocsyms; - size_t extsymoff; - bfd *input_bfd = sec->owner; - struct elf_backend_data *bed = get_elf_backend_data (input_bfd); - Elf_Internal_Sym *isym = NULL; - - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; - sym_hashes = elf_sym_hashes (input_bfd); - - /* Read the local symbols. */ - if (elf_bad_symtab (input_bfd)) - { - nlocsyms = symtab_hdr->sh_size / sizeof (Elf_External_Sym); - extsymoff = 0; - } - else - extsymoff = nlocsyms = symtab_hdr->sh_info; - - isym = (Elf_Internal_Sym *) symtab_hdr->contents; - if (isym == NULL && nlocsyms != 0) - { - isym = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, nlocsyms, 0, - NULL, NULL, NULL); - if (isym == NULL) - return false; - } - - /* Read the relocations. */ - relstart = (NAME(_bfd_elf,link_read_relocs) - (input_bfd, sec, NULL, (Elf_Internal_Rela *) NULL, - info->keep_memory)); - if (relstart == NULL) - { - ret = false; - goto out1; - } - relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel; - - for (rel = relstart; rel < relend; rel++) - { - unsigned long r_symndx; - asection *rsec; - struct elf_link_hash_entry *h; - - r_symndx = ELF_R_SYM (rel->r_info); - if (r_symndx == 0) - continue; - - if (r_symndx >= nlocsyms - || ELF_ST_BIND (isym[r_symndx].st_info) != STB_LOCAL) - { - h = sym_hashes[r_symndx - extsymoff]; - rsec = (*gc_mark_hook) (sec, info, rel, h, NULL); - } - else - { - rsec = (*gc_mark_hook) (sec, info, rel, NULL, &isym[r_symndx]); - } - - if (rsec && !rsec->gc_mark) - { - if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour) - rsec->gc_mark = 1; - else if (!elf_gc_mark (info, rsec, gc_mark_hook)) - { - ret = false; - goto out2; - } - } - } - - out2: - if (elf_section_data (sec)->relocs != relstart) - free (relstart); - out1: - if (isym != NULL && symtab_hdr->contents != (unsigned char *) isym) - { - if (! info->keep_memory) - free (isym); - else - symtab_hdr->contents = (unsigned char *) isym; - } - } - - return ret; -} - -/* The sweep phase of garbage collection. Remove all garbage sections. */ - -static boolean -elf_gc_sweep (info, gc_sweep_hook) - struct bfd_link_info *info; - boolean (*gc_sweep_hook) PARAMS ((bfd *, struct bfd_link_info *, - asection *, const Elf_Internal_Rela *)); -{ - bfd *sub; - - for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) - { - asection *o; - - if (bfd_get_flavour (sub) != bfd_target_elf_flavour) - continue; - - for (o = sub->sections; o != NULL; o = o->next) - { - /* Keep special sections. Keep .debug sections. */ - if ((o->flags & SEC_LINKER_CREATED) - || (o->flags & SEC_DEBUGGING)) - o->gc_mark = 1; - - if (o->gc_mark) - continue; - - /* Skip sweeping sections already excluded. */ - if (o->flags & SEC_EXCLUDE) - continue; - - /* Since this is early in the link process, it is simple - to remove a section from the output. */ - o->flags |= SEC_EXCLUDE; - - /* But we also have to update some of the relocation - info we collected before. */ - if (gc_sweep_hook - && (o->flags & SEC_RELOC) && o->reloc_count > 0) - { - Elf_Internal_Rela *internal_relocs; - boolean r; - - internal_relocs = (NAME(_bfd_elf,link_read_relocs) - (o->owner, o, NULL, NULL, info->keep_memory)); - if (internal_relocs == NULL) - return false; - - r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs); - - if (elf_section_data (o)->relocs != internal_relocs) - free (internal_relocs); - - if (!r) - return false; - } - } - } - - /* Remove the symbols that were in the swept sections from the dynamic - symbol table. GCFIXME: Anyone know how to get them out of the - static symbol table as well? */ - { - int i = 0; - - elf_link_hash_traverse (elf_hash_table (info), - elf_gc_sweep_symbol, - (PTR) &i); - - elf_hash_table (info)->dynsymcount = i; - } - - return true; -} - -/* Sweep symbols in swept sections. Called via elf_link_hash_traverse. */ - -static boolean -elf_gc_sweep_symbol (h, idxptr) - struct elf_link_hash_entry *h; - PTR idxptr; -{ - int *idx = (int *) idxptr; - - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - if (h->dynindx != -1 - && ((h->root.type != bfd_link_hash_defined - && h->root.type != bfd_link_hash_defweak) - || h->root.u.def.section->gc_mark)) - h->dynindx = (*idx)++; - - return true; -} - -/* Propogate collected vtable information. This is called through - elf_link_hash_traverse. */ - -static boolean -elf_gc_propagate_vtable_entries_used (h, okp) - struct elf_link_hash_entry *h; - PTR okp; -{ - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - /* Those that are not vtables. */ - if (h->vtable_parent == NULL) - return true; - - /* Those vtables that do not have parents, we cannot merge. */ - if (h->vtable_parent == (struct elf_link_hash_entry *) -1) - return true; - - /* If we've already been done, exit. */ - if (h->vtable_entries_used && h->vtable_entries_used[-1]) - return true; - - /* Make sure the parent's table is up to date. */ - elf_gc_propagate_vtable_entries_used (h->vtable_parent, okp); - - if (h->vtable_entries_used == NULL) - { - /* None of this table's entries were referenced. Re-use the - parent's table. */ - h->vtable_entries_used = h->vtable_parent->vtable_entries_used; - h->vtable_entries_size = h->vtable_parent->vtable_entries_size; - } - else - { - size_t n; - boolean *cu, *pu; - - /* Or the parent's entries into ours. */ - cu = h->vtable_entries_used; - cu[-1] = true; - pu = h->vtable_parent->vtable_entries_used; - if (pu != NULL) - { - asection *sec = h->root.u.def.section; - struct elf_backend_data *bed = get_elf_backend_data (sec->owner); - int file_align = bed->s->file_align; - - n = h->vtable_parent->vtable_entries_size / file_align; - while (n--) - { - if (*pu) - *cu = true; - pu++; - cu++; - } - } - } - - return true; -} - -static boolean -elf_gc_smash_unused_vtentry_relocs (h, okp) - struct elf_link_hash_entry *h; - PTR okp; -{ - asection *sec; - bfd_vma hstart, hend; - Elf_Internal_Rela *relstart, *relend, *rel; - struct elf_backend_data *bed; - int file_align; - - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - /* Take care of both those symbols that do not describe vtables as - well as those that are not loaded. */ - if (h->vtable_parent == NULL) - return true; - - BFD_ASSERT (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak); - - sec = h->root.u.def.section; - hstart = h->root.u.def.value; - hend = hstart + h->size; - - relstart = (NAME(_bfd_elf,link_read_relocs) - (sec->owner, sec, NULL, (Elf_Internal_Rela *) NULL, true)); - if (!relstart) - return *(boolean *) okp = false; - bed = get_elf_backend_data (sec->owner); - file_align = bed->s->file_align; - - relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel; - - for (rel = relstart; rel < relend; ++rel) - if (rel->r_offset >= hstart && rel->r_offset < hend) - { - /* If the entry is in use, do nothing. */ - if (h->vtable_entries_used - && (rel->r_offset - hstart) < h->vtable_entries_size) - { - bfd_vma entry = (rel->r_offset - hstart) / file_align; - if (h->vtable_entries_used[entry]) - continue; - } - /* Otherwise, kill it. */ - rel->r_offset = rel->r_info = rel->r_addend = 0; - } - - return true; -} - -/* Do mark and sweep of unused sections. */ - -boolean -elf_gc_sections (abfd, info) - bfd *abfd; - struct bfd_link_info *info; -{ - boolean ok = true; - bfd *sub; - asection * (*gc_mark_hook) - PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *, - struct elf_link_hash_entry *h, Elf_Internal_Sym *)); - - if (!get_elf_backend_data (abfd)->can_gc_sections - || info->relocateable || info->emitrelocations - || elf_hash_table (info)->dynamic_sections_created) - return true; - - /* Apply transitive closure to the vtable entry usage info. */ - elf_link_hash_traverse (elf_hash_table (info), - elf_gc_propagate_vtable_entries_used, - (PTR) &ok); - if (!ok) - return false; - - /* Kill the vtable relocations that were not used. */ - elf_link_hash_traverse (elf_hash_table (info), - elf_gc_smash_unused_vtentry_relocs, - (PTR) &ok); - if (!ok) - return false; - - /* Grovel through relocs to find out who stays ... */ - - gc_mark_hook = get_elf_backend_data (abfd)->gc_mark_hook; - for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) - { - asection *o; - - if (bfd_get_flavour (sub) != bfd_target_elf_flavour) - continue; - - for (o = sub->sections; o != NULL; o = o->next) - { - if (o->flags & SEC_KEEP) - if (!elf_gc_mark (info, o, gc_mark_hook)) - return false; - } - } - - /* ... and mark SEC_EXCLUDE for those that go. */ - if (!elf_gc_sweep (info, get_elf_backend_data (abfd)->gc_sweep_hook)) - return false; - - return true; -} - -/* Called from check_relocs to record the existance of a VTINHERIT reloc. */ - -boolean -elf_gc_record_vtinherit (abfd, sec, h, offset) - bfd *abfd; - asection *sec; - struct elf_link_hash_entry *h; - bfd_vma offset; -{ - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; - struct elf_link_hash_entry **search, *child; - bfd_size_type extsymcount; - - /* The sh_info field of the symtab header tells us where the - external symbols start. We don't care about the local symbols at - this point. */ - extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size/sizeof (Elf_External_Sym); - if (!elf_bad_symtab (abfd)) - extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info; - - sym_hashes = elf_sym_hashes (abfd); - sym_hashes_end = sym_hashes + extsymcount; - - /* Hunt down the child symbol, which is in this section at the same - offset as the relocation. */ - for (search = sym_hashes; search != sym_hashes_end; ++search) - { - if ((child = *search) != NULL - && (child->root.type == bfd_link_hash_defined - || child->root.type == bfd_link_hash_defweak) - && child->root.u.def.section == sec - && child->root.u.def.value == offset) - goto win; - } - - (*_bfd_error_handler) ("%s: %s+%lu: No symbol found for INHERIT", - bfd_archive_filename (abfd), sec->name, - (unsigned long) offset); - bfd_set_error (bfd_error_invalid_operation); - return false; - - win: - if (!h) - { - /* This *should* only be the absolute section. It could potentially - be that someone has defined a non-global vtable though, which - would be bad. It isn't worth paging in the local symbols to be - sure though; that case should simply be handled by the assembler. */ - - child->vtable_parent = (struct elf_link_hash_entry *) -1; - } - else - child->vtable_parent = h; - - return true; -} - -/* Called from check_relocs to record the existance of a VTENTRY reloc. */ - -boolean -elf_gc_record_vtentry (abfd, sec, h, addend) - bfd *abfd ATTRIBUTE_UNUSED; - asection *sec ATTRIBUTE_UNUSED; - struct elf_link_hash_entry *h; - bfd_vma addend; -{ - struct elf_backend_data *bed = get_elf_backend_data (abfd); - int file_align = bed->s->file_align; - - if (addend >= h->vtable_entries_size) - { - size_t size, bytes; - boolean *ptr = h->vtable_entries_used; - - /* While the symbol is undefined, we have to be prepared to handle - a zero size. */ - if (h->root.type == bfd_link_hash_undefined) - size = addend; - else - { - size = h->size; - if (size < addend) - { - /* Oops! We've got a reference past the defined end of - the table. This is probably a bug -- shall we warn? */ - size = addend; - } - } - - /* Allocate one extra entry for use as a "done" flag for the - consolidation pass. */ - bytes = (size / file_align + 1) * sizeof (boolean); - - if (ptr) - { - ptr = bfd_realloc (ptr - 1, (bfd_size_type) bytes); - - if (ptr != NULL) - { - size_t oldbytes; - - oldbytes = ((h->vtable_entries_size / file_align + 1) - * sizeof (boolean)); - memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes); - } - } - else - ptr = bfd_zmalloc ((bfd_size_type) bytes); - - if (ptr == NULL) - return false; - - /* And arrange for that done flag to be at index -1. */ - h->vtable_entries_used = ptr + 1; - h->vtable_entries_size = size; - } - - h->vtable_entries_used[addend / file_align] = true; - - return true; -} - -/* And an accompanying bit to work out final got entry offsets once - we're done. Should be called from final_link. */ - -boolean -elf_gc_common_finalize_got_offsets (abfd, info) - bfd *abfd; - struct bfd_link_info *info; -{ - bfd *i; - struct elf_backend_data *bed = get_elf_backend_data (abfd); - bfd_vma gotoff; - - /* The GOT offset is relative to the .got section, but the GOT header is - put into the .got.plt section, if the backend uses it. */ - if (bed->want_got_plt) - gotoff = 0; - else - gotoff = bed->got_header_size; - - /* Do the local .got entries first. */ - for (i = info->input_bfds; i; i = i->link_next) - { - bfd_signed_vma *local_got; - bfd_size_type j, locsymcount; - Elf_Internal_Shdr *symtab_hdr; - - if (bfd_get_flavour (i) != bfd_target_elf_flavour) - continue; - - local_got = elf_local_got_refcounts (i); - if (!local_got) - continue; - - symtab_hdr = &elf_tdata (i)->symtab_hdr; - if (elf_bad_symtab (i)) - locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym); - else - locsymcount = symtab_hdr->sh_info; - - for (j = 0; j < locsymcount; ++j) - { - if (local_got[j] > 0) - { - local_got[j] = gotoff; - gotoff += ARCH_SIZE / 8; - } - else - local_got[j] = (bfd_vma) -1; - } - } - - /* Then the global .got entries. .plt refcounts are handled by - adjust_dynamic_symbol */ - elf_link_hash_traverse (elf_hash_table (info), - elf_gc_allocate_got_offsets, - (PTR) &gotoff); - return true; -} - -/* We need a special top-level link routine to convert got reference counts - to real got offsets. */ - -static boolean -elf_gc_allocate_got_offsets (h, offarg) - struct elf_link_hash_entry *h; - PTR offarg; -{ - bfd_vma *off = (bfd_vma *) offarg; - - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - if (h->got.refcount > 0) - { - h->got.offset = off[0]; - off[0] += ARCH_SIZE / 8; - } - else - h->got.offset = (bfd_vma) -1; - - return true; -} - -/* Many folk need no more in the way of final link than this, once - got entry reference counting is enabled. */ - -boolean -elf_gc_common_final_link (abfd, info) - bfd *abfd; - struct bfd_link_info *info; -{ - if (!elf_gc_common_finalize_got_offsets (abfd, info)) - return false; - - /* Invoke the regular ELF backend linker to do all the work. */ - return elf_bfd_final_link (abfd, info); -} - -/* This function will be called though elf_link_hash_traverse to store - all hash value of the exported symbols in an array. */ - -static boolean -elf_collect_hash_codes (h, data) - struct elf_link_hash_entry *h; - PTR data; -{ - unsigned long **valuep = (unsigned long **) data; - const char *name; - char *p; - unsigned long ha; - char *alc = NULL; - - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - /* Ignore indirect symbols. These are added by the versioning code. */ - if (h->dynindx == -1) - return true; - - name = h->root.root.string; - p = strchr (name, ELF_VER_CHR); - if (p != NULL) - { - alc = bfd_malloc ((bfd_size_type) (p - name + 1)); - memcpy (alc, name, (size_t) (p - name)); - alc[p - name] = '\0'; - name = alc; - } - - /* Compute the hash value. */ - ha = bfd_elf_hash (name); - - /* Store the found hash value in the array given as the argument. */ - *(*valuep)++ = ha; - - /* And store it in the struct so that we can put it in the hash table - later. */ - h->elf_hash_value = ha; - - if (alc != NULL) - free (alc); - - return true; -} - -boolean -elf_reloc_symbol_deleted_p (offset, cookie) - bfd_vma offset; - PTR cookie; -{ - struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie; - - if (rcookie->bad_symtab) - rcookie->rel = rcookie->rels; - - for (; rcookie->rel < rcookie->relend; rcookie->rel++) - { - unsigned long r_symndx = ELF_R_SYM (rcookie->rel->r_info); - - if (! rcookie->bad_symtab) - if (rcookie->rel->r_offset > offset) - return false; - if (rcookie->rel->r_offset != offset) - continue; - - if (r_symndx >= rcookie->locsymcount - || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL) - { - struct elf_link_hash_entry *h; - - h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff]; - - while (h->root.type == bfd_link_hash_indirect - || h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - if ((h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - && elf_discarded_section (h->root.u.def.section)) - return true; - else - return false; - } - else - { - /* It's not a relocation against a global symbol, - but it could be a relocation against a local - symbol for a discarded section. */ - asection *isec; - Elf_Internal_Sym *isym; - - /* Need to: get the symbol; get the section. */ - isym = &rcookie->locsyms[r_symndx]; - if (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE) - { - isec = section_from_elf_index (rcookie->abfd, isym->st_shndx); - if (isec != NULL && elf_discarded_section (isec)) - return true; - } - } - return false; - } - return false; -} - -/* Discard unneeded references to discarded sections. - Returns true if any section's size was changed. */ -/* This function assumes that the relocations are in sorted order, - which is true for all known assemblers. */ - -boolean -elf_bfd_discard_info (output_bfd, info) - bfd *output_bfd; - struct bfd_link_info *info; -{ - struct elf_reloc_cookie cookie; - asection *stab, *eh, *ehdr; - Elf_Internal_Shdr *symtab_hdr; - struct elf_backend_data *bed; - bfd *abfd; - boolean ret = false; - boolean strip = info->strip == strip_all || info->strip == strip_debugger; - - if (info->relocateable - || info->traditional_format - || info->hash->creator->flavour != bfd_target_elf_flavour - || ! is_elf_hash_table (info)) - return false; - - ehdr = NULL; - if (elf_hash_table (info)->dynobj != NULL) - ehdr = bfd_get_section_by_name (elf_hash_table (info)->dynobj, - ".eh_frame_hdr"); - - for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next) - { - if (bfd_get_flavour (abfd) != bfd_target_elf_flavour) - continue; - - bed = get_elf_backend_data (abfd); - - if ((abfd->flags & DYNAMIC) != 0) - continue; - - eh = NULL; - if (ehdr) - { - eh = bfd_get_section_by_name (abfd, ".eh_frame"); - if (eh && (eh->_raw_size == 0 - || bfd_is_abs_section (eh->output_section))) - eh = NULL; - } - - stab = NULL; - if (!strip) - { - stab = bfd_get_section_by_name (abfd, ".stab"); - if (stab && (stab->_raw_size == 0 - || bfd_is_abs_section (stab->output_section))) - stab = NULL; - } - if ((! stab - || elf_section_data(stab)->sec_info_type != ELF_INFO_TYPE_STABS) - && ! eh - && (strip || ! bed->elf_backend_discard_info)) - continue; - - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; - cookie.abfd = abfd; - cookie.sym_hashes = elf_sym_hashes (abfd); - cookie.bad_symtab = elf_bad_symtab (abfd); - if (cookie.bad_symtab) - { - cookie.locsymcount = - symtab_hdr->sh_size / sizeof (Elf_External_Sym); - cookie.extsymoff = 0; - } - else - { - cookie.locsymcount = symtab_hdr->sh_info; - cookie.extsymoff = symtab_hdr->sh_info; - } - - cookie.locsyms = (Elf_Internal_Sym *) symtab_hdr->contents; - if (cookie.locsyms == NULL && cookie.locsymcount != 0) - { - cookie.locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr, - cookie.locsymcount, 0, - NULL, NULL, NULL); - if (cookie.locsyms == NULL) - return false; - } - - if (stab) - { - cookie.rels = (NAME(_bfd_elf,link_read_relocs) - (abfd, stab, (PTR) NULL, (Elf_Internal_Rela *) NULL, - info->keep_memory)); - if (cookie.rels) - { - cookie.rel = cookie.rels; - cookie.relend = - cookie.rels + stab->reloc_count * bed->s->int_rels_per_ext_rel; - if (_bfd_discard_section_stabs (abfd, stab, - elf_section_data (stab)->sec_info, - elf_reloc_symbol_deleted_p, - &cookie)) - ret = true; - if (elf_section_data (stab)->relocs != cookie.rels) - free (cookie.rels); - } - } - - if (eh) - { - cookie.rels = NULL; - cookie.rel = NULL; - cookie.relend = NULL; - if (eh->reloc_count) - cookie.rels = (NAME(_bfd_elf,link_read_relocs) - (abfd, eh, (PTR) NULL, (Elf_Internal_Rela *) NULL, - info->keep_memory)); - if (cookie.rels) - { - cookie.rel = cookie.rels; - cookie.relend = - cookie.rels + eh->reloc_count * bed->s->int_rels_per_ext_rel; - } - if (_bfd_elf_discard_section_eh_frame (abfd, info, eh, ehdr, - elf_reloc_symbol_deleted_p, - &cookie)) - { - /* Relocs have been edited. Ensure edited version is - used later in relocate_section. */ - elf_section_data (eh)->relocs = cookie.rels; - ret = true; - } - if (cookie.rels && elf_section_data (eh)->relocs != cookie.rels) - free (cookie.rels); - } - - if (bed->elf_backend_discard_info) - { - if (bed->elf_backend_discard_info (abfd, &cookie, info)) - ret = true; - } - - if (cookie.locsyms != NULL - && symtab_hdr->contents != (unsigned char *) cookie.locsyms) - { - if (! info->keep_memory) - free (cookie.locsyms); - else - symtab_hdr->contents = (unsigned char *) cookie.locsyms; - } - } - - if (ehdr && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info, ehdr)) - ret = true; - return ret; -} - -static boolean -elf_section_ignore_discarded_relocs (sec) - asection *sec; -{ - struct elf_backend_data *bed; - - switch (elf_section_data (sec)->sec_info_type) - { - case ELF_INFO_TYPE_STABS: - case ELF_INFO_TYPE_EH_FRAME: - return true; - default: - break; - } - - bed = get_elf_backend_data (sec->owner); - if (bed->elf_backend_ignore_discarded_relocs != NULL - && (*bed->elf_backend_ignore_discarded_relocs) (sec)) - return true; - - return false; -} diff --git a/contrib/binutils/bfd/po/POTFILES.in b/contrib/binutils/bfd/po/POTFILES.in deleted file mode 100644 index f75b4ca..0000000 --- a/contrib/binutils/bfd/po/POTFILES.in +++ /dev/null @@ -1,255 +0,0 @@ -aix386-core.c -aout0.c -aout32.c -aout64.c -aout-adobe.c -aout-arm.c -aout-cris.c -aoutf1.h -aout-ns32k.c -aout-sparcle.c -aout-target.h -aout-tic30.c -aoutx.h -archive.c -archures.c -armnetbsd.c -bfd.c -binary.c -bout.c -cache.c -cf-i386lynx.c -cf-m68klynx.c -cf-sparclynx.c -cisco-core.c -coff64-rs6000.c -coff-a29k.c -coff-alpha.c -coff-apollo.c -coff-arm.c -coff-aux.c -coffcode.h -coffgen.c -coff-go32.c -coff-h8300.c -coff-h8500.c -coff-i386.c -coff-i860.c -coff-i960.c -cofflink.c -coff-m68k.c -coff-m88k.c -coff-mips.c -coff-pmac.c -coff-rs6000.c -coff-sh.c -coff-sparc.c -coff-stgo32.c -coff-svm68k.c -coffswap.h -coff-tic30.c -coff-tic54x.c -coff-tic80.c -coff-u68k.c -coff-w65.c -coff-we32k.c -coff-z8k.c -corefile.c -cpu-a29k.c -cpu-alpha.c -cpu-arc.c -cpu-arm.c -cpu-avr.c -cpu-cris.c -cpu-d10v.c -cpu-d30v.c -cpu-fr30.c -cpu-h8300.c -cpu-h8500.c -cpu-hppa.c -cpu-i370.c -cpu-i386.c -cpu-i860.c -cpu-i960.c -cpu-ia64.c -cpu-m10200.c -cpu-m10300.c -cpu-m32r.c -cpu-m68hc11.c -cpu-m68hc12.c -cpu-m68k.c -cpu-m88k.c -cpu-mcore.c -cpu-mips.c -cpu-ns32k.c -cpu-pj.c -cpu-powerpc.c -cpu-rs6000.c -cpu-sh.c -cpu-sparc.c -cpu-tic30.c -cpu-tic54x.c -cpu-tic80.c -cpu-v850.c -cpu-vax.c -cpu-w65.c -cpu-we32k.c -cpu-z8k.c -demo64.c -dwarf1.c -dwarf2.c -ecoff.c -ecofflink.c -ecoffswap.h -efi-app-ia32.c -efi-app-ia64.c -elf32-arc.c -elf32-arm.h -elf32-avr.c -elf32.c -elf32-cris.c -elf32-d10v.c -elf32-d30v.c -elf32-fr30.c -elf32-gen.c -elf32-hppa.c -elf32-hppa.h -elf32-i370.c -elf32-i386.c -elf32-i860.c -elf32-i960.c -elf32-m32r.c -elf32-m68hc11.c -elf32-m68hc12.c -elf32-m68k.c -elf32-m88k.c -elf32-mcore.c -elf32-mips.c -elf32-pj.c -elf32-ppc.c -elf32-sh.c -elf32-sh-lin.c -elf32-sparc.c -elf32-v850.c -elf64-alpha.c -elf64.c -elf64-gen.c -elf64-hppa.c -elf64-hppa.h -elf64-mips.c -elf64-sparc.c -elf64-x86-64.c -elfarm-nabi.c -elfarm-oabi.c -elf-bfd.h -elf.c -elfcode.h -elfcore.h -elf-hppa.h -elflink.c -elflink.h -elf-m10200.c -elf-m10300.c -epoc-pe-arm.c -epoc-pei-arm.c -format.c -freebsd.h -genlink.h -go32stub.h -hash.c -hp300bsd.c -hp300hpux.c -hpux-core.c -i386aout.c -i386bsd.c -i386dynix.c -i386freebsd.c -i386linux.c -i386lynx.c -i386mach3.c -i386msdos.c -i386netbsd.c -i386os9k.c -ieee.c -ihex.c -init.c -irix-core.c -libaout.h -libbfd.c -libbfd.h -libcoff.h -libecoff.h -libhppa.h -libieee.h -libnlm.h -liboasys.h -libpei.h -linker.c -lynx-core.c -m68k4knetbsd.c -m68klinux.c -m68klynx.c -m68knetbsd.c -m88kmach3.c -mipsbsd.c -netbsd.h -newsos3.c -nlm32-alpha.c -nlm32.c -nlm32-i386.c -nlm32-ppc.c -nlm32-sparc.c -nlm64.c -nlm.c -nlmcode.h -nlmswap.h -nlm-target.h -ns32k.h -ns32knetbsd.c -oasys.c -opncls.c -osf-core.c -pc532-mach.c -pe-arm.c -pe-i386.c -pei-arm.c -peicode.h -peigen.c -pei-i386.c -pei-mcore.c -pei-mips.c -pei-ppc.c -pei-sh.c -pe-mcore.c -pe-mips.c -pe-ppc.c -pe-sh.c -ppcboot.c -reloc16.c -reloc.c -riscix.c -sco5-core.c -section.c -som.c -som.h -sparclinux.c -sparclynx.c -sparcnetbsd.c -srec.c -stabs.c -stab-syms.c -sunos.c -syms.c -targets.c -tekhex.c -trad-core.c -vaxnetbsd.c -versados.c -vms.c -vms-gsd.c -vms.h -vms-hdr.c -vms-misc.c -vms-tir.c -xcofflink.c -xcoff-target.h diff --git a/contrib/binutils/binutils/defparse.c b/contrib/binutils/binutils/defparse.c index f51ee33..7cd3a25 100644 --- a/contrib/binutils/binutils/defparse.c +++ b/contrib/binutils/binutils/defparse.c @@ -22,41 +22,43 @@ # define SHARED 273 # define NONSHARED 274 # define NONAME 275 -# define SINGLE 276 -# define MULTIPLE 277 -# define INITINSTANCE 278 -# define INITGLOBAL 279 -# define TERMINSTANCE 280 -# define TERMGLOBAL 281 -# define ID 282 -# define NUMBER 283 +# define PRIVATE 276 +# define SINGLE 277 +# define MULTIPLE 278 +# define INITINSTANCE 279 +# define INITGLOBAL 280 +# define TERMINSTANCE 281 +# define TERMGLOBAL 282 +# define ID 283 +# define NUMBER 284 #line 1 "defparse.y" /* defparse.y - parser for .def files */ -/* Copyright 1995, 1997, 1998, 1999 Free Software Foundation, Inc. +/* Copyright 1995, 1997, 1998, 1999, 2004 + Free Software Foundation, Inc. -This file is part of GNU Binutils. + This file is part of GNU Binutils. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "bfd.h" #include "bucomm.h" #include "dlltool.h" -#line 26 "defparse.y" +#line 27 "defparse.y" #ifndef YYSTYPE typedef union { char *id; @@ -71,12 +73,12 @@ typedef union { -#define YYFINAL 96 +#define YYFINAL 98 #define YYFLAG -32768 -#define YYNTBASE 34 +#define YYNTBASE 35 /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ -#define YYTRANSLATE(x) ((unsigned)(x) <= 283 ? yytranslate[x] : 55) +#define YYTRANSLATE(x) ((unsigned)(x) <= 284 ? yytranslate[x] : 57) /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ static const char yytranslate[] = @@ -85,9 +87,9 @@ static const char yytranslate[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 32, 2, 30, 2, 2, 2, + 2, 2, 2, 2, 33, 2, 31, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 31, 2, 2, 33, 2, 2, 2, 2, 2, + 2, 32, 2, 2, 34, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -109,42 +111,42 @@ static const char yytranslate[] = 2, 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29 + 26, 27, 28, 29, 30 }; #if YYDEBUG static const short yyprhs[] = { 0, 0, 3, 5, 9, 14, 17, 20, 24, 28, - 31, 34, 37, 40, 43, 48, 49, 52, 59, 62, - 64, 72, 80, 86, 92, 98, 104, 108, 112, 115, - 117, 120, 124, 126, 128, 129, 132, 133, 135, 137, - 139, 141, 143, 145, 147, 149, 150, 152, 153, 155, - 156, 158, 162, 163, 166, 167, 170, 175, 176, 180, - 181, 182, 186, 188, 190, 192 + 31, 34, 37, 40, 43, 48, 49, 52, 60, 63, + 65, 73, 81, 87, 93, 99, 105, 109, 113, 116, + 118, 121, 125, 127, 129, 130, 133, 134, 136, 138, + 140, 142, 144, 146, 148, 150, 151, 153, 154, 156, + 157, 159, 160, 162, 166, 167, 170, 171, 174, 179, + 180, 184, 185, 186, 190, 192, 194, 196 }; static const short yyrhs[] = { - 34, 35, 0, 35, 0, 3, 49, 52, 0, 4, - 49, 52, 53, 0, 11, 36, 0, 5, 28, 0, - 6, 29, 44, 0, 7, 29, 44, 0, 8, 42, - 0, 9, 42, 0, 10, 40, 0, 12, 38, 0, - 13, 29, 0, 13, 29, 30, 29, 0, 0, 36, - 37, 0, 28, 51, 50, 47, 46, 48, 0, 38, - 39, 0, 39, 0, 28, 31, 28, 30, 28, 30, - 28, 0, 28, 31, 28, 30, 28, 30, 29, 0, - 28, 31, 28, 30, 28, 0, 28, 31, 28, 30, - 29, 0, 28, 30, 28, 30, 28, 0, 28, 30, - 28, 30, 29, 0, 28, 30, 28, 0, 28, 30, - 29, 0, 40, 41, 0, 41, 0, 28, 42, 0, - 42, 43, 45, 0, 45, 0, 32, 0, 0, 32, - 29, 0, 0, 16, 0, 17, 0, 18, 0, 19, - 0, 20, 0, 22, 0, 23, 0, 15, 0, 0, - 21, 0, 0, 9, 0, 0, 28, 0, 28, 30, - 28, 0, 0, 33, 29, 0, 0, 31, 28, 0, - 31, 28, 30, 28, 0, 0, 14, 31, 29, 0, - 0, 0, 53, 43, 54, 0, 24, 0, 25, 0, - 26, 0, 27, 0 + 35, 36, 0, 36, 0, 3, 51, 54, 0, 4, + 51, 54, 55, 0, 11, 37, 0, 5, 29, 0, + 6, 30, 45, 0, 7, 30, 45, 0, 8, 43, + 0, 9, 43, 0, 10, 41, 0, 12, 39, 0, + 13, 30, 0, 13, 30, 31, 30, 0, 0, 37, + 38, 0, 29, 53, 52, 48, 47, 49, 50, 0, + 39, 40, 0, 40, 0, 29, 32, 29, 31, 29, + 31, 29, 0, 29, 32, 29, 31, 29, 31, 30, + 0, 29, 32, 29, 31, 29, 0, 29, 32, 29, + 31, 30, 0, 29, 31, 29, 31, 29, 0, 29, + 31, 29, 31, 30, 0, 29, 31, 29, 0, 29, + 31, 30, 0, 41, 42, 0, 42, 0, 29, 43, + 0, 43, 44, 46, 0, 46, 0, 33, 0, 0, + 33, 30, 0, 0, 16, 0, 17, 0, 18, 0, + 19, 0, 20, 0, 23, 0, 24, 0, 15, 0, + 0, 21, 0, 0, 9, 0, 0, 22, 0, 0, + 29, 0, 29, 31, 29, 0, 0, 34, 30, 0, + 0, 32, 29, 0, 32, 29, 31, 29, 0, 0, + 14, 32, 30, 0, 0, 0, 55, 44, 56, 0, + 25, 0, 26, 0, 27, 0, 28, 0 }; #endif @@ -153,13 +155,13 @@ static const short yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const short yyrline[] = { - 0, 43, 44, 47, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 63, 65, 68, 72, 74, - 77, 79, 80, 81, 82, 83, 84, 85, 88, 90, - 93, 97, 99, 102, 104, 106, 107, 110, 112, 113, - 114, 115, 116, 117, 120, 122, 125, 127, 130, 132, - 135, 136, 142, 145, 147, 150, 152, 158, 161, 162, - 165, 167, 170, 172, 173, 174 + 0, 44, 45, 48, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 64, 66, 69, 73, 75, + 78, 80, 81, 82, 83, 84, 85, 86, 89, 91, + 94, 98, 100, 103, 105, 107, 108, 111, 113, 114, + 115, 116, 117, 118, 121, 123, 126, 128, 131, 133, + 136, 138, 141, 142, 148, 151, 153, 156, 158, 164, + 167, 168, 171, 173, 176, 178, 179, 180 }; #endif @@ -172,38 +174,38 @@ static const char *const yytname[] = "$", "error", "$undefined.", "NAME", "LIBRARY", "DESCRIPTION", "STACKSIZE", "HEAPSIZE", "CODE", "DATA", "SECTIONS", "EXPORTS", "IMPORTS", "VERSIONK", "BASE", "CONSTANT", "READ", "WRITE", "EXECUTE", - "SHARED", "NONSHARED", "NONAME", "SINGLE", "MULTIPLE", "INITINSTANCE", - "INITGLOBAL", "TERMINSTANCE", "TERMGLOBAL", "ID", "NUMBER", "'.'", - "'='", "','", "'@'", "start", "command", "explist", "expline", - "implist", "impline", "seclist", "secline", "attr_list", "opt_comma", - "opt_number", "attr", "opt_CONSTANT", "opt_NONAME", "opt_DATA", - "opt_name", "opt_ordinal", "opt_equal_name", "opt_base", "option_list", - "option", 0 + "SHARED", "NONSHARED", "NONAME", "PRIVATE", "SINGLE", "MULTIPLE", + "INITINSTANCE", "INITGLOBAL", "TERMINSTANCE", "TERMGLOBAL", "ID", + "NUMBER", "'.'", "'='", "','", "'@'", "start", "command", "explist", + "expline", "implist", "impline", "seclist", "secline", "attr_list", + "opt_comma", "opt_number", "attr", "opt_CONSTANT", "opt_NONAME", + "opt_DATA", "opt_PRIVATE", "opt_name", "opt_ordinal", "opt_equal_name", + "opt_base", "option_list", "option", 0 }; #endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const short yyr1[] = { - 0, 34, 34, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 36, 36, 37, 38, 38, - 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, - 41, 42, 42, 43, 43, 44, 44, 45, 45, 45, - 45, 45, 45, 45, 46, 46, 47, 47, 48, 48, - 49, 49, 49, 50, 50, 51, 51, 51, 52, 52, - 53, 53, 54, 54, 54, 54 + 0, 35, 35, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 37, 37, 38, 39, 39, + 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, + 42, 43, 43, 44, 44, 45, 45, 46, 46, 46, + 46, 46, 46, 46, 47, 47, 48, 48, 49, 49, + 50, 50, 51, 51, 51, 52, 52, 53, 53, 53, + 54, 54, 55, 55, 56, 56, 56, 56 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const short yyr2[] = { 0, 2, 1, 3, 4, 2, 2, 3, 3, 2, - 2, 2, 2, 2, 4, 0, 2, 6, 2, 1, + 2, 2, 2, 2, 4, 0, 2, 7, 2, 1, 7, 7, 5, 5, 5, 5, 3, 3, 2, 1, 2, 3, 1, 1, 0, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, - 1, 3, 0, 2, 0, 2, 4, 0, 3, 0, - 0, 3, 1, 1, 1, 1 + 1, 0, 1, 3, 0, 2, 0, 2, 4, 0, + 3, 0, 0, 3, 1, 1, 1, 1 }; /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE @@ -211,81 +213,83 @@ static const short yyr2[] = error. */ static const short yydefact[] = { - 0, 52, 52, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 2, 50, 59, 59, 6, 36, 36, + 0, 54, 54, 0, 0, 0, 0, 0, 0, 15, + 0, 0, 0, 2, 52, 61, 61, 6, 36, 36, 37, 38, 39, 40, 41, 42, 43, 9, 32, 10, 0, 11, 29, 5, 0, 12, 19, 13, 1, 0, - 0, 3, 60, 0, 7, 8, 33, 0, 30, 28, - 57, 16, 0, 0, 18, 0, 51, 0, 4, 35, - 31, 0, 54, 26, 27, 0, 14, 58, 0, 55, - 0, 47, 0, 0, 62, 63, 64, 65, 61, 0, - 53, 46, 45, 24, 25, 22, 23, 56, 44, 49, - 0, 48, 17, 20, 21, 0, 0 + 0, 3, 62, 0, 7, 8, 33, 0, 30, 28, + 59, 16, 0, 0, 18, 0, 53, 0, 4, 35, + 31, 0, 56, 26, 27, 0, 14, 60, 0, 57, + 0, 47, 0, 0, 64, 65, 66, 67, 63, 0, + 55, 46, 45, 24, 25, 22, 23, 58, 44, 49, + 0, 48, 51, 20, 21, 50, 17, 0, 0 }; static const short yydefgoto[] = { 12, 13, 33, 51, 35, 36, 31, 32, 27, 47, - 44, 28, 89, 82, 92, 15, 71, 62, 41, 58, - 78 + 44, 28, 89, 82, 92, 96, 15, 71, 62, 41, + 58, 78 }; static const short yypact[] = { - 32, -22, -22, -19, -13, 22, 30, 30, -6,-32768, - 26, 38, 21,-32768, 29, 46, 46,-32768, 36, 36, + 32, -12, -12, 17, -8, 33, -4, -4, 35,-32768, + 36, 37, 21,-32768, 38, 48, 48,-32768, 39, 39, -32768,-32768,-32768,-32768,-32768,-32768,-32768, -15,-32768, -15, - 30, -6,-32768, 41, -16, 26,-32768, 40,-32768, 43, - 42,-32768,-32768, 45,-32768,-32768,-32768, 30, -15,-32768, - 44,-32768, -9, 48,-32768, 49,-32768, 50, -14,-32768, - -32768, 52, 39, 47,-32768, 51,-32768,-32768, 31, 53, - 55, 61, 33, 35,-32768,-32768,-32768,-32768,-32768, 57, - -32768,-32768, 71,-32768,-32768, 58,-32768,-32768,-32768, 78, - 37,-32768,-32768,-32768,-32768, 89,-32768 + -4, 35,-32768, 41, -25, 36,-32768, 40,-32768, 44, + 34,-32768,-32768, 45,-32768,-32768,-32768, -4, -15,-32768, + 42,-32768, -19, 47,-32768, 49,-32768, 50, 22,-32768, + -32768, 52, 43, 51,-32768, 53,-32768,-32768, 26, 54, + 56, 57, 27, 29,-32768,-32768,-32768,-32768,-32768, 58, + -32768,-32768, 68,-32768,-32768, 59,-32768,-32768,-32768, 79, + 31,-32768, 46,-32768,-32768,-32768,-32768, 89,-32768 }; static const short yypgoto[] = { - -32768, 79,-32768,-32768,-32768, 59,-32768, 62, -7, 34, - 76, 54,-32768,-32768,-32768, 88,-32768,-32768, 80,-32768, - -32768 + -32768, 80,-32768,-32768,-32768, 60,-32768, 62, -7, 55, + 72, 61,-32768,-32768,-32768,-32768, 92,-32768,-32768, 81, + -32768,-32768 }; -#define YYLAST 101 +#define YYLAST 113 static const short yytable[] = { - 29, -34, -34, -34, -34, -34, 14, -34, -34, 17, - -34, -34, -34, -34, 52, 53, 18, 46, 46, 63, - 64, 95, 30, 48, 1, 2, 3, 4, 5, 6, + 29, -34, -34, -34, -34, -34, 52, 53, -34, -34, + 63, 64, 20, 21, 22, 23, 24, 14, 46, 25, + 26, 97, 18, 48, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 20, 21, 22, 23, - 24, 19, 25, 26, 34, 74, 75, 76, 77, 39, - 40, 83, 84, 85, 86, 93, 94, 37, 43, 50, - 55, 56, 70, 57, 59, 61, 65, 72, 66, 67, - 69, 73, 81, 79, 80, 87, 88, 91, 90, 96, - 16, 38, 68, 49, 54, 45, 42, 0, 0, 0, - 0, 60 + 6, 7, 8, 9, 10, 11, 17, -34, -34, -34, + -34, 74, 75, 76, 77, 46, 83, 84, 85, 86, + 93, 94, 40, 19, 30, 34, 57, 37, 95, 39, + 50, 55, 43, 56, 61, 59, 65, 70, 81, 66, + 67, 69, 72, 88, 73, 79, 80, 87, 91, 98, + 90, 45, 38, 49, 16, 54, 0, 42, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, + 0, 0, 0, 68 }; static const short yycheck[] = { - 7, 16, 17, 18, 19, 20, 28, 22, 23, 28, - 24, 25, 26, 27, 30, 31, 29, 32, 32, 28, - 29, 0, 28, 30, 3, 4, 5, 6, 7, 8, + 7, 16, 17, 18, 19, 20, 31, 32, 23, 24, + 29, 30, 16, 17, 18, 19, 20, 29, 33, 23, + 24, 0, 30, 30, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, - 20, 29, 22, 23, 28, 24, 25, 26, 27, 30, - 14, 28, 29, 28, 29, 28, 29, 29, 32, 28, - 30, 28, 33, 31, 29, 31, 28, 30, 29, 29, - 28, 30, 21, 30, 29, 28, 15, 9, 30, 0, - 2, 12, 58, 31, 35, 19, 16, -1, -1, -1, - -1, 47 + 8, 9, 10, 11, 12, 13, 29, 25, 26, 27, + 28, 25, 26, 27, 28, 33, 29, 30, 29, 30, + 29, 30, 14, 30, 29, 29, 32, 30, 22, 31, + 29, 31, 33, 29, 32, 30, 29, 34, 21, 30, + 30, 29, 31, 15, 31, 31, 30, 29, 9, 0, + 31, 19, 12, 31, 2, 35, -1, 16, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 47, -1, + -1, -1, -1, 58 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/share/bison/bison.simple" +#line 3 "/usr/share/bison-1.35/bison.simple" /* Skeleton output parser for bison, @@ -598,7 +602,7 @@ yystpcpy (yydest, yysrc) # endif #endif -#line 315 "/usr/share/bison/bison.simple" +#line 315 "/usr/share/bison-1.35/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed @@ -992,192 +996,200 @@ yyreduce: switch (yyn) { case 3: -#line 48 "defparse.y" +#line 49 "defparse.y" { def_name (yyvsp[-1].id, yyvsp[0].number); } break; case 4: -#line 49 "defparse.y" +#line 50 "defparse.y" { def_library (yyvsp[-2].id, yyvsp[-1].number); } break; case 6: -#line 51 "defparse.y" +#line 52 "defparse.y" { def_description (yyvsp[0].id);} break; case 7: -#line 52 "defparse.y" +#line 53 "defparse.y" { def_stacksize (yyvsp[-1].number, yyvsp[0].number);} break; case 8: -#line 53 "defparse.y" +#line 54 "defparse.y" { def_heapsize (yyvsp[-1].number, yyvsp[0].number);} break; case 9: -#line 54 "defparse.y" +#line 55 "defparse.y" { def_code (yyvsp[0].number);} break; case 10: -#line 55 "defparse.y" +#line 56 "defparse.y" { def_data (yyvsp[0].number);} break; case 13: -#line 58 "defparse.y" +#line 59 "defparse.y" { def_version (yyvsp[0].number,0);} break; case 14: -#line 59 "defparse.y" +#line 60 "defparse.y" { def_version (yyvsp[-2].number,yyvsp[0].number);} break; case 17: -#line 70 "defparse.y" -{ def_exports (yyvsp[-5].id, yyvsp[-4].id, yyvsp[-3].number, yyvsp[-2].number, yyvsp[-1].number, yyvsp[0].number);} +#line 71 "defparse.y" +{ def_exports (yyvsp[-6].id, yyvsp[-5].id, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].number, yyvsp[-1].number, yyvsp[0].number);} break; case 20: -#line 78 "defparse.y" +#line 79 "defparse.y" { def_import (yyvsp[-6].id,yyvsp[-4].id,yyvsp[-2].id,yyvsp[0].id, 0); } break; case 21: -#line 79 "defparse.y" +#line 80 "defparse.y" { def_import (yyvsp[-6].id,yyvsp[-4].id,yyvsp[-2].id, 0,yyvsp[0].number); } break; case 22: -#line 80 "defparse.y" +#line 81 "defparse.y" { def_import (yyvsp[-4].id,yyvsp[-2].id, 0,yyvsp[0].id, 0); } break; case 23: -#line 81 "defparse.y" +#line 82 "defparse.y" { def_import (yyvsp[-4].id,yyvsp[-2].id, 0, 0,yyvsp[0].number); } break; case 24: -#line 82 "defparse.y" +#line 83 "defparse.y" { def_import ( 0,yyvsp[-4].id,yyvsp[-2].id,yyvsp[0].id, 0); } break; case 25: -#line 83 "defparse.y" +#line 84 "defparse.y" { def_import ( 0,yyvsp[-4].id,yyvsp[-2].id, 0,yyvsp[0].number); } break; case 26: -#line 84 "defparse.y" +#line 85 "defparse.y" { def_import ( 0,yyvsp[-2].id, 0,yyvsp[0].id, 0); } break; case 27: -#line 85 "defparse.y" +#line 86 "defparse.y" { def_import ( 0,yyvsp[-2].id, 0, 0,yyvsp[0].number); } break; case 30: -#line 94 "defparse.y" +#line 95 "defparse.y" { def_section (yyvsp[-1].id,yyvsp[0].number);} break; case 35: -#line 106 "defparse.y" +#line 107 "defparse.y" { yyval.number=yyvsp[0].number;} break; case 36: -#line 107 "defparse.y" +#line 108 "defparse.y" { yyval.number=-1;} break; case 37: -#line 111 "defparse.y" +#line 112 "defparse.y" { yyval.number = 1; } break; case 38: -#line 112 "defparse.y" +#line 113 "defparse.y" { yyval.number = 2; } break; case 39: -#line 113 "defparse.y" +#line 114 "defparse.y" { yyval.number = 4; } break; case 40: -#line 114 "defparse.y" +#line 115 "defparse.y" { yyval.number = 8; } break; case 41: -#line 115 "defparse.y" +#line 116 "defparse.y" { yyval.number = 0; } break; case 42: -#line 116 "defparse.y" +#line 117 "defparse.y" { yyval.number = 0; } break; case 43: -#line 117 "defparse.y" +#line 118 "defparse.y" { yyval.number = 0; } break; case 44: -#line 121 "defparse.y" +#line 122 "defparse.y" {yyval.number=1;} break; case 45: -#line 122 "defparse.y" +#line 123 "defparse.y" {yyval.number=0;} break; case 46: -#line 126 "defparse.y" +#line 127 "defparse.y" {yyval.number=1;} break; case 47: -#line 127 "defparse.y" +#line 128 "defparse.y" {yyval.number=0;} break; case 48: -#line 131 "defparse.y" +#line 132 "defparse.y" { yyval.number = 1; } break; case 49: -#line 132 "defparse.y" +#line 133 "defparse.y" { yyval.number = 0; } break; case 50: -#line 135 "defparse.y" -{ yyval.id =yyvsp[0].id; } +#line 137 "defparse.y" +{ yyval.number = 1; } break; case 51: -#line 137 "defparse.y" +#line 138 "defparse.y" +{ yyval.number = 0; } + break; +case 52: +#line 141 "defparse.y" +{ yyval.id =yyvsp[0].id; } + break; +case 53: +#line 143 "defparse.y" { char *name = xmalloc (strlen (yyvsp[-2].id) + 1 + strlen (yyvsp[0].id) + 1); sprintf (name, "%s.%s", yyvsp[-2].id, yyvsp[0].id); yyval.id = name; } break; -case 52: -#line 142 "defparse.y" +case 54: +#line 148 "defparse.y" { yyval.id=""; } break; -case 53: -#line 146 "defparse.y" +case 55: +#line 152 "defparse.y" { yyval.number=yyvsp[0].number;} break; -case 54: -#line 147 "defparse.y" +case 56: +#line 153 "defparse.y" { yyval.number=-1;} break; -case 55: -#line 151 "defparse.y" +case 57: +#line 157 "defparse.y" { yyval.id = yyvsp[0].id; } break; -case 56: -#line 153 "defparse.y" +case 58: +#line 159 "defparse.y" { char *name = xmalloc (strlen (yyvsp[-2].id) + 1 + strlen (yyvsp[0].id) + 1); sprintf (name, "%s.%s", yyvsp[-2].id, yyvsp[0].id); yyval.id = name; } break; -case 57: -#line 158 "defparse.y" +case 59: +#line 164 "defparse.y" { yyval.id = 0; } break; -case 58: -#line 161 "defparse.y" +case 60: +#line 167 "defparse.y" { yyval.number= yyvsp[0].number;} break; -case 59: -#line 162 "defparse.y" +case 61: +#line 168 "defparse.y" { yyval.number=-1;} break; } -#line 705 "/usr/share/bison/bison.simple" +#line 705 "/usr/share/bison-1.35/bison.simple" yyvsp -= yylen; @@ -1408,4 +1420,4 @@ yyreturn: #endif return yyresult; } -#line 176 "defparse.y" +#line 182 "defparse.y" diff --git a/contrib/binutils/binutils/defparse.h b/contrib/binutils/binutils/defparse.h index ee14652..71a8275 100644 --- a/contrib/binutils/binutils/defparse.h +++ b/contrib/binutils/binutils/defparse.h @@ -28,14 +28,15 @@ typedef union { # define SHARED 273 # define NONSHARED 274 # define NONAME 275 -# define SINGLE 276 -# define MULTIPLE 277 -# define INITINSTANCE 278 -# define INITGLOBAL 279 -# define TERMINSTANCE 280 -# define TERMGLOBAL 281 -# define ID 282 -# define NUMBER 283 +# define PRIVATE 276 +# define SINGLE 277 +# define MULTIPLE 278 +# define INITINSTANCE 279 +# define INITGLOBAL 280 +# define TERMINSTANCE 281 +# define TERMGLOBAL 282 +# define ID 283 +# define NUMBER 284 extern YYSTYPE yylval; diff --git a/contrib/binutils/binutils/defparse.y b/contrib/binutils/binutils/defparse.y index d0bccd9..b58aaee 100644 --- a/contrib/binutils/binutils/defparse.y +++ b/contrib/binutils/binutils/defparse.y @@ -1,22 +1,23 @@ %{ /* defparse.y - parser for .def files */ -/* Copyright 1995, 1997, 1998, 1999 Free Software Foundation, Inc. +/* Copyright 1995, 1997, 1998, 1999, 2004 + Free Software Foundation, Inc. -This file is part of GNU Binutils. + This file is part of GNU Binutils. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "bfd.h" #include "bucomm.h" @@ -30,11 +31,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ %token NAME, LIBRARY, DESCRIPTION, STACKSIZE, HEAPSIZE, CODE, DATA %token SECTIONS, EXPORTS, IMPORTS, VERSIONK, BASE, CONSTANT -%token READ WRITE EXECUTE SHARED NONSHARED NONAME +%token READ WRITE EXECUTE SHARED NONSHARED NONAME PRIVATE %token SINGLE MULTIPLE INITINSTANCE INITGLOBAL TERMINSTANCE TERMGLOBAL %token <id> ID %token <number> NUMBER -%type <number> opt_base opt_ordinal opt_NONAME opt_CONSTANT opt_DATA +%type <number> opt_base opt_ordinal opt_NONAME opt_CONSTANT opt_DATA opt_PRIVATE %type <number> attr attr_list opt_number %type <id> opt_name opt_equal_name @@ -66,8 +67,8 @@ explist: ; expline: - ID opt_equal_name opt_ordinal opt_NONAME opt_CONSTANT opt_DATA - { def_exports ($1, $2, $3, $4, $5, $6);} + ID opt_equal_name opt_ordinal opt_NONAME opt_CONSTANT opt_DATA opt_PRIVATE + { def_exports ($1, $2, $3, $4, $5, $6, $7);} ; implist: implist impline @@ -132,6 +133,11 @@ opt_DATA: | { $$ = 0; } ; +opt_PRIVATE: + PRIVATE { $$ = 1; } + | { $$ = 0; } + ; + opt_name: ID { $$ =$1; } | ID '.' ID { diff --git a/contrib/binutils/binutils/rclex.c b/contrib/binutils/binutils/rclex.c index e5070e3..ff20f2a 100644 --- a/contrib/binutils/binutils/rclex.c +++ b/contrib/binutils/binutils/rclex.c @@ -1,7 +1,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /cvs/src/src/binutils/Attic/rclex.c,v 1.1.12.1 2004/04/09 19:32:15 drow Exp $ + * $Header: /cvs/src/src/binutils/rclex.c,v 1.1.12.1 2004/04/09 19:32:15 drow Exp $ */ #define FLEX_SCANNER diff --git a/contrib/binutils/binutils/rcparse.y b/contrib/binutils/binutils/rcparse.y index 1f10da7..7aacaaa 100644 --- a/contrib/binutils/binutils/rcparse.y +++ b/contrib/binutils/binutils/rcparse.y @@ -1,5 +1,5 @@ %{ /* rcparse.y -- parser for Windows rc files - Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of GNU Binutils. @@ -52,6 +52,11 @@ static unsigned long style; static unsigned long base_style; static unsigned long default_style; static unsigned long class; +static struct res_id res_text_field; + +/* This is used for COMBOBOX, LISTBOX and EDITTEXT which + do not allow resource 'text' field in control definition. */ +static const struct res_id res_null_text = { 1, {{0, L""}}}; %} @@ -135,11 +140,11 @@ static unsigned long class; %type <vervar> vertrans %type <res_info> suboptions memflags_move_discard memflags_move %type <memflags> memflag -%type <id> id resref +%type <id> id optresidc resref %type <il> exstyle parennumber %type <il> numexpr posnumexpr cnumexpr optcnumexpr cposnumexpr %type <is> acc_options acc_option menuitem_flags menuitem_flag -%type <s> optstringc file_name resname +%type <s> file_name resname %type <i> sizednumexpr sizedposnumexpr %left '|' @@ -533,70 +538,78 @@ controls: ; control: - AUTO3STATE + AUTO3STATE optresidc { default_style = BS_AUTO3STATE | WS_TABSTOP; base_style = BS_AUTO3STATE; class = CTL_BUTTON; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; } - | AUTOCHECKBOX + | AUTOCHECKBOX optresidc { default_style = BS_AUTOCHECKBOX | WS_TABSTOP; base_style = BS_AUTOCHECKBOX; class = CTL_BUTTON; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; } - | AUTORADIOBUTTON + | AUTORADIOBUTTON optresidc { default_style = BS_AUTORADIOBUTTON | WS_TABSTOP; base_style = BS_AUTORADIOBUTTON; class = CTL_BUTTON; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; } - | BEDIT + | BEDIT optresidc { default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; class = CTL_EDIT; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; if (dialog.ex == NULL) rcparse_warning (_("BEDIT requires DIALOGEX")); res_string_to_id (&$$->class, "BEDIT"); } - | CHECKBOX + | CHECKBOX optresidc { default_style = BS_CHECKBOX | WS_TABSTOP; base_style = BS_CHECKBOX | WS_TABSTOP; class = CTL_BUTTON; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; } | COMBOBOX { + /* This is as per MSDN documentation. With some (???) + versions of MS rc.exe their is no default style. */ default_style = CBS_SIMPLE | WS_TABSTOP; base_style = 0; class = CTL_COMBOBOX; + res_text_field = res_null_text; } control_params { $$ = $3; } - | CONTROL optstringc numexpr cnumexpr control_styleexpr cnumexpr + | CONTROL optresidc numexpr cnumexpr control_styleexpr cnumexpr cnumexpr cnumexpr cnumexpr optcnumexpr opt_control_data { $$ = define_control ($2, $3, $6, $7, $8, $9, $4, style, $10); @@ -607,7 +620,7 @@ control: $$->data = $11; } } - | CONTROL optstringc numexpr cnumexpr control_styleexpr cnumexpr + | CONTROL optresidc numexpr cnumexpr control_styleexpr cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr opt_control_data { $$ = define_control ($2, $3, $6, $7, $8, $9, $4, style, $10); @@ -616,7 +629,7 @@ control: $$->help = $11; $$->data = $12; } - | CONTROL optstringc numexpr ',' QUOTEDSTRING control_styleexpr + | CONTROL optresidc numexpr ',' QUOTEDSTRING control_styleexpr cnumexpr cnumexpr cnumexpr cnumexpr optcnumexpr opt_control_data { $$ = define_control ($2, $3, $7, $8, $9, $10, 0, style, $11); @@ -629,7 +642,7 @@ control: $$->class.named = 1; unicode_from_ascii (&$$->class.u.n.length, &$$->class.u.n.name, $5); } - | CONTROL optstringc numexpr ',' QUOTEDSTRING control_styleexpr + | CONTROL optresidc numexpr ',' QUOTEDSTRING control_styleexpr cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr opt_control_data { $$ = define_control ($2, $3, $7, $8, $9, $10, 0, style, $11); @@ -640,55 +653,60 @@ control: $$->class.named = 1; unicode_from_ascii (&$$->class.u.n.length, &$$->class.u.n.name, $5); } - | CTEXT + | CTEXT optresidc { default_style = SS_CENTER | WS_GROUP; base_style = SS_CENTER; class = CTL_STATIC; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; } - | DEFPUSHBUTTON + | DEFPUSHBUTTON optresidc { default_style = BS_DEFPUSHBUTTON | WS_TABSTOP; base_style = BS_DEFPUSHBUTTON | WS_TABSTOP; class = CTL_BUTTON; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; } | EDITTEXT { default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; class = CTL_EDIT; + res_text_field = res_null_text; } control_params { $$ = $3; } - | GROUPBOX + | GROUPBOX optresidc { default_style = BS_GROUPBOX; base_style = BS_GROUPBOX; class = CTL_BUTTON; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; } - | HEDIT + | HEDIT optresidc { default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; class = CTL_EDIT; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; if (dialog.ex == NULL) rcparse_warning (_("IEDIT requires DIALOGEX")); res_string_to_id (&$$->class, "HEDIT"); @@ -716,15 +734,16 @@ control: $$ = define_icon_control ($2, $3, $4, $5, style, $9, $10, $11, dialog.ex); } - | IEDIT + | IEDIT optresidc { default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; class = CTL_EDIT; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; if (dialog.ex == NULL) rcparse_warning (_("IEDIT requires DIALOGEX")); res_string_to_id (&$$->class, "IEDIT"); @@ -734,22 +753,24 @@ control: default_style = LBS_NOTIFY | WS_BORDER; base_style = LBS_NOTIFY | WS_BORDER; class = CTL_LISTBOX; + res_text_field = res_null_text; } control_params { $$ = $3; } - | LTEXT + | LTEXT optresidc { default_style = SS_LEFT | WS_GROUP; base_style = SS_LEFT; class = CTL_STATIC; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; } - | PUSHBOX + | PUSHBOX optresidc { default_style = BS_PUSHBOX | WS_TABSTOP; base_style = BS_PUSHBOX; @@ -757,65 +778,70 @@ control: } control_params { - $$ = $3; + $$ = $4; } - | PUSHBUTTON + | PUSHBUTTON optresidc { default_style = BS_PUSHBUTTON | WS_TABSTOP; base_style = BS_PUSHBUTTON | WS_TABSTOP; class = CTL_BUTTON; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; } - | RADIOBUTTON + | RADIOBUTTON optresidc { default_style = BS_RADIOBUTTON | WS_TABSTOP; base_style = BS_RADIOBUTTON; class = CTL_BUTTON; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; } - | RTEXT + | RTEXT optresidc { default_style = SS_RIGHT | WS_GROUP; base_style = SS_RIGHT; class = CTL_STATIC; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; } | SCROLLBAR { default_style = SBS_HORZ; base_style = 0; class = CTL_SCROLLBAR; + res_text_field = res_null_text; } control_params { $$ = $3; } - | STATE3 + | STATE3 optresidc { default_style = BS_3STATE | WS_TABSTOP; base_style = BS_3STATE; class = CTL_BUTTON; + res_text_field = $2; } control_params { - $$ = $3; + $$ = $4; } - | USERBUTTON QUOTEDSTRING ',' numexpr ',' numexpr ',' numexpr ',' + | USERBUTTON resref numexpr ',' numexpr ',' numexpr ',' numexpr ',' numexpr ',' { style = WS_CHILD | WS_VISIBLE; } styleexpr optcnumexpr { - $$ = define_control ($2, $4, $6, $8, $10, $12, CTL_BUTTON, - style, $16); + $$ = define_control ($2, $3, $5, $7, $9, $11, CTL_BUTTON, + style, $15); } ; @@ -827,52 +853,56 @@ control: style. CLASS is the class of the control. */ control_params: - optstringc numexpr cnumexpr cnumexpr cnumexpr cnumexpr - opt_control_data + numexpr cnumexpr cnumexpr cnumexpr cnumexpr opt_control_data { - $$ = define_control ($1, $2, $3, $4, $5, $6, class, + $$ = define_control (res_text_field, $1, $2, $3, $4, $5, class, default_style | WS_CHILD | WS_VISIBLE, 0); - if ($7 != NULL) + if ($6 != NULL) { if (dialog.ex == NULL) rcparse_warning (_("control data requires DIALOGEX")); - $$->data = $7; + $$->data = $6; } } - | optstringc numexpr cnumexpr cnumexpr cnumexpr cnumexpr + | numexpr cnumexpr cnumexpr cnumexpr cnumexpr control_params_styleexpr optcnumexpr opt_control_data { - $$ = define_control ($1, $2, $3, $4, $5, $6, class, style, $8); - if ($9 != NULL) + $$ = define_control (res_text_field, $1, $2, $3, $4, $5, class, style, $7); + if ($8 != NULL) { if (dialog.ex == NULL) rcparse_warning (_("control data requires DIALOGEX")); - $$->data = $9; + $$->data = $8; } } - | optstringc numexpr cnumexpr cnumexpr cnumexpr cnumexpr + | numexpr cnumexpr cnumexpr cnumexpr cnumexpr control_params_styleexpr cnumexpr cnumexpr opt_control_data { - $$ = define_control ($1, $2, $3, $4, $5, $6, class, style, $8); + $$ = define_control (res_text_field, $1, $2, $3, $4, $5, class, style, $7); if (dialog.ex == NULL) rcparse_warning (_("help ID requires DIALOGEX")); - $$->help = $9; - $$->data = $10; + $$->help = $8; + $$->data = $9; } ; -optstringc: +optresidc: /* empty */ { - $$ = NULL; + res_string_to_id (&$$, ""); + } + | posnumexpr ',' + { + $$.named = 0; + $$.u.id = $1; } | QUOTEDSTRING { - $$ = $1; + res_string_to_id (&$$, $1); } | QUOTEDSTRING ',' { - $$ = $1; + res_string_to_id (&$$, $1); } ; @@ -1732,8 +1762,7 @@ sizedposnumexpr: /* Set the language from the command line. */ void -rcparse_set_language (lang) - int lang; +rcparse_set_language (int lang) { language = lang; } diff --git a/contrib/binutils/binutils/sysinfo.y b/contrib/binutils/binutils/sysinfo.y index 4aa4607..bf19263 100644 --- a/contrib/binutils/binutils/sysinfo.y +++ b/contrib/binutils/binutils/sysinfo.y @@ -1,4 +1,4 @@ -/* Copyright 2001 Free Software Foundation, Inc. +/* Copyright 2001, 2003 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com). This file is part of GNU binutils. @@ -406,7 +406,7 @@ enum_list: %% /* four modes - -d write structure defintions for sysroff in host format + -d write structure definitions for sysroff in host format -i write functions to swap into sysroff format in -o write functions to swap into sysroff format out -c write code to print info in human form */ @@ -415,9 +415,7 @@ int yydebug; char writecode; int -main(ac,av) -int ac; -char **av; +main (int ac, char **av) { yydebug=0; if (ac > 1) @@ -434,8 +432,7 @@ return 0; } int -yyerror(s) - char *s; +yyerror (char *s) { fprintf(stderr, "%s\n" , s); return 0; diff --git a/contrib/binutils/binutils/syslex.l b/contrib/binutils/binutils/syslex.l index 553cbdc..ffaf4fa 100644 --- a/contrib/binutils/binutils/syslex.l +++ b/contrib/binutils/binutils/syslex.l @@ -1,5 +1,5 @@ %{ -/* Copyright 2001 Free Software Foundation, Inc. +/* Copyright 2001, 2003 Free Software Foundation, Inc. This file is part of GLD, the Gnu Linker. @@ -24,7 +24,7 @@ int number; int unit; #ifndef yywrap -static int yywrap () { return 1; } +static int yywrap (void) { return 1; } #endif %} %% diff --git a/contrib/binutils/config/ChangeLog b/contrib/binutils/config/ChangeLog index 129ce61..85868b4 100644 --- a/contrib/binutils/config/ChangeLog +++ b/contrib/binutils/config/ChangeLog @@ -1,3 +1,82 @@ +2004-01-14 Maciej W. Rozycki <macro@ds2.pg.gda.pl> + + * acinclude.m4: Quote names of macros to be defined by AC_DEFUN + throughout. + * aclocal.m4: Regenerate. + * configure: Regenerate. + +2003-10-14 Nathanael Nerode <neroden@gcc.gnu.org> + + * gettext.m4: Properly quote arguments to AC_DEFUN. + +2003-09-24 Daniel Jacobowitz <drow@mvista.com> + + * acx.m4 (AC_PROG_CPP_WERROR): New. + +2003-08-27 Daniel Jacobowitz <drow@mvista.com> + + * no-executables.m4: New file. + +2003-07-07 Zack Weinberg <zack@codesourcery.com> + + * gettext.m4: Delete all former contents. + (ZW_GNU_GETTEXT_SISTER_DIR): New macro. + * progtest.m4: New file. + +2003-07-04 Zack Weinberg <zack@codesourcery.com> + + * gettext.m4: New file - copy of gettext.m4 from binutils + CVS, with added AC_ISC_POSIX macro from gcc/aclocal.m4. + +2003-05-14 Kelley Cook <kelleycook@wideopenwest.com> + + * acinclude.m4: Accept i[3456789]86 for machine type. + +2003-05-18 Nathanael Nerode <neroden@gcc.gnu.org> + + * acx.m4: Introduce _GCC_TOPLEV_NONCANONICAL_BUILD, + _GCC_TOPLEV_NONCANOICAL_HOST, _GCC_TOPLEV_NONCANONICAL_TARGET, + GCC_TOPLEV_SUBDIRS. + +2003-03-04 Nathanael Nerode <neroden@gcc.gnu.org> + + * mh-dgux: Delete. + +2002-12-28 Alexandre Oliva <aoliva@redhat.com> + + * acx.m4: Name cache variables properly. + (NCN_STRICT_CHECK_TOOL): If program is not found and + value-if-not-found is empty, use ${ncn_tool_prefix}$2 or $2, + depending on whether build != host or not. + (NCN_STRICT_CHECK_TARGET_TOOL): Ditto, with the target prefix. + +2002-12-28 Nathanael Nerode <neroden@gcc.gnu.org> + + * acx.m4: New. + * mh-a68bsd, mh-aix386, mh-apollo68, mh-delta88, mh-hp300, + mh-hpux, mh-hpux8, mh-irix5, mh-irix6, mh-ncrsvr43, mh-openedition, + mh-riscos, mh-sysv: Delete. + * mh-cxux, mh-dgux386, mh-interix, mh-lynxrs6k, mh-ncr3000, + mh-necv4, mh-sco, mh-solaris, mh-sysv4, mh-sysv5, mt-v810: Simplify. + +2002-12-16 Christopher Faylor <cgf@redhat.com> + + * mh-cygwin: Don't build libtermcap if it doesn't exist. + +2002-12-22 Geoffrey Keating <geoffk@apple.com> + + * mt-aix43: Delete. + +2002-11-23 H.J. Lu <hjl@gnu.org> + + * accross.m4: New. + +2002-11-10 Stan Shebs <shebs@apple.com> + + Retire common MPW configury bits. + * mpw-mh-mpw: Remove. + * mpw: Remove directory along with all of its files. + 2002-05-16 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE> * acinclude.m4: Allow for PWDCMD to override hardcoded pwd. @@ -10,33 +89,33 @@ 2002-04-29 Nathanael Nerode <neroden@twcny.rr.com> - * config/mh-cxux: remove dead code - * config/mh-dgux386: remove dead code - * config/mh-hp300: remove dead code - * config/mh-hpux: remove dead code - * config/mh-hpux8: remove dead code - * config/mh-irix5: remove dead code - * config/mh-irix6: remove dead code - * config/mh-ncr3000: remove dead code - * config/mh-ncrsvr43: remove dead code - * config/mh-necv4: remove dead code - * config/mh-sco: remove dead code - * config/mh-solaris: remove dead code - * config/mh-sysv: remove dead code - * config/mh-sysv4: remove dead code - * config/mh-sysv5: remove dead code - * config/mh-irix4: remove, contains only dead code - - * config/mt-armpic: Delete. - * config/mt-elfalphapic: Delete. - * config/mt-i370pic: Delete. - * config/mt-ia64pic: Delete. - * config/mt-m68kpic: Delete. - * config/mt-papic: Delete. - * config/mt-ppcpic: Delete. - * config/mt-s390pic: Delete. - * config/mt-sparcpic: Delete. - * config/mt-x86pic: Delete. + * mh-cxux: remove dead code + * mh-dgux386: remove dead code + * mh-hp300: remove dead code + * mh-hpux: remove dead code + * mh-hpux8: remove dead code + * mh-irix5: remove dead code + * mh-irix6: remove dead code + * mh-ncr3000: remove dead code + * mh-ncrsvr43: remove dead code + * mh-necv4: remove dead code + * mh-sco: remove dead code + * mh-solaris: remove dead code + * mh-sysv: remove dead code + * mh-sysv4: remove dead code + * mh-sysv5: remove dead code + * mh-irix4: remove, contains only dead code + + * mt-armpic: Delete. + * mt-elfalphapic: Delete. + * mt-i370pic: Delete. + * mt-ia64pic: Delete. + * mt-m68kpic: Delete. + * mt-papic: Delete. + * mt-ppcpic: Delete. + * mt-s390pic: Delete. + * mt-sparcpic: Delete. + * mt-x86pic: Delete. 2002-04-19 Nathanael Nerode <neroden@twcny.rr.com> @@ -94,13 +173,17 @@ 2000-07-21 Andrew Haley <aph@cygnus.com> * mh-ia64pic: New file. - * mt-ia64pic: New file. + * mt-ia64pic: New file. 2001-02-09 Martin Schwidefsky <schwidefsky@de.ibm.com> * mh-s390pic: New file. * mt-s390pic: New file. +2000-09-26 David Edelsohn <edelsohn@gnu.org> + + * mt-aix43 (NM_FOR_TARGET): Add -B bsd-style flag. + 2000-07-14 Mark P Mitchell <mark@codesourcery.com> * mh-irix6 (CC): Don't set it. @@ -121,7 +204,7 @@ 2000-02-22 Nick Clifton <nickc@cygnus.com> - * config/mt-wince: new file: Makefile fragment for WinCE targets. + * mt-wince: new file: Makefile fragment for WinCE targets. 2000-01-06 Geoff Keating <geoffk@cygnus.com> @@ -136,6 +219,15 @@ Tue Sep 7 23:31:01 1999 Linas Vepstas <linas@linas.org> * mt-d30v: New file, pass -g -Os -Wa,-C as default options. +Thu Mar 18 00:17:50 1999 Mark Elbrecht <snowball3@usa.net> + + * mh-go32: Delete. + * mh-djgpp: New. Renamed from mh-go32. + +Wed Feb 24 12:52:17 1999 Stan Shebs <shebs@andros.cygnus.com> + + * mh-windows: Ditto. + 1999-02-08 Syd Polk <spolk@cygnus.com> * acinclude.m4: Added macros to find itcl files. @@ -149,11 +241,23 @@ Tue Feb 2 22:51:21 1999 Philip Blundell <philb@gnu.org> * mh-armpic: New file. Patch from Jim Pick <jim@jimpick.com>. * mt-armpic: Likewise. +Sat Jan 30 08:04:00 1999 Mumit Khan <khan@xraylith.wisc.edu> + + * mh-interix: New file. + Mon Jan 18 19:41:08 1999 Christopher Faylor <cgf@cygnus.com> * cygwin.mh: Activate commented out dependencies for gdb: libtermcap. +Wed Dec 30 20:34:52 1998 Christopher Faylor <cgf@cygnus.com> + + * mt-cygwin: Remove. + +Wed Dec 30 01:13:03 1998 Christopher Faylor <cgf@cygnus.com> + + * mt-cygwin: New file. libtermcap target info. + Wed Nov 18 20:29:46 1998 Christopher Faylor <cgf@cygnus.com> * cygwin.mh: Add extra libtermcap target information. @@ -162,8 +266,8 @@ Wed Nov 18 20:29:46 1998 Christopher Faylor <cgf@cygnus.com> Mon Nov 2 15:15:33 1998 Geoffrey Noer <noer@cygnus.com> - * mh-cygwin32: delete - * mh-cygwin: was mh-cygwin32 + * mh-cygwin32: delete + * mh-cygwin: was mh-cygwin32 1998-10-26 Syd Polk <spolk@cygnus.com> @@ -190,7 +294,7 @@ Mon Aug 10 00:15:47 1998 HJ Lu (hjl@gnu.org) 1998-05-29 Rob Savoye <rob@chinadoll.cygnus.com> * acinclude.m4: New collection of generic autoconf macros. - + Wed Apr 22 12:24:28 1998 Michael Meissner <meissner@cygnus.com> * mt-ospace: New file, support using -Os instead of -O2 to compile @@ -208,10 +312,29 @@ Thu Mar 26 01:54:25 1998 Geoffrey Noer <noer@cygnus.com> * mh-cygwin32: stop configuring and building dosrel. +Fri Feb 6 01:33:52 1998 Manfred Hollstein <manfred@s-direktnet.de> + + * mh-sparcpic (PICFLAG): Define to properly according + to current multilib configuration. + * mt-sparcpic (PICFLAG_FOR_TARGET): Define to properly + according to current multilib configuration. + +Sun Jan 4 01:06:55 1998 Mumit Khan <khan@xraylith.wisc.edu> + + * mh-mingw32: New file. + Thu Sep 11 16:43:27 1997 Jim Wilson <wilson@cygnus.com> * mh-elfalphapic, mt-elfalphapic: New files. +1997-09-15 02:37 Ulrich Drepper <drepper@cygnus.com> + + * mt-linux: Define CXXFLAGS to make sure -fvtable-thunks is used. + +Sun Sep 14 20:53:42 1997 Geoffrey Noer <noer@cygnus.com> + + * mh-cygwin32: ok to build split texinfo files + Wed Jul 23 12:32:18 1997 Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE> * mh-go32 (CFLAGS): Don't set -fno-omit-frame-pointer. @@ -233,8 +356,8 @@ Tue Mar 25 18:16:43 1997 Geoffrey Noer <noer@cygnus.com> Wed Jan 8 19:56:43 1997 Geoffrey Noer <noer@cygnus.com> - * mh-cygwin32: override CFLAGS so debug info isn't included - in cygwin32-hosted tools by default + * mh-cygwin32: override CFLAGS so debug info isn't included + in cygwin32-hosted tools by default Tue Dec 31 16:04:26 1996 Ian Lance Taylor <ian@cygnus.com> @@ -244,6 +367,20 @@ Mon Nov 11 10:29:51 1996 Michael Meissner <meissner@tiktok.cygnus.com> * mt-ppc: Delete file, options moved to newlib configure. +Mon Oct 28 17:32:46 1996 Stu Grossman (grossman@critters.cygnus.com) + + * mh-windows: Add rules for building MSVC makefiles. + +Thu Oct 24 09:02:07 1996 Stu Grossman (grossman@critters.cygnus.com) + + * mh-windows (HOST_FLAGS): Set srcroot, which is needed + for MSVC build procedure. + +Tue Oct 8 08:32:48 1996 Stu Grossman (grossman@critters.cygnus.com) + + * mh-windows: Add support for windows host + (that is a build done under the Microsoft build environment). + Fri Oct 4 12:21:03 1996 Angela Marie Thomas (angela@cygnus.com) * mh-dgux386: New file. x86 dgux specific flags @@ -257,6 +394,11 @@ Sat Aug 17 04:56:25 1996 Geoffrey Noer <noer@skaro.cygnus.com> * mh-cygwin32: don't -D_WIN32 here anymore +Sun Aug 11 20:51:50 1996 Stu Grossman (grossman@critters.cygnus.com) + + * mh-cygwin32 (CFLAGS): Define _WIN32 to be compatible + with normal Windows compilation environment. + Thu Aug 15 19:46:44 1996 Stan Shebs <shebs@andros.cygnus.com> * mpw-mh-mpw (SEGFLAG_68K, SEGFLAG_PPC): Remove. @@ -326,13 +468,28 @@ Thu Jan 25 16:05:33 1996 Ian Lance Taylor <ian@cygnus.com> * mh-ncrsvr43 (CFLAGS): Remove -Hnocopyr. +Thu Nov 30 14:45:25 1995 J.T. Conklin <jtc@rtl.cygnus.com> + + * mt-v810 (CC_FOR_TARGET): Add -ansi flag. NEC compiler + defaults to K&R mode, but doesn't have varargs.h, so we have to + compile in ANSI mode. + +Wed Nov 29 13:49:08 1995 J.T. Conklin <jtc@rtl.cygnus.com> + + * mt-v810 (CC_FOR_TARGET, AS_FOR_TARGET, AR_FOR_TARGET, + RANLIB_FOR_TARGET): Set as appropriate for NEC v810 toolchain. + +Tue Nov 14 15:03:12 1995 Jason Molenda (crash@phydeaux.cygnus.com) + + * mh-i386win32: add LD_FOR_TARGET. + Tue Nov 7 15:41:30 1995 Stan Shebs <shebs@andros.cygnus.com> * mpw-mh-mpw (CC_MWC68K, CC_MWCPPC): Remove unused include path. (CC_MWCPPC): Add -mpw_chars, disable warnings, add comments explaining reasons for various flags. (EXTRALIBS_PPC, EXTRALIBS_MWCPPC ): Put runtime library first. - + Fri Oct 13 14:44:25 1995 Jason Molenda (crash@phydeaux.cygnus.com) * mh-aix, mh-sun: Removed. @@ -341,7 +498,7 @@ Fri Oct 13 14:44:25 1995 Jason Molenda (crash@phydeaux.cygnus.com) * mh-sco, mh-solaris, mh-sysv4 (X11_EXTRA_LIBS): Define. - * mh-hp300, mh-hpux, mh-hpux8, mh-solaris, mh-sun3, mh-sysv4: Don't + * mh-hp300, mh-hpux, mh-hpux8, mh-solaris, mh-sun3, mh-sysv4: Don't hardcode location of X stuff here. Thu Sep 28 13:14:56 1995 Stan Shebs <shebs@andros.cygnus.com> @@ -350,6 +507,10 @@ Thu Sep 28 13:14:56 1995 Stan Shebs <shebs@andros.cygnus.com> compilers, add definitions for library and link steps for PowerMacs. +Sat Sep 16 18:31:08 PDT 1995 Angela Marie Thomas <angela@cygnus.com> + + * mh-ncrsvr43: Removed AR_FLAGS + Thu Sep 14 08:20:04 1995 Fred Fish <fnf@cygnus.com> * mh-hp300 (CC): Add "CC = cc -Wp,-H256000" to avoid @@ -364,10 +525,14 @@ Thu Jun 22 17:47:24 1995 Stan Shebs <shebs@andros.cygnus.com> * mpw-mh-mpw (CC): Define ANSI_PROTOTYPES. +Mon Jun 5 18:26:36 1995 Jason Merrill <jason@phydeaux.cygnus.com> + + * m?-*pic: Define PICFLAG* instead of LIB*FLAGS*. + Mon Apr 10 12:29:48 1995 Stan Shebs <shebs@andros.cygnus.com> * mpw-mh-mpw (EXTRALIBS): Always link in Math.o, CSANELIB.o, - and ToolLibs.o. + and ToolLibs.o. * mpw-mh-mpw (CC): Define ALMOST_STDC. (CFLAGS): Remove ALMOST_STDC, -mc68881. @@ -382,6 +547,15 @@ Fri Mar 31 11:35:17 1995 Jason Molenda (crash@phydeaux.cygnus.com) * mt-netware: New file. +Tue Mar 28 14:47:34 1995 Jason Molenda (crash@phydeaux.cygnus.com) + + Revert this change: + + Mon Mar 29 19:59:26 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) + + * mh-solaris: SunPRO C needs -Xs to be able to get a + working xmakefile for Emacs. + Mon Mar 13 12:31:29 1995 Ian Lance Taylor <ian@cygnus.com> * mh-hpux8: New file. @@ -396,6 +570,10 @@ Wed Jan 11 16:29:34 1995 Jason Merrill <jason@phydeaux.cygnus.com> * m?-*pic (LIBCXXFLAGS): Add -fno-implicit-templates. +Sat Nov 5 18:43:30 1994 Jason Merrill (jason@phydeaux.cygnus.com) + + * m[th]-*pic: Support --enable-shared. + Thu Nov 3 17:27:19 1994 Ken Raeburn <raeburn@cujo.cygnus.com> * mh-irix4 (CC): Increase maximum string length. @@ -417,6 +595,15 @@ Thu May 19 00:32:11 1994 Jeff Law (law@snake.cs.utah.edu) * mh-hpux (CC): Add -Wp,-H256000 to avoid "too much defining" errors from the HPUX 8 compilers. +Fri May 6 14:19:25 1994 Steve Chamberlain (sac@cygnus.com) + + * mh-go32: New fragment. + +Thu May 5 20:06:45 1994 Ken Raeburn (raeburn@cujo.cygnus.com) + + * mh-lynxrs6k: Renamed from mh-lynxosrs6k, to make it + unique in 8.3 naming schemes. + Wed May 4 20:14:47 1994 D. V. Henkel-Wallace (gumby@cygnus.com) * mh-lynxrs6k: set SHELL to /bin/bash @@ -425,10 +612,18 @@ Tue Apr 12 12:38:17 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * mh-irix4 (CC): Change -XNh1500 to -XNh2000. +Mon Jan 31 18:40:55 1994 Stu Grossman (grossman at cygnus.com) + + * mh-lynxosrs6k: Account for lack of ranlib! + Sat Dec 25 20:03:45 1993 Jeffrey A. Law (law@snake.cs.utah.edu) * mt-hppa: Delete. +Thu Dec 2 14:35:54 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) + + * mh-irix5: New file for Irix 5. + Tue Nov 16 22:54:39 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * mh-a68bsd: Define CC to gcc. @@ -480,16 +675,62 @@ Fri Jun 4 16:09:34 1993 Ian Lance Taylor (ian@cygnus.com) * mh-sysv4 (INSTALL): Use cp, not /usr/ucb/install. +Sat Apr 17 17:19:50 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) + + * mh-delta88: remove extraneous GCC references + Thu Apr 8 11:21:52 1993 Ian Lance Taylor (ian@cygnus.com) * mt-a29k, mt-ebmon29k, mt-os68k, mt-ose68000, mt-ose68k, mt-vxworks68, mt-vxworks960: Removed obsolete, unused target Makefile fragment files. +Wed Mar 31 12:31:56 1993 Ian Lance Taylor (ian@cygnus.com) + + * mh-irix4: Bump -XNh value to 1500 to match gcc requirements. + +Mon Mar 29 19:59:26 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) + + * mh-sun3: cc needs -J to compile cp-parse.c correctly + + * mh-solaris: SunPRO C needs -Xs to be able to get a + working xmakefile for Emacs. + Mon Mar 8 15:05:25 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) * mh-aix386: New file; old mh-aix, plus no-op RANLIB. +Tue Mar 2 21:15:58 1993 Fred Fish (fnf@cygnus.com) + + * mh-vaxult2: New file. + +Sat Jan 23 20:32:01 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) + + * mh-sco: define X11_LIB to the mess that SCO ODT requires + +Tue Dec 29 15:06:00 1992 Ian Lance Taylor (ian@cygnus.com) + + * mh-sco: Don't override BISON definition. + +Mon Dec 7 06:43:27 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) + + * mh-sco: don't default $(CC) to gcc + +Mon Nov 30 14:54:34 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) + + * mh-solaris: rework standard X location to use + $OPENWINHOME, if defined. + + * mh-sun: handle X11 include locations + + * mh-decstation: define NeedFunctionPrototypes to 0, to + work around dain-bramaged DECwindows include files + +Fri Nov 27 18:35:54 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) + + * mh-hpux, mh-solaris: define the "standard" locations for + the vendor supplied X11 headers and libraries + Thu Oct 1 13:50:48 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) * mh-solaris: INSTALL is NOT /usr/ucb/install @@ -498,6 +739,11 @@ Mon Aug 24 14:25:35 1992 Ian Lance Taylor (ian@cygnus.com) * mt-ose68000, mt-ose68k: renamed from mt-OSE*. +Mon Aug 3 15:41:28 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) + + * mh-solaris: removed the -xs from CFLAGS (let the people + with Sun's C compiler deal with it themselved) + Tue Jul 21 02:11:01 1992 D. V. Henkel-Wallace (gumby@cygnus.com) * mt-OSE68k, mt-680000: new configs. @@ -506,20 +752,47 @@ Thu Jul 16 17:12:09 1992 K. Richard Pixley (rich@rtl.cygnus.com) * mh-irix4: merged changes from progressive. +Wed Jul 8 00:01:30 1992 Stu Grossman (grossman at cygnus.com) + + * mh-solaris: Use -xs when compiling so that Sun-C puts + a symbol-table into the executable. + +Mon Jun 15 12:31:52 1992 Fred Fish (fnf@cygnus.com) + + * mh-ncr3000 (INSTALL): Don't use /usr/ucb/install, + it is broken on ncr 3000's. + Tue Jun 9 23:29:38 1992 Per Bothner (bothner@rtl.cygnus.com) * Everywhere: Change RANLIB=echo>/dev/null (which confuses some shells - and I don't blame them) to RANLIB=true. * mh-solaris: Use /usr/ucb/install for INSTALL. +Tue Jun 9 17:18:11 1992 Fred Fish (fnf at cygnus.com) + + * mh-ncr3000, mh-sysv4: Add INSTALL. + Sun May 31 14:45:23 1992 Mark Eichin (eichin at cygnus.com) * mh-solaris2: Add new configuration for Solaris 2 (sysv, no ranlib) +Wed Apr 22 14:38:34 1992 Fred Fish (fnf@cygnus.com) + + * mh-delta88, mh-ncr3000: Replace MINUS_G with + CFLAGS per new configuration strategy. + Fri Apr 10 23:10:08 1992 Fred Fish (fnf@cygnus.com) * mh-ncr3000: Add new configuration for NCR 3000. +Thu Mar 5 12:05:58 1992 Stu Grossman (grossman at cygnus.com) + + * mh-irix4: Port to SGI Irix-4.x. + +Thu Jan 30 16:17:30 1992 Stu Grossman (grossman at cygnus.com) + + * mh-sco: Fix SCO configuration stuff. + Tue Dec 10 00:10:55 1991 K. Richard Pixley (rich at rtl.cygnus.com) * ChangeLog: fresh changelog. diff --git a/contrib/binutils/config/acinclude.m4 b/contrib/binutils/config/acinclude.m4 index 00887e0..c7c0ab5 100755 --- a/contrib/binutils/config/acinclude.m4 +++ b/contrib/binutils/config/acinclude.m4 @@ -6,7 +6,7 @@ dnl and doesn't call AC_PROG_CXX_GNU, cause we test for that in AC_PROG_CC_WORK dnl We are probably using a cross compiler, which will not be able to fully dnl link an executable. This should really be fixed in autoconf itself. dnl Find a working G++ cross compiler. This only works for the GNU C++ compiler. -AC_DEFUN(CYG_AC_PROG_CXX_CROSS, +AC_DEFUN([CYG_AC_PROG_CXX_CROSS], [AC_BEFORE([$0], [AC_PROG_CXXCPP]) AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++, gcc) @@ -35,7 +35,7 @@ fi ]) dnl See if the G++ compiler we found works. -AC_DEFUN(CYG_AC_PROG_GXX_WORKS, +AC_DEFUN([CYG_AC_PROG_GXX_WORKS], [AC_MSG_CHECKING([whether the G++ compiler ($CXX $CXXFLAGS $LDFLAGS) actually works]) AC_LANG_SAVE AC_LANG_CPLUSPLUS @@ -103,7 +103,7 @@ AC_SUBST(CXX) dnl ==================================================================== dnl Find a working GCC cross compiler. This only works for the GNU gcc compiler. dnl This is based on the macros above for G++. -AC_DEFUN(CYG_AC_PROG_CC_CROSS, +AC_DEFUN([CYG_AC_PROG_CC_CROSS], [AC_BEFORE([$0], [AC_PROG_CCPP]) AC_CHECK_PROGS(CC, cc, gcc) @@ -132,7 +132,7 @@ fi ]) dnl See if the GCC compiler we found works. -AC_DEFUN(CYG_AC_PROG_GCC_WORKS, +AC_DEFUN([CYG_AC_PROG_GCC_WORKS], [AC_MSG_CHECKING([whether the Gcc compiler ($CC $CFLAGS $LDFLAGS) actually works]) AC_LANG_SAVE AC_LANG_C @@ -199,7 +199,7 @@ AC_SUBST(CC) dnl ==================================================================== dnl Find the BFD library in the build tree. This is used to access and dnl manipulate object or executable files. -AC_DEFUN(CYG_AC_PATH_BFD, [ +AC_DEFUN([CYG_AC_PATH_BFD], [ AC_MSG_CHECKING(for the bfd header in the build tree) dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." dnl Look for the header file @@ -241,7 +241,7 @@ AC_SUBST(BFDLIB) dnl ==================================================================== dnl Find the libiberty library. This defines many commonly used C dnl functions that exists in various states based on the underlying OS. -AC_DEFUN(CYG_AC_PATH_LIBERTY, [ +AC_DEFUN([CYG_AC_PATH_LIBERTY], [ AC_MSG_CHECKING(for the liberty library in the build tree) dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." AC_CACHE_VAL(ac_cv_c_liberty,[ @@ -262,7 +262,7 @@ AC_SUBST(LIBERTY) dnl ==================================================================== dnl Find the opcodes library. This is used to do dissasemblies. -AC_DEFUN(CYG_AC_PATH_OPCODES, [ +AC_DEFUN([CYG_AC_PATH_OPCODES], [ AC_MSG_CHECKING(for the opcodes library in the build tree) dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." AC_CACHE_VAL(ac_cv_c_opc,[ @@ -284,7 +284,7 @@ AC_SUBST(OPCODESLIB) dnl ==================================================================== dnl Look for the DejaGnu header file in the source tree. This file dnl defines the functions used to testing support. -AC_DEFUN(CYG_AC_PATH_DEJAGNU, [ +AC_DEFUN([CYG_AC_PATH_DEJAGNU], [ AC_MSG_CHECKING(for the testing support files in the source tree) dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." AC_CACHE_VAL(ac_cv_c_dejagnu,[ @@ -335,7 +335,7 @@ AC_SUBST(DEJAGNUHDIR) dnl ==================================================================== dnl Find the libintl library in the build tree. This is for dnl internationalization support. -AC_DEFUN(CYG_AC_PATH_INTL, [ +AC_DEFUN([CYG_AC_PATH_INTL], [ AC_MSG_CHECKING(for the intl header in the build tree) dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." dnl Look for the header file @@ -375,7 +375,7 @@ AC_SUBST(INTLLIB) dnl ==================================================================== dnl Find the simulator library. -AC_DEFUN(CYG_AC_PATH_SIM, [ +AC_DEFUN([CYG_AC_PATH_SIM], [ dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.. ../../../../../../../../../.." case "$target_cpu" in powerpc) target_dir=ppc ;; @@ -457,7 +457,7 @@ AC_SUBST(SIMLIB) dnl ==================================================================== dnl Find the libiberty library. -AC_DEFUN(CYG_AC_PATH_LIBIBERTY, [ +AC_DEFUN([CYG_AC_PATH_LIBIBERTY], [ AC_MSG_CHECKING(for the libiberty library in the build tree) dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." AC_CACHE_VAL(ac_cv_c_libib,[ @@ -477,7 +477,7 @@ AC_SUBST(LIBIBERTY) ]) dnl ==================================================================== -AC_DEFUN(CYG_AC_PATH_DEVO, [ +AC_DEFUN([CYG_AC_PATH_DEVO], [ AC_MSG_CHECKING(for devo headers in the source tree) dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." AC_CACHE_VAL(ac_cv_c_devoh,[ @@ -498,7 +498,7 @@ AC_SUBST(DEVOHDIR) dnl ==================================================================== dnl find the IDE library and headers. -AC_DEFUN(CYG_AC_PATH_IDE, [ +AC_DEFUN([CYG_AC_PATH_IDE], [ AC_MSG_CHECKING(for IDE headers in the source tree) dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." IDEHDIR= @@ -591,7 +591,7 @@ AC_SUBST(IDETCLLIB) dnl ==================================================================== dnl Find all the ILU headers and libraries -AC_DEFUN(CYG_AC_PATH_ILU, [ +AC_DEFUN([CYG_AC_PATH_ILU], [ AC_MSG_CHECKING(for ILU kernel headers in the source tree) dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." AC_CACHE_VAL(ac_cv_c_iluh,[ @@ -752,7 +752,7 @@ dnl ==================================================================== dnl This defines the byte order for the host. We can't use dnl AC_C_BIGENDIAN, cause we want to create a config file and dnl substitue the real value, so the header files work right -AC_DEFUN(CYG_AC_C_ENDIAN, [ +AC_DEFUN([CYG_AC_C_ENDIAN], [ AC_MSG_CHECKING(to see if this is a little endian host) AC_CACHE_VAL(ac_cv_c_little_endian, [ ac_cv_c_little_endian=unknown @@ -788,7 +788,7 @@ dnl Yes, this is ugly, and only used for a canadian cross anyway. This dnl is just to keep configure from stopping here. case "${host}" in changequote(,) - i[3456]86-*-*) ac_cv_c_little_endian=yes ;; + i[3456789]86-*-*) ac_cv_c_little_endian=yes ;; sparc*-*-*) ac_cv_c_little_endian=no ;; changequote([,]) *) AC_MSG_WARN(Can't cross compile this test) ;; @@ -809,7 +809,7 @@ AC_SUBST(ENDIAN) dnl ==================================================================== dnl Look for the path to libgcc, so we can use it to directly link dnl in libgcc.a with LD. -AC_DEFUN(CYG_AC_PATH_LIBGCC, +AC_DEFUN([CYG_AC_PATH_LIBGCC], [AC_MSG_CHECKING([Looking for the path to libgcc.a]) AC_LANG_SAVE AC_LANG_C @@ -844,12 +844,12 @@ dnl Warning: transition of version 9 to 10 will break this algorithm dnl because 10 sorts before 9. We also look for just tcl. We have to dnl be careful that we don't match stuff like tclX by accident. dnl the alternative search directory is involked by --with-tclinclude -AC_DEFUN(CYG_AC_PATH_TCL, [ +AC_DEFUN([CYG_AC_PATH_TCL], [ CYG_AC_PATH_TCLH CYG_AC_PATH_TCLCONFIG CYG_AC_LOAD_TCLCONFIG ]) -AC_DEFUN(CYG_AC_PATH_TCLH, [ +AC_DEFUN([CYG_AC_PATH_TCLH], [ dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." no_tcl=true AC_MSG_CHECKING(for Tcl headers in the source tree) @@ -935,7 +935,7 @@ AC_SUBST(TCLHDIR) dnl ==================================================================== dnl Ok, lets find the tcl configuration -AC_DEFUN(CYG_AC_PATH_TCLCONFIG, [ +AC_DEFUN([CYG_AC_PATH_TCLCONFIG], [ dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." dnl First, look for one uninstalled. dnl the alternative search directory is invoked by --with-tclconfig @@ -1024,7 +1024,7 @@ AC_SUBST(TCLCONFIG) dnl Defined as a separate macro so we don't have to cache the values dnl from PATH_TCLCONFIG (because this can also be cached). -AC_DEFUN(CYG_AC_LOAD_TCLCONFIG, [ +AC_DEFUN([CYG_AC_LOAD_TCLCONFIG], [ . $TCLCONFIG dnl AC_SUBST(TCL_VERSION) @@ -1070,12 +1070,12 @@ dnl AC_SUBST(TCL_UNSHARED_LIB_SUFFIX) ]) dnl ==================================================================== -AC_DEFUN(CYG_AC_PATH_TK, [ +AC_DEFUN([CYG_AC_PATH_TK], [ CYG_AC_PATH_TKH CYG_AC_PATH_TKCONFIG CYG_AC_LOAD_TKCONFIG ]) -AC_DEFUN(CYG_AC_PATH_TKH, [ +AC_DEFUN([CYG_AC_PATH_TKH], [ # # Ok, lets find the tk source trees so we can use the headers # If the directory (presumably symlink) named "tk" exists, use that one @@ -1168,7 +1168,7 @@ fi AC_SUBST(TKHDIR) ]) -AC_DEFUN(CYG_AC_PATH_TKCONFIG, [ +AC_DEFUN([CYG_AC_PATH_TKCONFIG], [ dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." dnl First, look for one uninstalled. dnl the alternative search directory is invoked by --with-tkconfig @@ -1257,7 +1257,7 @@ AC_SUBST(TKCONFIG) dnl Defined as a separate macro so we don't have to cache the values dnl from PATH_TKCONFIG (because this can also be cached). -AC_DEFUN(CYG_AC_LOAD_TKCONFIG, [ +AC_DEFUN([CYG_AC_LOAD_TKCONFIG], [ if test -f "$TKCONFIG" ; then . $TKCONFIG fi @@ -1287,13 +1287,13 @@ dnl AC_SUBST(TK_EXEC_PREFIX) dnl ==================================================================== dnl Ok, lets find the itcl source trees so we can use the headers dnl the alternative search directory is involked by --with-itclinclude -AC_DEFUN(CYG_AC_PATH_ITCL, [ +AC_DEFUN([CYG_AC_PATH_ITCL], [ CYG_AC_PATH_ITCLH CYG_AC_PATH_ITCLLIB CYG_AC_PATH_ITCLSH CYG_AC_PATH_ITCLMKIDX ]) -AC_DEFUN(CYG_AC_PATH_ITCLH, [ +AC_DEFUN([CYG_AC_PATH_ITCLH], [ dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." no_itcl=true AC_MSG_CHECKING(for Itcl headers in the source tree) @@ -1367,7 +1367,7 @@ AC_SUBST(ITCLHDIR) dnl Ok, lets find the itcl library dnl First, look for one uninstalled. dnl the alternative search directory is invoked by --with-itcllib -AC_DEFUN(CYG_AC_PATH_ITCLLIB, [ +AC_DEFUN([CYG_AC_PATH_ITCLLIB], [ dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." if test x"${no_itcl}" = x ; then dnl we reset no_itcl incase something fails here @@ -1454,7 +1454,7 @@ AC_SUBST(ITCLLIB) dnl ==================================================================== dnl Ok, lets find the itcl source trees so we can use the itcl_sh script dnl the alternative search directory is involked by --with-itclinclude -AC_DEFUN(CYG_AC_PATH_ITCLSH, [ +AC_DEFUN([CYG_AC_PATH_ITCLSH], [ dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." no_itcl=true AC_MSG_CHECKING(for the itcl_sh script) @@ -1516,7 +1516,7 @@ AC_SUBST(ITCLSH) dnl ==================================================================== dnl Ok, lets find the itcl source trees so we can use the itcl_sh script dnl the alternative search directory is involked by --with-itclinclude -AC_DEFUN(CYG_AC_PATH_ITCLMKIDX, [ +AC_DEFUN([CYG_AC_PATH_ITCLMKIDX], [ dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." no_itcl=true AC_MSG_CHECKING(for itcl_mkindex.tcl script) @@ -1582,11 +1582,11 @@ AC_SUBST(ITCLMKIDX) dnl ==================================================================== dnl Ok, lets find the tix source trees so we can use the headers dnl the alternative search directory is involked by --with-tixinclude -AC_DEFUN(CYG_AC_PATH_TIX, [ +AC_DEFUN([CYG_AC_PATH_TIX], [ CYG_AC_PATH_TIXH CYG_AC_PATH_TIXLIB ]) -AC_DEFUN(CYG_AC_PATH_TIXH, [ +AC_DEFUN([CYG_AC_PATH_TIXH], [ dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." no_tix=true AC_MSG_CHECKING(for Tix headers in the source tree) @@ -1663,7 +1663,7 @@ fi AC_SUBST(TIXHDIR) ]) -AC_DEFUN(CYG_AC_PATH_TIXCONFIG, [ +AC_DEFUN([CYG_AC_PATH_TIXCONFIG], [ # # Ok, lets find the tix configuration # First, look for one uninstalled. @@ -1737,7 +1737,7 @@ fi # Defined as a separate macro so we don't have to cache the values # from PATH_TIXCONFIG (because this can also be cached). -AC_DEFUN(CYG_AC_LOAD_TIXCONFIG, [ +AC_DEFUN([CYG_AC_LOAD_TIXCONFIG], [ if test -f "$TIXCONFIG" ; then . $TIXCONFIG fi @@ -1746,7 +1746,7 @@ AC_DEFUN(CYG_AC_LOAD_TIXCONFIG, [ AC_SUBST(TIX_LIB_FULL_PATH) ]) -AC_DEFUN(CYG_AC_PATH_ITCLCONFIG, [ +AC_DEFUN([CYG_AC_PATH_ITCLCONFIG], [ # # Ok, lets find the itcl configuration # First, look for one uninstalled. @@ -1820,7 +1820,7 @@ fi # Defined as a separate macro so we don't have to cache the values # from PATH_ITCLCONFIG (because this can also be cached). -AC_DEFUN(CYG_AC_LOAD_ITCLCONFIG, [ +AC_DEFUN([CYG_AC_LOAD_ITCLCONFIG], [ if test -f "$ITCLCONFIG" ; then . $ITCLCONFIG fi @@ -1833,7 +1833,7 @@ AC_DEFUN(CYG_AC_LOAD_ITCLCONFIG, [ ]) -AC_DEFUN(CYG_AC_PATH_ITKCONFIG, [ +AC_DEFUN([CYG_AC_PATH_ITKCONFIG], [ # # Ok, lets find the itk configuration # First, look for one uninstalled. @@ -1907,7 +1907,7 @@ fi # Defined as a separate macro so we don't have to cache the values # from PATH_ITKCONFIG (because this can also be cached). -AC_DEFUN(CYG_AC_LOAD_ITKCONFIG, [ +AC_DEFUN([CYG_AC_LOAD_ITKCONFIG], [ if test -f "$ITKCONFIG" ; then . $ITKCONFIG fi @@ -1921,11 +1921,11 @@ AC_DEFUN(CYG_AC_LOAD_ITKCONFIG, [ dnl ==================================================================== dnl Ok, lets find the libgui source trees so we can use the headers dnl the alternative search directory is involked by --with-libguiinclude -AC_DEFUN(CYG_AC_PATH_LIBGUI, [ +AC_DEFUN([CYG_AC_PATH_LIBGUI], [ CYG_AC_PATH_LIBGUIH CYG_AC_PATH_LIBGUILIB ]) -AC_DEFUN(CYG_AC_PATH_LIBGUIH, [ +AC_DEFUN([CYG_AC_PATH_LIBGUIH], [ dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../..../../../../../../../../../../.." no_libgui=true AC_MSG_CHECKING(for Libgui headers in the source tree) @@ -1995,7 +1995,7 @@ AC_SUBST(LIBGUIHDIR) dnl ==================================================================== dnl find the GUI library -AC_DEFUN(CYG_AC_PATH_LIBGUILIB, [ +AC_DEFUN([CYG_AC_PATH_LIBGUILIB], [ AC_MSG_CHECKING(for GUI library in the build tree) dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." dnl look for the library diff --git a/contrib/binutils/config/mh-cxux b/contrib/binutils/config/mh-cxux index 0a98f11..8680654 100644 --- a/contrib/binutils/config/mh-cxux +++ b/contrib/binutils/config/mh-cxux @@ -1,7 +1,5 @@ # Configuration for Harris CX/UX 7 (and maybe 6), based on sysv4 configuration. -RANLIB = true - # The l flag generates a warning from the SVR4 archiver, remove it. AR_FLAGS = cq diff --git a/contrib/binutils/config/mh-necv4 b/contrib/binutils/config/mh-necv4 index 6845f3c..d71805e 100644 --- a/contrib/binutils/config/mh-necv4 +++ b/contrib/binutils/config/mh-necv4 @@ -1,6 +1,4 @@ # Host Makefile fragment for NEC MIPS SVR4. -RANLIB = true - # NEC -lX11 needs some other libraries. X11_EXTRA_LIBS = -lsocket -lnsl diff --git a/contrib/binutils/config/mh-openedition b/contrib/binutils/config/mh-openedition deleted file mode 100644 index 4003002..0000000 --- a/contrib/binutils/config/mh-openedition +++ /dev/null @@ -1 +0,0 @@ -RANLIB = true diff --git a/contrib/binutils/config/mh-sco b/contrib/binutils/config/mh-sco index 574b92a..bf5a807 100644 --- a/contrib/binutils/config/mh-sco +++ b/contrib/binutils/config/mh-sco @@ -1,4 +1,3 @@ -RANLIB = true # You may need this if you don't have bison. # BISON = yacc -Sm10400 diff --git a/contrib/binutils/config/mh-solaris b/contrib/binutils/config/mh-solaris index 16553c5..6e8f296 100644 --- a/contrib/binutils/config/mh-solaris +++ b/contrib/binutils/config/mh-solaris @@ -1,5 +1,2 @@ # Makefile changes for Suns running Solaris 2 - -RANLIB = true - X11_EXTRA_LIBS = -lnsl -lsocket diff --git a/contrib/binutils/config/mh-sysv b/contrib/binutils/config/mh-sysv deleted file mode 100644 index 4003002..0000000 --- a/contrib/binutils/config/mh-sysv +++ /dev/null @@ -1 +0,0 @@ -RANLIB = true diff --git a/contrib/binutils/config/mh-sysv4 b/contrib/binutils/config/mh-sysv4 index 3634950..2e9374c 100644 --- a/contrib/binutils/config/mh-sysv4 +++ b/contrib/binutils/config/mh-sysv4 @@ -1,5 +1,3 @@ -RANLIB = true - # The l flag generates a warning from the SVR4 archiver, remove it. AR_FLAGS = cr diff --git a/contrib/binutils/config/mh-sysv5 b/contrib/binutils/config/mh-sysv5 index 3634950..2e9374c 100644 --- a/contrib/binutils/config/mh-sysv5 +++ b/contrib/binutils/config/mh-sysv5 @@ -1,5 +1,3 @@ -RANLIB = true - # The l flag generates a warning from the SVR4 archiver, remove it. AR_FLAGS = cr diff --git a/contrib/binutils/config/mt-armpic b/contrib/binutils/config/mt-armpic deleted file mode 100644 index 35b8c9e..0000000 --- a/contrib/binutils/config/mt-armpic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG_FOR_TARGET=-fPIC diff --git a/contrib/binutils/config/mt-elfalphapic b/contrib/binutils/config/mt-elfalphapic deleted file mode 100644 index 35b8c9e..0000000 --- a/contrib/binutils/config/mt-elfalphapic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG_FOR_TARGET=-fPIC diff --git a/contrib/binutils/config/mt-ia64pic b/contrib/binutils/config/mt-ia64pic deleted file mode 100644 index ff98727..0000000 --- a/contrib/binutils/config/mt-ia64pic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG_FOR_TARGET=-fpic diff --git a/contrib/binutils/config/mt-papic b/contrib/binutils/config/mt-papic deleted file mode 100644 index 35b8c9e..0000000 --- a/contrib/binutils/config/mt-papic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG_FOR_TARGET=-fPIC diff --git a/contrib/binutils/config/mt-ppcpic b/contrib/binutils/config/mt-ppcpic deleted file mode 100644 index 35b8c9e..0000000 --- a/contrib/binutils/config/mt-ppcpic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG_FOR_TARGET=-fPIC diff --git a/contrib/binutils/config/mt-s390pic b/contrib/binutils/config/mt-s390pic deleted file mode 100644 index ff98727..0000000 --- a/contrib/binutils/config/mt-s390pic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG_FOR_TARGET=-fpic diff --git a/contrib/binutils/config/mt-sparcpic b/contrib/binutils/config/mt-sparcpic deleted file mode 100644 index a62b38b..0000000 --- a/contrib/binutils/config/mt-sparcpic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG_FOR_TARGET=`case '${LIBCFLAGS} ${LIBCXXFLAGS}' in *-fpic* ) echo -fpic ;; * ) echo -fPIC ;; esac` diff --git a/contrib/binutils/config/mt-v810 b/contrib/binutils/config/mt-v810 index 97da6c2..f5714f8 100644 --- a/contrib/binutils/config/mt-v810 +++ b/contrib/binutils/config/mt-v810 @@ -1,4 +1,3 @@ CC_FOR_TARGET = ca732 -ansi AS_FOR_TARGET = as732 AR_FOR_TARGET = ar732 -RANLIB_FOR_TARGET = true diff --git a/contrib/binutils/config/mt-x86pic b/contrib/binutils/config/mt-x86pic deleted file mode 100644 index ff98727..0000000 --- a/contrib/binutils/config/mt-x86pic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG_FOR_TARGET=-fpic diff --git a/contrib/binutils/etc/ChangeLog b/contrib/binutils/etc/ChangeLog index debe735..6865f2d 100644 --- a/contrib/binutils/etc/ChangeLog +++ b/contrib/binutils/etc/ChangeLog @@ -1,3 +1,12 @@ +2003-05-16 Kelley Cook <kelleycook@wideopenwest.com> + + * configure.texi: Use "i[3-7]86" in example. + +2003-01-02 H.J. Lu <hjl@gnu.org> + + * Makefile.in (DESTDIR): New. + (install-info): Use it. + 2002-06-11 Nick Clifton <nickc@cambridge.redhat.com> Import the following patches from the FSF GCC sources: diff --git a/contrib/binutils/etc/Makefile.in b/contrib/binutils/etc/Makefile.in index 2bc3457..63f7738 100644 --- a/contrib/binutils/etc/Makefile.in +++ b/contrib/binutils/etc/Makefile.in @@ -2,6 +2,8 @@ # Makefile.in for etc # +DESTDIR = + prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -68,17 +70,17 @@ info: done install-info: info - $(SHELL) $(srcdir)/../mkinstalldirs $(infodir) + $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(infodir) if test ! -f standards.info; then cd $(srcdir); fi; \ if test -f standards.info; then \ for i in standards.info*; do \ - $(INSTALL_DATA) $$i $(infodir)/$$i; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/$$i; \ done; \ fi if test ! -f configure.info; then cd $(srcdir); fi; \ if test -f configure.info; then \ for i in configure.info*; do \ - $(INSTALL_DATA) $$i $(infodir)/$$i; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/$$i; \ done; \ fi diff --git a/contrib/binutils/gas/config/obj-generic.c b/contrib/binutils/gas/config/obj-generic.c deleted file mode 100644 index 69fc3d1..0000000 --- a/contrib/binutils/gas/config/obj-generic.c +++ /dev/null @@ -1,41 +0,0 @@ -/* This file is obj-generic.c and is intended to be a template for - object format specific source files. - - Copyright (C) 1987-1992 Free Software Foundation, Inc. - - This file is part of GAS, the GNU Assembler. - - GAS is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GAS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GAS; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* Chars that can be used to separate mant from exp in floating point nums */ -char EXP_CHARS[] = "eE"; - -/* Chars that mean this number is a floating point constant */ -/* As in 0f12.456 */ -/* or 0d1.2345e12 */ -char FLT_CHARS[] = "rRsSfFdDxXpP"; - -/* These chars start a comment anywhere in a source file (except inside - another comment */ -const char comment_chars[] = "#"; - -/* - * Local Variables: - * comment-column: 0 - * fill-column: 131 - * End: - */ - -/* end of obj-generic.c */ diff --git a/contrib/binutils/gas/config/obj-generic.h b/contrib/binutils/gas/config/obj-generic.h deleted file mode 100644 index 8cb8020..0000000 --- a/contrib/binutils/gas/config/obj-generic.h +++ /dev/null @@ -1,79 +0,0 @@ -/* This file is obj-generic.h - Copyright 1987, 1988, 1989, 1990, 1991, 1992, 1993, 2000 - Free Software Foundation, Inc. - - This file is part of GAS, the GNU Assembler. - - GAS is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GAS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GAS; see the file COPYING. If not, write to the Free - Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ - -/* - * This file is obj-generic.h and is intended to be a template for - * object format specific header files. - */ - -/* define an obj specific macro off which target cpu back ends may key. */ -#define OBJ_GENERIC 1 - -/* include whatever target cpu is appropriate. */ -#include "targ-cpu.h" - -/* - * SYMBOLS - */ - -/* - * If your object format needs to reorder symbols, define this. When - * defined, symbols are kept on a doubly linked list and functions are - * made available for push, insert, append, and delete. If not defined, - * symbols are kept on a singly linked list, only the append and clear - * facilities are available, and they are macros. - */ - -/* #define SYMBOLS_NEED_PACKPOINTERS */ - -/* */ -typedef struct - { - void *nothing; - } - -obj_symbol_type; /* should be the format's symbol structure */ - -typedef void *object_headers; - -/* symbols have names */ -#define S_GET_NAME(s) ("foo") /* get the name of a symbolP */ -#define S_SET_NAME(s,v) ; -/* symbols have segments */ -#define S_GET_SEGMENT(s) (SEG_UNKNOWN) -#define S_SET_SEGMENT(s,v) ; -/* symbols may be external */ -#define S_IS_EXTERNAL(s) (0) -#define S_SET_EXTERNAL(s) ; - -/* symbols may or may not be defined */ -#define S_IS_DEFINED(s) (0) - -#define DEFAULT_MAGIC_NUMBER_FOR_OBJECT_FILE (0) /* your magic number */ - -#define OBJ_EMIT_LINENO(a,b,c) /* must be *something*. This no-op's it out. */ - -/* - * Local Variables: - * comment-column: 0 - * fill-column: 131 - * End: - */ diff --git a/contrib/binutils/gas/doc/gasp.texi b/contrib/binutils/gas/doc/gasp.texi deleted file mode 100644 index 889e997..0000000 --- a/contrib/binutils/gas/doc/gasp.texi +++ /dev/null @@ -1,1456 +0,0 @@ -\input texinfo @c -*- Texinfo -*- -@setfilename gasp.info -@c -@c This file documents the assembly preprocessor "GASP" -@c -@c Copyright 1994, 1995, 2000, 2002 Free Software Foundation, Inc. -@c -@c Permission is granted to copy, distribute and/or modify this document -@c under the terms of the GNU Free Documentation License, Version 1.1 -@c or any later version published by the Free Software Foundation; -@c with no Invariant Sections, with no Front-Cover Texts, and with no -@c Back-Cover Texts. A copy of the license is included in the -@c section entitled "GNU Free Documentation License". - -@ifinfo -@format -START-INFO-DIR-ENTRY -* gasp: (gasp). The GNU Assembler Preprocessor -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@syncodeindex ky cp -@syncodeindex fn cp - -@finalout -@setchapternewpage odd -@settitle GASP -@titlepage -@c FIXME boring title -@title GASP, an assembly preprocessor -@subtitle for GASP version 1 -@sp 1 -@subtitle March 1994 -@author Roland Pesch -@page - -@tex -{\parskip=0pt \hfill Cygnus Support\par -} -@end tex - -@vskip 0pt plus 1filll -Copyright @copyright{} 1994, 1995, 2000, 2002 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 - or any later version published by the Free Software Foundation; - with no Invariant Sections, with no Front-Cover Texts, and with no - Back-Cover Texts. A copy of the license is included in the - section entitled "GNU Free Documentation License". - -@end titlepage - -@ifinfo -Copyright @copyright{} 1994, 1995, 2000, 2002 Free Software Foundation, Inc. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries a copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). -@end ignore - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 - or any later version published by the Free Software Foundation; - with no Invariant Sections, with no Front-Cover Texts, and with no - Back-Cover Texts. A copy of the license is included in the - section entitled "GNU Free Documentation License". - - -@node Top -@top GASP - -GASP is a preprocessor for assembly programs. - -This file describes version 1 of GASP. - -Steve Chamberlain wrote GASP; Roland Pesch wrote this manual. - -@menu -* Overview:: What is GASP? -* Invoking GASP:: Command line options. -* Commands:: Preprocessor commands. -* GNU Free Documentation License:: GNU Free Documentation License -* Index:: Index. -@end menu -@end ifinfo - -@node Overview -@chapter What is GASP? - -The primary purpose of the @sc{gnu} assembler is to assemble the output of -other programs---notably compilers. When you have to hand-code -specialized routines in assembly, that means the @sc{gnu} assembler is -an unfriendly processor: it has no directives for macros, conditionals, -or many other conveniences that you might expect. - -In some cases you can simply use the C preprocessor, or a generalized -preprocessor like @sc{m4}; but this can be awkward, since none of these -things are designed with assembly in mind. - -@sc{gasp} fills this need. It is expressly designed to provide the -facilities you need with hand-coded assembly code. Implementing it as a -preprocessor, rather than part of the assembler, allows the maximum -flexibility: you can use it with hand-coded assembly, without paying a -penalty of added complexity in the assembler you use for compiler -output. - -@emph{Note} The use of @sc{gasp} has now been deprecated. Anything -that it could do can now be done by the macro facilities built into -@sc{gas} itself. At some point in the future the @sc{gasp} sources will -be removed entirely from the binutils distribution. - -Here is a small example to give the flavor of @sc{gasp}. This input to -@sc{gasp} - -@cartouche -@example - .MACRO saveregs from=8 to=14 -count .ASSIGNA \from - ! save r\from..r\to - .AWHILE \&count LE \to - mov r\&count,@@-sp -count .ASSIGNA \&count + 1 - .AENDW - .ENDM - - saveregs from=12 - -bar: mov #H'dead+10,r0 -foo .SDATAC "hello"<10> - .END -@end example -@end cartouche - -@noindent -generates this assembly program: - -@cartouche -@example - ! save r12..r14 - mov r12,@@-sp - mov r13,@@-sp - mov r14,@@-sp - -bar: mov #57005+10,r0 -foo: .byte 6,104,101,108,108,111,10 -@end example -@end cartouche - -@node Invoking GASP -@chapter Command Line Options - -@c FIXME! Or is there a simpler way, calling from GAS option? -The simplest way to use @sc{gasp} is to run it as a filter and assemble -its output. In Unix and its ilk, you can do this, for example: - -@c FIXME! GASP filename suffix convention? -@example -$ gasp prog.asm | as -o prog.o -@end example - -Naturally, there are also a few command-line options to allow you to -request variations on this basic theme. Here is the full set of -possibilities for the @sc{gasp} command line. - -@example -gasp [ -a | --alternate ] - [ -c @var{char} | --commentchar @var{char} ] - [ -d | --debug ] [ -h | --help ] [ -M | --mri ] - [ -o @var{outfile} | --output @var{outfile} ] - [ -p | --print ] [ -s | --copysource ] - [ -u | --unreasonable ] [ -v | --version ] - @var{infile} @dots{} -@end example - -@ftable @code -@item @var{infile} @dots{} -@c FIXME! Why not stdin as default infile? -The input file names. You must specify at least one input file; if you -specify more, @sc{gasp} preprocesses them all, concatenating the output -in the order you list the @var{infile} arguments. - -Mark the end of each input file with the preprocessor command -@code{.END}. @xref{Other Commands,, Miscellaneous commands}. - -@item -a -@itemx --alternate -Use alternative macro syntax. @xref{Alternate,, Alternate macro -syntax}, for a discussion of how this syntax differs from the default -@sc{gasp} syntax. - -@cindex comment character, changing -@cindex semicolon, as comment -@cindex exclamation mark, as comment -@cindex shriek, as comment -@cindex bang, as comment -@cindex @code{!} default comment char -@cindex @code{;} as comment char -@item -c '@var{char}' -@itemx --commentchar '@var{char}' -Use @var{char} as the comment character. The default comment character -is @samp{!}. For example, to use a semicolon as the comment character, -specify @w{@samp{-c ';'}} on the @sc{gasp} command line. Since -assembler command characters often have special significance to command -shells, it is a good idea to quote or escape @var{char} when you specify -a comment character. - -For the sake of simplicity, all examples in this manual use the default -comment character @samp{!}. - -@item -d -@itemx --debug -Show debugging statistics. In this version of @sc{gasp}, this option -produces statistics about the string buffers that @sc{gasp} allocates -internally. For each defined buffersize @var{s}, @sc{gasp} shows the -number of strings @var{n} that it allocated, with a line like this: - -@example -strings size @var{s} : @var{n} -@end example - -@noindent -@sc{gasp} displays these statistics on the standard error stream, when -done preprocessing. - -@item -h -@itemx --help -Display a summary of the @sc{gasp} command line options. - -@item -M -@itemx --mri -Use MRI compatibility mode. Using this option causes @sc{gasp} to -accept the syntax and pseudo-ops used by the Microtec Research -@code{ASM68K} assembler. - -@item -o @var{outfile} -@itemx --output @var{outfile} -Write the output in a file called @var{outfile}. If you do not use the -@samp{-o} option, @sc{gasp} writes its output on the standard output -stream. - -@item -p -@itemx --print -Print line numbers. @sc{gasp} obeys this option @emph{only} if you also -specify @samp{-s} to copy source lines to its output. With @samp{-s --p}, @sc{gasp} displays the line number of each source line copied -(immediately after the comment character at the beginning of the line). - -@item -s -@itemx --copysource -Copy the source lines to the output file. Use this option -to see the effect of each preprocessor line on the @sc{gasp} output. -@sc{gasp} places a comment character (@samp{!} by default) at -the beginning of each source line it copies, so that you can use this -option and still assemble the result. - -@item -u -@itemx --unreasonable -Bypass ``unreasonable expansion'' limit. Since you can define @sc{gasp} -macros inside other macro definitions, the preprocessor normally -includes a sanity check. If your program requires more than 1,000 -nested expansions, @sc{gasp} normally exits with an error message. Use -this option to turn off this check, allowing unlimited nested -expansions. - -@item -v -@itemx --version -Display the @sc{gasp} version number. -@end ftable - -@node Commands -@chapter Preprocessor Commands - -@sc{gasp} commands have a straightforward syntax that fits in well with -assembly conventions. In general, a command extends for a line, and may -have up to three fields: an optional label, the command itself, and -optional arguments to the command. You can write commands in upper or -lower case, though this manual shows them in upper case. @xref{Syntax -Details,, Details of the GASP syntax}, for more information. - -@menu -* Conditionals:: -* Loops:: -* Variables:: -* Macros:: -* Data:: -* Listings:: -* Other Commands:: -* Syntax Details:: -* Alternate:: -@end menu - -@node Conditionals -@section Conditional assembly - -The conditional-assembly directives allow you to include or exclude -portions of an assembly depending on how a pair of expressions, or a -pair of strings, compare. - -The overall structure of conditionals is familiar from many other -contexts. @code{.AIF} marks the start of a conditional, and precedes -assembly for the case when the condition is true. An optional -@code{.AELSE} precedes assembly for the converse case, and an -@code{.AENDI} marks the end of the condition. - -@c FIXME! Why doesn't -u turn off this check? -You may nest conditionals up to a depth of 100; @sc{gasp} rejects -nesting beyond that, because it may indicate a bug in your macro -structure. - -@c FIXME! Why isn't there something like cpp's -D option? Conditionals -@c would be much more useful if there were. -Conditionals are primarily useful inside macro definitions, where you -often need different effects depending on argument values. -@xref{Macros,, Defining your own directives}, for details about defining -macros. - -@ftable @code -@item .AIF @var{expra} @var{cmp} @var{exprb} -@itemx .AIF "@var{stra}" @var{cmp} "@var{strb}" - -The governing condition goes on the same line as the @code{.AIF} -preprocessor command. You may compare either two strings, or two -expressions. - -When you compare strings, only two conditional @var{cmp} comparison -operators are available: @samp{EQ} (true if @var{stra} and @var{strb} -are identical), and @samp{NE} (the opposite). - -When you compare two expressions, @emph{both expressions must be -absolute} (@pxref{Expressions,, Arithmetic expressions in GASP}). You -can use these @var{cmp} comparison operators with expressions: - -@ftable @code -@item EQ -Are @var{expra} and @var{exprb} equal? (For strings, are @var{stra} and -@var{strb} identical?) - -@item NE -Are @var{expra} and @var{exprb} different? (For strings, are @var{stra} -and @var{strb} different? - -@item LT -Is @var{expra} less than @var{exprb}? (Not allowed for strings.) - -@item LE -Is @var{expra} less than or equal to @var{exprb}? (Not allowed for strings.) - -@item GT -Is @var{expra} greater than @var{exprb}? (Not allowed for strings.) - -@item GE -Is @var{expra} greater than or equal to @var{exprb}? (Not allowed for -strings.) -@end ftable - -@item .AELSE -Marks the start of assembly code to be included if the condition fails. -Optional, and only allowed within a conditional (between @code{.AIF} and -@code{.AENDI}). - -@item .AENDI -Marks the end of a conditional assembly. -@end ftable - -@node Loops -@section Repetitive sections of assembly - -Two preprocessor directives allow you to repeatedly issue copies of the -same block of assembly code. - -@ftable @code -@item .AREPEAT @var{aexp} -@itemx .AENDR -If you simply need to repeat the same block of assembly over and over a -fixed number of times, sandwich one instance of the repeated block -between @code{.AREPEAT} and @code{.AENDR}. Specify the number of -copies as @var{aexp} (which must be an absolute expression). For -example, this repeats two assembly statements three times in succession: - -@cartouche -@example - .AREPEAT 3 - rotcl r2 - div1 r0,r1 - .AENDR -@end example -@end cartouche - -@item .AWHILE @var{expra} @var{cmp} @var{exprb} -@itemx .AENDW -@itemx .AWHILE @var{stra} @var{cmp} @var{strb} -@itemx .AENDW -To repeat a block of assembly depending on a conditional test, rather -than repeating it for a specific number of times, use @code{.AWHILE}. -@code{.AENDW} marks the end of the repeated block. The conditional -comparison works exactly the same way as for @code{.AIF}, with the same -comparison operators (@pxref{Conditionals,, Conditional assembly}). - -Since the terms of the comparison must be absolute expression, -@code{.AWHILE} is primarily useful within macros. @xref{Macros,, -Defining your own directives}. -@end ftable - -@cindex loops, breaking out of -@cindex breaking out of loops -You can use the @code{.EXITM} preprocessor directive to break out of -loops early (as well as to break out of macros). @xref{Macros,, -Defining your own directives}. - -@node Variables -@section Preprocessor variables - -You can use variables in @sc{gasp} to represent strings, registers, or -the results of expressions. - -You must distinguish two kinds of variables: -@enumerate -@item -Variables defined with @code{.EQU} or @code{.ASSIGN}. To evaluate this -kind of variable in your assembly output, simply mention its name. For -example, these two lines define and use a variable @samp{eg}: - -@cartouche -@example -eg .EQU FLIP-64 - @dots{} - mov.l eg,r0 -@end example -@end cartouche - -@emph{Do not use} this kind of variable in conditional expressions or -while loops; @sc{gasp} only evaluates these variables when writing -assembly output. - -@item -Variables for use during preprocessing. You can define these -with @code{.ASSIGNC} or @code{.ASSIGNA}. To evaluate this -kind of variable, write @samp{\&} before the variable name; for example, - -@cartouche -@example -opcit .ASSIGNA 47 - @dots{} - .AWHILE \&opcit GT 0 - @dots{} - .AENDW -@end example -@end cartouche - -@sc{gasp} treats macro arguments almost the same way, but to evaluate -them you use the prefix @samp{\} rather than @samp{\&}. -@xref{Macros,, Defining your own directives}. -@end enumerate - -@ftable @code -@item @var{pvar} .EQU @var{expr} -@c FIXME! Anything to beware of re GAS directive of same name? -Assign preprocessor variable @var{pvar} the value of the expression -@var{expr}. There are no restrictions on redefinition; use @samp{.EQU} -with the same @var{pvar} as often as you find it convenient. - -@item @var{pvar} .ASSIGN @var{expr} -Almost the same as @code{.EQU}, save that you may not redefine -@var{pvar} using @code{.ASSIGN} once it has a value. -@c FIXME!! Supposed to work this way, apparently, but on 9feb94 works -@c just like .EQU - -@item @var{pvar} .ASSIGNA @var{aexpr} -Define a variable with a numeric value, for use during preprocessing. -@var{aexpr} must be an absolute expression. You can redefine variables -with @code{.ASSIGNA} at any time. - -@item @var{pvar} .ASSIGNC "@var{str}" -Define a variable with a string value, for use during preprocessing. -You can redefine variables with @code{.ASSIGNC} at any time. - -@item @var{pvar} .REG (@var{register}) -Use @code{.REG} to define a variable that represents a register. In -particular, @var{register} is @emph{not evaluated} as an expression. -You may use @code{.REG} at will to redefine register variables. -@end ftable - -All these directives accept the variable name in the ``label'' position, -that is at the left margin. You may specify a colon after the variable -name if you wish; the first example above could have started @samp{eg:} -with the same effect. - -@c pagebreak makes for better aesthetics---ensures macro and expansion together -@page -@node Macros -@section Defining your own directives - -The commands @code{.MACRO} and @code{.ENDM} allow you to define macros -that generate assembly output. You can use these macros with a syntax -similar to built-in @sc{gasp} or assembler directives. For example, -this definition specifies a macro @code{SUM} that adds together a range of -consecutive registers: - -@cartouche -@example - .MACRO SUM FROM=0, TO=9 - ! \FROM \TO - mov r\FROM,r10 -COUNT .ASSIGNA \FROM+1 - .AWHILE \&COUNT LE \TO - add r\&COUNT,r10 -COUNT .ASSIGNA \&COUNT+1 - .AENDW - .ENDM -@end example -@end cartouche - -@noindent -With that definition, @samp{SUM 0,5} generates this assembly output: - -@cartouche -@example - ! 0 5 - mov r0,r10 - add r1,r10 - add r2,r10 - add r3,r10 - add r4,r10 - add r5,r10 -@end example -@end cartouche - -@ftable @code -@item .MACRO @var{macname} -@itemx .MACRO @var{macname} @var{macargs} @dots{} -Begin the definition of a macro called @var{macname}. If your macro -definition requires arguments, specify their names after the macro name, -separated by commas or spaces. You can supply a default value for any -macro argument by following the name with @samp{=@var{deflt}}. For -example, these are all valid @code{.MACRO} statements: - -@table @code -@item .MACRO COMM -Begin the definition of a macro called @code{COMM}, which takes no -arguments. - -@item .MACRO PLUS1 P, P1 -@itemx .MACRO PLUS1 P P1 -Either statement begins the definition of a macro called @code{PLUS1}, -which takes two arguments; within the macro definition, write -@samp{\P} or @samp{\P1} to evaluate the arguments. - -@item .MACRO RESERVE_STR P1=0 P2 -Begin the definition of a macro called @code{RESERVE_STR}, with two -arguments. The first argument has a default value, but not the second. -After the definition is complete, you can call the macro either as -@samp{RESERVE_STR @var{a},@var{b}} (with @samp{\P1} evaluating to -@var{a} and @samp{\P2} evaluating to @var{b}), or as @samp{RESERVE_STR -,@var{b}} (with @samp{\P1} evaluating as the default, in this case -@samp{0}, and @samp{\P2} evaluating to @var{b}). -@end table - -When you call a macro, you can specify the argument values either by -position, or by keyword. For example, @samp{SUM 9,17} is equivalent to -@samp{SUM TO=17, FROM=9}. Macro arguments are preprocessor variables -similar to the variables you define with @samp{.ASSIGNA} or -@samp{.ASSIGNC}; in particular, you can use them in conditionals or for -loop control. (The only difference is the prefix you write to evaluate -the variable: for a macro argument, write @samp{\@var{argname}}, but for -a preprocessor variable, write @samp{\&@var{varname}}.) - -@item @var{name} .MACRO -@itemx @var{name} .MACRO ( @var{macargs} @dots{} ) -@c FIXME check: I think no error _and_ no args recognized if I use form -@c NAME .MACRO ARG ARG -An alternative form of introducing a macro definition: specify the macro -name in the label position, and the arguments (if any) between -parentheses after the name. Defaulting rules and usage work the same -way as for the other macro definition syntax. - -@item .ENDM -Mark the end of a macro definition. - -@item .EXITM -Exit early from the current macro definition, @code{.AREPEAT} loop, or -@code{.AWHILE} loop. - -@cindex number of macros executed -@cindex macros, count executed -@item \@@ -@sc{gasp} maintains a counter of how many macros it has -executed in this pseudo-variable; you can copy that number to your -output with @samp{\@@}, but @emph{only within a macro definition}. - -@item LOCAL @var{name} [ , @dots{} ] -@emph{Warning: @code{LOCAL} is only available if you select ``alternate -macro syntax'' with @samp{-a} or @samp{--alternate}.} @xref{Alternate,, -Alternate macro syntax}. - -Generate a string replacement for each of the @var{name} arguments, and -replace any instances of @var{name} in each macro expansion. The -replacement string is unique in the assembly, and different for each -separate macro expansion. @code{LOCAL} allows you to write macros that -define symbols, without fear of conflict between separate macro expansions. -@end ftable - -@node Data -@section Data output - -In assembly code, you often need to specify working areas of memory; -depending on the application, you may want to initialize such memory or -not. @sc{gasp} provides preprocessor directives to help you avoid -repetitive coding for both purposes. - -You can use labels as usual to mark the data areas. - -@menu -* Initialized:: -* Uninitialized:: -@end menu - -@node Initialized -@subsection Initialized data - -These are the @sc{gasp} directives for initialized data, and the standard -@sc{gnu} assembler directives they expand to: - -@ftable @code -@item .DATA @var{expr}, @var{expr}, @dots{} -@itemx .DATA.B @var{expr}, @var{expr}, @dots{} -@itemx .DATA.W @var{expr}, @var{expr}, @dots{} -@itemx .DATA.L @var{expr}, @var{expr}, @dots{} -Evaluate arithmetic expressions @var{expr}, and emit the corresponding -@code{as} directive (labelled with @var{lab}). The unqualified -@code{.DATA} emits @samp{.long}; @code{.DATA.B} emits @samp{.byte}; -@code{.DATA.W} emits @samp{.short}; and @code{.DATA.L} emits -@samp{.long}. - -For example, @samp{foo .DATA 1,2,3} emits @samp{foo: .long 1,2,3}. - -@item .DATAB @var{repeat}, @var{expr} -@itemx .DATAB.B @var{repeat}, @var{expr} -@itemx .DATAB.W @var{repeat}, @var{expr} -@itemx .DATAB.L @var{repeat}, @var{expr} -@c FIXME! Looks like gasp accepts and ignores args after 2nd. -Make @code{as} emit @var{repeat} copies of the value of the expression -@var{expr} (using the @code{as} directive @code{.fill}). -@samp{.DATAB.B} repeats one-byte values; @samp{.DATAB.W} repeats -two-byte values; and @samp{.DATAB.L} repeats four-byte values. -@samp{.DATAB} without a suffix repeats four-byte values, just like -@samp{.DATAB.L}. - -@c FIXME! Allowing zero might be useful for edge conditions in macros. -@var{repeat} must be an absolute expression with a positive value. - -@item .SDATA "@var{str}" @dots{} -String data. Emits a concatenation of bytes, precisely as you specify -them (in particular, @emph{nothing is added to mark the end} of the -string). @xref{Constants,, String and numeric constants}, for details -about how to write strings. @code{.SDATA} concatenates multiple -arguments, making it easy to switch between string representations. You -can use commas to separate the individual arguments for clarity, if you -choose. - -@item .SDATAB @var{repeat}, "@var{str}" @dots{} -Repeated string data. The first argument specifies how many copies of -the string to emit; the remaining arguments specify the string, in the -same way as the arguments to @code{.SDATA}. - -@item .SDATAZ "@var{str}" @dots{} -Zero-terminated string data. Just like @code{.SDATA}, except that -@code{.SDATAZ} writes a zero byte at the end of the string. - -@item .SDATAC "@var{str}" @dots{} -Count-prefixed string data. Just like @code{.SDATA}, except that -@sc{gasp} precedes the string with a leading one-byte count. For -example, @samp{.SDATAC "HI"} generates @samp{.byte 2,72,73}. Since the -count field is only one byte, you can only use @code{.SDATAC} for -strings less than 256 bytes in length. -@end ftable - -@node Uninitialized -@subsection Uninitialized data - -@c FIXME! .space different on some platforms, notably HPPA. Config? -Use the @code{.RES}, @code{.SRES}, @code{.SRESC}, and @code{.SRESZ} -directives to reserve memory and leave it uninitialized. @sc{gasp} -resolves these directives to appropriate calls of the @sc{gnu} -@code{as} @code{.space} directive. - -@ftable @code -@item .RES @var{count} -@itemx .RES.B @var{count} -@itemx .RES.W @var{count} -@itemx .RES.L @var{count} -Reserve room for @var{count} uninitialized elements of data. The -suffix specifies the size of each element: @code{.RES.B} reserves -@var{count} bytes, @code{.RES.W} reserves @var{count} pairs of bytes, -and @code{.RES.L} reserves @var{count} quartets. @code{.RES} without a -suffix is equivalent to @code{.RES.L}. - -@item .SRES @var{count} -@itemx .SRES.B @var{count} -@itemx .SRES.W @var{count} -@itemx .SRES.L @var{count} -@c FIXME! This is boring. Shouldn't it at least have a different -@c default size? (e.g. the "S" suggests "string", for which .B -@c would be more appropriate) -@code{.SRES} is a synonym for @samp{.RES}. - -@item .SRESC @var{count} -@itemx .SRESC.B @var{count} -@itemx .SRESC.W @var{count} -@itemx .SRESC.L @var{count} -Like @code{.SRES}, but reserves space for @code{@var{count}+1} elements. - -@item .SRESZ @var{count} -@itemx .SRESZ.B @var{count} -@itemx .SRESZ.W @var{count} -@itemx .SRESZ.L @var{count} -Like @code{.SRES}, but reserves space for @code{@var{count}+1} elements. -@end ftable - -@node Listings -@section Assembly listing control - -The @sc{gasp} listing-control directives correspond to -related @sc{gnu} @code{as} directives. - -@ftable @code -@item .PRINT LIST -@itemx .PRINT NOLIST -Print control. This directive emits the @sc{gnu} @code{as} directive -@code{.list} or @code{.nolist}, according to its argument. @xref{List,, -@code{.list}, as.info, Using as}, for details on how these directives -interact. - -@item .FORM LIN=@var{ln} -@itemx .FORM COL=@var{cols} -@itemx .FORM LIN=@var{ln} COL=@var{cols} -Specify the page size for assembly listings: @var{ln} represents the -number of lines, and @var{cols} the number of columns. You may specify -either page dimension independently, or both together. If you do not -specify the number of lines, @sc{gasp} assumes 60 lines; if you do not -specify the number of columns, @sc{gasp} assumes 132 columns. -(Any values you may have specified in previous instances of @code{.FORM} -do @emph{not} carry over as defaults.) Emits the @code{.psize} -assembler directive. - -@item .HEADING @var{string} -Specify @var{string} as the title of your assembly listings. Emits -@samp{.title "@var{string}"}. - -@item .PAGE -Force a new page in assembly listings. Emits @samp{.eject}. -@end ftable - -@node Other Commands -@section Miscellaneous commands - -@ftable @code -@item .ALTERNATE -Use the alternate macro syntax henceforth in the assembly. -@xref{Alternate,, Alternate macro syntax}. - -@item .ORG -@c FIXME! This is very strange, since _GAS_ understands .org -This command is recognized, but not yet implemented. @sc{gasp} -generates an error message for programs that use @code{.ORG}. - -@item .RADIX @var{s} -@c FIXME no test cases in testsuite/gasp -@sc{gasp} understands numbers in any of base two, eight, ten, or -sixteen. You can encode the base explicitly in any numeric constant -(@pxref{Constants,, String and numeric constants}). If you write -numbers without an explicit indication of the base, the most recent -@samp{.RADIX @var{s}} command determines how they are interpreted. -@var{s} is a single letter, one of the following: - -@table @code -@item .RADIX B -Base 2. - -@item .RADIX Q -Base 8. - -@item .RADIX D -Base 10. This is the original default radix. - -@item .RADIX H -Base 16. -@end table - -You may specify the argument @var{s} in lower case (any of @samp{bqdh}) -with the same effects. - -@item .EXPORT @var{name} -@itemx .GLOBAL @var{name} -@c FIXME! No test cases in testsuite/gasp -Declare @var{name} global (emits @samp{.global @var{name}}). The two -directives are synonymous. - -@item .PROGRAM -No effect: @sc{gasp} accepts this directive, and silently ignores it. - -@item .END -Mark end of each preprocessor file. @sc{gasp} issues a warning if it -reaches end of file without seeing this command. - -@item .INCLUDE "@var{str}" -Preprocess the file named by @var{str}, as if its contents appeared -where the @code{.INCLUDE} directive does. @sc{gasp} imposes a maximum -limit of 30 stacked include files, as a sanity check. -@c FIXME! Why is include depth not affected by -u? - -@item .ALIGN @var{size} -@c FIXME! Why is this not utterly pointless? -Evaluate the absolute expression @var{size}, and emit the assembly -instruction @samp{.align @var{size}} using the result. -@end ftable - -@node Syntax Details -@section Details of the GASP syntax - -Since @sc{gasp} is meant to work with assembly code, its statement -syntax has no surprises for the assembly programmer. - -@cindex whitespace -@emph{Whitespace} (blanks or tabs; @emph{not} newline) is partially -significant, in that it delimits up to three fields in a line. The -amount of whitespace does not matter; you may line up fields in separate -lines if you wish, but @sc{gasp} does not require that. - -@cindex fields of @sc{gasp} source line -@cindex label field -The @emph{first field}, an optional @dfn{label}, must be flush left in a -line (with no leading whitespace) if it appears at all. You may use a -colon after the label if you wish; @sc{gasp} neither requires the colon -nor objects to it (but will not include it as part of the label name). - -@cindex directive field -The @emph{second field}, which must appear after some whitespace, -contains a @sc{gasp} or assembly @dfn{directive}. - -@cindex argument fields -Any @emph{further fields} on a line are @dfn{arguments} to the -directive; you can separate them from one another using either commas or -whitespace. - -@menu -* Markers:: -* Constants:: -* Symbols:: -* Expressions:: -* String Builtins:: -@end menu - -@node Markers -@subsection Special syntactic markers - -@sc{gasp} recognizes a few special markers: to delimit comments, to -continue a statement on the next line, to separate symbols from other -characters, and to copy text to the output literally. (One other -special marker, @samp{\@@}, works only within macro definitions; -@pxref{Macros,, Defining your own directives}.) - -@cindex comments -The trailing part of any @sc{gasp} source line may be a @dfn{comment}. -A comment begins with the first unquoted comment character (@samp{!} by -default), or an escaped or doubled comment character (@samp{\!} or -@samp{!!} by default), and extends to the end of a line. You can -specify what comment character to use with the @samp{-c} option -(@pxref{Invoking GASP,, Command Line Options}). The two kinds of -comment markers lead to slightly different treatment: - -@table @code -@item ! -A single, un-escaped comment character generates an assembly comment in -the @sc{gasp} output. @sc{gasp} evaluates any preprocessor variables -(macro arguments, or variables defined with @code{.ASSIGNA} or -@code{.ASSIGNC}) present. For example, a macro that begins like this - -@example - .MACRO SUM FROM=0, TO=9 - ! \FROM \TO -@end example - -@noindent -issues as the first line of output a comment that records the -values you used to call the macro. - -@c comments, preprocessor-only -@c preprocessor-only comments -@c GASP-only comments -@item \! -@itemx !! -Either an escaped comment character, or a double comment character, -marks a @sc{gasp} source comment. @sc{gasp} does not copy such comments -to the assembly output. -@end table - -@cindex continuation character -@kindex + -To @emph{continue a statement} on the next line of the file, begin the -second line with the character @samp{+}. - -@cindex literal copy to output -@cindex copying literally to output -@cindex preprocessing, avoiding -@cindex avoiding preprocessing -Occasionally you may want to prevent @sc{gasp} from preprocessing some -particular bit of text. To @emph{copy literally} from the @sc{gasp} -source to its output, place @samp{\(} before the string to copy, and -@samp{)} at the end. For example, write @samp{\(\!)} if you need the -characters @samp{\!} in your assembly output. - -@cindex symbol separator -@cindex text, separating from symbols -@cindex symbols, separating from text -To @emph{separate a preprocessor variable} from text to appear -immediately after its value, write a single quote (@code{'}). For -example, @samp{.SDATA "\P'1"} writes a string built by concatenating the -value of @code{P} and the digit @samp{1}. (You cannot achieve this by -writing just @samp{\P1}, since @samp{P1} is itself a valid name for a -preprocessor variable.) - -@node Constants -@subsection String and numeric constants - -There are two ways of writing @dfn{string constants} in @sc{gasp}: as -literal text, and by numeric byte value. Specify a string literal -between double quotes (@code{"@var{str}"}). Specify an individual -numeric byte value as an absolute expression between angle brackets -(@code{<@var{expr}>}. Directives that output strings allow you to -specify any number of either kind of value, in whatever order is -convenient, and concatenate the result. (Alternate syntax mode -introduces a number of alternative string notations; @pxref{Alternate,, -Alternate macro syntax}.) - -@c Details of numeric notation, e.g. base prefixes -You can write @dfn{numeric constants} either in a specific base, or in -whatever base is currently selected (either 10, or selected by the most -recent @code{.RADIX}). - -To write a number in a @emph{specific base}, use the pattern -@code{@var{s}'@var{ddd}}: a base specifier character @var{s}, followed -by a single quote followed by digits @var{ddd}. The base specifier -character matches those you can specify with @code{.RADIX}: @samp{B} for -base 2, @samp{Q} for base 8, @samp{D} for base 10, and @samp{H} for base -16. (You can write this character in lower case if you prefer.) - -You can write floating point constants using the same syntax recognised -by GAS @ref{Flonums,,Flonums,as,The GNU Assembler.}. A constraint is -that these constants will be interpreted as decimal values irrespective -of the currently selected base. - -@c FIXME! What are rules for recognizing number in deflt base? Whatever -@c is left over after parsing other things?? - -@node Symbols -@subsection Symbols - -@sc{gasp} recognizes symbol names that start with any alphabetic character, -@samp{_}, or @samp{$}, and continue with any of the same characters or -with digits. Label names follow the same rules. - -@node Expressions -@subsection Arithmetic expressions in GASP - -@cindex absolute expressions -@cindex relocatable expressions -There are two kinds of expressions, depending on their result: -@dfn{absolute} expressions, which resolve to a constant (that is, they -do not involve any values unknown to @sc{gasp}), and @dfn{relocatable} -expressions, which must reduce to the form - -@example -@var{addsym}+@var{const}-@var{subsym} -@end example - -@noindent -where @var{addsym} and @var{subsym} are assembly symbols of unknown -value, and @var{const} is a constant. - -Arithmetic for @sc{gasp} expressions follows very similar rules to C. -You can use parentheses to change precedence; otherwise, arithmetic -primitives have decreasing precedence in the order of the following -list. - -@enumerate -@item -Single-argument @code{+} (identity), @code{-} (arithmetic opposite), or -@code{~} (bitwise negation). @emph{The argument must be an absolute -expression.} - -@item -@code{*} (multiplication) and @code{/} (division). @emph{Both arguments -must be absolute expressions.} - -@item -@code{+} (addition) and @code{-} (subtraction). @emph{At least one argument -must be absolute.} -@c FIXME! Actually, subtraction doesn't check for this. - -@item -@code{&} (bitwise and). @emph{Both arguments must be absolute.} - -@item -@c FIXME! I agree ~ is a better notation than ^ for xor, but is the -@c improvement worth differing from C? -@code{|} (bitwise or) and @code{~} (bitwise exclusive or; @code{^} in -C). @emph{Both arguments must be absolute.} -@end enumerate - -@node String Builtins -@subsection String primitives - -You can use these primitives to manipulate strings (in the argument -field of @sc{gasp} statements): - -@ftable @code -@item .LEN("@var{str}") -Calculate the length of string @code{"@var{str}"}, as an absolute -expression. For example, @samp{.RES.B .LEN("sample")} reserves six -bytes of memory. - -@item .INSTR("@var{string}", "@var{seg}", @var{ix}) -Search for the first occurrence of @var{seg} after position @var{ix} of -@var{string}. For example, @samp{.INSTR("ABCDEFG", "CDE", 0)} evaluates -to the absolute result @code{2}. - -The result is @code{-1} if @var{seg} does not occur in @var{string} -after position @var{ix}. - -@item .SUBSTR("@var{string}",@var{start},@var{len}) -The substring of @var{string} beginning at byte number @var{start} and -extending for @var{len} bytes. -@end ftable - -@node Alternate -@section Alternate macro syntax - -If you specify @samp{-a} or @samp{--alternate} on the @sc{gasp} command -line, the preprocessor uses somewhat different syntax. This syntax is -reminiscent of the syntax of Phar Lap macro assembler, but it -is @emph{not} meant to be a full emulation of Phar Lap or similar -assemblers. In particular, @sc{gasp} does not support directives such -as @code{DB} and @code{IRP}, even in alternate syntax mode. - -In particular, @samp{-a} (or @samp{--alternate}) elicits these -differences: - -@table @emph -@item Preprocessor directives -You can use @sc{gasp} preprocessor directives without a leading @samp{.} -dot. For example, you can write @samp{SDATA} with the same effect as -@samp{.SDATA}. - -@item LOCAL -One additional directive, @code{LOCAL}, is available. @xref{Macros,, -Defining your own directives}, for an explanation of how to use -@code{LOCAL}. - -@need 2000 -@item String delimiters -You can write strings delimited in these other ways besides -@code{"@var{string}"}: - -@table @code -@item '@var{string}' -You can delimit strings with single-quote charaters. - -@item <@var{string}> -You can delimit strings with matching angle brackets. -@end table - -@item single-character string escape -To include any single character literally in a string (even if the -character would otherwise have some special meaning), you can prefix the -character with @samp{!} (an exclamation mark). For example, you can -write @samp{<4.3 !> 5.4!!>} to get the literal text @samp{4.3 > 5.4!}. - -@item Expression results as strings -You can write @samp{%@var{expr}} to evaluate the expression @var{expr} -and use the result as a string. -@end table - -@node GNU Free Documentation License -@chapter GNU Free Documentation License - - GNU Free Documentation License - - Version 1.1, March 2000 - - Copyright (C) 2000 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - -0. PREAMBLE - -The purpose of this License is to make a manual, textbook, or other -written document "free" in the sense of freedom: to assure everyone -the effective freedom to copy and redistribute it, with or without -modifying it, either commercially or noncommercially. Secondarily, -this License preserves for the author and publisher a way to get -credit for their work, while not being considered responsible for -modifications made by others. - -This License is a kind of "copyleft", which means that derivative -works of the document must themselves be free in the same sense. It -complements the GNU General Public License, which is a copyleft -license designed for free software. - -We have designed this License in order to use it for manuals for free -software, because free software needs free documentation: a free -program should come with manuals providing the same freedoms that the -software does. But this License is not limited to software manuals; -it can be used for any textual work, regardless of subject matter or -whether it is published as a printed book. We recommend this License -principally for works whose purpose is instruction or reference. - - -1. APPLICABILITY AND DEFINITIONS - -This License applies to any manual or other work that contains a -notice placed by the copyright holder saying it can be distributed -under the terms of this License. The "Document", below, refers to any -such manual or work. Any member of the public is a licensee, and is -addressed as "you". - -A "Modified Version" of the Document means any work containing the -Document or a portion of it, either copied verbatim, or with -modifications and/or translated into another language. - -A "Secondary Section" is a named appendix or a front-matter section of -the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall subject -(or to related matters) and contains nothing that could fall directly -within that overall subject. (For example, if the Document is in part a -textbook of mathematics, a Secondary Section may not explain any -mathematics.) The relationship could be a matter of historical -connection with the subject or with related matters, or of legal, -commercial, philosophical, ethical or political position regarding -them. - -The "Invariant Sections" are certain Secondary Sections whose titles -are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. - -The "Cover Texts" are certain short passages of text that are listed, -as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. - -A "Transparent" copy of the Document means a machine-readable copy, -represented in a format whose specification is available to the -general public, whose contents can be viewed and edited directly and -straightforwardly with generic text editors or (for images composed of -pixels) generic paint programs or (for drawings) some widely available -drawing editor, and that is suitable for input to text formatters or -for automatic translation to a variety of formats suitable for input -to text formatters. A copy made in an otherwise Transparent file -format whose markup has been designed to thwart or discourage -subsequent modification by readers is not Transparent. A copy that is -not "Transparent" is called "Opaque". - -Examples of suitable formats for Transparent copies include plain -ASCII without markup, Texinfo input format, LaTeX input format, SGML -or XML using a publicly available DTD, and standard-conforming simple -HTML designed for human modification. Opaque formats include -PostScript, PDF, proprietary formats that can be read and edited only -by proprietary word processors, SGML or XML for which the DTD and/or -processing tools are not generally available, and the -machine-generated HTML produced by some word processors for output -purposes only. - -The "Title Page" means, for a printed book, the title page itself, -plus such following pages as are needed to hold, legibly, the material -this License requires to appear in the title page. For works in -formats which do not have any title page as such, "Title Page" means -the text near the most prominent appearance of the work's title, -preceding the beginning of the body of the text. - - -2. VERBATIM COPYING - -You may copy and distribute the Document in any medium, either -commercially or noncommercially, provided that this License, the -copyright notices, and the license notice saying this License applies -to the Document are reproduced in all copies, and that you add no other -conditions whatsoever to those of this License. You may not use -technical measures to obstruct or control the reading or further -copying of the copies you make or distribute. However, you may accept -compensation in exchange for copies. If you distribute a large enough -number of copies you must also follow the conditions in section 3. - -You may also lend copies, under the same conditions stated above, and -you may publicly display copies. - - -3. COPYING IN QUANTITY - -If you publish printed copies of the Document numbering more than 100, -and the Document's license notice requires Cover Texts, you must enclose -the copies in covers that carry, clearly and legibly, all these Cover -Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on -the back cover. Both covers must also clearly and legibly identify -you as the publisher of these copies. The front cover must present -the full title with all words of the title equally prominent and -visible. You may add other material on the covers in addition. -Copying with changes limited to the covers, as long as they preserve -the title of the Document and satisfy these conditions, can be treated -as verbatim copying in other respects. - -If the required texts for either cover are too voluminous to fit -legibly, you should put the first ones listed (as many as fit -reasonably) on the actual cover, and continue the rest onto adjacent -pages. - -If you publish or distribute Opaque copies of the Document numbering -more than 100, you must either include a machine-readable Transparent -copy along with each Opaque copy, or state in or with each Opaque copy -a publicly-accessible computer-network location containing a complete -Transparent copy of the Document, free of added material, which the -general network-using public has access to download anonymously at no -charge using public-standard network protocols. If you use the latter -option, you must take reasonably prudent steps, when you begin -distribution of Opaque copies in quantity, to ensure that this -Transparent copy will remain thus accessible at the stated location -until at least one year after the last time you distribute an Opaque -copy (directly or through your agents or retailers) of that edition to -the public. - -It is requested, but not required, that you contact the authors of the -Document well before redistributing any large number of copies, to give -them a chance to provide you with an updated version of the Document. - - -4. MODIFICATIONS - -You may copy and distribute a Modified Version of the Document under -the conditions of sections 2 and 3 above, provided that you release -the Modified Version under precisely this License, with the Modified -Version filling the role of the Document, thus licensing distribution -and modification of the Modified Version to whoever possesses a copy -of it. In addition, you must do these things in the Modified Version: - -A. Use in the Title Page (and on the covers, if any) a title distinct - from that of the Document, and from those of previous versions - (which should, if there were any, be listed in the History section - of the Document). You may use the same title as a previous version - if the original publisher of that version gives permission. -B. List on the Title Page, as authors, one or more persons or entities - responsible for authorship of the modifications in the Modified - Version, together with at least five of the principal authors of the - Document (all of its principal authors, if it has less than five). -C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. -D. Preserve all the copyright notices of the Document. -E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. -F. Include, immediately after the copyright notices, a license notice - giving the public permission to use the Modified Version under the - terms of this License, in the form shown in the Addendum below. -G. Preserve in that license notice the full lists of Invariant Sections - and required Cover Texts given in the Document's license notice. -H. Include an unaltered copy of this License. -I. Preserve the section entitled "History", and its title, and add to - it an item stating at least the title, year, new authors, and - publisher of the Modified Version as given on the Title Page. If - there is no section entitled "History" in the Document, create one - stating the title, year, authors, and publisher of the Document as - given on its Title Page, then add an item describing the Modified - Version as stated in the previous sentence. -J. Preserve the network location, if any, given in the Document for - public access to a Transparent copy of the Document, and likewise - the network locations given in the Document for previous versions - it was based on. These may be placed in the "History" section. - You may omit a network location for a work that was published at - least four years before the Document itself, or if the original - publisher of the version it refers to gives permission. -K. In any section entitled "Acknowledgements" or "Dedications", - preserve the section's title, and preserve in the section all the - substance and tone of each of the contributor acknowledgements - and/or dedications given therein. -L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section titles. -M. Delete any section entitled "Endorsements". Such a section - may not be included in the Modified Version. -N. Do not retitle any existing section as "Endorsements" - or to conflict in title with any Invariant Section. - -If the Modified Version includes new front-matter sections or -appendices that qualify as Secondary Sections and contain no material -copied from the Document, you may at your option designate some or all -of these sections as invariant. To do this, add their titles to the -list of Invariant Sections in the Modified Version's license notice. -These titles must be distinct from any other section titles. - -You may add a section entitled "Endorsements", provided it contains -nothing but endorsements of your Modified Version by various -parties--for example, statements of peer review or that the text has -been approved by an organization as the authoritative definition of a -standard. - -You may add a passage of up to five words as a Front-Cover Text, and a -passage of up to 25 words as a Back-Cover Text, to the end of the list -of Cover Texts in the Modified Version. Only one passage of -Front-Cover Text and one of Back-Cover Text may be added by (or -through arrangements made by) any one entity. If the Document already -includes a cover text for the same cover, previously added by you or -by arrangement made by the same entity you are acting on behalf of, -you may not add another; but you may replace the old one, on explicit -permission from the previous publisher that added the old one. - -The author(s) and publisher(s) of the Document do not by this License -give permission to use their names for publicity for or to assert or -imply endorsement of any Modified Version. - - -5. COMBINING DOCUMENTS - -You may combine the Document with other documents released under this -License, under the terms defined in section 4 above for modified -versions, provided that you include in the combination all of the -Invariant Sections of all of the original documents, unmodified, and -list them all as Invariant Sections of your combined work in its -license notice. - -The combined work need only contain one copy of this License, and -multiple identical Invariant Sections may be replaced with a single -copy. If there are multiple Invariant Sections with the same name but -different contents, make the title of each such section unique by -adding at the end of it, in parentheses, the name of the original -author or publisher of that section if known, or else a unique number. -Make the same adjustment to the section titles in the list of -Invariant Sections in the license notice of the combined work. - -In the combination, you must combine any sections entitled "History" -in the various original documents, forming one section entitled -"History"; likewise combine any sections entitled "Acknowledgements", -and any sections entitled "Dedications". You must delete all sections -entitled "Endorsements." - - -6. COLLECTIONS OF DOCUMENTS - -You may make a collection consisting of the Document and other documents -released under this License, and replace the individual copies of this -License in the various documents with a single copy that is included in -the collection, provided that you follow the rules of this License for -verbatim copying of each of the documents in all other respects. - -You may extract a single document from such a collection, and distribute -it individually under this License, provided you insert a copy of this -License into the extracted document, and follow this License in all -other respects regarding verbatim copying of that document. - - -7. AGGREGATION WITH INDEPENDENT WORKS - -A compilation of the Document or its derivatives with other separate -and independent documents or works, in or on a volume of a storage or -distribution medium, does not as a whole count as a Modified Version -of the Document, provided no compilation copyright is claimed for the -compilation. Such a compilation is called an "aggregate", and this -License does not apply to the other self-contained works thus compiled -with the Document, on account of their being thus compiled, if they -are not themselves derivative works of the Document. - -If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one quarter -of the entire aggregate, the Document's Cover Texts may be placed on -covers that surround only the Document within the aggregate. -Otherwise they must appear on covers around the whole aggregate. - - -8. TRANSLATION - -Translation is considered a kind of modification, so you may -distribute translations of the Document under the terms of section 4. -Replacing Invariant Sections with translations requires special -permission from their copyright holders, but you may include -translations of some or all Invariant Sections in addition to the -original versions of these Invariant Sections. You may include a -translation of this License provided that you also include the -original English version of this License. In case of a disagreement -between the translation and the original English version of this -License, the original English version will prevail. - - -9. TERMINATION - -You may not copy, modify, sublicense, or distribute the Document except -as expressly provided for under this License. Any other attempt to -copy, modify, sublicense or distribute the Document is void, and will -automatically terminate your rights under this License. However, -parties who have received copies, or rights, from you under this -License will not have their licenses terminated so long as such -parties remain in full compliance. - - -10. FUTURE REVISIONS OF THIS LICENSE - -The Free Software Foundation may publish new, revised versions -of the GNU Free Documentation License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. See -http://www.gnu.org/copyleft/. - -Each version of the License is given a distinguishing version number. -If the Document specifies that a particular numbered version of this -License "or any later version" applies to it, you have the option of -following the terms and conditions either of that specified version or -of any later version that has been published (not as a draft) by the -Free Software Foundation. If the Document does not specify a version -number of this License, you may choose any version ever published (not -as a draft) by the Free Software Foundation. - - -ADDENDUM: How to use this License for your documents - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and -license notices just after the title page: - -@smallexample - Copyright (c) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 - or any later version published by the Free Software Foundation; - with the Invariant Sections being LIST THEIR TITLES, with the - Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. - A copy of the license is included in the section entitled "GNU - Free Documentation License". -@end smallexample - -If you have no Invariant Sections, write "with no Invariant Sections" -instead of saying which ones are invariant. If you have no -Front-Cover Texts, write "no Front-Cover Texts" instead of -"Front-Cover Texts being LIST"; likewise for Back-Cover Texts. - -If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, -to permit their use in free software. - -@node Index -@unnumbered Index - -@printindex cp - -@contents -@bye diff --git a/contrib/binutils/gas/gasp.c b/contrib/binutils/gas/gasp.c deleted file mode 100644 index d1e4185..0000000 --- a/contrib/binutils/gas/gasp.c +++ /dev/null @@ -1,3761 +0,0 @@ -/* gasp.c - Gnu assembler preprocessor main program. - Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 - Free Software Foundation, Inc. - - Written by Steve and Judy Chamberlain of Cygnus Support, - sac@cygnus.com - - This file is part of GASP, the GNU Assembler Preprocessor. - - GASP is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GASP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GASP; see the file COPYING. If not, write to the Free - Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ - -/* -This program translates the input macros and stuff into a form -suitable for gas to consume. - - gasp [-sdhau] [-c char] [-o <outfile>] <infile>* - - -s copy source to output - -c <char> comments are started with <char> instead of ! - -u allow unreasonable stuff - -p print line numbers - -d print debugging stats - -s semi colons start comments - -a use alternate syntax - Pseudo ops can start with or without a . - Labels have to be in first column. - -I specify include dir - Macro arg parameters subsituted by name, don't need the &. - String can start with ' too. - Strings can be surrounded by <..> - A %<exp> in a string evaluates the expression - Literal char in a string with ! -*/ - -#include "config.h" -#include "bin-bugs.h" - -#include <assert.h> -#include <stdio.h> -#include <string.h> -#include "getopt.h" - -#ifdef HAVE_STDLIB_H -#include <stdlib.h> -#endif - -#ifdef NEED_MALLOC_DECLARATION -extern char *malloc (); -#endif - -#include "ansidecl.h" -#include "libiberty.h" -#include "safe-ctype.h" -#include "sb.h" -#include "macro.h" -#include "asintl.h" -#include "xregex.h" - -char *program_version = "1.2"; - -/* This is normally declared in as.h, but we don't include that. We - need the function because other files linked with gasp.c might call - it. */ -extern void as_abort PARAMS ((const char *, int, const char *)); - -/* The default obstack chunk size. If we set this to zero, the - obstack code will use whatever will fit in a 4096 byte block. This - is used by the hash table code used by macro.c. */ -int chunksize = 0; - -#define MAX_INCLUDES 30 /* Maximum include depth. */ -#define MAX_REASONABLE 1000 /* Maximum number of expansions. */ - -int unreasonable; /* -u on command line. */ -int stats; /* -d on command line. */ -int print_line_number; /* -p flag on command line. */ -int copysource; /* -c flag on command line. */ -int warnings; /* Number of WARNINGs generated so far. */ -int errors; /* Number of ERRORs generated so far. */ -int fatals; /* Number of fatal ERRORs generated so far (either 0 or 1). */ -int alternate = 0; /* -a on command line. */ -int mri = 0; /* -M on command line. */ -char comment_char = '!'; -int radix = 10; /* Default radix. */ - -int had_end; /* Seen .END. */ - -/* The output stream. */ -FILE *outfile; - -/* The attributes of each character are stored as a bit pattern - chartype, which gives us quick tests. */ - -#define FIRSTBIT 1 -#define NEXTBIT 2 -#define SEPBIT 4 -#define WHITEBIT 8 -#define COMMENTBIT 16 -#define BASEBIT 32 -#define ISCOMMENTCHAR(x) (chartype[(unsigned char)(x)] & COMMENTBIT) -#define ISFIRSTCHAR(x) (chartype[(unsigned char)(x)] & FIRSTBIT) -#define ISNEXTCHAR(x) (chartype[(unsigned char)(x)] & NEXTBIT) -#define ISSEP(x) (chartype[(unsigned char)(x)] & SEPBIT) -#define ISWHITE(x) (chartype[(unsigned char)(x)] & WHITEBIT) -#define ISBASE(x) (chartype[(unsigned char)(x)] & BASEBIT) -static char chartype[256]; - -/* Conditional assembly uses the `ifstack'. Each aif pushes another - entry onto the stack, and sets the on flag if it should. The aelse - sets hadelse, and toggles on. An aend pops a level. We limit to - 100 levels of nesting, not because we're facists pigs with read - only minds, but because more than 100 levels of nesting is probably - a bug in the user's macro structure. */ - -#define IFNESTING 100 -struct { - int on; /* Is the level being output. */ - int hadelse; /* Has an aelse been seen. */ -} ifstack[IFNESTING]; - -int ifi; - -/* The final and intermediate results of expression evaluation are kept in - exp_t's. Note that a symbol is not an sb, but a pointer into the input - line. It must be coped somewhere safe before the next line is read in. */ - -typedef struct { - char *name; - int len; -} symbol; - -typedef struct { - int value; /* Constant part. */ - symbol add_symbol; /* Name part. */ - symbol sub_symbol; /* Name part. */ -} exp_t; - -/* Hashing is done in a pretty standard way. A hash_table has a - pointer to a vector of pointers to hash_entrys, and the size of the - vector. A hash_entry contains a union of all the info we like to - store in hash table. If there is a hash collision, hash_entries - with the same hash are kept in a chain. */ - -/* What the data in a hash_entry means. */ -typedef enum { - hash_integer, /* Name->integer mapping. */ - hash_string, /* Name->string mapping. */ - hash_macro, /* Name is a macro. */ - hash_formal /* Name is a formal argument. */ -} hash_type; - -typedef struct hs { - sb key; /* Symbol name. */ - hash_type type; /* Symbol meaning. */ - union { - sb s; - int i; - struct macro_struct *m; - struct formal_struct *f; - } value; - struct hs *next; /* Next hash_entry with same hash key. */ -} hash_entry; - -typedef struct { - hash_entry **table; - int size; -} hash_table; - -/* How we nest files and expand macros etc. - - We keep a stack of of include_stack structs. Each include file - pushes a new level onto the stack. We keep an sb with a pushback - too. unget chars are pushed onto the pushback sb, getchars first - checks the pushback sb before reading from the input stream. - - Small things are expanded by adding the text of the item onto the - pushback sb. Larger items are grown by pushing a new level and - allocating the entire pushback buf for the item. Each time - something like a macro is expanded, the stack index is changed. We - can then perform an exitm by popping all entries off the stack with - the same stack index. If we're being reasonable, we can detect - recusive expansion by checking the index is reasonably small. */ - -typedef enum { - include_file, include_repeat, include_while, include_macro -} include_type; - -struct include_stack { - sb pushback; /* Current pushback stream. */ - int pushback_index; /* Next char to read from stream. */ - FILE *handle; /* Open file. */ - sb name; /* Name of file. */ - int linecount; /* Number of lines read so far. */ - include_type type; - int index; /* Index of this layer. */ -} include_stack[MAX_INCLUDES]; - -struct include_stack *sp; -#define isp (sp - include_stack) - -/* Include file list. */ - -typedef struct include_path { - struct include_path *next; - sb path; -} include_path; - -include_path *paths_head; -include_path *paths_tail; - -static void quit PARAMS ((void)); -static void hash_new_table PARAMS ((int, hash_table *)); -static int hash PARAMS ((sb *)); -static hash_entry *hash_create PARAMS ((hash_table *, sb *)); -static void hash_add_to_string_table PARAMS ((hash_table *, sb *, sb *, int)); -static void hash_add_to_int_table PARAMS ((hash_table *, sb *, int)); -static hash_entry *hash_lookup PARAMS ((hash_table *, sb *)); -static void checkconst PARAMS ((int, exp_t *)); -static int is_flonum PARAMS ((int, sb *)); -static int chew_flonum PARAMS ((int, sb *, sb *)); -static int sb_strtol PARAMS ((int, sb *, int, int *)); -static int level_0 PARAMS ((int, sb *, exp_t *)); -static int level_1 PARAMS ((int, sb *, exp_t *)); -static int level_2 PARAMS ((int, sb *, exp_t *)); -static int level_3 PARAMS ((int, sb *, exp_t *)); -static int level_4 PARAMS ((int, sb *, exp_t *)); -static int level_5 PARAMS ((int, sb *, exp_t *)); -static int exp_parse PARAMS ((int, sb *, exp_t *)); -static void exp_string PARAMS ((exp_t *, sb *)); -static int exp_get_abs PARAMS ((const char *, int, sb *, int *)); -#if 0 -static void strip_comments PARAMS ((sb *)); -#endif -static void unget PARAMS ((int)); -static void include_buf PARAMS ((sb *, sb *, include_type, int)); -static void include_print_where_line PARAMS ((FILE *)); -static void include_print_line PARAMS ((FILE *)); -static int get_line PARAMS ((sb *)); -static int grab_label PARAMS ((sb *, sb *)); -static void change_base PARAMS ((int, sb *, sb *)); -static void do_end PARAMS ((sb *)); -static void do_assign PARAMS ((int, int, sb *)); -static void do_radix PARAMS ((sb *)); -static int get_opsize PARAMS ((int, sb *, int *)); -static int eol PARAMS ((int, sb *)); -static void do_data PARAMS ((int, sb *, int)); -static void do_datab PARAMS ((int, sb *)); -static void do_align PARAMS ((int, sb *)); -static void do_res PARAMS ((int, sb *, int)); -static void do_export PARAMS ((sb *)); -static void do_print PARAMS ((int, sb *)); -static void do_heading PARAMS ((int, sb *)); -static void do_page PARAMS ((void)); -static void do_form PARAMS ((int, sb *)); -static int get_any_string PARAMS ((int, sb *, sb *, int, int)); -static int skip_openp PARAMS ((int, sb *)); -static int skip_closep PARAMS ((int, sb *)); -static int dolen PARAMS ((int, sb *, sb *)); -static int doinstr PARAMS ((int, sb *, sb *)); -static int dosubstr PARAMS ((int, sb *, sb *)); -static void process_assigns PARAMS ((int, sb *, sb *)); -static int get_and_process PARAMS ((int, sb *, sb *)); -static void process_file PARAMS ((void)); -static void free_old_entry PARAMS ((hash_entry *)); -static void do_assigna PARAMS ((int, sb *)); -static void do_assignc PARAMS ((int, sb *)); -static void do_reg PARAMS ((int, sb *)); -static int condass_lookup_name PARAMS ((sb *, int, sb *, int)); -static int whatcond PARAMS ((int, sb *, int *)); -static int istrue PARAMS ((int, sb *)); -static void do_aif PARAMS ((int, sb *)); -static void do_aelse PARAMS ((void)); -static void do_aendi PARAMS ((void)); -static int condass_on PARAMS ((void)); -static void do_if PARAMS ((int, sb *, int)); -static int get_mri_string PARAMS ((int, sb *, sb *, int)); -static void do_ifc PARAMS ((int, sb *, int)); -static void do_aendr PARAMS ((void)); -static void do_awhile PARAMS ((int, sb *)); -static void do_aendw PARAMS ((void)); -static void do_exitm PARAMS ((void)); -static void do_arepeat PARAMS ((int, sb *)); -static void do_endm PARAMS ((void)); -static void do_irp PARAMS ((int, sb *, int)); -static void do_local PARAMS ((int, sb *)); -static void do_macro PARAMS ((int, sb *)); -static int macro_op PARAMS ((int, sb *)); -static int getstring PARAMS ((int, sb *, sb *)); -static void do_sdata PARAMS ((int, sb *, int)); -static void do_sdatab PARAMS ((int, sb *)); -static int new_file PARAMS ((const char *)); -static void do_include PARAMS ((int, sb *)); -static void include_pop PARAMS ((void)); -static int get PARAMS ((void)); -static int linecount PARAMS ((void)); -static int include_next_index PARAMS ((void)); -static void chartype_init PARAMS ((void)); -static int process_pseudo_op PARAMS ((int, sb *, sb *)); -static void add_keyword PARAMS ((const char *, int)); -static void process_init PARAMS ((void)); -static void do_define PARAMS ((const char *)); -static void show_usage PARAMS ((FILE *, int)); -static void show_help PARAMS ((void)); - -#define FATAL(x) \ - do \ - { \ - include_print_where_line (stderr); \ - fprintf x; \ - fatals++; \ - quit (); \ - } \ - while (0) - -#define ERROR(x) \ - do \ - { \ - include_print_where_line (stderr); \ - fprintf x; \ - errors++; \ - } \ - while (0) - -#define WARNING(x) \ - do \ - { \ - include_print_where_line (stderr); \ - fprintf x; \ - warnings++; \ - } \ - while (0) - -/* Exit the program and return the right ERROR code. */ - -static void -quit () -{ - int exitcode; - if (fatals + errors) - exitcode = 1; - else - exitcode = 0; - - if (stats) - { - int i; - for (i = 0; i < sb_max_power_two; i++) - { - fprintf (stderr, "strings size %8d : %d\n", - 1 << i, string_count[i]); - } - } - exit (exitcode); -} - -/* Hash table maintenance. */ - -/* Build a new hash table with size buckets - and fill in the info at ptr. */ - -static void -hash_new_table (size, ptr) - int size; - hash_table *ptr; -{ - int i; - ptr->size = size; - ptr->table = (hash_entry **) xmalloc (size * (sizeof (hash_entry *))); - /* Fill with null-pointer, not zero-bit-pattern. */ - for (i = 0; i < size; i++) - ptr->table[i] = 0; -} - -/* Calculate and return the hash value of the sb at key. */ - -static int -hash (key) - sb *key; -{ - int k = 0x1234; - int i; - char *p = key->ptr; - for (i = 0; i < key->len; i++) - { - k ^= (k << 2) ^ *p; - p++; - } - return k & 0xf0fff; -} - -/* Look up key in hash_table tab. If present, then return it, - otherwise build a new one and fill it with hash_integer. */ - -static hash_entry * -hash_create (tab, key) - hash_table *tab; - sb *key; -{ - int k = hash (key) % tab->size; - hash_entry *p; - hash_entry **table = tab->table; - - p = table[k]; - - while (1) - { - if (!p) - { - hash_entry *n = (hash_entry *) xmalloc (sizeof (hash_entry)); - n->next = table[k]; - sb_new (&n->key); - sb_add_sb (&n->key, key); - table[k] = n; - n->type = hash_integer; - return n; - } - if (strncmp (table[k]->key.ptr, key->ptr, key->len) == 0) - { - return p; - } - p = p->next; - } -} - -/* Add sb name with key into hash_table tab. - If replacing old value and again, then ERROR. */ - -static void -hash_add_to_string_table (tab, key, name, again) - hash_table *tab; - sb *key; - sb *name; - int again; -{ - hash_entry *ptr = hash_create (tab, key); - if (ptr->type == hash_integer) - { - sb_new (&ptr->value.s); - } - if (ptr->value.s.len) - { - if (!again) - ERROR ((stderr, _("redefinition not allowed\n"))); - } - - ptr->type = hash_string; - sb_reset (&ptr->value.s); - - sb_add_sb (&ptr->value.s, name); -} - -/* Add integer name to hash_table tab with sb key. */ - -static void -hash_add_to_int_table (tab, key, name) - hash_table *tab; - sb *key; - int name; -{ - hash_entry *ptr = hash_create (tab, key); - ptr->value.i = name; -} - -/* Look up sb key in hash_table tab. - If found, return hash_entry result, else 0. */ - -static hash_entry * -hash_lookup (tab, key) - hash_table *tab; - sb *key; -{ - int k = hash (key) % tab->size; - hash_entry **table = tab->table; - hash_entry *p = table[k]; - while (p) - { - if (p->key.len == key->len - && strncmp (p->key.ptr, key->ptr, key->len) == 0) - return p; - p = p->next; - } - return 0; -} - -/* expressions - - are handled in a really simple recursive decent way. each bit of - the machine takes an index into an sb and a pointer to an exp_t, - modifies the *exp_t and returns the index of the first character - past the part of the expression parsed. - - expression precedence: - ( ) - unary + - ~ - * / - + - - & - | ~ -*/ - -/* Make sure that the exp_t at term is constant. - If not the give the op ERROR. */ - -static void -checkconst (op, term) - int op; - exp_t *term; -{ - if (term->add_symbol.len - || term->sub_symbol.len) - { - ERROR ((stderr, _("the %c operator cannot take non-absolute arguments.\n"), op)); - } -} - -/* Chew the flonum from the string starting at idx. Adjust idx to - point to the next character after the flonum. */ - -static int -chew_flonum (idx, string, out) - int idx; - sb *string; - sb *out; -{ - sb buf; - regex_t reg; - regmatch_t match; - - /* Duplicate and null terminate `string'. */ - sb_new (&buf); - sb_add_sb (&buf, string); - sb_add_char (&buf, '\0'); - - if (regcomp (®, "([0-9]*\\.[0-9]+([eE][+-]?[0-9]+)?)", REG_EXTENDED) != 0) - return idx; - if (regexec (®, &buf.ptr[idx], 1, &match, 0) != 0) - return idx; - - /* Copy the match to the output. */ - assert (match.rm_eo >= match.rm_so); - sb_add_buffer (out, &buf.ptr[idx], match.rm_eo - match.rm_so); - - sb_kill (&buf); - regfree (®); - idx += match.rm_eo; - return idx; -} - -static int -is_flonum (idx, string) - int idx; - sb *string; -{ - sb buf; - regex_t reg; - int rc; - - /* Duplicate and null terminate `string'. */ - sb_new (&buf); - sb_add_sb (&buf, string); - sb_add_char (&buf, '\0'); - - if (regcomp (®, "^[0-9]*\\.[0-9]+([eE][+-]?[0-9]+)?", REG_EXTENDED) != 0) - return 0; - - rc = regexec (®, &buf.ptr[idx], 0, NULL, 0); - sb_kill (&buf); - regfree (®); - return (rc == 0); -} - -/* Turn the number in string at idx into a number of base, fill in - ptr, and return the index of the first character not in the number. */ - -static int -sb_strtol (idx, string, base, ptr) - int idx; - sb *string; - int base; - int *ptr; -{ - int value = 0; - idx = sb_skip_white (idx, string); - - while (idx < string->len) - { - int ch = string->ptr[idx]; - int dig = 0; - if (ISDIGIT (ch)) - dig = ch - '0'; - else if (ch >= 'a' && ch <= 'f') - dig = ch - 'a' + 10; - else if (ch >= 'A' && ch <= 'F') - dig = ch - 'A' + 10; - else - break; - - if (dig >= base) - break; - - value = value * base + dig; - idx++; - } - *ptr = value; - return idx; -} - -static int -level_0 (idx, string, lhs) - int idx; - sb *string; - exp_t *lhs; -{ - lhs->add_symbol.len = 0; - lhs->add_symbol.name = 0; - - lhs->sub_symbol.len = 0; - lhs->sub_symbol.name = 0; - - idx = sb_skip_white (idx, string); - - lhs->value = 0; - - if (ISDIGIT (string->ptr[idx])) - { - idx = sb_strtol (idx, string, 10, &lhs->value); - } - else if (ISFIRSTCHAR (string->ptr[idx])) - { - int len = 0; - lhs->add_symbol.name = string->ptr + idx; - while (idx < string->len && ISNEXTCHAR (string->ptr[idx])) - { - idx++; - len++; - } - lhs->add_symbol.len = len; - } - else if (string->ptr[idx] == '"') - { - sb acc; - sb_new (&acc); - ERROR ((stderr, _("string where expression expected.\n"))); - idx = getstring (idx, string, &acc); - sb_kill (&acc); - } - else - { - ERROR ((stderr, _("can't find primary in expression.\n"))); - idx++; - } - return sb_skip_white (idx, string); -} - -static int -level_1 (idx, string, lhs) - int idx; - sb *string; - exp_t *lhs; -{ - idx = sb_skip_white (idx, string); - - switch (string->ptr[idx]) - { - case '+': - idx = level_1 (idx + 1, string, lhs); - break; - case '~': - idx = level_1 (idx + 1, string, lhs); - checkconst ('~', lhs); - lhs->value = ~lhs->value; - break; - case '-': - { - symbol t; - idx = level_1 (idx + 1, string, lhs); - lhs->value = -lhs->value; - t = lhs->add_symbol; - lhs->add_symbol = lhs->sub_symbol; - lhs->sub_symbol = t; - break; - } - case '(': - idx++; - idx = level_5 (sb_skip_white (idx, string), string, lhs); - if (string->ptr[idx] != ')') - ERROR ((stderr, _("misplaced closing parens.\n"))); - else - idx++; - break; - default: - idx = level_0 (idx, string, lhs); - break; - } - return sb_skip_white (idx, string); -} - -static int -level_2 (idx, string, lhs) - int idx; - sb *string; - exp_t *lhs; -{ - exp_t rhs; - - idx = level_1 (idx, string, lhs); - - while (idx < string->len && (string->ptr[idx] == '*' - || string->ptr[idx] == '/')) - { - char op = string->ptr[idx++]; - idx = level_1 (idx, string, &rhs); - switch (op) - { - case '*': - checkconst ('*', lhs); - checkconst ('*', &rhs); - lhs->value *= rhs.value; - break; - case '/': - checkconst ('/', lhs); - checkconst ('/', &rhs); - if (rhs.value == 0) - ERROR ((stderr, _("attempt to divide by zero.\n"))); - else - lhs->value /= rhs.value; - break; - } - } - return sb_skip_white (idx, string); -} - -static int -level_3 (idx, string, lhs) - int idx; - sb *string; - exp_t *lhs; -{ - exp_t rhs; - - idx = level_2 (idx, string, lhs); - - while (idx < string->len - && (string->ptr[idx] == '+' - || string->ptr[idx] == '-')) - { - char op = string->ptr[idx++]; - idx = level_2 (idx, string, &rhs); - switch (op) - { - case '+': - lhs->value += rhs.value; - if (lhs->add_symbol.name && rhs.add_symbol.name) - { - ERROR ((stderr, _("can't add two relocatable expressions\n"))); - } - /* Change nn+symbol to symbol + nn. */ - if (rhs.add_symbol.name) - { - lhs->add_symbol = rhs.add_symbol; - } - break; - case '-': - lhs->value -= rhs.value; - lhs->sub_symbol = rhs.add_symbol; - break; - } - } - return sb_skip_white (idx, string); -} - -static int -level_4 (idx, string, lhs) - int idx; - sb *string; - exp_t *lhs; -{ - exp_t rhs; - - idx = level_3 (idx, string, lhs); - - while (idx < string->len && - string->ptr[idx] == '&') - { - char op = string->ptr[idx++]; - idx = level_3 (idx, string, &rhs); - switch (op) - { - case '&': - checkconst ('&', lhs); - checkconst ('&', &rhs); - lhs->value &= rhs.value; - break; - } - } - return sb_skip_white (idx, string); -} - -static int -level_5 (idx, string, lhs) - int idx; - sb *string; - exp_t *lhs; -{ - exp_t rhs; - - idx = level_4 (idx, string, lhs); - - while (idx < string->len - && (string->ptr[idx] == '|' || string->ptr[idx] == '~')) - { - char op = string->ptr[idx++]; - idx = level_4 (idx, string, &rhs); - switch (op) - { - case '|': - checkconst ('|', lhs); - checkconst ('|', &rhs); - lhs->value |= rhs.value; - break; - case '~': - checkconst ('~', lhs); - checkconst ('~', &rhs); - lhs->value ^= rhs.value; - break; - } - } - return sb_skip_white (idx, string); -} - -/* Parse the expression at offset idx into string, fill up res with - the result. Return the index of the first char past the - expression. */ - -static int -exp_parse (idx, string, res) - int idx; - sb *string; - exp_t *res; -{ - return level_5 (sb_skip_white (idx, string), string, res); -} - -/* Turn the expression at exp into text and glue it onto the end of - string. */ - -static void -exp_string (exp, string) - exp_t *exp; - sb *string; -{ - int np = 0; - int ad = 0; - sb_reset (string); - - if (exp->add_symbol.len) - { - sb_add_buffer (string, exp->add_symbol.name, exp->add_symbol.len); - np = 1; - ad = 1; - } - if (exp->value) - { - char buf[20]; - if (np) - sb_add_char (string, '+'); - sprintf (buf, "%d", exp->value); - sb_add_string (string, buf); - np = 1; - ad = 1; - } - if (exp->sub_symbol.len) - { - sb_add_char (string, '-'); - sb_add_buffer (string, exp->add_symbol.name, exp->add_symbol.len); - np = 0; - ad = 1; - } - - if (!ad) - sb_add_char (string, '0'); -} - -/* Parse the expression at offset idx into sb in. Return the value in - val. If the expression is not constant, give ERROR emsg. Return - the index of the first character past the end of the expression. */ - -static int -exp_get_abs (emsg, idx, in, val) - const char *emsg; - int idx; - sb *in; - int *val; -{ - exp_t res; - idx = exp_parse (idx, in, &res); - if (res.add_symbol.len || res.sub_symbol.len) - ERROR ((stderr, "%s", emsg)); - *val = res.value; - return idx; -} - -/* Current label parsed from line. */ -sb label; - -/* Hash table for all assigned variables. */ -hash_table assign_hash_table; - -/* Hash table for keyword. */ -hash_table keyword_hash_table; - -/* Hash table for eq variables. */ -hash_table vars; - -#define in_comment ';' - -#if 0 -static void -strip_comments (out) - sb *out; -{ - char *s = out->ptr; - int i = 0; - for (i = 0; i < out->len; i++) - { - if (ISCOMMENTCHAR (s[i])) - { - out->len = i; - return; - } - } -} -#endif - -/* Push back character ch so that it can be read again. */ - -static void -unget (ch) - int ch; -{ - if (ch == '\n') - { - sp->linecount--; - } - if (sp->pushback_index) - sp->pushback_index--; - else - sb_add_char (&sp->pushback, ch); -} - -/* Push the sb ptr onto the include stack, with the given name, type - and index. */ - -static void -include_buf (name, ptr, type, index) - sb *name; - sb *ptr; - include_type type; - int index; -{ - sp++; - if (sp - include_stack >= MAX_INCLUDES) - FATAL ((stderr, _("unreasonable nesting.\n"))); - sb_new (&sp->name); - sb_add_sb (&sp->name, name); - sp->handle = 0; - sp->linecount = 1; - sp->pushback_index = 0; - sp->type = type; - sp->index = index; - sb_new (&sp->pushback); - sb_add_sb (&sp->pushback, ptr); -} - -/* Used in ERROR messages, print info on where the include stack is - onto file. */ - -static void -include_print_where_line (file) - FILE *file; -{ - struct include_stack *p = include_stack + 1; - - while (p <= sp) - { - fprintf (file, "%s:%d ", sb_name (&p->name), p->linecount - 1); - p++; - } -} - -/* Used in listings, print the line number onto file. */ - -static void -include_print_line (file) - FILE *file; -{ - int n; - struct include_stack *p = include_stack + 1; - - n = fprintf (file, "%4d", p->linecount); - p++; - while (p <= sp) - { - n += fprintf (file, ".%d", p->linecount); - p++; - } - while (n < 8 * 3) - { - fprintf (file, " "); - n++; - } -} - -/* Read a line from the top of the include stack into sb in. */ - -static int -get_line (in) - sb *in; -{ - int online = 0; - int more = 1; - - if (copysource) - { - putc (comment_char, outfile); - if (print_line_number) - include_print_line (outfile); - } - - while (1) - { - int ch = get (); - - while (ch == '\r') - ch = get (); - - if (ch == EOF) - { - if (online) - { - WARNING ((stderr, _("End of file not at start of line.\n"))); - if (copysource) - putc ('\n', outfile); - ch = '\n'; - } - else - more = 0; - break; - } - - if (copysource) - { - putc (ch, outfile); - } - - if (ch == '\n') - { - ch = get (); - online = 0; - if (ch == '+') - { - /* Continued line. */ - if (copysource) - { - putc (comment_char, outfile); - putc ('+', outfile); - } - ch = get (); - } - else - { - if (ch != EOF) - unget (ch); - break; - } - } - else - { - sb_add_char (in, ch); - } - online++; - } - - return more; -} - -/* Find a label from sb in and put it in out. */ - -static int -grab_label (in, out) - sb *in; - sb *out; -{ - int i = 0; - sb_reset (out); - if (ISFIRSTCHAR (in->ptr[i]) || in->ptr[i] == '\\') - { - sb_add_char (out, in->ptr[i]); - i++; - while ((ISNEXTCHAR (in->ptr[i]) - || in->ptr[i] == '\\' - || in->ptr[i] == '&') - && i < in->len) - { - sb_add_char (out, in->ptr[i]); - i++; - } - } - return i; -} - -/* Find all strange base stuff and turn into decimal. Also - find all the other numbers and convert them from the default radix. */ - -static void -change_base (idx, in, out) - int idx; - sb *in; - sb *out; -{ - char buffer[20]; - - while (idx < in->len) - { - if (in->ptr[idx] == '\\' - && idx + 1 < in->len - && in->ptr[idx + 1] == '(') - { - idx += 2; - while (idx < in->len - && in->ptr[idx] != ')') - { - sb_add_char (out, in->ptr[idx]); - idx++; - } - if (idx < in->len) - idx++; - } - else if (idx < in->len - 1 && in->ptr[idx + 1] == '\'' && ! mri) - { - int base; - int value; - switch (in->ptr[idx]) - { - case 'b': - case 'B': - base = 2; - break; - case 'q': - case 'Q': - base = 8; - break; - case 'h': - case 'H': - base = 16; - break; - case 'd': - case 'D': - base = 10; - break; - default: - ERROR ((stderr, _("Illegal base character %c.\n"), in->ptr[idx])); - base = 10; - break; - } - - idx = sb_strtol (idx + 2, in, base, &value); - sprintf (buffer, "%d", value); - sb_add_string (out, buffer); - } - else if (ISFIRSTCHAR (in->ptr[idx])) - { - /* Copy entire names through quickly. */ - sb_add_char (out, in->ptr[idx]); - idx++; - while (idx < in->len && ISNEXTCHAR (in->ptr[idx])) - { - sb_add_char (out, in->ptr[idx]); - idx++; - } - } - else if (is_flonum (idx, in)) - { - idx = chew_flonum (idx, in, out); - } - else if (ISDIGIT (in->ptr[idx])) - { - int value; - /* All numbers must start with a digit, let's chew it and - spit out decimal. */ - idx = sb_strtol (idx, in, radix, &value); - sprintf (buffer, "%d", value); - sb_add_string (out, buffer); - - /* Skip all undigsested letters. */ - while (idx < in->len && ISNEXTCHAR (in->ptr[idx])) - { - sb_add_char (out, in->ptr[idx]); - idx++; - } - } - else if (in->ptr[idx] == '"' || in->ptr[idx] == '\'') - { - char tchar = in->ptr[idx]; - /* Copy entire names through quickly. */ - sb_add_char (out, in->ptr[idx]); - idx++; - while (idx < in->len && in->ptr[idx] != tchar) - { - sb_add_char (out, in->ptr[idx]); - idx++; - } - } - else - { - /* Nothing special, just pass it through. */ - sb_add_char (out, in->ptr[idx]); - idx++; - } - } - -} - -/* .end */ - -static void -do_end (in) - sb *in; -{ - had_end = 1; - if (mri) - fprintf (outfile, "%s\n", sb_name (in)); -} - -/* .assign */ - -static void -do_assign (again, idx, in) - int again; - int idx; - sb *in; -{ - /* Stick label in symbol table with following value. */ - exp_t e; - sb acc; - - sb_new (&acc); - idx = exp_parse (idx, in, &e); - exp_string (&e, &acc); - hash_add_to_string_table (&assign_hash_table, &label, &acc, again); - sb_kill (&acc); -} - -/* .radix [b|q|d|h] */ - -static void -do_radix (ptr) - sb *ptr; -{ - int idx = sb_skip_white (0, ptr); - switch (ptr->ptr[idx]) - { - case 'B': - case 'b': - radix = 2; - break; - case 'q': - case 'Q': - radix = 8; - break; - case 'd': - case 'D': - radix = 10; - break; - case 'h': - case 'H': - radix = 16; - break; - default: - ERROR ((stderr, _("radix is %c must be one of b, q, d or h"), radix)); - } -} - -/* Parse off a .b, .w or .l. */ - -static int -get_opsize (idx, in, size) - int idx; - sb *in; - int *size; -{ - *size = 4; - if (in->ptr[idx] == '.') - { - idx++; - } - switch (in->ptr[idx]) - { - case 'b': - case 'B': - *size = 1; - break; - case 'w': - case 'W': - *size = 2; - break; - case 'l': - case 'L': - *size = 4; - break; - case ' ': - case '\t': - break; - default: - ERROR ((stderr, _("size must be one of b, w or l, is %c.\n"), in->ptr[idx])); - break; - } - idx++; - - return idx; -} - -static int -eol (idx, line) - int idx; - sb *line; -{ - idx = sb_skip_white (idx, line); - if (idx < line->len - && ISCOMMENTCHAR(line->ptr[idx])) - return 1; - if (idx >= line->len) - return 1; - return 0; -} - -/* .data [.b|.w|.l] <data>* - or d[bwl] <data>* */ - -static void -do_data (idx, in, size) - int idx; - sb *in; - int size; -{ - int opsize = 4; - char *opname = ".yikes!"; - sb acc; - sb_new (&acc); - - if (!size) - { - idx = get_opsize (idx, in, &opsize); - } - else - { - opsize = size; - } - switch (opsize) - { - case 4: - opname = ".long"; - break; - case 2: - opname = ".short"; - break; - case 1: - opname = ".byte"; - break; - } - - fprintf (outfile, "%s\t", opname); - - idx = sb_skip_white (idx, in); - - if (alternate - && idx < in->len - && in->ptr[idx] == '"') - { - int i; - idx = getstring (idx, in, &acc); - for (i = 0; i < acc.len; i++) - { - if (i) - fprintf (outfile, ","); - fprintf (outfile, "%d", acc.ptr[i]); - } - } - else - { - while (!eol (idx, in)) - { - exp_t e; - idx = exp_parse (idx, in, &e); - exp_string (&e, &acc); - sb_add_char (&acc, 0); - fprintf (outfile, "%s", acc.ptr); - if (idx < in->len && in->ptr[idx] == ',') - { - fprintf (outfile, ","); - idx++; - } - } - } - sb_kill (&acc); - sb_print_at (outfile, idx, in); - fprintf (outfile, "\n"); -} - -/* .datab [.b|.w|.l] <repeat>,<fill> */ - -static void -do_datab (idx, in) - int idx; - sb *in; -{ - int opsize; - int repeat; - int fill; - - idx = get_opsize (idx, in, &opsize); - - idx = exp_get_abs (_("datab repeat must be constant.\n"), idx, in, &repeat); - idx = sb_skip_comma (idx, in); - idx = exp_get_abs (_("datab data must be absolute.\n"), idx, in, &fill); - - fprintf (outfile, ".fill\t%d,%d,%d\n", repeat, opsize, fill); -} - -/* .align <size> */ - -static void -do_align (idx, in) - int idx; - sb *in; -{ - int al, have_fill, fill; - - idx = exp_get_abs (_("align needs absolute expression.\n"), idx, in, &al); - idx = sb_skip_white (idx, in); - have_fill = 0; - fill = 0; - if (! eol (idx, in)) - { - idx = sb_skip_comma (idx, in); - idx = exp_get_abs (_(".align needs absolute fill value.\n"), idx, in, - &fill); - have_fill = 1; - } - - fprintf (outfile, ".align %d", al); - if (have_fill) - fprintf (outfile, ",%d", fill); - fprintf (outfile, "\n"); -} - -/* .res[.b|.w|.l] <size> */ - -static void -do_res (idx, in, type) - int idx; - sb *in; - int type; -{ - int size = 4; - int count = 0; - - idx = get_opsize (idx, in, &size); - while (!eol (idx, in)) - { - idx = sb_skip_white (idx, in); - if (in->ptr[idx] == ',') - idx++; - idx = exp_get_abs (_("res needs absolute expression for fill count.\n"), idx, in, &count); - - if (type == 'c' || type == 'z') - count++; - - fprintf (outfile, ".space %d\n", count * size); - } -} - -/* .export */ - -static void -do_export (in) - sb *in; -{ - fprintf (outfile, ".global %s\n", sb_name (in)); -} - -/* .print [list] [nolist] */ - -static void -do_print (idx, in) - int idx; - sb *in; -{ - idx = sb_skip_white (idx, in); - while (idx < in->len) - { - if (strncasecmp (in->ptr + idx, "LIST", 4) == 0) - { - fprintf (outfile, ".list\n"); - idx += 4; - } - else if (strncasecmp (in->ptr + idx, "NOLIST", 6) == 0) - { - fprintf (outfile, ".nolist\n"); - idx += 6; - } - idx++; - } -} - -/* .head */ - -static void -do_heading (idx, in) - int idx; - sb *in; -{ - sb head; - sb_new (&head); - idx = getstring (idx, in, &head); - fprintf (outfile, ".title \"%s\"\n", sb_name (&head)); - sb_kill (&head); -} - -/* .page */ - -static void -do_page () -{ - fprintf (outfile, ".eject\n"); -} - -/* .form [lin=<value>] [col=<value>] */ - -static void -do_form (idx, in) - int idx; - sb *in; -{ - int lines = 60; - int columns = 132; - idx = sb_skip_white (idx, in); - - while (idx < in->len) - { - - if (strncasecmp (in->ptr + idx, "LIN=", 4) == 0) - { - idx += 4; - idx = exp_get_abs (_("form LIN= needs absolute expresssion.\n"), idx, in, &lines); - } - - if (strncasecmp (in->ptr + idx, _("COL="), 4) == 0) - { - idx += 4; - idx = exp_get_abs (_("form COL= needs absolute expresssion.\n"), idx, in, &columns); - } - - idx++; - } - fprintf (outfile, ".psize %d,%d\n", lines, columns); - -} - -/* Fetch string from the input stream, - rules: - 'Bxyx<whitespace> -> return 'Bxyza - %<char> -> return string of decimal value of x - "<string>" -> return string - xyx<whitespace> -> return xyz -*/ - -static int -get_any_string (idx, in, out, expand, pretend_quoted) - int idx; - sb *in; - sb *out; - int expand; - int pretend_quoted; -{ - sb_reset (out); - idx = sb_skip_white (idx, in); - - if (idx < in->len) - { - if (in->len > 2 && in->ptr[idx + 1] == '\'' && ISBASE (in->ptr[idx])) - { - while (!ISSEP (in->ptr[idx])) - sb_add_char (out, in->ptr[idx++]); - } - else if (in->ptr[idx] == '%' - && alternate - && expand) - { - int val; - char buf[20]; - /* Turns the next expression into a string. */ - /* xgettext: no-c-format */ - idx = exp_get_abs (_("% operator needs absolute expression"), - idx + 1, - in, - &val); - sprintf (buf, "%d", val); - sb_add_string (out, buf); - } - else if (in->ptr[idx] == '"' - || in->ptr[idx] == '<' - || (alternate && in->ptr[idx] == '\'')) - { - if (alternate && expand) - { - /* Keep the quotes. */ - sb_add_char (out, '\"'); - - idx = getstring (idx, in, out); - sb_add_char (out, '\"'); - - } - else - { - idx = getstring (idx, in, out); - } - } - else - { - while (idx < in->len - && (in->ptr[idx] == '"' - || in->ptr[idx] == '\'' - || pretend_quoted - || !ISSEP (in->ptr[idx]))) - { - if (in->ptr[idx] == '"' - || in->ptr[idx] == '\'') - { - char tchar = in->ptr[idx]; - sb_add_char (out, in->ptr[idx++]); - while (idx < in->len - && in->ptr[idx] != tchar) - sb_add_char (out, in->ptr[idx++]); - if (idx == in->len) - return idx; - } - sb_add_char (out, in->ptr[idx++]); - } - } - } - - return idx; -} - -/* Skip along sb in starting at idx, suck off whitespace a ( and more - whitespace. Return the idx of the next char. */ - -static int -skip_openp (idx, in) - int idx; - sb *in; -{ - idx = sb_skip_white (idx, in); - if (in->ptr[idx] != '(') - ERROR ((stderr, _("misplaced ( .\n"))); - idx = sb_skip_white (idx + 1, in); - return idx; -} - -/* Skip along sb in starting at idx, suck off whitespace a ) and more - whitespace. Return the idx of the next char. */ - -static int -skip_closep (idx, in) - int idx; - sb *in; -{ - idx = sb_skip_white (idx, in); - if (in->ptr[idx] != ')') - ERROR ((stderr, _("misplaced ).\n"))); - idx = sb_skip_white (idx + 1, in); - return idx; -} - -/* .len */ - -static int -dolen (idx, in, out) - int idx; - sb *in; - sb *out; -{ - - sb stringout; - char buffer[10]; - - sb_new (&stringout); - idx = skip_openp (idx, in); - idx = get_and_process (idx, in, &stringout); - idx = skip_closep (idx, in); - sprintf (buffer, "%d", stringout.len); - sb_add_string (out, buffer); - - sb_kill (&stringout); - return idx; -} - -/* .instr */ - -static int -doinstr (idx, in, out) - int idx; - sb *in; - sb *out; -{ - sb string; - sb search; - int i; - int start; - int res; - char buffer[10]; - - sb_new (&string); - sb_new (&search); - idx = skip_openp (idx, in); - idx = get_and_process (idx, in, &string); - idx = sb_skip_comma (idx, in); - idx = get_and_process (idx, in, &search); - idx = sb_skip_comma (idx, in); - if (ISDIGIT (in->ptr[idx])) - { - idx = exp_get_abs (_(".instr needs absolute expresson.\n"), idx, in, &start); - } - else - { - start = 0; - } - idx = skip_closep (idx, in); - res = -1; - for (i = start; i < string.len; i++) - { - if (strncmp (string.ptr + i, search.ptr, search.len) == 0) - { - res = i; - break; - } - } - sprintf (buffer, "%d", res); - sb_add_string (out, buffer); - sb_kill (&string); - sb_kill (&search); - return idx; -} - -static int -dosubstr (idx, in, out) - int idx; - sb *in; - sb *out; -{ - sb string; - int pos; - int len; - sb_new (&string); - - idx = skip_openp (idx, in); - idx = get_and_process (idx, in, &string); - idx = sb_skip_comma (idx, in); - idx = exp_get_abs (_("need absolute position.\n"), idx, in, &pos); - idx = sb_skip_comma (idx, in); - idx = exp_get_abs (_("need absolute length.\n"), idx, in, &len); - idx = skip_closep (idx, in); - - if (len < 0 || pos < 0 || - pos > string.len - || pos + len > string.len) - { - sb_add_string (out, " "); - } - else - { - sb_add_char (out, '"'); - while (len > 0) - { - sb_add_char (out, string.ptr[pos++]); - len--; - } - sb_add_char (out, '"'); - } - sb_kill (&string); - return idx; -} - -/* Scan line, change tokens in the hash table to their replacements. */ - -static void -process_assigns (idx, in, buf) - int idx; - sb *in; - sb *buf; -{ - while (idx < in->len) - { - hash_entry *ptr; - if (in->ptr[idx] == '\\' - && idx + 1 < in->len - && in->ptr[idx + 1] == '(') - { - do - { - sb_add_char (buf, in->ptr[idx]); - idx++; - } - while (idx < in->len && in->ptr[idx - 1] != ')'); - } - else if (in->ptr[idx] == '\\' - && idx + 1 < in->len - && in->ptr[idx + 1] == '&') - { - idx = condass_lookup_name (in, idx + 2, buf, 1); - } - else if (in->ptr[idx] == '\\' - && idx + 1 < in->len - && in->ptr[idx + 1] == '$') - { - idx = condass_lookup_name (in, idx + 2, buf, 0); - } - else if (idx + 3 < in->len - && in->ptr[idx] == '.' - && TOUPPER (in->ptr[idx + 1]) == 'L' - && TOUPPER (in->ptr[idx + 2]) == 'E' - && TOUPPER (in->ptr[idx + 3]) == 'N') - idx = dolen (idx + 4, in, buf); - else if (idx + 6 < in->len - && in->ptr[idx] == '.' - && TOUPPER (in->ptr[idx + 1]) == 'I' - && TOUPPER (in->ptr[idx + 2]) == 'N' - && TOUPPER (in->ptr[idx + 3]) == 'S' - && TOUPPER (in->ptr[idx + 4]) == 'T' - && TOUPPER (in->ptr[idx + 5]) == 'R') - idx = doinstr (idx + 6, in, buf); - else if (idx + 7 < in->len - && in->ptr[idx] == '.' - && TOUPPER (in->ptr[idx + 1]) == 'S' - && TOUPPER (in->ptr[idx + 2]) == 'U' - && TOUPPER (in->ptr[idx + 3]) == 'B' - && TOUPPER (in->ptr[idx + 4]) == 'S' - && TOUPPER (in->ptr[idx + 5]) == 'T' - && TOUPPER (in->ptr[idx + 6]) == 'R') - idx = dosubstr (idx + 7, in, buf); - else if (ISFIRSTCHAR (in->ptr[idx])) - { - /* May be a simple name subsitution, see if we have a word. */ - sb acc; - int cur = idx + 1; - while (cur < in->len - && (ISNEXTCHAR (in->ptr[cur]))) - cur++; - - sb_new (&acc); - sb_add_buffer (&acc, in->ptr + idx, cur - idx); - ptr = hash_lookup (&assign_hash_table, &acc); - if (ptr) - { - /* Found a definition for it. */ - sb_add_sb (buf, &ptr->value.s); - } - else - { - /* No definition, just copy the word. */ - sb_add_sb (buf, &acc); - } - sb_kill (&acc); - idx = cur; - } - else - { - sb_add_char (buf, in->ptr[idx++]); - } - } -} - -static int -get_and_process (idx, in, out) - int idx; - sb *in; - sb *out; -{ - sb t; - sb_new (&t); - idx = get_any_string (idx, in, &t, 1, 0); - process_assigns (0, &t, out); - sb_kill (&t); - return idx; -} - -static void -process_file () -{ - sb line; - sb t1, t2; - sb acc; - sb label_in; - int more; - - sb_new (&line); - sb_new (&t1); - sb_new (&t2); - sb_new (&acc); - sb_new (&label_in); - sb_reset (&line); - more = get_line (&line); - while (more) - { - /* Find any label and pseudo op that we're intested in. */ - int l; - if (line.len == 0) - { - if (condass_on ()) - fprintf (outfile, "\n"); - } - else if (mri - && (line.ptr[0] == '*' - || line.ptr[0] == '!')) - { - /* MRI line comment. */ - fprintf (outfile, "%s", sb_name (&line)); - } - else - { - l = grab_label (&line, &label_in); - sb_reset (&label); - - if (line.ptr[l] == ':') - l++; - while (ISWHITE (line.ptr[l]) && l < line.len) - l++; - - if (label_in.len) - { - int do_assigns; - - /* Munge the label, unless this is EQU or ASSIGN. */ - do_assigns = 1; - if (l < line.len - && (line.ptr[l] == '.' || alternate || mri)) - { - int lx = l; - - if (line.ptr[lx] == '.') - ++lx; - if (lx + 3 <= line.len - && strncasecmp ("EQU", line.ptr + lx, 3) == 0 - && (lx + 3 == line.len - || ! ISFIRSTCHAR (line.ptr[lx + 3]))) - do_assigns = 0; - else if (lx + 6 <= line.len - && strncasecmp ("ASSIGN", line.ptr + lx, 6) == 0 - && (lx + 6 == line.len - || ! ISFIRSTCHAR (line.ptr[lx + 6]))) - do_assigns = 0; - } - - if (do_assigns) - process_assigns (0, &label_in, &label); - else - sb_add_sb (&label, &label_in); - } - - if (l < line.len) - { - if (process_pseudo_op (l, &line, &acc)) - { - - } - else if (condass_on ()) - { - if (macro_op (l, &line)) - { - - } - else - { - { - if (label.len) - { - fprintf (outfile, "%s:\t", sb_name (&label)); - } - else - fprintf (outfile, "\t"); - sb_reset (&t1); - process_assigns (l, &line, &t1); - sb_reset (&t2); - change_base (0, &t1, &t2); - fprintf (outfile, "%s\n", sb_name (&t2)); - } - } - } - } - else - { - /* Only a label on this line. */ - if (label.len && condass_on ()) - { - fprintf (outfile, "%s:\n", sb_name (&label)); - } - } - } - - if (had_end) - break; - sb_reset (&line); - more = get_line (&line); - } - - if (!had_end && !mri) - WARNING ((stderr, _("END missing from end of file.\n"))); -} - -static void -free_old_entry (ptr) - hash_entry *ptr; -{ - if (ptr) - { - if (ptr->type == hash_string) - sb_kill (&ptr->value.s); - } -} - -/* name: .ASSIGNA <value> */ - -static void -do_assigna (idx, in) - int idx; - sb *in; -{ - sb tmp; - int val; - sb_new (&tmp); - - process_assigns (idx, in, &tmp); - idx = exp_get_abs (_(".ASSIGNA needs constant expression argument.\n"), 0, &tmp, &val); - - if (!label.len) - { - ERROR ((stderr, _(".ASSIGNA without label.\n"))); - } - else - { - hash_entry *ptr = hash_create (&vars, &label); - free_old_entry (ptr); - ptr->type = hash_integer; - ptr->value.i = val; - } - sb_kill (&tmp); -} - -/* name: .ASSIGNC <string> */ - -static void -do_assignc (idx, in) - int idx; - sb *in; -{ - sb acc; - sb_new (&acc); - idx = getstring (idx, in, &acc); - - if (!label.len) - { - ERROR ((stderr, _(".ASSIGNS without label.\n"))); - } - else - { - hash_entry *ptr = hash_create (&vars, &label); - free_old_entry (ptr); - ptr->type = hash_string; - sb_new (&ptr->value.s); - sb_add_sb (&ptr->value.s, &acc); - } - sb_kill (&acc); -} - -/* name: .REG (reg) */ - -static void -do_reg (idx, in) - int idx; - sb *in; -{ - /* Remove reg stuff from inside parens. */ - sb what; - if (!mri) - idx = skip_openp (idx, in); - else - idx = sb_skip_white (idx, in); - sb_new (&what); - while (idx < in->len - && (mri - ? ! eol (idx, in) - : in->ptr[idx] != ')')) - { - sb_add_char (&what, in->ptr[idx]); - idx++; - } - hash_add_to_string_table (&assign_hash_table, &label, &what, 1); - sb_kill (&what); -} - -static int -condass_lookup_name (inbuf, idx, out, warn) - sb *inbuf; - int idx; - sb *out; - int warn; -{ - hash_entry *ptr; - sb condass_acc; - sb_new (&condass_acc); - - while (idx < inbuf->len - && ISNEXTCHAR (inbuf->ptr[idx])) - { - sb_add_char (&condass_acc, inbuf->ptr[idx++]); - } - - if (inbuf->ptr[idx] == '\'') - idx++; - ptr = hash_lookup (&vars, &condass_acc); - - if (!ptr) - { - if (warn) - { - WARNING ((stderr, _("Can't find preprocessor variable %s.\n"), sb_name (&condass_acc))); - } - else - { - sb_add_string (out, "0"); - } - } - else - { - if (ptr->type == hash_integer) - { - char buffer[30]; - sprintf (buffer, "%d", ptr->value.i); - sb_add_string (out, buffer); - } - else - { - sb_add_sb (out, &ptr->value.s); - } - } - sb_kill (&condass_acc); - return idx; -} - -#define EQ 1 -#define NE 2 -#define GE 3 -#define LT 4 -#define LE 5 -#define GT 6 -#define NEVER 7 - -static int -whatcond (idx, in, val) - int idx; - sb *in; - int *val; -{ - int cond; - - idx = sb_skip_white (idx, in); - cond = NEVER; - if (idx + 1 < in->len) - { - char *p; - char a, b; - - p = in->ptr + idx; - a = TOUPPER (p[0]); - b = TOUPPER (p[1]); - if (a == 'E' && b == 'Q') - cond = EQ; - else if (a == 'N' && b == 'E') - cond = NE; - else if (a == 'L' && b == 'T') - cond = LT; - else if (a == 'L' && b == 'E') - cond = LE; - else if (a == 'G' && b == 'T') - cond = GT; - else if (a == 'G' && b == 'E') - cond = GE; - } - if (cond == NEVER) - { - ERROR ((stderr, _("Comparison operator must be one of EQ, NE, LT, LE, GT or GE.\n"))); - cond = NEVER; - } - idx = sb_skip_white (idx + 2, in); - *val = cond; - return idx; -} - -static int -istrue (idx, in) - int idx; - sb *in; -{ - int res; - sb acc_a; - sb cond; - sb acc_b; - sb_new (&acc_a); - sb_new (&cond); - sb_new (&acc_b); - idx = sb_skip_white (idx, in); - - if (in->ptr[idx] == '"') - { - int cond; - int same; - /* This is a string comparision. */ - idx = getstring (idx, in, &acc_a); - idx = whatcond (idx, in, &cond); - idx = getstring (idx, in, &acc_b); - same = acc_a.len == acc_b.len - && (strncmp (acc_a.ptr, acc_b.ptr, acc_a.len) == 0); - - if (cond != EQ && cond != NE) - { - ERROR ((stderr, _("Comparison operator for strings must be EQ or NE\n"))); - res = 0; - } - else - res = (cond != EQ) ^ same; - } - else - /* This is a numeric expression. */ - { - int vala; - int valb; - int cond; - idx = exp_get_abs (_("Conditional operator must have absolute operands.\n"), idx, in, &vala); - idx = whatcond (idx, in, &cond); - idx = sb_skip_white (idx, in); - if (in->ptr[idx] == '"') - { - WARNING ((stderr, _("String compared against expression.\n"))); - res = 0; - } - else - { - idx = exp_get_abs (_("Conditional operator must have absolute operands.\n"), idx, in, &valb); - switch (cond) - { - default: - res = 42; - break; - case EQ: - res = vala == valb; - break; - case NE: - res = vala != valb; - break; - case LT: - res = vala < valb; - break; - case LE: - res = vala <= valb; - break; - case GT: - res = vala > valb; - break; - case GE: - res = vala >= valb; - break; - case NEVER: - res = 0; - break; - } - } - } - - sb_kill (&acc_a); - sb_kill (&cond); - sb_kill (&acc_b); - return res; -} - -/* .AIF */ - -static void -do_aif (idx, in) - int idx; - sb *in; -{ - if (ifi >= IFNESTING) - { - FATAL ((stderr, _("AIF nesting unreasonable.\n"))); - } - ifi++; - ifstack[ifi].on = ifstack[ifi - 1].on ? istrue (idx, in) : 0; - ifstack[ifi].hadelse = 0; -} - -/* .AELSE */ - -static void -do_aelse () -{ - ifstack[ifi].on = ifstack[ifi - 1].on ? !ifstack[ifi].on : 0; - if (ifstack[ifi].hadelse) - { - ERROR ((stderr, _("Multiple AELSEs in AIF.\n"))); - } - ifstack[ifi].hadelse = 1; -} - -/* .AENDI */ - -static void -do_aendi () -{ - if (ifi != 0) - { - ifi--; - } - else - { - ERROR ((stderr, _("AENDI without AIF.\n"))); - } -} - -static int -condass_on () -{ - return ifstack[ifi].on; -} - -/* MRI IFEQ, IFNE, IFLT, IFLE, IFGE, IFGT. */ - -static void -do_if (idx, in, cond) - int idx; - sb *in; - int cond; -{ - int val; - int res; - - if (ifi >= IFNESTING) - { - FATAL ((stderr, _("IF nesting unreasonable.\n"))); - } - - idx = exp_get_abs (_("Conditional operator must have absolute operands.\n"), - idx, in, &val); - switch (cond) - { - default: - case EQ: res = val == 0; break; - case NE: res = val != 0; break; - case LT: res = val < 0; break; - case LE: res = val <= 0; break; - case GE: res = val >= 0; break; - case GT: res = val > 0; break; - } - - ifi++; - ifstack[ifi].on = ifstack[ifi - 1].on ? res : 0; - ifstack[ifi].hadelse = 0; -} - -/* Get a string for the MRI IFC or IFNC pseudo-ops. */ - -static int -get_mri_string (idx, in, val, terminator) - int idx; - sb *in; - sb *val; - int terminator; -{ - idx = sb_skip_white (idx, in); - - if (idx < in->len - && in->ptr[idx] == '\'') - { - sb_add_char (val, '\''); - for (++idx; idx < in->len; ++idx) - { - sb_add_char (val, in->ptr[idx]); - if (in->ptr[idx] == '\'') - { - ++idx; - if (idx >= in->len - || in->ptr[idx] != '\'') - break; - } - } - idx = sb_skip_white (idx, in); - } - else - { - int i; - - while (idx < in->len - && in->ptr[idx] != terminator) - { - sb_add_char (val, in->ptr[idx]); - ++idx; - } - i = val->len - 1; - while (i >= 0 && ISWHITE (val->ptr[i])) - --i; - val->len = i + 1; - } - - return idx; -} - -/* MRI IFC, IFNC */ - -static void -do_ifc (idx, in, ifnc) - int idx; - sb *in; - int ifnc; -{ - sb first; - sb second; - int res; - - if (ifi >= IFNESTING) - { - FATAL ((stderr, _("IF nesting unreasonable.\n"))); - } - - sb_new (&first); - sb_new (&second); - - idx = get_mri_string (idx, in, &first, ','); - - if (idx >= in->len || in->ptr[idx] != ',') - { - ERROR ((stderr, _("Bad format for IF or IFNC.\n"))); - return; - } - - idx = get_mri_string (idx + 1, in, &second, ';'); - - res = (first.len == second.len - && strncmp (first.ptr, second.ptr, first.len) == 0); - res ^= ifnc; - - ifi++; - ifstack[ifi].on = ifstack[ifi - 1].on ? res : 0; - ifstack[ifi].hadelse = 0; -} - -/* .ENDR */ - -static void -do_aendr () -{ - if (!mri) - ERROR ((stderr, _("AENDR without a AREPEAT.\n"))); - else - ERROR ((stderr, _("ENDR without a REPT.\n"))); -} - -/* .AWHILE */ - -static void -do_awhile (idx, in) - int idx; - sb *in; -{ - int line = linecount (); - sb exp; - sb sub; - int doit; - - sb_new (&sub); - sb_new (&exp); - - process_assigns (idx, in, &exp); - doit = istrue (0, &exp); - - if (! buffer_and_nest ("AWHILE", "AENDW", &sub, get_line)) - FATAL ((stderr, _("AWHILE without a AENDW at %d.\n"), line - 1)); - - /* Turn - .AWHILE exp - foo - .AENDW - into - foo - .AWHILE exp - foo - .ENDW - */ - - if (doit) - { - int index = include_next_index (); - - sb copy; - sb_new (©); - sb_add_sb (©, &sub); - sb_add_sb (©, in); - sb_add_string (©, "\n"); - sb_add_sb (©, &sub); - sb_add_string (©, "\t.AENDW\n"); - /* Push another WHILE. */ - include_buf (&exp, ©, include_while, index); - sb_kill (©); - } - sb_kill (&exp); - sb_kill (&sub); -} - -/* .AENDW */ - -static void -do_aendw () -{ - ERROR ((stderr, _("AENDW without a AENDW.\n"))); -} - -/* .EXITM - - Pop things off the include stack until the type and index changes. */ - -static void -do_exitm () -{ - include_type type = sp->type; - if (type == include_repeat - || type == include_while - || type == include_macro) - { - int index = sp->index; - include_pop (); - while (sp->index == index - && sp->type == type) - { - include_pop (); - } - } -} - -/* .AREPEAT */ - -static void -do_arepeat (idx, in) - int idx; - sb *in; -{ - int line = linecount (); - sb exp; /* Buffer with expression in it. */ - sb copy; /* Expanded repeat block. */ - sb sub; /* Contents of AREPEAT. */ - int rc; - int ret; - char buffer[30]; - - sb_new (&exp); - sb_new (©); - sb_new (&sub); - process_assigns (idx, in, &exp); - idx = exp_get_abs (_("AREPEAT must have absolute operand.\n"), 0, &exp, &rc); - if (!mri) - ret = buffer_and_nest ("AREPEAT", "AENDR", &sub, get_line); - else - ret = buffer_and_nest ("REPT", "ENDR", &sub, get_line); - if (! ret) - FATAL ((stderr, _("AREPEAT without a AENDR at %d.\n"), line - 1)); - if (rc > 0) - { - /* Push back the text following the repeat, and another repeat block - so - .AREPEAT 20 - foo - .AENDR - gets turned into - foo - .AREPEAT 19 - foo - .AENDR - */ - int index = include_next_index (); - sb_add_sb (©, &sub); - if (rc > 1) - { - if (!mri) - sprintf (buffer, "\t.AREPEAT %d\n", rc - 1); - else - sprintf (buffer, "\tREPT %d\n", rc - 1); - sb_add_string (©, buffer); - sb_add_sb (©, &sub); - if (!mri) - sb_add_string (©, " .AENDR\n"); - else - sb_add_string (©, " ENDR\n"); - } - - include_buf (&exp, ©, include_repeat, index); - } - sb_kill (&exp); - sb_kill (&sub); - sb_kill (©); -} - -/* .ENDM */ - -static void -do_endm () -{ - ERROR ((stderr, _(".ENDM without a matching .MACRO.\n"))); -} - -/* MRI IRP pseudo-op. */ - -static void -do_irp (idx, in, irpc) - int idx; - sb *in; - int irpc; -{ - const char *err; - sb out; - - sb_new (&out); - - err = expand_irp (irpc, idx, in, &out, get_line, comment_char); - if (err != NULL) - ERROR ((stderr, "%s\n", err)); - - fprintf (outfile, "%s", sb_terminate (&out)); - - sb_kill (&out); -} - -/* Macro processing. */ - -/* Parse off LOCAL n1, n2,... Invent a label name for it. */ - -static void -do_local (idx, line) - int idx ATTRIBUTE_UNUSED; - sb *line ATTRIBUTE_UNUSED; -{ - ERROR ((stderr, _("LOCAL outside of MACRO"))); -} - -static void -do_macro (idx, in) - int idx; - sb *in; -{ - const char *err; - int line = linecount (); - - err = define_macro (idx, in, &label, get_line, (const char **) NULL); - if (err != NULL) - ERROR ((stderr, _("macro at line %d: %s\n"), line - 1, err)); -} - -static int -macro_op (idx, in) - int idx; - sb *in; -{ - const char *err; - sb out; - sb name; - - if (! macro_defined) - return 0; - - sb_terminate (in); - if (! check_macro (in->ptr + idx, &out, comment_char, &err, NULL)) - return 0; - - if (err != NULL) - ERROR ((stderr, "%s\n", err)); - - sb_new (&name); - sb_add_string (&name, _("macro expansion")); - - include_buf (&name, &out, include_macro, include_next_index ()); - - sb_kill (&name); - sb_kill (&out); - - return 1; -} - -/* String handling. */ - -static int -getstring (idx, in, acc) - int idx; - sb *in; - sb *acc; -{ - idx = sb_skip_white (idx, in); - - while (idx < in->len - && (in->ptr[idx] == '"' - || in->ptr[idx] == '<' - || (in->ptr[idx] == '\'' && alternate))) - { - if (in->ptr[idx] == '<') - { - if (alternate || mri) - { - int nest = 0; - idx++; - while ((in->ptr[idx] != '>' || nest) - && idx < in->len) - { - if (in->ptr[idx] == '!') - { - idx++; - sb_add_char (acc, in->ptr[idx++]); - } - else - { - if (in->ptr[idx] == '>') - nest--; - if (in->ptr[idx] == '<') - nest++; - sb_add_char (acc, in->ptr[idx++]); - } - } - idx++; - } - else - { - int code; - idx++; - idx = exp_get_abs (_("Character code in string must be absolute expression.\n"), - idx, in, &code); - sb_add_char (acc, code); - - if (in->ptr[idx] != '>') - ERROR ((stderr, _("Missing > for character code.\n"))); - idx++; - } - } - else if (in->ptr[idx] == '"' || in->ptr[idx] == '\'') - { - char tchar = in->ptr[idx]; - idx++; - while (idx < in->len) - { - if (alternate && in->ptr[idx] == '!') - { - idx++; - sb_add_char (acc, in->ptr[idx++]); - } - else - { - if (in->ptr[idx] == tchar) - { - idx++; - if (idx >= in->len || in->ptr[idx] != tchar) - break; - } - sb_add_char (acc, in->ptr[idx]); - idx++; - } - } - } - } - - return idx; -} - -/* .SDATA[C|Z] <string> */ - -static void -do_sdata (idx, in, type) - int idx; - sb *in; - int type; -{ - int nc = 0; - int pidx = -1; - sb acc; - sb_new (&acc); - fprintf (outfile, ".byte\t"); - - while (!eol (idx, in)) - { - int i; - sb_reset (&acc); - idx = sb_skip_white (idx, in); - while (!eol (idx, in)) - { - pidx = idx = get_any_string (idx, in, &acc, 0, 1); - if (type == 'c') - { - if (acc.len > 255) - { - ERROR ((stderr, _("string for SDATAC longer than 255 characters (%d).\n"), acc.len)); - } - fprintf (outfile, "%d", acc.len); - nc = 1; - } - - for (i = 0; i < acc.len; i++) - { - if (nc) - { - fprintf (outfile, ","); - } - fprintf (outfile, "%d", acc.ptr[i]); - nc = 1; - } - - if (type == 'z') - { - if (nc) - fprintf (outfile, ","); - fprintf (outfile, "0"); - } - idx = sb_skip_comma (idx, in); - if (idx == pidx) - break; - } - if (!alternate && in->ptr[idx] != ',' && idx != in->len) - { - fprintf (outfile, "\n"); - ERROR ((stderr, _("illegal character in SDATA line (0x%x).\n"), - in->ptr[idx])); - break; - } - idx++; - } - sb_kill (&acc); - fprintf (outfile, "\n"); -} - -/* .SDATAB <count> <string> */ - -static void -do_sdatab (idx, in) - int idx; - sb *in; -{ - int repeat; - int i; - sb acc; - sb_new (&acc); - - idx = exp_get_abs (_("Must have absolute SDATAB repeat count.\n"), idx, in, &repeat); - if (repeat <= 0) - { - ERROR ((stderr, _("Must have positive SDATAB repeat count (%d).\n"), repeat)); - repeat = 1; - } - - idx = sb_skip_comma (idx, in); - idx = getstring (idx, in, &acc); - - for (i = 0; i < repeat; i++) - { - if (i) - fprintf (outfile, "\t"); - fprintf (outfile, ".byte\t"); - sb_print (outfile, &acc); - fprintf (outfile, "\n"); - } - sb_kill (&acc); - -} - -static int -new_file (name) - const char *name; -{ - FILE *newone = fopen (name, "r"); - if (!newone) - return 0; - - if (isp == MAX_INCLUDES) - FATAL ((stderr, _("Unreasonable include depth (%ld).\n"), (long) isp)); - - sp++; - sp->handle = newone; - - sb_new (&sp->name); - sb_add_string (&sp->name, name); - - sp->linecount = 1; - sp->pushback_index = 0; - sp->type = include_file; - sp->index = 0; - sb_new (&sp->pushback); - return 1; -} - -static void -do_include (idx, in) - int idx; - sb *in; -{ - sb t; - sb cat; - include_path *includes; - - sb_new (&t); - sb_new (&cat); - - if (! mri) - idx = getstring (idx, in, &t); - else - { - idx = sb_skip_white (idx, in); - while (idx < in->len && ! ISWHITE (in->ptr[idx])) - { - sb_add_char (&t, in->ptr[idx]); - ++idx; - } - } - - for (includes = paths_head; includes; includes = includes->next) - { - sb_reset (&cat); - sb_add_sb (&cat, &includes->path); - sb_add_char (&cat, '/'); - sb_add_sb (&cat, &t); - if (new_file (sb_name (&cat))) - { - break; - } - } - if (!includes) - { - if (! new_file (sb_name (&t))) - FATAL ((stderr, _("Can't open include file `%s'.\n"), sb_name (&t))); - } - sb_kill (&cat); - sb_kill (&t); -} - -static void -include_pop () -{ - if (sp != include_stack) - { - if (sp->handle) - fclose (sp->handle); - sp--; - } -} - -/* Get the next character from the include stack. If there's anything - in the pushback buffer, take that first. If we're at eof, pop from - the stack and try again. Keep the linecount up to date. */ - -static int -get () -{ - int r; - - if (sp->pushback.len != sp->pushback_index) - { - r = (char) (sp->pushback.ptr[sp->pushback_index++]); - /* When they've all gone, reset the pointer. */ - if (sp->pushback_index == sp->pushback.len) - { - sp->pushback.len = 0; - sp->pushback_index = 0; - } - } - else if (sp->handle) - { - r = getc (sp->handle); - } - else - r = EOF; - - if (r == EOF && isp) - { - include_pop (); - r = get (); - while (r == EOF && isp) - { - include_pop (); - r = get (); - } - return r; - } - if (r == '\n') - { - sp->linecount++; - } - - return r; -} - -static int -linecount () -{ - return sp->linecount; -} - -static int -include_next_index () -{ - static int index; - if (!unreasonable - && index > MAX_REASONABLE) - FATAL ((stderr, _("Unreasonable expansion (-u turns off check).\n"))); - return ++index; -} - -/* Initialize the chartype vector. */ - -static void -chartype_init () -{ - int x; - for (x = 0; x < 256; x++) - { - if (ISALPHA (x) || x == '_' || x == '$') - chartype[x] |= FIRSTBIT; - - if (mri && x == '.') - chartype[x] |= FIRSTBIT; - - if (ISDIGIT (x) || ISALPHA (x) || x == '_' || x == '$') - chartype[x] |= NEXTBIT; - - if (x == ' ' || x == '\t' || x == ',' || x == '"' || x == ';' - || x == '"' || x == '<' || x == '>' || x == ')' || x == '(') - chartype[x] |= SEPBIT; - - if (x == 'b' || x == 'B' - || x == 'q' || x == 'Q' - || x == 'h' || x == 'H' - || x == 'd' || x == 'D') - chartype [x] |= BASEBIT; - - if (x == ' ' || x == '\t') - chartype[x] |= WHITEBIT; - - if (x == comment_char) - chartype[x] |= COMMENTBIT; - } -} - -/* What to do with all the keywords. */ -#define PROCESS 0x1000 /* Run substitution over the line. */ -#define LAB 0x2000 /* Spit out the label. */ - -#define K_EQU (PROCESS|1) -#define K_ASSIGN (PROCESS|2) -#define K_REG (PROCESS|3) -#define K_ORG (PROCESS|4) -#define K_RADIX (PROCESS|5) -#define K_DATA (LAB|PROCESS|6) -#define K_DATAB (LAB|PROCESS|7) -#define K_SDATA (LAB|PROCESS|8) -#define K_SDATAB (LAB|PROCESS|9) -#define K_SDATAC (LAB|PROCESS|10) -#define K_SDATAZ (LAB|PROCESS|11) -#define K_RES (LAB|PROCESS|12) -#define K_SRES (LAB|PROCESS|13) -#define K_SRESC (LAB|PROCESS|14) -#define K_SRESZ (LAB|PROCESS|15) -#define K_EXPORT (LAB|PROCESS|16) -#define K_GLOBAL (LAB|PROCESS|17) -#define K_PRINT (LAB|PROCESS|19) -#define K_FORM (LAB|PROCESS|20) -#define K_HEADING (LAB|PROCESS|21) -#define K_PAGE (LAB|PROCESS|22) -#define K_IMPORT (LAB|PROCESS|23) -#define K_PROGRAM (LAB|PROCESS|24) -#define K_END (PROCESS|25) -#define K_INCLUDE (PROCESS|26) -#define K_IGNORED (PROCESS|27) -#define K_ASSIGNA (PROCESS|28) -#define K_ASSIGNC (29) -#define K_AIF (PROCESS|30) -#define K_AELSE (PROCESS|31) -#define K_AENDI (PROCESS|32) -#define K_AREPEAT (PROCESS|33) -#define K_AENDR (PROCESS|34) -#define K_AWHILE (35) -#define K_AENDW (PROCESS|36) -#define K_EXITM (37) -#define K_MACRO (PROCESS|38) -#define K_ENDM (39) -#define K_ALIGN (PROCESS|LAB|40) -#define K_ALTERNATE (41) -#define K_DB (LAB|PROCESS|42) -#define K_DW (LAB|PROCESS|43) -#define K_DL (LAB|PROCESS|44) -#define K_LOCAL (45) -#define K_IFEQ (PROCESS|46) -#define K_IFNE (PROCESS|47) -#define K_IFLT (PROCESS|48) -#define K_IFLE (PROCESS|49) -#define K_IFGE (PROCESS|50) -#define K_IFGT (PROCESS|51) -#define K_IFC (PROCESS|52) -#define K_IFNC (PROCESS|53) -#define K_IRP (PROCESS|54) -#define K_IRPC (PROCESS|55) - -struct keyword { - char *name; - int code; - int extra; -}; - -static struct keyword kinfo[] = { - { "EQU", K_EQU, 0 }, - { "ALTERNATE", K_ALTERNATE, 0 }, - { "ASSIGN", K_ASSIGN, 0 }, - { "REG", K_REG, 0 }, - { "ORG", K_ORG, 0 }, - { "RADIX", K_RADIX, 0 }, - { "DATA", K_DATA, 0 }, - { "DB", K_DB, 0 }, - { "DW", K_DW, 0 }, - { "DL", K_DL, 0 }, - { "DATAB", K_DATAB, 0 }, - { "SDATA", K_SDATA, 0 }, - { "SDATAB", K_SDATAB, 0 }, - { "SDATAZ", K_SDATAZ, 0 }, - { "SDATAC", K_SDATAC, 0 }, - { "RES", K_RES, 0 }, - { "SRES", K_SRES, 0 }, - { "SRESC", K_SRESC, 0 }, - { "SRESZ", K_SRESZ, 0 }, - { "EXPORT", K_EXPORT, 0 }, - { "GLOBAL", K_GLOBAL, 0 }, - { "PRINT", K_PRINT, 0 }, - { "FORM", K_FORM, 0 }, - { "HEADING", K_HEADING, 0 }, - { "PAGE", K_PAGE, 0 }, - { "PROGRAM", K_IGNORED, 0 }, - { "END", K_END, 0 }, - { "INCLUDE", K_INCLUDE, 0 }, - { "ASSIGNA", K_ASSIGNA, 0 }, - { "ASSIGNC", K_ASSIGNC, 0 }, - { "AIF", K_AIF, 0 }, - { "AELSE", K_AELSE, 0 }, - { "AENDI", K_AENDI, 0 }, - { "AREPEAT", K_AREPEAT, 0 }, - { "AENDR", K_AENDR, 0 }, - { "EXITM", K_EXITM, 0 }, - { "MACRO", K_MACRO, 0 }, - { "ENDM", K_ENDM, 0 }, - { "AWHILE", K_AWHILE, 0 }, - { "ALIGN", K_ALIGN, 0 }, - { "AENDW", K_AENDW, 0 }, - { "ALTERNATE", K_ALTERNATE, 0 }, - { "LOCAL", K_LOCAL, 0 }, - { NULL, 0, 0 } -}; - -/* Although the conditional operators are handled by gas, we need to - handle them here as well, in case they are used in a recursive - macro to end the recursion. */ - -static struct keyword mrikinfo[] = { - { "IFEQ", K_IFEQ, 0 }, - { "IFNE", K_IFNE, 0 }, - { "IFLT", K_IFLT, 0 }, - { "IFLE", K_IFLE, 0 }, - { "IFGE", K_IFGE, 0 }, - { "IFGT", K_IFGT, 0 }, - { "IFC", K_IFC, 0 }, - { "IFNC", K_IFNC, 0 }, - { "ELSEC", K_AELSE, 0 }, - { "ENDC", K_AENDI, 0 }, - { "MEXIT", K_EXITM, 0 }, - { "REPT", K_AREPEAT, 0 }, - { "IRP", K_IRP, 0 }, - { "IRPC", K_IRPC, 0 }, - { "ENDR", K_AENDR, 0 }, - { NULL, 0, 0 } -}; - -/* Look for a pseudo op on the line. If one's there then call - its handler. */ - -static int -process_pseudo_op (idx, line, acc) - int idx; - sb *line; - sb *acc; -{ - int oidx = idx; - - if (line->ptr[idx] == '.' || alternate || mri) - { - /* Scan forward and find pseudo name. */ - char *in; - hash_entry *ptr; - - char *s; - char *e; - if (line->ptr[idx] == '.') - idx++; - in = line->ptr + idx; - s = in; - e = s; - sb_reset (acc); - - while (idx < line->len && *e && ISFIRSTCHAR (*e)) - { - sb_add_char (acc, *e); - e++; - idx++; - } - - ptr = hash_lookup (&keyword_hash_table, acc); - - if (!ptr) - { -#if 0 - /* This one causes lots of pain when trying to preprocess - ordinary code. */ - WARNING ((stderr, _("Unrecognised pseudo op `%s'.\n"), - sb_name (acc))); -#endif - return 0; - } - if (ptr->value.i & LAB) - { - /* Output the label. */ - if (label.len) - { - fprintf (outfile, "%s:\t", sb_name (&label)); - } - else - fprintf (outfile, "\t"); - } - - if (mri && ptr->value.i == K_END) - { - sb t; - - sb_new (&t); - sb_add_buffer (&t, line->ptr + oidx, idx - oidx); - fprintf (outfile, "\t%s", sb_name (&t)); - sb_kill (&t); - } - - if (ptr->value.i & PROCESS) - { - /* Polish the rest of the line before handling the pseudo op. */ -#if 0 - strip_comments (line); -#endif - sb_reset (acc); - process_assigns (idx, line, acc); - sb_reset (line); - change_base (0, acc, line); - idx = 0; - } - if (!condass_on ()) - { - switch (ptr->value.i) - { - case K_AIF: - do_aif (idx, line); - break; - case K_AELSE: - do_aelse (); - break; - case K_AENDI: - do_aendi (); - break; - } - return 1; - } - else - { - switch (ptr->value.i) - { - case K_ALTERNATE: - alternate = 1; - macro_init (1, mri, 0, exp_get_abs); - return 1; - case K_AELSE: - do_aelse (); - return 1; - case K_AENDI: - do_aendi (); - return 1; - case K_ORG: - ERROR ((stderr, _("ORG command not allowed.\n"))); - break; - case K_RADIX: - do_radix (line); - return 1; - case K_DB: - do_data (idx, line, 1); - return 1; - case K_DW: - do_data (idx, line, 2); - return 1; - case K_DL: - do_data (idx, line, 4); - return 1; - case K_DATA: - do_data (idx, line, 0); - return 1; - case K_DATAB: - do_datab (idx, line); - return 1; - case K_SDATA: - do_sdata (idx, line, 0); - return 1; - case K_SDATAB: - do_sdatab (idx, line); - return 1; - case K_SDATAC: - do_sdata (idx, line, 'c'); - return 1; - case K_SDATAZ: - do_sdata (idx, line, 'z'); - return 1; - case K_ASSIGN: - do_assign (0, 0, line); - return 1; - case K_AIF: - do_aif (idx, line); - return 1; - case K_AREPEAT: - do_arepeat (idx, line); - return 1; - case K_AENDW: - do_aendw (); - return 1; - case K_AWHILE: - do_awhile (idx, line); - return 1; - case K_AENDR: - do_aendr (); - return 1; - case K_EQU: - do_assign (1, idx, line); - return 1; - case K_ALIGN: - do_align (idx, line); - return 1; - case K_RES: - do_res (idx, line, 0); - return 1; - case K_SRES: - do_res (idx, line, 's'); - return 1; - case K_INCLUDE: - do_include (idx, line); - return 1; - case K_LOCAL: - do_local (idx, line); - return 1; - case K_MACRO: - do_macro (idx, line); - return 1; - case K_ENDM: - do_endm (); - return 1; - case K_SRESC: - do_res (idx, line, 'c'); - return 1; - case K_PRINT: - do_print (idx, line); - return 1; - case K_FORM: - do_form (idx, line); - return 1; - case K_HEADING: - do_heading (idx, line); - return 1; - case K_PAGE: - do_page (); - return 1; - case K_GLOBAL: - case K_EXPORT: - do_export (line); - return 1; - case K_IMPORT: - return 1; - case K_SRESZ: - do_res (idx, line, 'z'); - return 1; - case K_IGNORED: - return 1; - case K_END: - do_end (line); - return 1; - case K_ASSIGNA: - do_assigna (idx, line); - return 1; - case K_ASSIGNC: - do_assignc (idx, line); - return 1; - case K_EXITM: - do_exitm (); - return 1; - case K_REG: - do_reg (idx, line); - return 1; - case K_IFEQ: - do_if (idx, line, EQ); - return 1; - case K_IFNE: - do_if (idx, line, NE); - return 1; - case K_IFLT: - do_if (idx, line, LT); - return 1; - case K_IFLE: - do_if (idx, line, LE); - return 1; - case K_IFGE: - do_if (idx, line, GE); - return 1; - case K_IFGT: - do_if (idx, line, GT); - return 1; - case K_IFC: - do_ifc (idx, line, 0); - return 1; - case K_IFNC: - do_ifc (idx, line, 1); - return 1; - case K_IRP: - do_irp (idx, line, 0); - return 1; - case K_IRPC: - do_irp (idx, line, 1); - return 1; - } - } - } - return 0; -} - -/* Add a keyword to the hash table. */ - -static void -add_keyword (name, code) - const char *name; - int code; -{ - sb label; - int j; - - sb_new (&label); - sb_add_string (&label, name); - - hash_add_to_int_table (&keyword_hash_table, &label, code); - - sb_reset (&label); - for (j = 0; name[j]; j++) - sb_add_char (&label, name[j] - 'A' + 'a'); - hash_add_to_int_table (&keyword_hash_table, &label, code); - - sb_kill (&label); -} - -/* Build the keyword hash table - put each keyword in the table twice, - once upper and once lower case. */ - -static void -process_init () -{ - int i; - - for (i = 0; kinfo[i].name; i++) - add_keyword (kinfo[i].name, kinfo[i].code); - - if (mri) - { - for (i = 0; mrikinfo[i].name; i++) - add_keyword (mrikinfo[i].name, mrikinfo[i].code); - } -} - -static void -do_define (string) - const char *string; -{ - sb label; - int res = 1; - hash_entry *ptr; - sb_new (&label); - - while (*string) - { - if (*string == '=') - { - sb value; - sb_new (&value); - string++; - while (*string) - { - sb_add_char (&value, *string); - string++; - } - exp_get_abs (_("Invalid expression on command line.\n"), - 0, &value, &res); - sb_kill (&value); - break; - } - sb_add_char (&label, *string); - - string++; - } - - ptr = hash_create (&vars, &label); - free_old_entry (ptr); - ptr->type = hash_integer; - ptr->value.i = res; - sb_kill (&label); -} - -char *program_name; - -/* The list of long options. */ -static struct option long_options[] = -{ - { "alternate", no_argument, 0, 'a' }, - { "include", required_argument, 0, 'I' }, - { "commentchar", required_argument, 0, 'c' }, - { "copysource", no_argument, 0, 's' }, - { "debug", no_argument, 0, 'd' }, - { "help", no_argument, 0, 'h' }, - { "mri", no_argument, 0, 'M' }, - { "output", required_argument, 0, 'o' }, - { "print", no_argument, 0, 'p' }, - { "unreasonable", no_argument, 0, 'u' }, - { "version", no_argument, 0, 'v' }, - { "define", required_argument, 0, 'd' }, - { NULL, no_argument, 0, 0 } -}; - -/* Show a usage message and exit. */ -static void -show_usage (file, status) - FILE *file; - int status; -{ - fprintf (file, _("\ -Usage: %s \n\ - [-a] [--alternate] enter alternate macro mode\n\ - [-c char] [--commentchar char] change the comment character from !\n\ - [-d] [--debug] print some debugging info\n\ - [-h] [--help] print this message\n\ - [-M] [--mri] enter MRI compatibility mode\n\ - [-o out] [--output out] set the output file\n\ - [-p] [--print] print line numbers\n"), program_name); - fprintf (file, _("\ - [-s] [--copysource] copy source through as comments \n\ - [-u] [--unreasonable] allow unreasonable nesting\n\ - [-v] [--version] print the program version\n\ - [-Dname=value] create preprocessor variable called name, with value\n\ - [-Ipath] add to include path list\n\ - [in-file]\n")); - if (status == 0) - printf (_("Report bugs to %s\n"), REPORT_BUGS_TO); - exit (status); -} - -/* Display a help message and exit. */ - -static void -show_help () -{ - printf (_("%s: Gnu Assembler Macro Preprocessor\n"), program_name); - show_usage (stdout, 0); -} - -int main PARAMS ((int, char **)); - -int -main (argc, argv) - int argc; - char **argv; -{ - int opt; - char *out_name = 0; - sp = include_stack; - - ifstack[0].on = 1; - ifi = 0; - -#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES) - setlocale (LC_MESSAGES, ""); -#endif -#if defined (HAVE_SETLOCALE) - setlocale (LC_CTYPE, ""); -#endif - bindtextdomain (PACKAGE, LOCALEDIR); - textdomain (PACKAGE); - - program_name = argv[0]; - xmalloc_set_program_name (program_name); - - hash_new_table (101, &keyword_hash_table); - hash_new_table (101, &assign_hash_table); - hash_new_table (101, &vars); - - sb_new (&label); - - while ((opt = getopt_long (argc, argv, "I:sdhavc:upo:D:M", long_options, - (int *) NULL)) - != EOF) - { - switch (opt) - { - case 'o': - out_name = optarg; - break; - case 'u': - unreasonable = 1; - break; - case 'I': - { - include_path *p = (include_path *) xmalloc (sizeof (include_path)); - p->next = NULL; - sb_new (&p->path); - sb_add_string (&p->path, optarg); - if (paths_tail) - paths_tail->next = p; - else - paths_head = p; - paths_tail = p; - } - break; - case 'p': - print_line_number = 1; - break; - case 'c': - comment_char = optarg[0]; - break; - case 'a': - alternate = 1; - break; - case 's': - copysource = 1; - break; - case 'd': - stats = 1; - break; - case 'D': - do_define (optarg); - break; - case 'M': - mri = 1; - comment_char = ';'; - break; - case 'h': - show_help (); - /* NOTREACHED */ - case 'v': - /* This output is intended to follow the GNU standards document. */ - printf (_("GNU assembler pre-processor %s\n"), program_version); - printf (_("Copyright 1996 Free Software Foundation, Inc.\n")); - printf (_("\ -This program is free software; you may redistribute it under the terms of\n\ -the GNU General Public License. This program has absolutely no warranty.\n")); - exit (0); - /* NOTREACHED */ - case 0: - break; - default: - show_usage (stderr, 1); - /* NOTREACHED */ - } - } - - process_init (); - - macro_init (alternate, mri, 0, exp_get_abs); - - if (out_name) - { - outfile = fopen (out_name, "w"); - if (!outfile) - { - fprintf (stderr, _("%s: Can't open output file `%s'.\n"), - program_name, out_name); - exit (1); - } - } - else - { - outfile = stdout; - } - - chartype_init (); - if (!outfile) - outfile = stdout; - - /* Process all the input files. */ - - while (optind < argc) - { - if (new_file (argv[optind])) - { - process_file (); - } - else - { - fprintf (stderr, _("%s: Can't open input file `%s'.\n"), - program_name, argv[optind]); - exit (1); - } - optind++; - } - - quit (); - return 0; -} - -/* This function is used because an abort in some of the other files - may be compiled into as_abort because they include as.h. */ - -void -as_abort (file, line, fn) - const char *file, *fn; - int line; -{ - fprintf (stderr, _("Internal error, aborting at %s line %d"), file, line); - if (fn) - fprintf (stderr, " in %s", fn); - fprintf (stderr, _("\nPlease report this bug.\n")); - exit (1); -} diff --git a/contrib/binutils/gas/itbl-parse.y b/contrib/binutils/gas/itbl-parse.y index 9a0b7c3..53552d7 100644 --- a/contrib/binutils/gas/itbl-parse.y +++ b/contrib/binutils/gas/itbl-parse.y @@ -152,7 +152,7 @@ Here is the grammar for the coprocessor table: char -> any printable character ltr -> ['a'..'z'|'A'..'Z'] dec -> ['0'..'9']* ; value in decimal - hex -> '0x'['0'..'9' | 'a'..'f' | 'A'..'F']* ; value in hexidecimal + hex -> '0x'['0'..'9' | 'a'..'f' | 'A'..'F']* ; value in hexadecimal Examples @@ -239,7 +239,7 @@ was deleted from the original format such that we now count the fields. ---- FIXME! should really change lexical analyzer -to recognize 'dreg' etc. in context sensative way. +to recognize 'dreg' etc. in context sensitive way. Currently function names or mnemonics may be incorrectly parsed as keywords FIXME! hex is ambiguous with any digit diff --git a/contrib/binutils/gprof/po/Make-in b/contrib/binutils/gprof/po/Make-in index 833d418..6176dbf 100644 --- a/contrib/binutils/gprof/po/Make-in +++ b/contrib/binutils/gprof/po/Make-in @@ -24,6 +24,8 @@ gnulocaledir = $(prefix)/share/locale gettextsrcdir = $(prefix)/share/gettext/po subdir = po +DESTDIR = + INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ @@ -70,9 +72,7 @@ INSTOBJEXT = @INSTOBJEXT@ .po.gmo: file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ - && test -w $$file \ - && (rm -f $$file && $(GMSGFMT) -o $$file $< ) \ - || echo "$$file is not writable" + && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ @@ -113,9 +113,9 @@ install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $(datadir); \ + $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ else \ - $(top_srcdir)/mkinstalldirs $(datadir); \ + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \ fi @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ @@ -125,7 +125,7 @@ install-data-yes: all *) destdir=$(localedir);; \ esac; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - dir=$$destdir/$$lang/LC_MESSAGES; \ + dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ if test -r $(MKINSTALLDIRS); then \ $(MKINSTALLDIRS) $$dir; \ else \ @@ -155,12 +155,12 @@ install-data-yes: all done if test "$(PACKAGE)" = "gettext"; then \ if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $(gettextsrcdir); \ + $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ else \ - $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \ fi; \ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ - $(gettextsrcdir)/Makefile.in.in; \ + $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ else \ : ; \ fi @@ -173,12 +173,12 @@ uninstall: for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ - rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ - rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ - rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ done - rm -f $(gettextsrcdir)/po-Makefile.in.in + rm -f $(DESTDIR)$(gettextsrcdir)/po-Makefile.in.in check: all diff --git a/contrib/binutils/gprof/po/gprof.pot b/contrib/binutils/gprof/po/gprof.pot index ab103f4..b1c319a 100644 --- a/contrib/binutils/gprof/po/gprof.pot +++ b/contrib/binutils/gprof/po/gprof.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2002-10-30 10:08-0500\n" +"POT-Creation-Date: 2003-07-11 13:58+0930\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -244,97 +244,96 @@ msgstr "" msgid "%s: file `%s' has no symbols\n" msgstr "" -#: corefile.c:748 +#: corefile.c:758 #, c-format msgid "%s: somebody miscounted: ltab.len=%d instead of %ld\n" msgstr "" -#: gmon_io.c:96 gmon_io.c:159 gmon_io.c:219 gmon_io.c:251 gmon_io.c:422 -#: gmon_io.c:449 gmon_io.c:646 gmon_io.c:671 +#: gmon_io.c:82 #, c-format -msgid "%s: bits per address has unexpected value of %u\n" +msgid "%s: address size has unexpected value of %u\n" msgstr "" -#: gmon_io.c:288 gmon_io.c:383 +#: gmon_io.c:345 gmon_io.c:440 #, c-format msgid "%s: file too short to be a gmon file\n" msgstr "" -#: gmon_io.c:298 gmon_io.c:432 +#: gmon_io.c:355 gmon_io.c:483 #, c-format msgid "%s: file `%s' has bad magic cookie\n" msgstr "" -#: gmon_io.c:309 +#: gmon_io.c:366 #, c-format msgid "%s: file `%s' has unsupported version %d\n" msgstr "" -#: gmon_io.c:339 +#: gmon_io.c:396 #, c-format msgid "%s: %s: found bad tag %d (file corrupted?)\n" msgstr "" -#: gmon_io.c:405 +#: gmon_io.c:462 #, c-format msgid "%s: profiling rate incompatible with first gmon file\n" msgstr "" -#: gmon_io.c:465 +#: gmon_io.c:510 #, c-format msgid "%s: incompatible with first gmon file\n" msgstr "" -#: gmon_io.c:493 +#: gmon_io.c:538 #, c-format msgid "%s: file '%s' does not appear to be in gmon.out format\n" msgstr "" -#: gmon_io.c:514 +#: gmon_io.c:559 #, c-format msgid "%s: unexpected EOF after reading %d/%d bins\n" msgstr "" -#: gmon_io.c:547 +#: gmon_io.c:592 msgid "time is in ticks, not seconds\n" msgstr "" -#: gmon_io.c:553 gmon_io.c:742 +#: gmon_io.c:598 gmon_io.c:775 #, c-format msgid "%s: don't know how to deal with file format %d\n" msgstr "" -#: gmon_io.c:560 +#: gmon_io.c:605 #, c-format msgid "File `%s' (version %d) contains:\n" msgstr "" -#: gmon_io.c:563 +#: gmon_io.c:608 #, c-format msgid "\t%d histogram record\n" msgstr "" -#: gmon_io.c:564 +#: gmon_io.c:609 #, c-format msgid "\t%d histogram records\n" msgstr "" -#: gmon_io.c:566 +#: gmon_io.c:611 #, c-format msgid "\t%d call-graph record\n" msgstr "" -#: gmon_io.c:567 +#: gmon_io.c:612 #, c-format msgid "\t%d call-graph records\n" msgstr "" -#: gmon_io.c:569 +#: gmon_io.c:614 #, c-format msgid "\t%d basic-block count record\n" msgstr "" -#: gmon_io.c:570 +#: gmon_io.c:615 #, c-format msgid "\t%d basic-block count records\n" msgstr "" diff --git a/contrib/binutils/include/callback.h b/contrib/binutils/include/callback.h deleted file mode 100644 index 3075284..0000000 --- a/contrib/binutils/include/callback.h +++ /dev/null @@ -1,270 +0,0 @@ -/* Remote target system call callback support. - Copyright 1997 Free Software Foundation, Inc. - Contributed by Cygnus Solutions. - -This file is part of GDB. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* This interface isn't intended to be specific to any particular kind - of remote (hardware, simulator, whatever). As such, support for it - (e.g. sim/common/callback.c) should *not* live in the simulator source - tree, nor should it live in the gdb source tree. */ - -/* There are various ways to handle system calls: - - 1) Have a simulator intercept the appropriate trap instruction and - directly perform the system call on behalf of the target program. - This is the typical way of handling system calls for embedded targets. - [Handling system calls for embedded targets isn't that much of an - oxymoron as running compiler testsuites make use of the capability.] - - This method of system call handling is done when STATE_ENVIRONMENT - is ENVIRONMENT_USER. - - 2) Have a simulator emulate the hardware as much as possible. - If the program running on the real hardware communicates with some sort - of target manager, one would want to be able to run this program on the - simulator as well. - - This method of system call handling is done when STATE_ENVIRONMENT - is ENVIRONMENT_OPERATING. -*/ - -#ifndef CALLBACK_H -#define CALLBACK_H - -/* ??? The reason why we check for va_start here should be documented. */ - -#ifndef va_start -#include <ansidecl.h> -#ifdef ANSI_PROTOTYPES -#include <stdarg.h> -#else -#include <varargs.h> -#endif -#endif - -/* Mapping of host/target values. */ -/* ??? For debugging purposes, one might want to add a string of the - name of the symbol. */ - -typedef struct { - int host_val; - int target_val; -} CB_TARGET_DEFS_MAP; - -#define MAX_CALLBACK_FDS 10 - -/* Forward decl for stat/fstat. */ -struct stat; - -typedef struct host_callback_struct host_callback; - -struct host_callback_struct -{ - int (*close) PARAMS ((host_callback *,int)); - int (*get_errno) PARAMS ((host_callback *)); - int (*isatty) PARAMS ((host_callback *, int)); - int (*lseek) PARAMS ((host_callback *, int, long , int)); - int (*open) PARAMS ((host_callback *, const char*, int mode)); - int (*read) PARAMS ((host_callback *,int, char *, int)); - int (*read_stdin) PARAMS (( host_callback *, char *, int)); - int (*rename) PARAMS ((host_callback *, const char *, const char *)); - int (*system) PARAMS ((host_callback *, const char *)); - long (*time) PARAMS ((host_callback *, long *)); - int (*unlink) PARAMS ((host_callback *, const char *)); - int (*write) PARAMS ((host_callback *,int, const char *, int)); - int (*write_stdout) PARAMS ((host_callback *, const char *, int)); - void (*flush_stdout) PARAMS ((host_callback *)); - int (*write_stderr) PARAMS ((host_callback *, const char *, int)); - void (*flush_stderr) PARAMS ((host_callback *)); - int (*stat) PARAMS ((host_callback *, const char *, struct stat *)); - int (*fstat) PARAMS ((host_callback *, int, struct stat *)); - - /* When present, call to the client to give it the oportunity to - poll any io devices for a request to quit (indicated by a nonzero - return value). */ - int (*poll_quit) PARAMS ((host_callback *)); - - /* Used when the target has gone away, so we can close open - handles and free memory etc etc. */ - int (*shutdown) PARAMS ((host_callback *)); - int (*init) PARAMS ((host_callback *)); - - /* depreciated, use vprintf_filtered - Talk to the user on a console. */ - void (*printf_filtered) PARAMS ((host_callback *, const char *, ...)); - - /* Talk to the user on a console. */ - void (*vprintf_filtered) PARAMS ((host_callback *, const char *, va_list)); - - /* Same as vprintf_filtered but to stderr. */ - void (*evprintf_filtered) PARAMS ((host_callback *, const char *, va_list)); - - /* Print an error message and "exit". - In the case of gdb "exiting" means doing a longjmp back to the main - command loop. */ - void (*error) PARAMS ((host_callback *, const char *, ...)); - - int last_errno; /* host format */ - - int fdmap[MAX_CALLBACK_FDS]; - char fdopen[MAX_CALLBACK_FDS]; - char alwaysopen[MAX_CALLBACK_FDS]; - - /* System call numbers. */ - CB_TARGET_DEFS_MAP *syscall_map; - /* Errno values. */ - CB_TARGET_DEFS_MAP *errno_map; - /* Flags to the open system call. */ - CB_TARGET_DEFS_MAP *open_map; - /* Signal numbers. */ - CB_TARGET_DEFS_MAP *signal_map; - /* Layout of `stat' struct. - The format is a series of "name,length" pairs separated by colons. - Empty space is indicated with a `name' of "space". - All padding must be explicitly mentioned. - Lengths are in bytes. If this needs to be extended to bits, - use "name.bits". - Example: "st_dev,4:st_ino,4:st_mode,4:..." */ - const char *stat_map; - - /* Marker for those wanting to do sanity checks. - This should remain the last member of this struct to help catch - miscompilation errors. */ -#define HOST_CALLBACK_MAGIC 4705 /* teds constant */ - int magic; -}; - -extern host_callback default_callback; - -/* Canonical versions of system call numbers. - It's not intended to willy-nilly throw every system call ever heard - of in here. Only include those that have an important use. - ??? One can certainly start a discussion over the ones that are currently - here, but that will always be true. */ - -/* These are used by the ANSI C support of libc. */ -#define CB_SYS_exit 1 -#define CB_SYS_open 2 -#define CB_SYS_close 3 -#define CB_SYS_read 4 -#define CB_SYS_write 5 -#define CB_SYS_lseek 6 -#define CB_SYS_unlink 7 -#define CB_SYS_getpid 8 -#define CB_SYS_kill 9 -#define CB_SYS_fstat 10 -/*#define CB_SYS_sbrk 11 - not currently a system call, but reserved. */ - -/* ARGV support. */ -#define CB_SYS_argvlen 12 -#define CB_SYS_argv 13 - -/* These are extras added for one reason or another. */ -#define CB_SYS_chdir 14 -#define CB_SYS_stat 15 -#define CB_SYS_chmod 16 -#define CB_SYS_utime 17 -#define CB_SYS_time 18 - -/* Struct use to pass and return information necessary to perform a - system call. */ -/* FIXME: Need to consider target word size. */ - -typedef struct cb_syscall { - /* The target's value of what system call to perform. */ - int func; - /* The arguments to the syscall. */ - long arg1, arg2, arg3, arg4; - - /* The result. */ - long result; - /* Some system calls have two results. */ - long result2; - /* The target's errno value, or 0 if success. - This is converted to the target's value with host_to_target_errno. */ - int errcode; - - /* Working space to be used by memory read/write callbacks. */ - PTR p1; - PTR p2; - long x1,x2; - - /* Callbacks for reading/writing memory (e.g. for read/write syscalls). - ??? long or unsigned long might be better to use for the `count' - argument here. We mimic sim_{read,write} for now. Be careful to - test any changes with -Wall -Werror, mixed signed comparisons - will get you. */ - int (*read_mem) PARAMS ((host_callback * /*cb*/, struct cb_syscall * /*sc*/, - unsigned long /*taddr*/, char * /*buf*/, - int /*bytes*/)); - int (*write_mem) PARAMS ((host_callback * /*cb*/, struct cb_syscall * /*sc*/, - unsigned long /*taddr*/, const char * /*buf*/, - int /*bytes*/)); - - /* For sanity checking, should be last entry. */ - int magic; -} CB_SYSCALL; - -/* Magic number sanity checker. */ -#define CB_SYSCALL_MAGIC 0x12344321 - -/* Macro to initialize CB_SYSCALL. Called first, before filling in - any fields. */ -#define CB_SYSCALL_INIT(sc) \ -do { \ - memset ((sc), 0, sizeof (*(sc))); \ - (sc)->magic = CB_SYSCALL_MAGIC; \ -} while (0) - -/* Return codes for various interface routines. */ - -typedef enum { - CB_RC_OK = 0, - /* generic error */ - CB_RC_ERR, - /* either file not found or no read access */ - CB_RC_ACCESS, - CB_RC_NO_MEM -} CB_RC; - -/* Read in target values for system call numbers, errno values, signals. */ -CB_RC cb_read_target_syscall_maps PARAMS ((host_callback *, const char *)); - -/* Translate target to host syscall function numbers. */ -int cb_target_to_host_syscall PARAMS ((host_callback *, int)); - -/* Translate host to target errno value. */ -int cb_host_to_target_errno PARAMS ((host_callback *, int)); - -/* Translate target to host open flags. */ -int cb_target_to_host_open PARAMS ((host_callback *, int)); - -/* Translate target signal number to host. */ -int cb_target_to_host_signal PARAMS ((host_callback *, int)); - -/* Translate host signal number to target. */ -int cb_host_to_target_signal PARAMS ((host_callback *, int)); - -/* Translate host stat struct to target. - If stat struct ptr is NULL, just compute target stat struct size. - Result is size of target stat struct or 0 if error. */ -int cb_host_to_target_stat PARAMS ((host_callback *, const struct stat *, PTR)); - -/* Perform a system call. */ -CB_RC cb_syscall PARAMS ((host_callback *, CB_SYSCALL *)); - -#endif diff --git a/contrib/binutils/include/regs/ChangeLog b/contrib/binutils/include/regs/ChangeLog deleted file mode 100644 index e69de29..0000000 --- a/contrib/binutils/include/regs/ChangeLog +++ /dev/null diff --git a/contrib/binutils/include/remote-sim.h b/contrib/binutils/include/remote-sim.h deleted file mode 100644 index 726ec62..0000000 --- a/contrib/binutils/include/remote-sim.h +++ /dev/null @@ -1,354 +0,0 @@ -/* This file defines the interface between the simulator and gdb. - Copyright 1993, 1994, 1996, 1997, 1998, 2000 - Free Software Foundation, Inc. - -This file is part of GDB. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#if !defined (REMOTE_SIM_H) -#define REMOTE_SIM_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* This file is used when building stand-alone simulators, so isolate this - file from gdb. */ - -/* Pick up CORE_ADDR_TYPE if defined (from gdb), otherwise use same value as - gdb does (unsigned int - from defs.h). */ - -#ifndef CORE_ADDR_TYPE -typedef unsigned int SIM_ADDR; -#else -typedef CORE_ADDR_TYPE SIM_ADDR; -#endif - - -/* Semi-opaque type used as result of sim_open and passed back to all - other routines. "desc" is short for "descriptor". - It is up to each simulator to define `sim_state'. */ - -typedef struct sim_state *SIM_DESC; - - -/* Values for `kind' arg to sim_open. */ - -typedef enum { - SIM_OPEN_STANDALONE, /* simulator used standalone (run.c) */ - SIM_OPEN_DEBUG /* simulator used by debugger (gdb) */ -} SIM_OPEN_KIND; - - -/* Return codes from various functions. */ - -typedef enum { - SIM_RC_FAIL = 0, - SIM_RC_OK = 1, - SIM_RC_UNKNOWN_BREAKPOINT = 2, - SIM_RC_INSUFFICIENT_RESOURCES = 3, - SIM_RC_DUPLICATE_BREAKPOINT = 4 -} SIM_RC; - - -/* The bfd struct, as an opaque type. */ - -struct _bfd; - - -/* Main simulator entry points. */ - - -/* Create a fully initialized simulator instance. - - (This function is called when the simulator is selected from the - gdb command line.) - - KIND specifies how the simulator shall be used. Currently there - are only two kinds: stand-alone and debug. - - CALLBACK specifies a standard host callback (defined in callback.h). - - ABFD, when non NULL, designates a target program. The program is - not loaded. - - ARGV is a standard ARGV pointer such as that passed from the - command line. The syntax of the argument list is is assumed to be - ``SIM-PROG { SIM-OPTION } [ TARGET-PROGRAM { TARGET-OPTION } ]''. - The trailing TARGET-PROGRAM and args are only valid for a - stand-alone simulator. - - On success, the result is a non NULL descriptor that shall be - passed to the other sim_foo functions. While the simulator - configuration can be parameterized by (in decreasing precedence) - ARGV's SIM-OPTION, ARGV's TARGET-PROGRAM and the ABFD argument, the - successful creation of the simulator shall not dependent on the - presence of any of these arguments/options. - - Hardware simulator: The created simulator shall be sufficiently - initialized to handle, with out restrictions any client requests - (including memory reads/writes, register fetch/stores and a - resume). - - Process simulator: that process is not created until a call to - sim_create_inferior. FIXME: What should the state of the simulator - be? */ - -SIM_DESC sim_open PARAMS ((SIM_OPEN_KIND kind, struct host_callback_struct *callback, struct _bfd *abfd, char **argv)); - - -/* Destory a simulator instance. - - QUITTING is non-zero if we cannot hang on errors. - - This may involve freeing target memory and closing any open files - and mmap'd areas. You cannot assume sim_kill has already been - called. */ - -void sim_close PARAMS ((SIM_DESC sd, int quitting)); - - -/* Load program PROG into the simulators memory. - - If ABFD is non-NULL, the bfd for the file has already been opened. - The result is a return code indicating success. - - Hardware simulator: Normally, each program section is written into - memory according to that sections LMA using physical (direct) - addressing. The exception being systems, such as PPC/CHRP, which - support more complicated program loaders. A call to this function - should not effect the state of the processor registers. Multiple - calls to this function are permitted and have an accumulative - effect. - - Process simulator: Calls to this function may be ignored. - - FIXME: Most hardware simulators load the image at the VMA using - virtual addressing. - - FIXME: For some hardware targets, before a loaded program can be - executed, it requires the manipulation of VM registers and tables. - Such manipulation should probably (?) occure in - sim_create_inferior. */ - -SIM_RC sim_load PARAMS ((SIM_DESC sd, char *prog, struct _bfd *abfd, int from_tty)); - - -/* Prepare to run the simulated program. - - ABFD, if not NULL, provides initial processor state information. - ARGV and ENV, if non NULL, are NULL terminated lists of pointers. - - Hardware simulator: This function shall initialize the processor - registers to a known value. The program counter and possibly stack - pointer shall be set using information obtained from ABFD (or - hardware reset defaults). ARGV and ENV, dependant on the target - ABI, may be written to memory. - - Process simulator: After a call to this function, a new process - instance shall exist. The TEXT, DATA, BSS and stack regions shall - all be initialized, ARGV and ENV shall be written to process - address space (according to the applicable ABI) and the program - counter and stack pointer set accordingly. */ - -SIM_RC sim_create_inferior PARAMS ((SIM_DESC sd, struct _bfd *abfd, char **argv, char **env)); - - -/* Fetch LENGTH bytes of the simulated program's memory. Start fetch - at virtual address MEM and store in BUF. Result is number of bytes - read, or zero if error. */ - -int sim_read PARAMS ((SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length)); - - -/* Store LENGTH bytes from BUF into the simulated program's - memory. Store bytes starting at virtual address MEM. Result is - number of bytes write, or zero if error. */ - -int sim_write PARAMS ((SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length)); - - -/* Fetch register REGNO storing its raw (target endian) value in the - LENGTH byte buffer BUF. Return the actual size of the register or - zero if REGNO is not applicable. - - Legacy implementations ignore LENGTH and always return -1. - - If LENGTH does not match the size of REGNO no data is transfered - (the actual register size is still returned). */ - -int sim_fetch_register PARAMS ((SIM_DESC sd, int regno, unsigned char *buf, int length)); - - -/* Store register REGNO from the raw (target endian) value in BUF. - Return the actual size of the register or zero if REGNO is not - applicable. - - Legacy implementations ignore LENGTH and always return -1. - - If LENGTH does not match the size of REGNO no data is transfered - (the actual register size is still returned). */ - -int sim_store_register PARAMS ((SIM_DESC sd, int regno, unsigned char *buf, int length)); - - -/* Print whatever statistics the simulator has collected. - - VERBOSE is currently unused and must always be zero. */ - -void sim_info PARAMS ((SIM_DESC sd, int verbose)); - - -/* Run (or resume) the simulated program. - - STEP, when non-zero indicates that only a single simulator cycle - should be emulated. - - SIGGNAL, if non-zero is a (HOST) SIGRC value indicating the type of - event (hardware interrupt, signal) to be delivered to the simulated - program. - - Hardware simulator: If the SIGRC value returned by - sim_stop_reason() is passed back to the simulator via SIGGNAL then - the hardware simulator shall correctly deliver the hardware event - indicated by that signal. If a value of zero is passed in then the - simulation will continue as if there were no outstanding signal. - The effect of any other SIGGNAL value is is implementation - dependant. - - Process simulator: If SIGRC is non-zero then the corresponding - signal is delivered to the simulated program and execution is then - continued. A zero SIGRC value indicates that the program should - continue as normal. */ - -void sim_resume PARAMS ((SIM_DESC sd, int step, int siggnal)); - - -/* Asynchronous request to stop the simulation. - A nonzero return indicates that the simulator is able to handle - the request */ - -int sim_stop PARAMS ((SIM_DESC sd)); - - -/* Fetch the REASON why the program stopped. - - SIM_EXITED: The program has terminated. SIGRC indicates the target - dependant exit status. - - SIM_STOPPED: The program has stopped. SIGRC uses the host's signal - numbering as a way of identifying the reaon: program interrupted by - user via a sim_stop request (SIGINT); a breakpoint instruction - (SIGTRAP); a completed single step (SIGTRAP); an internal error - condition (SIGABRT); an illegal instruction (SIGILL); Access to an - undefined memory region (SIGSEGV); Mis-aligned memory access - (SIGBUS). For some signals information in addition to the signal - number may be retained by the simulator (e.g. offending address), - that information is not directly accessable via this interface. - - SIM_SIGNALLED: The program has been terminated by a signal. The - simulator has encountered target code that causes the the program - to exit with signal SIGRC. - - SIM_RUNNING, SIM_POLLING: The return of one of these values - indicates a problem internal to the simulator. */ - -enum sim_stop { sim_running, sim_polling, sim_exited, sim_stopped, sim_signalled }; - -void sim_stop_reason PARAMS ((SIM_DESC sd, enum sim_stop *reason, int *sigrc)); - - -/* Passthru for other commands that the simulator might support. - Simulators should be prepared to deal with any combination of NULL - or empty CMD. */ - -void sim_do_command PARAMS ((SIM_DESC sd, char *cmd)); - -/* Call these functions to set and clear breakpoints at ADDR. */ - -SIM_RC sim_set_breakpoint PARAMS ((SIM_DESC sd, SIM_ADDR addr)); -SIM_RC sim_clear_breakpoint PARAMS ((SIM_DESC sd, SIM_ADDR addr)); -SIM_RC sim_clear_all_breakpoints PARAMS ((SIM_DESC sd)); - -/* These functions are used to enable and disable breakpoints. */ - -SIM_RC sim_enable_breakpoint PARAMS ((SIM_DESC sd, SIM_ADDR addr)); -SIM_RC sim_disable_breakpoint PARAMS ((SIM_DESC sd, SIM_ADDR addr)); -SIM_RC sim_enable_all_breakpoints PARAMS ((SIM_DESC sd)); -SIM_RC sim_disable_all_breakpoints PARAMS ((SIM_DESC sd)); - - -/* Provide simulator with a default (global) host_callback_struct. - THIS PROCEDURE IS DEPRECIATED. - GDB and NRUN do not use this interface. - This procedure does not take a SIM_DESC argument as it is - used before sim_open. */ - -void sim_set_callbacks PARAMS ((struct host_callback_struct *)); - - -/* Set the size of the simulator memory array. - THIS PROCEDURE IS DEPRECIATED. - GDB and NRUN do not use this interface. - This procedure does not take a SIM_DESC argument as it is - used before sim_open. */ - -void sim_size PARAMS ((int i)); - - -/* Single-step simulator with tracing enabled. - THIS PROCEDURE IS DEPRECIATED. - THIS PROCEDURE IS EVEN MORE DEPRECATED THAN SIM_SET_TRACE - GDB and NRUN do not use this interface. - This procedure returns: ``0'' indicating that the simulator should - be continued using sim_trace() calls; ``1'' indicating that the - simulation has finished. */ - -int sim_trace PARAMS ((SIM_DESC sd)); - - -/* Enable tracing. - THIS PROCEDURE IS DEPRECIATED. - GDB and NRUN do not use this interface. - This procedure returns: ``0'' indicating that the simulator should - be continued using sim_trace() calls; ``1'' indicating that the - simulation has finished. */ - -void sim_set_trace PARAMS ((void)); - - -/* Configure the size of the profile buffer. - THIS PROCEDURE IS DEPRECIATED. - GDB and NRUN do not use this interface. - This procedure does not take a SIM_DESC argument as it is - used before sim_open. */ - -void sim_set_profile_size PARAMS ((int n)); - - -/* Kill the running program. - THIS PROCEDURE IS DEPRECIATED. - GDB and NRUN do not use this interface. - This procedure will be replaced as part of the introduction of - multi-cpu simulators. */ - -void sim_kill PARAMS ((SIM_DESC sd)); - -#ifdef __cplusplus -} -#endif - -#endif /* !defined (REMOTE_SIM_H) */ diff --git a/contrib/binutils/ld/po/Make-in b/contrib/binutils/ld/po/Make-in index 4291090..6b6cfda 100644 --- a/contrib/binutils/ld/po/Make-in +++ b/contrib/binutils/ld/po/Make-in @@ -24,6 +24,8 @@ gnulocaledir = $(prefix)/share/locale gettextsrcdir = $(prefix)/share/gettext/po subdir = po +DESTDIR = + INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ @@ -111,9 +113,9 @@ install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $(datadir); \ + $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ else \ - $(top_srcdir)/mkinstalldirs $(datadir); \ + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \ fi @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ @@ -123,7 +125,7 @@ install-data-yes: all *) destdir=$(localedir);; \ esac; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - dir=$$destdir/$$lang/LC_MESSAGES; \ + dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ if test -r $(MKINSTALLDIRS); then \ $(MKINSTALLDIRS) $$dir; \ else \ @@ -153,12 +155,12 @@ install-data-yes: all done if test "$(PACKAGE)" = "gettext"; then \ if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $(gettextsrcdir); \ + $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ else \ - $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \ fi; \ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ - $(gettextsrcdir)/Makefile.in.in; \ + $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ else \ : ; \ fi @@ -171,12 +173,12 @@ uninstall: for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ - rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ - rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ - rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ done - rm -f $(gettextsrcdir)/po-Makefile.in.in + rm -f $(DESTDIR)$(gettextsrcdir)/po-Makefile.in.in check: all diff --git a/contrib/binutils/ld/po/POTFILES.in b/contrib/binutils/ld/po/POTFILES.in index f7a614d..55ae6ff 100644 --- a/contrib/binutils/ld/po/POTFILES.in +++ b/contrib/binutils/ld/po/POTFILES.in @@ -1,7 +1,6 @@ deffile.h emultempl/armcoff.em emultempl/pe.em -ld.h ldcref.c ldctor.c ldctor.h @@ -11,6 +10,7 @@ ldexp.c ldexp.h ldfile.c ldfile.h +ld.h ldlang.c ldlang.h ldlex.h diff --git a/contrib/binutils/ld/po/ld.pot b/contrib/binutils/ld/po/ld.pot index 87119b5..371423c 100644 --- a/contrib/binutils/ld/po/ld.pot +++ b/contrib/binutils/ld/po/ld.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2002-10-30 10:08-0500\n" +"POT-Creation-Date: 2003-07-11 13:58+0930\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -15,195 +15,210 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: emultempl/armcoff.em:71 +#: emultempl/armcoff.em:72 msgid " --support-old-code Support interworking with old code\n" msgstr "" -#: emultempl/armcoff.em:72 +#: emultempl/armcoff.em:73 msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n" msgstr "" -#: emultempl/armcoff.em:141 +#: emultempl/armcoff.em:121 #, c-format msgid "Errors encountered processing file %s" msgstr "" -#: emultempl/armcoff.em:207 emultempl/pe.em:1422 +#: emultempl/armcoff.em:188 emultempl/pe.em:1396 msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n" msgstr "" -#: emultempl/armcoff.em:212 emultempl/pe.em:1427 +#: emultempl/armcoff.em:193 emultempl/pe.em:1401 msgid "%P: warning: connot find thumb start symbol %s\n" msgstr "" -#: emultempl/pe.em:317 +#: emultempl/pe.em:300 msgid "" " --base_file <basefile> Generate a base file for relocatable " "DLLs\n" msgstr "" -#: emultempl/pe.em:318 +#: emultempl/pe.em:301 msgid "" " --dll Set image base to the default for DLLs\n" msgstr "" -#: emultempl/pe.em:319 +#: emultempl/pe.em:302 msgid " --file-alignment <size> Set file alignment\n" msgstr "" -#: emultempl/pe.em:320 +#: emultempl/pe.em:303 msgid " --heap <size> Set initial size of the heap\n" msgstr "" -#: emultempl/pe.em:321 +#: emultempl/pe.em:304 msgid "" " --image-base <address> Set start address of the executable\n" msgstr "" -#: emultempl/pe.em:322 +#: emultempl/pe.em:305 msgid "" " --major-image-version <number> Set version number of the executable\n" msgstr "" -#: emultempl/pe.em:323 +#: emultempl/pe.em:306 msgid " --major-os-version <number> Set minimum required OS version\n" msgstr "" -#: emultempl/pe.em:324 +#: emultempl/pe.em:307 msgid "" " --major-subsystem-version <number> Set minimum required OS subsystem " "version\n" msgstr "" -#: emultempl/pe.em:325 +#: emultempl/pe.em:308 msgid "" " --minor-image-version <number> Set revision number of the executable\n" msgstr "" -#: emultempl/pe.em:326 +#: emultempl/pe.em:309 msgid " --minor-os-version <number> Set minimum required OS revision\n" msgstr "" -#: emultempl/pe.em:327 +#: emultempl/pe.em:310 msgid "" " --minor-subsystem-version <number> Set minimum required OS subsystem " "revision\n" msgstr "" -#: emultempl/pe.em:328 +#: emultempl/pe.em:311 msgid " --section-alignment <size> Set section alignment\n" msgstr "" -#: emultempl/pe.em:329 +#: emultempl/pe.em:312 msgid " --stack <size> Set size of the initial stack\n" msgstr "" -#: emultempl/pe.em:330 +#: emultempl/pe.em:313 msgid "" " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n" msgstr "" -#: emultempl/pe.em:331 +#: emultempl/pe.em:314 msgid "" " --support-old-code Support interworking with old code\n" msgstr "" -#: emultempl/pe.em:332 +#: emultempl/pe.em:315 msgid "" " --thumb-entry=<symbol> Set the entry point to be Thumb " "<symbol>\n" msgstr "" -#: emultempl/pe.em:334 +#: emultempl/pe.em:317 msgid "" " --add-stdcall-alias Export symbols with and without @nn\n" msgstr "" -#: emultempl/pe.em:335 +#: emultempl/pe.em:318 msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n" msgstr "" -#: emultempl/pe.em:336 +#: emultempl/pe.em:319 msgid "" " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n" msgstr "" -#: emultempl/pe.em:337 +#: emultempl/pe.em:320 msgid "" " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n" msgstr "" -#: emultempl/pe.em:338 +#: emultempl/pe.em:321 msgid "" " --exclude-libs lib,lib,... Exclude libraries from automatic " "export\n" msgstr "" -#: emultempl/pe.em:339 +#: emultempl/pe.em:322 msgid "" " --export-all-symbols Automatically export all globals to " "DLL\n" msgstr "" -#: emultempl/pe.em:340 +#: emultempl/pe.em:323 msgid " --kill-at Remove @nn from exported symbols\n" msgstr "" -#: emultempl/pe.em:341 +#: emultempl/pe.em:324 msgid " --out-implib <file> Generate import library\n" msgstr "" -#: emultempl/pe.em:342 +#: emultempl/pe.em:325 msgid "" " --output-def <file> Generate a .DEF file for the built DLL\n" msgstr "" -#: emultempl/pe.em:343 +#: emultempl/pe.em:326 msgid " --warn-duplicate-exports Warn about duplicate exports.\n" msgstr "" -#: emultempl/pe.em:344 +#: emultempl/pe.em:327 msgid "" " --compat-implib Create backward compatible import " "libs;\n" " create __imp_<SYMBOL> as well.\n" msgstr "" -#: emultempl/pe.em:346 +#: emultempl/pe.em:329 msgid "" " --enable-auto-image-base Automatically choose image base for " "DLLs\n" " unless user specifies one\n" msgstr "" -#: emultempl/pe.em:348 +#: emultempl/pe.em:331 msgid "" " --disable-auto-image-base Do not auto-choose image base. " "(default)\n" msgstr "" -#: emultempl/pe.em:349 +#: emultempl/pe.em:332 msgid "" " --dll-search-prefix=<string> When linking dynamically to a dll " -"without an\n" -" importlib, use <string><basename>." -"dll \n" +"without\n" +" an importlib, use <string><basename>." +"dll\n" " in preference to lib<basename>.dll \n" msgstr "" -#: emultempl/pe.em:352 +#: emultempl/pe.em:335 msgid "" -" --enable-auto-import Do sophistcated linking of _sym to \n" +" --enable-auto-import Do sophistcated linking of _sym to\n" " __imp_sym for DATA references\n" msgstr "" -#: emultempl/pe.em:354 +#: emultempl/pe.em:337 msgid "" " --disable-auto-import Do not auto-import DATA items from " "DLLs\n" msgstr "" -#: emultempl/pe.em:355 +#: emultempl/pe.em:338 +msgid "" +" --enable-runtime-pseudo-reloc Work around auto-import limitations by\n" +" adding pseudo-relocations resolved " +"at\n" +" runtime.\n" +msgstr "" + +#: emultempl/pe.em:341 +msgid "" +" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations " +"for\n" +" auto-imported DATA.\n" +msgstr "" + +#: emultempl/pe.em:343 msgid "" " --enable-extra-pe-debug Enable verbose debug output when " "building\n" @@ -211,119 +226,113 @@ msgid "" "import)\n" msgstr "" -#: emultempl/pe.em:424 +#: emultempl/pe.em:412 msgid "%P: warning: bad version number in -subsystem option\n" msgstr "" -#: emultempl/pe.em:460 +#: emultempl/pe.em:448 msgid "%P%F: invalid subsystem type %s\n" msgstr "" -#: emultempl/pe.em:475 +#: emultempl/pe.em:460 msgid "%P%F: invalid hex number for PE parameter '%s'\n" msgstr "" -#: emultempl/pe.em:493 +#: emultempl/pe.em:477 msgid "%P%F: strange hex info for PE parameter '%s'\n" msgstr "" -#: emultempl/pe.em:532 +#: emultempl/pe.em:494 #, c-format msgid "%s: Can't open base file %s\n" msgstr "" -#: emultempl/pe.em:738 +#: emultempl/pe.em:707 msgid "%P: warning, file alignment > section alignment.\n" msgstr "" -#: emultempl/pe.em:822 emultempl/pe.em:848 +#: emultempl/pe.em:794 emultempl/pe.em:821 #, c-format msgid "Warning: resolving %s by linking to %s\n" msgstr "" -#: emultempl/pe.em:827 emultempl/pe.em:853 +#: emultempl/pe.em:799 emultempl/pe.em:826 msgid "Use --enable-stdcall-fixup to disable these warnings\n" msgstr "" -#: emultempl/pe.em:828 emultempl/pe.em:854 +#: emultempl/pe.em:800 emultempl/pe.em:827 msgid "Use --disable-stdcall-fixup to disable these fixups\n" msgstr "" -#: emultempl/pe.em:879 +#: emultempl/pe.em:846 #, c-format msgid "%C: Cannot get section contents - auto-import exception\n" msgstr "" -#: emultempl/pe.em:887 -msgid "" -"%C: variable '%T' can't be auto-imported. Please read the documentation for " -"ld's --enable-auto-import for details.\n" -msgstr "" - -#: emultempl/pe.em:916 +#: emultempl/pe.em:883 #, c-format msgid "Info: resolving %s by linking to %s (auto-import)\n" msgstr "" -#: emultempl/pe.em:997 +#: emultempl/pe.em:954 msgid "%F%P: PE operations on non PE file.\n" msgstr "" -#: emultempl/pe.em:1226 +#: emultempl/pe.em:1188 #, c-format msgid "Errors encountered processing file %s\n" msgstr "" -#: emultempl/pe.em:1249 +#: emultempl/pe.em:1211 #, c-format msgid "Errors encountered processing file %s for interworking" msgstr "" -#: emultempl/pe.em:1305 ldlang.c:2071 ldlang.c:4613 ldlang.c:4646 -#: ldmain.c:1062 +#: emultempl/pe.em:1273 ldlang.c:1904 ldlang.c:4397 ldlang.c:4428 +#: ldmain.c:1122 msgid "%P%F: bfd_link_hash_lookup failed: %E\n" msgstr "" -#: ldcref.c:158 +#: ldcref.c:153 msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n" msgstr "" -#: ldcref.c:164 +#: ldcref.c:159 msgid "%X%P: cref_hash_lookup failed: %E\n" msgstr "" -#: ldcref.c:235 +#: ldcref.c:225 msgid "" "\n" "Cross Reference Table\n" "\n" msgstr "" -#: ldcref.c:236 +#: ldcref.c:226 msgid "Symbol" msgstr "" -#: ldcref.c:244 +#: ldcref.c:234 msgid "File\n" msgstr "" -#: ldcref.c:248 +#: ldcref.c:238 msgid "No symbols\n" msgstr "" -#: ldcref.c:400 +#: ldcref.c:384 msgid "%P: symbol `%T' missing from main hash table\n" msgstr "" -#: ldcref.c:465 +#: ldcref.c:448 msgid "%B%F: could not read symbols; %E\n" msgstr "" -#: ldcref.c:469 ldmain.c:1128 ldmain.c:1132 +#: ldcref.c:452 ldmain.c:1187 ldmain.c:1191 msgid "%B%F: could not read symbols: %E\n" msgstr "" -#: ldcref.c:537 ldcref.c:544 ldmain.c:1178 ldmain.c:1185 +#: ldcref.c:517 ldcref.c:524 ldmain.c:1234 ldmain.c:1241 msgid "%B%F: could not read relocs: %E\n" msgstr "" @@ -331,369 +340,377 @@ msgstr "" #. in OUTSECNAME. This reloc is from a section which is #. mapped into a section from which references to OUTSECNAME #. are prohibited. We must report an error. -#: ldcref.c:563 +#: ldcref.c:543 msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n" msgstr "" -#: ldctor.c:88 +#: ldctor.c:84 msgid "%P%X: Different relocs used in set %s\n" msgstr "" -#: ldctor.c:106 +#: ldctor.c:102 msgid "%P%X: Different object file formats composing set %s\n" msgstr "" -#: ldctor.c:288 ldctor.c:302 +#: ldctor.c:281 ldctor.c:295 msgid "%P%X: %s does not support reloc %s for set %s\n" msgstr "" -#: ldctor.c:323 +#: ldctor.c:316 msgid "%P%X: Unsupported size %d for set %s\n" msgstr "" -#: ldctor.c:344 +#: ldctor.c:337 msgid "" "\n" "Set Symbol\n" "\n" msgstr "" -#: ldemul.c:225 +#: ldemul.c:247 #, c-format msgid "%S SYSLIB ignored\n" msgstr "" -#: ldemul.c:232 +#: ldemul.c:254 #, c-format msgid "%S HLL ignored\n" msgstr "" -#: ldemul.c:253 +#: ldemul.c:275 msgid "%P: unrecognised emulation mode: %s\n" msgstr "" -#: ldemul.c:254 +#: ldemul.c:276 msgid "Supported emulations: " msgstr "" -#: ldemul.c:298 +#: ldemul.c:320 msgid " no emulation specific options.\n" msgstr "" -#: ldexp.c:184 +#: ldexp.c:148 msgid "%F%P: %s uses undefined section %s\n" msgstr "" -#: ldexp.c:186 +#: ldexp.c:150 msgid "%F%P: %s forward reference of section %s\n" msgstr "" -#: ldexp.c:400 +#: ldexp.c:355 #, c-format msgid "%F%S %% by zero\n" msgstr "" -#: ldexp.c:407 +#: ldexp.c:362 #, c-format msgid "%F%S / by zero\n" msgstr "" -#: ldexp.c:581 +#: ldexp.c:533 #, c-format msgid "%X%S: unresolvable symbol `%s' referenced in expression\n" msgstr "" -#: ldexp.c:601 +#: ldexp.c:553 #, c-format msgid "%F%S: undefined symbol `%s' referenced in expression\n" msgstr "" -#: ldexp.c:726 +#: ldexp.c:677 #, c-format msgid "%F%S can not PROVIDE assignment to location counter\n" msgstr "" -#: ldexp.c:736 +#: ldexp.c:687 #, c-format msgid "%F%S invalid assignment to location counter\n" msgstr "" -#: ldexp.c:740 +#: ldexp.c:691 #, c-format msgid "%F%S assignment to location counter invalid outside of SECTION\n" msgstr "" -#: ldexp.c:749 +#: ldexp.c:700 msgid "%F%S cannot move location counter backwards (from %V to %V)\n" msgstr "" -#: ldexp.c:776 +#: ldexp.c:727 msgid "%P%F:%s: hash creation failed\n" msgstr "" -#: ldexp.c:1078 ldexp.c:1112 +#: ldexp.c:1003 ldexp.c:1035 #, c-format msgid "%F%S nonconstant expression for %s\n" msgstr "" -#: ldexp.c:1167 +#: ldexp.c:1089 #, c-format msgid "%F%S non constant expression for %s\n" msgstr "" -#: ldfile.c:105 +#: ldfile.c:144 #, c-format msgid "attempt to open %s failed\n" msgstr "" -#: ldfile.c:107 +#: ldfile.c:146 #, c-format msgid "attempt to open %s succeeded\n" msgstr "" -#: ldfile.c:113 +#: ldfile.c:152 msgid "%F%P: invalid BFD target `%s'\n" msgstr "" -#: ldfile.c:218 ldfile.c:234 +#: ldfile.c:258 ldfile.c:275 msgid "%P: skipping incompatible %s when searching for %s\n" msgstr "" -#: ldfile.c:326 +#: ldfile.c:377 msgid "%F%P: cannot open %s for %s: %E\n" msgstr "" -#: ldfile.c:329 +#: ldfile.c:380 msgid "%F%P: cannot open %s: %E\n" msgstr "" -#: ldfile.c:359 +#: ldfile.c:410 +msgid "%F%P: cannot find %s inside %s\n" +msgstr "" + +#: ldfile.c:413 msgid "%F%P: cannot find %s\n" msgstr "" -#: ldfile.c:378 ldfile.c:394 +#: ldfile.c:430 ldfile.c:446 #, c-format msgid "cannot find script file %s\n" msgstr "" -#: ldfile.c:380 ldfile.c:396 +#: ldfile.c:432 ldfile.c:448 #, c-format msgid "opened script file %s\n" msgstr "" -#: ldfile.c:445 +#: ldfile.c:492 msgid "%P%F: cannot open linker script file %s: %E\n" msgstr "" -#: ldfile.c:483 +#: ldfile.c:529 msgid "%P%F: unknown architecture: %s\n" msgstr "" -#: ldfile.c:499 +#: ldfile.c:543 msgid "%P%F: target architecture respecified\n" msgstr "" -#: ldfile.c:553 +#: ldfile.c:594 msgid "%P%F: cannot represent machine `%s'\n" msgstr "" -#: ldlang.c:784 +#: ldlang.c:640 msgid "" "\n" "Memory Configuration\n" "\n" msgstr "" -#: ldlang.c:786 +#: ldlang.c:642 msgid "Name" msgstr "" -#: ldlang.c:786 +#: ldlang.c:642 msgid "Origin" msgstr "" -#: ldlang.c:786 +#: ldlang.c:642 msgid "Length" msgstr "" -#: ldlang.c:786 +#: ldlang.c:642 msgid "Attributes" msgstr "" -#: ldlang.c:828 +#: ldlang.c:682 msgid "" "\n" "Linker script and memory map\n" "\n" msgstr "" -#: ldlang.c:845 +#: ldlang.c:698 msgid "%P%F: Illegal use of `%s' section\n" msgstr "" -#: ldlang.c:855 +#: ldlang.c:707 msgid "%P%F: output format %s cannot represent section called %s\n" msgstr "" -#: ldlang.c:1016 +#: ldlang.c:867 msgid "%P: %B: warning: ignoring duplicate section `%s'\n" msgstr "" -#: ldlang.c:1019 +#: ldlang.c:870 msgid "%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n" msgstr "" -#: ldlang.c:1033 +#: ldlang.c:884 msgid "%P: %B: warning: duplicate section `%s' has different size\n" msgstr "" -#: ldlang.c:1084 +#: ldlang.c:936 msgid "%P%F: Failed to create hash table\n" msgstr "" -#: ldlang.c:1503 +#: ldlang.c:1351 msgid "%B: file not recognized: %E\n" msgstr "" -#: ldlang.c:1504 +#: ldlang.c:1352 msgid "%B: matching formats:" msgstr "" -#: ldlang.c:1511 +#: ldlang.c:1359 msgid "%F%B: file not recognized: %E\n" msgstr "" -#: ldlang.c:1567 +#: ldlang.c:1418 msgid "%F%B: member %B in archive is not an object\n" msgstr "" -#: ldlang.c:1578 ldlang.c:1592 +#: ldlang.c:1429 ldlang.c:1443 msgid "%F%B: could not read symbols: %E\n" msgstr "" -#: ldlang.c:1859 +#: ldlang.c:1698 msgid "" "%P: warning: could not find any targets that match endianness requirement\n" msgstr "" -#: ldlang.c:1872 +#: ldlang.c:1711 msgid "%P%F: target %s not found\n" msgstr "" -#: ldlang.c:1874 +#: ldlang.c:1713 msgid "%P%F: cannot open output file %s: %E\n" msgstr "" -#: ldlang.c:1884 +#: ldlang.c:1723 msgid "%P%F:%s: can not make object file: %E\n" msgstr "" -#: ldlang.c:1888 +#: ldlang.c:1727 msgid "%P%F:%s: can not set architecture: %E\n" msgstr "" -#: ldlang.c:1892 +#: ldlang.c:1731 msgid "%P%F: can not create link hash table: %E\n" msgstr "" -#: ldlang.c:2241 +#: ldlang.c:2069 msgid " load address 0x%V" msgstr "" -#: ldlang.c:2381 +#: ldlang.c:2204 msgid "%W (size before relaxing)\n" msgstr "" -#: ldlang.c:2468 +#: ldlang.c:2288 #, c-format msgid "Address of section %s set to " msgstr "" -#: ldlang.c:2629 +#: ldlang.c:2443 #, c-format msgid "Fail with %d\n" msgstr "" -#: ldlang.c:2874 +#: ldlang.c:2683 msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n" msgstr "" -#: ldlang.c:2903 +#: ldlang.c:2711 msgid "%X%P: address 0x%v of %B section %s is not within region %s\n" msgstr "" -#: ldlang.c:2911 +#: ldlang.c:2719 msgid "%X%P: region %s is full (%B section %s)\n" msgstr "" -#: ldlang.c:2961 +#: ldlang.c:2770 msgid "%P%X: Internal error on COFF shared library section %s\n" msgstr "" -#: ldlang.c:3005 -msgid "%P: warning: no memory region specified for section `%s'\n" +#: ldlang.c:2826 +msgid "%P%F: error: no memory region specified for loadable section `%s'\n" +msgstr "" + +#: ldlang.c:2830 +msgid "%P: warning: no memory region specified for loadable section `%s'\n" msgstr "" -#: ldlang.c:3020 +#: ldlang.c:2846 msgid "%P: warning: changing start of section %s by %u bytes\n" msgstr "" -#: ldlang.c:3033 +#: ldlang.c:2859 #, c-format msgid "%F%S: non constant address expression for section %s\n" msgstr "" -#: ldlang.c:3208 +#: ldlang.c:3036 msgid "%P%F: can't relax section: %E\n" msgstr "" -#: ldlang.c:3403 +#: ldlang.c:3232 msgid "%F%P: invalid data statement\n" msgstr "" -#: ldlang.c:3440 +#: ldlang.c:3269 msgid "%F%P: invalid reloc statement\n" msgstr "" -#: ldlang.c:3579 +#: ldlang.c:3408 msgid "%P%F:%s: can't set start address\n" msgstr "" -#: ldlang.c:3592 ldlang.c:3610 +#: ldlang.c:3421 ldlang.c:3439 msgid "%P%F: can't set start address\n" msgstr "" -#: ldlang.c:3604 +#: ldlang.c:3433 msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n" msgstr "" -#: ldlang.c:3615 +#: ldlang.c:3444 msgid "%P: warning: cannot find entry symbol %s; not setting start address\n" msgstr "" -#: ldlang.c:3665 +#: ldlang.c:3488 msgid "" "%P%F: Relocatable linking with relocations from format %s (%B) to format %s " "(%B) is not supported\n" msgstr "" -#: ldlang.c:3674 +#: ldlang.c:3497 msgid "" "%P: warning: %s architecture of input file `%B' is incompatible with %s " "output\n" msgstr "" -#: ldlang.c:3695 +#: ldlang.c:3518 msgid "%E%X: failed to merge target specific data of file %B\n" msgstr "" -#: ldlang.c:3784 +#: ldlang.c:3604 msgid "" "\n" "Allocating common symbols\n" msgstr "" -#: ldlang.c:3785 +#: ldlang.c:3605 msgid "" "Common symbol size file\n" "\n" @@ -702,859 +719,888 @@ msgstr "" #. This message happens when using the #. svr3.ifile linker script, so I have #. disabled it. -#: ldlang.c:3863 +#: ldlang.c:3681 msgid "%P: no [COMMON] command, defaulting to .bss\n" msgstr "" -#: ldlang.c:3922 +#: ldlang.c:3737 msgid "%P%F: invalid syntax in flags\n" msgstr "" -#: ldlang.c:4537 +#: ldlang.c:4325 msgid "%P%Fmultiple STARTUP files\n" msgstr "" -#: ldlang.c:4580 +#: ldlang.c:4368 msgid "%X%P:%S: section has both a load address and a load region\n" msgstr "" -#: ldlang.c:4830 +#: ldlang.c:4608 msgid "%F%P: bfd_record_phdr failed: %E\n" msgstr "" -#: ldlang.c:4849 +#: ldlang.c:4627 msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n" msgstr "" -#: ldlang.c:5150 +#: ldlang.c:4919 msgid "%X%P: unknown language `%s' in version information\n" msgstr "" -#: ldlang.c:5202 +#: ldlang.c:4969 msgid "" "%X%P: anonymous version tag cannot be combined with other version tags\n" msgstr "" -#: ldlang.c:5209 +#: ldlang.c:4977 msgid "%X%P: duplicate version tag `%s'\n" msgstr "" -#: ldlang.c:5222 ldlang.c:5235 +#: ldlang.c:4990 ldlang.c:5003 msgid "%X%P: duplicate expression `%s' in version information\n" msgstr "" -#: ldlang.c:5277 +#: ldlang.c:5043 msgid "%X%P: unable to find version dependency `%s'\n" msgstr "" -#: ldlang.c:5299 +#: ldlang.c:5065 msgid "%X%P: unable to read .exports section contents\n" msgstr "" -#: ldmain.c:198 +#: ldmain.c:247 msgid "%X%P: can't set BFD default target to `%s': %E\n" msgstr "" -#: ldmain.c:291 +#: ldmain.c:349 msgid "%P%F: -r and --mpc860c0 may not be used together\n" msgstr "" -#: ldmain.c:293 +#: ldmain.c:351 msgid "%P%F: --relax and -r may not be used together\n" msgstr "" -#: ldmain.c:295 +#: ldmain.c:353 msgid "%P%F: -r and -shared may not be used together\n" msgstr "" -#: ldmain.c:301 +#: ldmain.c:359 msgid "%P%F: -F may not be used without -shared\n" msgstr "" -#: ldmain.c:303 +#: ldmain.c:361 msgid "%P%F: -f may not be used without -shared\n" msgstr "" -#: ldmain.c:342 +#: ldmain.c:403 msgid "using external linker script:" msgstr "" -#: ldmain.c:344 +#: ldmain.c:405 msgid "using internal linker script:" msgstr "" -#: ldmain.c:378 +#: ldmain.c:439 msgid "%P%F: no input files\n" msgstr "" -#: ldmain.c:383 +#: ldmain.c:443 msgid "%P: mode %s\n" msgstr "" -#: ldmain.c:400 +#: ldmain.c:459 msgid "%P%F: cannot open map file %s: %E\n" msgstr "" -#: ldmain.c:433 +#: ldmain.c:489 msgid "%P: link errors found, deleting executable `%s'\n" msgstr "" -#: ldmain.c:444 +#: ldmain.c:498 msgid "%F%B: final close failed: %E\n" msgstr "" -#: ldmain.c:468 +#: ldmain.c:524 msgid "%X%P: unable to open for source of copy `%s'\n" msgstr "" -#: ldmain.c:470 +#: ldmain.c:527 msgid "%X%P: unable to open for destination of copy `%s'\n" msgstr "" -#: ldmain.c:476 +#: ldmain.c:534 msgid "%P: Error writing file `%s'\n" msgstr "" -#: ldmain.c:482 pe-dll.c:1465 +#: ldmain.c:539 pe-dll.c:1443 #, c-format msgid "%P: Error closing file `%s'\n" msgstr "" -#: ldmain.c:499 +#: ldmain.c:555 #, c-format msgid "%s: total time in link: %ld.%06ld\n" msgstr "" -#: ldmain.c:502 +#: ldmain.c:558 #, c-format msgid "%s: data size %ld\n" msgstr "" -#: ldmain.c:543 +#: ldmain.c:596 msgid "%P%F: missing argument to -m\n" msgstr "" -#: ldmain.c:671 ldmain.c:692 ldmain.c:723 +#: ldmain.c:741 ldmain.c:759 ldmain.c:789 msgid "%P%F: bfd_hash_table_init failed: %E\n" msgstr "" -#: ldmain.c:676 ldmain.c:695 +#: ldmain.c:745 ldmain.c:763 msgid "%P%F: bfd_hash_lookup failed: %E\n" msgstr "" -#: ldmain.c:710 +#: ldmain.c:777 msgid "%X%P: error: duplicate retain-symbols-file\n" msgstr "" -#: ldmain.c:754 +#: ldmain.c:819 msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n" msgstr "" -#: ldmain.c:759 +#: ldmain.c:824 msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n" msgstr "" -#: ldmain.c:835 +#: ldmain.c:899 msgid "" "Archive member included because of file (symbol)\n" "\n" msgstr "" -#: ldmain.c:906 +#: ldmain.c:969 msgid "%X%C: multiple definition of `%T'\n" msgstr "" -#: ldmain.c:909 +#: ldmain.c:972 msgid "%D: first defined here\n" msgstr "" -#: ldmain.c:913 +#: ldmain.c:976 msgid "%P: Disabling relaxation: it will not work with multiple definitions\n" msgstr "" -#: ldmain.c:944 +#: ldmain.c:1006 msgid "%B: warning: definition of `%T' overriding common\n" msgstr "" -#: ldmain.c:947 +#: ldmain.c:1009 msgid "%B: warning: common is here\n" msgstr "" -#: ldmain.c:954 +#: ldmain.c:1016 msgid "%B: warning: common of `%T' overridden by definition\n" msgstr "" -#: ldmain.c:957 +#: ldmain.c:1019 msgid "%B: warning: defined here\n" msgstr "" -#: ldmain.c:964 +#: ldmain.c:1026 msgid "%B: warning: common of `%T' overridden by larger common\n" msgstr "" -#: ldmain.c:967 +#: ldmain.c:1029 msgid "%B: warning: larger common is here\n" msgstr "" -#: ldmain.c:971 +#: ldmain.c:1033 msgid "%B: warning: common of `%T' overriding smaller common\n" msgstr "" -#: ldmain.c:974 +#: ldmain.c:1036 msgid "%B: warning: smaller common is here\n" msgstr "" -#: ldmain.c:978 +#: ldmain.c:1040 msgid "%B: warning: multiple common of `%T'\n" msgstr "" -#: ldmain.c:980 +#: ldmain.c:1042 msgid "%B: warning: previous common is here\n" msgstr "" -#: ldmain.c:1001 ldmain.c:1040 +#: ldmain.c:1062 ldmain.c:1100 msgid "%P: warning: global constructor %s used\n" msgstr "" -#: ldmain.c:1050 +#: ldmain.c:1110 msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n" msgstr "" -#: ldmain.c:1234 +#: ldmain.c:1287 ldmisc.c:533 msgid "%F%P: bfd_hash_table_init failed: %E\n" msgstr "" -#: ldmain.c:1241 +#: ldmain.c:1294 ldmisc.c:540 msgid "%F%P: bfd_hash_lookup failed: %E\n" msgstr "" -#: ldmain.c:1261 +#: ldmain.c:1314 msgid "%C: undefined reference to `%T'\n" msgstr "" -#: ldmain.c:1267 +#: ldmain.c:1320 msgid "%D: more undefined references to `%T' follow\n" msgstr "" -#: ldmain.c:1274 +#: ldmain.c:1327 msgid "%B: undefined reference to `%T'\n" msgstr "" -#: ldmain.c:1280 +#: ldmain.c:1333 msgid "%B: more undefined references to `%T' follow\n" msgstr "" -#: ldmain.c:1300 ldmain.c:1321 ldmain.c:1340 +#: ldmain.c:1364 ldmain.c:1392 ldmain.c:1410 msgid "%P%X: generated" msgstr "" -#: ldmain.c:1303 +#: ldmain.c:1371 +msgid " additional relocation overflows omitted from the output\n" +msgstr "" + +#: ldmain.c:1375 msgid " relocation truncated to fit: %s %T" msgstr "" -#: ldmain.c:1324 +#: ldmain.c:1395 #, c-format msgid "dangerous relocation: %s\n" msgstr "" -#: ldmain.c:1343 +#: ldmain.c:1413 msgid " reloc refers to symbol `%T' which is not being output\n" msgstr "" -#: ldmisc.c:157 +#: ldmisc.c:147 msgid "no symbol" msgstr "" -#: ldmisc.c:221 +#: ldmisc.c:211 #, c-format msgid "built in linker script:%u" msgstr "" -#: ldmisc.c:271 ldmisc.c:275 +#: ldmisc.c:260 ldmisc.c:264 msgid "%B%F: could not read symbols\n" msgstr "" -#. We use abfd->filename in this initial line, -#. in case filename is a .h file or something -#. similarly unhelpful. -#: ldmisc.c:311 -msgid "%B: In function `%T':\n" +#: ldmisc.c:291 +msgid ": In function `%T':\n" msgstr "" -#: ldmisc.c:463 +#: ldmisc.c:438 msgid "%F%P: internal error %s %d\n" msgstr "" -#: ldmisc.c:513 +#: ldmisc.c:484 msgid "%P: internal error: aborting at %s line %d in %s\n" msgstr "" -#: ldmisc.c:516 +#: ldmisc.c:487 msgid "%P: internal error: aborting at %s line %d\n" msgstr "" -#: ldmisc.c:518 +#: ldmisc.c:489 msgid "%P%F: please report this bug\n" msgstr "" #. Output for noisy == 2 is intended to follow the GNU standards. -#: ldver.c:38 +#: ldver.c:39 #, c-format msgid "GNU ld version %s\n" msgstr "" -#: ldver.c:42 +#: ldver.c:43 msgid "Copyright 2002 Free Software Foundation, Inc.\n" msgstr "" -#: ldver.c:43 +#: ldver.c:44 msgid "" "This program is free software; you may redistribute it under the terms of\n" "the GNU General Public License. This program has absolutely no warranty.\n" msgstr "" -#: ldver.c:52 +#: ldver.c:53 msgid " Supported emulations:\n" msgstr "" -#: ldwrite.c:59 ldwrite.c:195 +#: ldwrite.c:54 ldwrite.c:190 msgid "%P%F: bfd_new_link_order failed\n" msgstr "" -#: ldwrite.c:325 +#: ldwrite.c:310 msgid "%F%P: clone section failed: %E\n" msgstr "" -#: ldwrite.c:364 +#: ldwrite.c:348 #, c-format msgid "%8x something else\n" msgstr "" -#: ldwrite.c:547 +#: ldwrite.c:525 msgid "%F%P: final link failed: %E\n" msgstr "" -#: lexsup.c:173 lexsup.c:268 +#: lexsup.c:179 lexsup.c:284 msgid "KEYWORD" msgstr "" -#: lexsup.c:173 +#: lexsup.c:179 msgid "Shared library control for HP/UX compatibility" msgstr "" -#: lexsup.c:176 +#: lexsup.c:182 msgid "ARCH" msgstr "" -#: lexsup.c:176 +#: lexsup.c:182 msgid "Set architecture" msgstr "" -#: lexsup.c:178 lexsup.c:339 +#: lexsup.c:184 lexsup.c:357 msgid "TARGET" msgstr "" -#: lexsup.c:178 +#: lexsup.c:184 msgid "Specify target for following input files" msgstr "" -#: lexsup.c:180 lexsup.c:221 lexsup.c:233 lexsup.c:242 lexsup.c:313 -#: lexsup.c:346 lexsup.c:386 +#: lexsup.c:186 lexsup.c:229 lexsup.c:241 lexsup.c:254 lexsup.c:329 +#: lexsup.c:364 lexsup.c:408 msgid "FILE" msgstr "" -#: lexsup.c:180 +#: lexsup.c:186 msgid "Read MRI format linker script" msgstr "" -#: lexsup.c:182 +#: lexsup.c:188 msgid "Force common symbols to be defined" msgstr "" -#: lexsup.c:186 lexsup.c:376 lexsup.c:378 lexsup.c:380 +#: lexsup.c:192 lexsup.c:398 lexsup.c:400 lexsup.c:402 msgid "ADDRESS" msgstr "" -#: lexsup.c:186 +#: lexsup.c:192 msgid "Set start address" msgstr "" -#: lexsup.c:188 +#: lexsup.c:194 msgid "Export all dynamic symbols" msgstr "" -#: lexsup.c:190 +#: lexsup.c:196 msgid "Link big-endian objects" msgstr "" -#: lexsup.c:192 +#: lexsup.c:198 msgid "Link little-endian objects" msgstr "" -#: lexsup.c:194 lexsup.c:197 +#: lexsup.c:200 lexsup.c:203 msgid "SHLIB" msgstr "" -#: lexsup.c:194 +#: lexsup.c:200 msgid "Auxiliary filter for shared object symbol table" msgstr "" -#: lexsup.c:197 +#: lexsup.c:203 msgid "Filter for shared object symbol table" msgstr "" -#: lexsup.c:199 +#: lexsup.c:205 msgid "Ignored" msgstr "" -#: lexsup.c:201 +#: lexsup.c:207 msgid "SIZE" msgstr "" -#: lexsup.c:201 +#: lexsup.c:207 msgid "Small data size (if no size, same as --shared)" msgstr "" -#: lexsup.c:204 +#: lexsup.c:210 msgid "FILENAME" msgstr "" -#: lexsup.c:204 +#: lexsup.c:210 msgid "Set internal name of shared library" msgstr "" -#: lexsup.c:206 +#: lexsup.c:212 msgid "PROGRAM" msgstr "" -#: lexsup.c:206 +#: lexsup.c:212 msgid "Set PROGRAM as the dynamic linker to use" msgstr "" -#: lexsup.c:208 +#: lexsup.c:214 msgid "LIBNAME" msgstr "" -#: lexsup.c:208 +#: lexsup.c:214 msgid "Search for library LIBNAME" msgstr "" -#: lexsup.c:210 +#: lexsup.c:216 msgid "DIRECTORY" msgstr "" -#: lexsup.c:210 +#: lexsup.c:216 msgid "Add DIRECTORY to library search path" msgstr "" -#: lexsup.c:212 +#: lexsup.c:218 msgid "EMULATION" msgstr "" -#: lexsup.c:212 +#: lexsup.c:218 msgid "Set emulation" msgstr "" -#: lexsup.c:214 +#: lexsup.c:220 msgid "Print map file on standard output" msgstr "" -#: lexsup.c:216 +#: lexsup.c:222 msgid "Do not page align data" msgstr "" -#: lexsup.c:218 +#: lexsup.c:224 msgid "Do not page align data, do not make text readonly" msgstr "" -#: lexsup.c:221 +#: lexsup.c:227 +msgid "Page align data, make text readonly" +msgstr "" + +#: lexsup.c:229 msgid "Set output file name" msgstr "" -#: lexsup.c:223 +#: lexsup.c:231 msgid "Optimize output file" msgstr "" -#: lexsup.c:225 +#: lexsup.c:233 msgid "Ignored for SVR4 compatibility" msgstr "" -#: lexsup.c:229 -msgid "Generate relocateable output" +#: lexsup.c:237 +msgid "Generate relocatable output" msgstr "" -#: lexsup.c:233 +#: lexsup.c:241 msgid "Just link symbols (if directory, same as --rpath)" msgstr "" -#: lexsup.c:236 +#: lexsup.c:244 msgid "Strip all symbols" msgstr "" -#: lexsup.c:238 +#: lexsup.c:246 msgid "Strip debugging symbols" msgstr "" -#: lexsup.c:240 +#: lexsup.c:248 +msgid "Strip symbols in discarded sections" +msgstr "" + +#: lexsup.c:250 +msgid "Do not strip symbols in discarded sections" +msgstr "" + +#: lexsup.c:252 msgid "Trace file opens" msgstr "" -#: lexsup.c:242 +#: lexsup.c:254 msgid "Read linker script" msgstr "" -#: lexsup.c:244 lexsup.c:260 lexsup.c:299 lexsup.c:311 lexsup.c:370 -#: lexsup.c:389 lexsup.c:409 +#: lexsup.c:256 lexsup.c:272 lexsup.c:315 lexsup.c:327 lexsup.c:392 +#: lexsup.c:411 lexsup.c:431 msgid "SYMBOL" msgstr "" -#: lexsup.c:244 +#: lexsup.c:256 msgid "Start with undefined reference to SYMBOL" msgstr "" -#: lexsup.c:246 +#: lexsup.c:258 msgid "[=SECTION]" msgstr "" -#: lexsup.c:246 +#: lexsup.c:258 msgid "Don't merge input [SECTION | orphan] sections" msgstr "" -#: lexsup.c:248 +#: lexsup.c:260 msgid "Build global constructor/destructor tables" msgstr "" -#: lexsup.c:250 +#: lexsup.c:262 msgid "Print version information" msgstr "" -#: lexsup.c:252 +#: lexsup.c:264 msgid "Print version and emulation information" msgstr "" -#: lexsup.c:254 +#: lexsup.c:266 msgid "Discard all local symbols" msgstr "" -#: lexsup.c:256 +#: lexsup.c:268 msgid "Discard temporary local symbols (default)" msgstr "" -#: lexsup.c:258 +#: lexsup.c:270 msgid "Don't discard any local symbols" msgstr "" -#: lexsup.c:260 +#: lexsup.c:272 msgid "Trace mentions of SYMBOL" msgstr "" -#: lexsup.c:262 lexsup.c:348 lexsup.c:350 +#: lexsup.c:274 lexsup.c:366 lexsup.c:368 msgid "PATH" msgstr "" -#: lexsup.c:262 +#: lexsup.c:274 msgid "Default search path for Solaris compatibility" msgstr "" -#: lexsup.c:264 +#: lexsup.c:276 msgid "Start a group" msgstr "" -#: lexsup.c:266 +#: lexsup.c:278 msgid "End a group" msgstr "" -#: lexsup.c:268 +#: lexsup.c:280 +msgid "Accept input files whose architecture cannot be determined" +msgstr "" + +#: lexsup.c:282 +msgid "Reject input files whose architecture is unknown" +msgstr "" + +#: lexsup.c:284 msgid "Ignored for SunOS compatibility" msgstr "" -#: lexsup.c:270 +#: lexsup.c:286 msgid "Link against shared libraries" msgstr "" -#: lexsup.c:276 +#: lexsup.c:292 msgid "Do not link against shared libraries" msgstr "" -#: lexsup.c:284 +#: lexsup.c:300 msgid "Bind global references locally" msgstr "" -#: lexsup.c:286 +#: lexsup.c:302 msgid "Check section addresses for overlaps (default)" msgstr "" -#: lexsup.c:288 +#: lexsup.c:304 msgid "Do not check section addresses for overlaps" msgstr "" -#: lexsup.c:291 +#: lexsup.c:307 msgid "Output cross reference table" msgstr "" -#: lexsup.c:293 +#: lexsup.c:309 msgid "SYMBOL=EXPRESSION" msgstr "" -#: lexsup.c:293 +#: lexsup.c:309 msgid "Define a symbol" msgstr "" -#: lexsup.c:295 +#: lexsup.c:311 msgid "[=STYLE]" msgstr "" -#: lexsup.c:295 +#: lexsup.c:311 msgid "Demangle symbol names [using STYLE]" msgstr "" -#: lexsup.c:297 +#: lexsup.c:313 msgid "Generate embedded relocs" msgstr "" -#: lexsup.c:299 +#: lexsup.c:315 msgid "Call SYMBOL at unload-time" msgstr "" -#: lexsup.c:301 +#: lexsup.c:317 msgid "Force generation of file with .exe suffix" msgstr "" -#: lexsup.c:303 +#: lexsup.c:319 msgid "Remove unused sections (on some targets)" msgstr "" -#: lexsup.c:306 +#: lexsup.c:322 msgid "Don't remove unused sections (default)" msgstr "" -#: lexsup.c:309 +#: lexsup.c:325 msgid "Print option help" msgstr "" -#: lexsup.c:311 +#: lexsup.c:327 msgid "Call SYMBOL at load-time" msgstr "" -#: lexsup.c:313 +#: lexsup.c:329 msgid "Write a map file" msgstr "" -#: lexsup.c:315 +#: lexsup.c:331 msgid "Do not define Common storage" msgstr "" -#: lexsup.c:317 +#: lexsup.c:333 msgid "Do not demangle symbol names" msgstr "" -#: lexsup.c:319 +#: lexsup.c:335 msgid "Use less memory and more disk I/O" msgstr "" -#: lexsup.c:321 +#: lexsup.c:337 msgid "Allow no undefined symbols" msgstr "" -#: lexsup.c:323 -msgid "Allow undefined symbols in shared objects" +#: lexsup.c:339 +msgid "Allow undefined symbols in shared objects (the default)" msgstr "" -#: lexsup.c:325 +#: lexsup.c:341 +msgid "Do not allow undefined symbols in shared objects" +msgstr "" + +#: lexsup.c:343 msgid "Allow multiple definitions" msgstr "" -#: lexsup.c:327 +#: lexsup.c:345 msgid "Disallow undefined version" msgstr "" -#: lexsup.c:329 +#: lexsup.c:347 msgid "Don't warn about mismatched input files" msgstr "" -#: lexsup.c:331 +#: lexsup.c:349 msgid "Turn off --whole-archive" msgstr "" -#: lexsup.c:333 +#: lexsup.c:351 msgid "Create an output file even if errors occur" msgstr "" -#: lexsup.c:337 +#: lexsup.c:355 msgid "" "Only use library directories specified on\n" "\t\t\t\tthe command line" msgstr "" -#: lexsup.c:339 +#: lexsup.c:357 msgid "Specify target of output file" msgstr "" -#: lexsup.c:341 +#: lexsup.c:359 msgid "Ignored for Linux compatibility" msgstr "" -#: lexsup.c:343 +#: lexsup.c:361 msgid "Relax branches on certain targets" msgstr "" -#: lexsup.c:346 +#: lexsup.c:364 msgid "Keep only symbols listed in FILE" msgstr "" -#: lexsup.c:348 +#: lexsup.c:366 msgid "Set runtime shared library search path" msgstr "" -#: lexsup.c:350 +#: lexsup.c:368 msgid "Set link time shared library search path" msgstr "" -#: lexsup.c:352 +#: lexsup.c:370 msgid "Create a shared library" msgstr "" -#: lexsup.c:356 +#: lexsup.c:374 +msgid "Create a position independent executable" +msgstr "" + +#: lexsup.c:378 msgid "Sort common symbols by size" msgstr "" -#: lexsup.c:360 +#: lexsup.c:382 msgid "COUNT" msgstr "" -#: lexsup.c:360 +#: lexsup.c:382 msgid "How many tags to reserve in .dynamic section" msgstr "" -#: lexsup.c:362 +#: lexsup.c:384 msgid "[=SIZE]" msgstr "" -#: lexsup.c:362 +#: lexsup.c:384 msgid "Split output sections every SIZE octets" msgstr "" -#: lexsup.c:364 +#: lexsup.c:386 msgid "[=COUNT]" msgstr "" -#: lexsup.c:364 +#: lexsup.c:386 msgid "Split output sections every COUNT relocs" msgstr "" -#: lexsup.c:366 +#: lexsup.c:388 msgid "Print memory usage statistics" msgstr "" -#: lexsup.c:368 +#: lexsup.c:390 msgid "Display target specific options" msgstr "" -#: lexsup.c:370 +#: lexsup.c:392 msgid "Do task level linking" msgstr "" -#: lexsup.c:372 +#: lexsup.c:394 msgid "Use same format as native linker" msgstr "" -#: lexsup.c:374 +#: lexsup.c:396 msgid "SECTION=ADDRESS" msgstr "" -#: lexsup.c:374 +#: lexsup.c:396 msgid "Set address of named section" msgstr "" -#: lexsup.c:376 +#: lexsup.c:398 msgid "Set address of .bss section" msgstr "" -#: lexsup.c:378 +#: lexsup.c:400 msgid "Set address of .data section" msgstr "" -#: lexsup.c:380 +#: lexsup.c:402 msgid "Set address of .text section" msgstr "" -#: lexsup.c:382 +#: lexsup.c:404 msgid "Output lots of information during link" msgstr "" -#: lexsup.c:386 +#: lexsup.c:408 msgid "Read version information script" msgstr "" -#: lexsup.c:389 +#: lexsup.c:411 msgid "" "Take export symbols list from .exports, using\n" "\t\t\t\tSYMBOL as the version." msgstr "" -#: lexsup.c:392 +#: lexsup.c:414 msgid "Warn about duplicate common symbols" msgstr "" -#: lexsup.c:394 +#: lexsup.c:416 msgid "Warn if global constructors/destructors are seen" msgstr "" -#: lexsup.c:397 +#: lexsup.c:419 msgid "Warn if the multiple GP values are used" msgstr "" -#: lexsup.c:399 +#: lexsup.c:421 msgid "Warn only once per undefined symbol" msgstr "" -#: lexsup.c:401 +#: lexsup.c:423 msgid "Warn if start of section changes due to alignment" msgstr "" -#: lexsup.c:404 +#: lexsup.c:426 msgid "Treat warnings as errors" msgstr "" -#: lexsup.c:407 +#: lexsup.c:429 msgid "Include all objects from following archives" msgstr "" -#: lexsup.c:409 +#: lexsup.c:431 msgid "Use wrapper functions for SYMBOL" msgstr "" -#: lexsup.c:411 +#: lexsup.c:433 msgid "[=WORDS]" msgstr "" -#: lexsup.c:411 +#: lexsup.c:433 msgid "" "Modify problematic branches in last WORDS (1-10,\n" "\t\t\t\tdefault 5) words of a page" msgstr "" -#: lexsup.c:577 +#: lexsup.c:602 msgid "%P: unrecognized option '%s'\n" msgstr "" -#: lexsup.c:579 +#: lexsup.c:604 msgid "%P%F: use the --help option for usage information\n" msgstr "" -#: lexsup.c:598 +#: lexsup.c:622 msgid "%P%F: unrecognized -a option `%s'\n" msgstr "" -#: lexsup.c:611 +#: lexsup.c:635 msgid "%P%F: unrecognized -assert option `%s'\n" msgstr "" -#: lexsup.c:654 +#: lexsup.c:678 msgid "%F%P: unknown demangling style `%s'" msgstr "" -#: lexsup.c:714 +#: lexsup.c:737 msgid "%P%F: invalid number `%s'\n" msgstr "" @@ -1566,128 +1612,138 @@ msgstr "" #. an error message here. We cannot just make this a warning, #. increment optind, and continue because getopt is too confused #. and will seg-fault the next time around. -#: lexsup.c:818 +#: lexsup.c:849 msgid "%P%F: bad -rpath option\n" msgstr "" -#: lexsup.c:916 +#: lexsup.c:953 msgid "%P%F: -shared not supported\n" msgstr "" -#: lexsup.c:948 +#: lexsup.c:962 +msgid "%P%F: -pie not supported\n" +msgstr "" + +#: lexsup.c:994 msgid "%P%F: invalid argument to option \"--section-start\"\n" msgstr "" -#: lexsup.c:954 +#: lexsup.c:1000 msgid "%P%F: missing argument(s) to option \"--section-start\"\n" msgstr "" -#: lexsup.c:1103 +#: lexsup.c:1158 msgid "%P%F: may not nest groups (--help for usage)\n" msgstr "" -#: lexsup.c:1110 +#: lexsup.c:1165 msgid "%P%F: group ended before it began (--help for usage)\n" msgstr "" -#: lexsup.c:1124 +#: lexsup.c:1179 msgid "%P%F: invalid argument to option \"mpc860c0\"\n" msgstr "" -#: lexsup.c:1179 +#: lexsup.c:1234 msgid "%P%F: invalid hex number `%s'\n" msgstr "" -#: lexsup.c:1191 +#: lexsup.c:1246 #, c-format msgid "Usage: %s [options] file...\n" msgstr "" -#: lexsup.c:1193 +#: lexsup.c:1248 msgid "Options:\n" msgstr "" #. Note: Various tools (such as libtool) depend upon the #. format of the listings below - do not change them. -#: lexsup.c:1276 +#: lexsup.c:1331 #, c-format msgid "%s: supported targets:" msgstr "" -#: lexsup.c:1284 +#: lexsup.c:1339 #, c-format msgid "%s: supported emulations: " msgstr "" -#: lexsup.c:1289 +#: lexsup.c:1344 #, c-format msgid "%s: emulation specific options:\n" msgstr "" -#: lexsup.c:1293 +#: lexsup.c:1348 #, c-format msgid "Report bugs to %s\n" msgstr "" -#: mri.c:334 +#: mri.c:307 msgid "%P%F: unknown format type %s\n" msgstr "" -#: pe-dll.c:323 +#: pe-dll.c:301 #, c-format msgid "%XUnsupported PEI architecture: %s\n" msgstr "" -#: pe-dll.c:673 +#: pe-dll.c:650 #, c-format msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n" msgstr "" -#: pe-dll.c:680 +#: pe-dll.c:657 #, c-format msgid "Warning, duplicate EXPORT: %s\n" msgstr "" -#: pe-dll.c:744 +#: pe-dll.c:723 #, c-format msgid "%XCannot export %s: symbol not defined\n" msgstr "" -#: pe-dll.c:750 +#: pe-dll.c:729 #, c-format msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n" msgstr "" -#: pe-dll.c:757 +#: pe-dll.c:736 #, c-format msgid "%XCannot export %s: symbol not found\n" msgstr "" -#: pe-dll.c:872 +#: pe-dll.c:848 #, c-format msgid "%XError, ordinal used twice: %d (%s vs %s)\n" msgstr "" -#: pe-dll.c:1183 +#: pe-dll.c:1165 #, c-format msgid "%XError: %d-bit reloc in dll\n" msgstr "" -#: pe-dll.c:1318 +#: pe-dll.c:1296 #, c-format msgid "%s: Can't open output def file %s\n" msgstr "" -#: pe-dll.c:1461 +#: pe-dll.c:1439 msgid "; no contents available\n" msgstr "" -#: pe-dll.c:2137 +#: pe-dll.c:2203 +msgid "" +"%C: variable '%T' can't be auto-imported. Please read the documentation for " +"ld's --enable-auto-import for details.\n" +msgstr "" + +#: pe-dll.c:2233 #, c-format msgid "%XCan't open .lib file: %s\n" msgstr "" -#: pe-dll.c:2142 +#: pe-dll.c:2238 #, c-format msgid "Creating library file: %s\n" msgstr "" diff --git a/contrib/binutils/libiberty/configure.in b/contrib/binutils/libiberty/configure.in deleted file mode 100644 index a8dc66fa..0000000 --- a/contrib/binutils/libiberty/configure.in +++ /dev/null @@ -1,459 +0,0 @@ -dnl Process this file with autoconf to produce a configure script - -AC_PREREQ(2.13) -AC_INIT(pexecute.c) - -# This works around the fact that libtool configuration may change LD -# for this particular configuration, but some shells, instead of -# keeping the changes in LD private, export them just because LD is -# exported. We don't use libtool yet, but some day we might, so... -ORIGINAL_LD_FOR_MULTILIBS=$LD - -dnl We use these options to decide which functions to include. -AC_ARG_WITH(target-subdir, -[ --with-target-subdir=SUBDIR Configuring in a subdirectory for target]) -AC_ARG_WITH(build-subdir, -[ --with-build-subdir=SUBDIR Configuring in a subdirectory for build]) -AC_ARG_WITH(cross-host, -[ --with-cross-host=HOST Configuring with a cross compiler]) -AC_ARG_WITH(newlib, -[ --with-newlib Configuring with newlib]) - -if test "${srcdir}" = "."; then - if test -n "${with_build_subdir}"; then - libiberty_topdir="${srcdir}/../.." - with_target_subdir= - elif test -z "${with_target_subdir}"; then - libiberty_topdir="${srcdir}/.." - else - if test "${with_target_subdir}" != "."; then - libiberty_topdir="${srcdir}/${with_multisrctop}../.." - else - libiberty_topdir="${srcdir}/${with_multisrctop}.." - fi - fi -else - libiberty_topdir="${srcdir}/.." -fi -AC_CONFIG_AUX_DIR($libiberty_topdir) - -dnl Very limited version of automake's enable-maintainer-mode - -AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode is disabled by default - AC_ARG_ENABLE(maintainer-mode, -[ --enable-maintainer-mode - enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer], - maintainer_mode=$enableval, - maintainer_mode=no) - -AC_MSG_RESULT($maintainer_mode) - -if test "$maintainer_mode" = "yes"; then - MAINT='' - NOTMAINT='#' -else - MAINT='#' - NOTMAINT='' -fi -AC_SUBST(MAINT)dnl -AC_SUBST(NOTMAINT)dnl - -# Do we have a single-tree copy of texinfo? Even if we do, we can't -# rely on it - libiberty is built before texinfo. -AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, ) -if test "x$MAKEINFO" = "x"; then - MAKEINFO="@echo makeinfo missing; true" - BUILD_INFO= -else - BUILD_INFO=info - case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in - x*\ [[1-3]].* ) - MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true" - BUILD_INFO= - AC_MSG_WARN([ -*** Makeinfo is too old. Info documentation will not be built.]) - ;; - esac -fi -AC_SUBST(MAKEINFO) -AC_SUBST(BUILD_INFO) - -AC_CHECK_PROG(PERL, perl, perl, ) -if test x"$PERL" = x""; then - HAVE_PERL='#' -else - HAVE_PERL='' -fi -AC_SUBST(HAVE_PERL) - -AC_CANONICAL_HOST - -dnl When we start using automake: -dnl AM_INIT_AUTOMAKE(libiberty, 1.0) - -dnl These must be called before AM_PROG_LIBTOOL, because it may want -dnl to call AC_CHECK_PROG. -AC_CHECK_TOOL(AR, ar) -AC_CHECK_TOOL(RANLIB, ranlib, :) - -LIB_AC_PROG_CC - -AC_PROG_CC_C_O -# autoconf is lame and doesn't give us any substitution variable for this. -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then - NO_MINUS_C_MINUS_O=yes -else - OUTPUT_OPTION='-o $@' -fi -AC_SUBST(NO_MINUS_C_MINUS_O) -AC_SUBST(OUTPUT_OPTION) - -AC_ISC_POSIX -AC_C_CONST -AC_C_INLINE - -dnl When we start using libtool: -dnl Default to a non shared library. This may be overridden by the -dnl configure option --enable-shared. -dnl AM_DISABLE_SHARED - -dnl When we start using libtool: -dnl AM_PROG_LIBTOOL - -dnl When we start using automake: -dnl AM_CONFIG_HEADER(config.h:config.in) -AC_CONFIG_HEADER(config.h:config.in) - -dnl When we start using automake: -dnl AM_MAINTAINER_MODE -dnl AC_EXEEXT - -dnl When we start using automake: -dnl AM_PROG_INSTALL -AC_PROG_INSTALL - -. ${srcdir}/config.table -host_makefile_frag=${frag} -AC_SUBST_FILE(host_makefile_frag) - -# It's OK to check for header files. Although the compiler may not be -# able to link anything, it had better be able to at least compile -# something. -AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h) -AC_HEADER_SYS_WAIT -AC_HEADER_TIME - -libiberty_AC_DECLARE_ERRNO - -AC_CHECK_TYPE(uintptr_t, unsigned long) - -if test $ac_cv_type_uintptr_t = yes -then - AC_DEFINE(HAVE_UINTPTR_T, 1, [Define if you have the \`uintptr_t' type.]) -fi - -AC_TYPE_PID_T - -# This is the list of functions which libiberty will provide if they -# are not available on the host. - -funcs="asprintf" -funcs="$funcs atexit" -funcs="$funcs basename" -funcs="$funcs bcmp" -funcs="$funcs bcopy" -funcs="$funcs bsearch" -funcs="$funcs bzero" -funcs="$funcs calloc" -funcs="$funcs clock" -funcs="$funcs ffs" -funcs="$funcs getcwd" -funcs="$funcs getpagesize" -funcs="$funcs index" -funcs="$funcs insque" -funcs="$funcs memchr" -funcs="$funcs memcmp" -funcs="$funcs memcpy" -funcs="$funcs memmove" -funcs="$funcs memset" -funcs="$funcs mkstemps" -funcs="$funcs putenv" -funcs="$funcs random" -funcs="$funcs rename" -funcs="$funcs rindex" -funcs="$funcs setenv" -funcs="$funcs sigsetmask" -funcs="$funcs strcasecmp" -funcs="$funcs strchr" -funcs="$funcs strdup" -funcs="$funcs strncasecmp" -funcs="$funcs strrchr" -funcs="$funcs strstr" -funcs="$funcs strtod" -funcs="$funcs strtol" -funcs="$funcs strtoul" -funcs="$funcs tmpnam" -funcs="$funcs vasprintf" -funcs="$funcs vfprintf" -funcs="$funcs vprintf" -funcs="$funcs vsprintf" -funcs="$funcs waitpid" - -# Also in the old function.def file: alloca, vfork, getopt. - -vars="sys_errlist sys_nerr sys_siglist" - -checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times sbrk gettimeofday" - -# These are neither executed nor required, but they help keep -# autoheader happy without adding a bunch of text to acconfig.h. -if test "x" = "y"; then - AC_CHECK_FUNCS(asprintf atexit basename bcmp bcopy bsearch bzero calloc clock) - AC_CHECK_FUNCS(getcwd getpagesize index insque mkstemps memchr memcmp memcpy) - AC_CHECK_FUNCS(memmove memset putenv random rename rindex sigsetmask) - AC_CHECK_FUNCS(strcasecmp setenv strchr strdup strncasecmp strrchr strstr) - AC_CHECK_FUNCS(strtod strtol strtoul tmpnam vasprintf vfprintf vprintf) - AC_CHECK_FUNCS(vsprintf waitpid getrusage on_exit psignal strerror strsignal) - AC_CHECK_FUNCS(sysconf times sbrk gettimeofday ffs) - AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.]) - AC_DEFINE(HAVE_SYS_NERR, 1, [Define if you have the sys_nerr variable.]) - AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.]) -fi - -# For each of these functions, if the host does not provide the -# function we want to put FN.o in LIBOBJS, and if the host does -# provide the function, we want to define HAVE_FN in config.h. - -setobjs= -CHECK= -target_header_dir= -if test -n "${with_target_subdir}"; then - - # We are being configured as a target library. AC_REPLACE_FUNCS - # may not work correctly, because the compiler may not be able to - # link executables. Note that we may still be being configured - # native. - - # If we are being configured for newlib, we know which functions - # newlib provide and which ones we will be expected to provide. - - if test "x${with_newlib}" = "xyes"; then - LIBOBJS="asprintf.o basename.o insque.o random.o strdup.o vasprintf.o" - - for f in $funcs; do - case "$f" in - asprintf | basename | insque | random | strdup | vasprintf) - ;; - *) - n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - AC_DEFINE_UNQUOTED($n) - ;; - esac - done - - # newlib doesnt provide any of the variables in $vars, so we - # dont have to check them here. - - # Of the functions in $checkfuncs, newlib only has strerror. - AC_DEFINE_NOAUTOHEADER(HAVE_STRERROR) - - setobjs=yes - - fi - - # We may wish to install the target headers somewhere. - AC_ARG_ENABLE(install-libiberty, - [ --enable-install-libiberty Install headers for end users], - enable_install_libiberty=$enableval, - enable_install_libiberty=no)dnl - - # Option parsed, now set things appropriately. - case x"$enable_install_libiberty" in - xyes|x) - target_header_dir=libiberty - ;; - xno) - target_header_dir= - ;; - *) - # This could be sanity-checked in various ways... - target_header_dir="${enable_install_libiberty}" - ;; - esac - - -else - - # Not a target library, so we set things up to run the test suite. - CHECK=check-cplus-dem - -fi - -AC_SUBST(CHECK) -AC_SUBST(target_header_dir) - -case "${host}" in - *-*-cygwin* | *-*-mingw*) - AC_DEFINE_NOAUTOHEADER(HAVE_SYS_ERRLIST) - AC_DEFINE_NOAUTOHEADER(HAVE_SYS_NERR) - ;; -esac - -if test -z "${setobjs}"; then - case "${host}" in - - *-*-vxworks*) - # Handle VxWorks configuration specially, since on VxWorks the - # libraries are actually on the target board, not in the file - # system. - LIBOBJS="basename.o getpagesize.o insque.o random.o strcasecmp.o" - LIBOBJS="$LIBOBJS strncasecmp.o strdup.o vfork.o waitpid.o vasprintf.o" - for f in $funcs; do - case "$f" in - basename | getpagesize | insque | random | strcasecmp) - ;; - strncasecmp | strdup | vfork | waitpid | vasprintf) - ;; - *) - n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - AC_DEFINE_UNQUOTED($n) - ;; - esac - done - - # VxWorks doesn't provide any of the variables in $vars, so we - # don't have to check them here. - - # Of the functions in $checkfuncs, VxWorks only has strerror. - AC_DEFINE_NOAUTOHEADER(HAVE_STRERROR) - - setobjs=yes - ;; - - esac -fi - -if test -z "${setobjs}"; then - - case "${host}" in - - *-*-cygwin*) - # The Cygwin library actually uses a couple of files from - # libiberty when it is built. If we are building a native - # Cygwin, and we run the tests, we will appear to have these - # files. However, when we go on to build winsup, we will wind up - # with a library which does not have the files, since they should - # have come from libiberty. - - # We handle this by removing the functions the winsup library - # provides from our shell variables, so that they appear to be - # missing. - - # DJ - only if we're *building* cygwin, not just building *with* cygwin - - if test -n "${with_target_subdir}" - then - funcs="`echo $funcs | sed -e 's/random//'`" - LIBOBJS="$LIBOBJS random.o" - vars="`echo $vars | sed -e 's/sys_siglist//'`" - checkfuncs="`echo $checkfuncs | sed -e 's/strsignal//' -e 's/psignal//'`" - fi - ;; - - *-*-mingw32*) - # Under mingw32, sys_nerr and sys_errlist exist, but they are - # macros, so the test below won't find them. - libiberty_cv_var_sys_nerr=yes - libiberty_cv_var_sys_errlist=yes - ;; - - *-*-uwin*) - # Under some versions of uwin, vfork is notoriously buggy and the test - # can hang configure; on other versions, vfork exists just as a stub. - # FIXME: This should be removed once vfork in uwin's runtime is fixed. - ac_cv_func_vfork_works=no - # Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are - # macros (actually, these are imported from a DLL, but the end effect - # is the same), so the test below won't find them. - libiberty_cv_var_sys_nerr=yes - libiberty_cv_var_sys_errlist=yes - ;; - - *-*-*vms*) - # Under VMS, vfork works very different than on Unix. The standard test - # won't work, and it isn't easily adaptable. It makes more sense to - # just force it. - ac_cv_func_vfork_works=yes - ;; - - esac - - # We haven't set the list of objects yet. Use the standard autoconf - # tests. This will only work if the compiler works. - AC_PROG_CC_WORKS - AC_REPLACE_FUNCS($funcs) - libiberty_AC_FUNC_C_ALLOCA - AC_FUNC_VFORK - if test $ac_cv_func_vfork_works = no; then - LIBOBJS="$LIBOBJS vfork.o" - fi - # We only need _doprnt if we might use it to implement v*printf. - if test $ac_cv_func_vprintf != yes \ - || test $ac_cv_func_vfprintf != yes \ - || test $ac_cv_func_vsprintf != yes; then - AC_REPLACE_FUNCS(_doprnt) - else - AC_CHECK_FUNCS(_doprnt) - fi - - for v in $vars; do - AC_MSG_CHECKING([for $v]) - AC_CACHE_VAL(libiberty_cv_var_$v, - [AC_TRY_LINK([int *p;], [extern int $v []; p = $v;], - [eval "libiberty_cv_var_$v=yes"], - [eval "libiberty_cv_var_$v=no"])]) - if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then - AC_MSG_RESULT(yes) - n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - AC_DEFINE_UNQUOTED($n) - else - AC_MSG_RESULT(no) - fi - done - AC_CHECK_FUNCS($checkfuncs) -fi - -libiberty_AC_FUNC_STRNCMP - -# Install a library built with a cross compiler in $(tooldir) rather -# than $(libdir). -if test -z "${with_cross_host}"; then - INSTALL_DEST=libdir -else - INSTALL_DEST=tooldir -fi -AC_SUBST(INSTALL_DEST) - -# We need multilib support, but only if configuring for the target. -AC_OUTPUT(Makefile testsuite/Makefile, -[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h -if test -n "$CONFIG_FILES"; then - if test -n "${with_build_subdir}" || test -n "${with_target_subdir}"; then - # FIXME: We shouldn't need to set ac_file - ac_file=Makefile - LD="${ORIGINAL_LD_FOR_MULTILIBS}" - . ${libiberty_topdir}/config-ml.in - fi -fi], -srcdir=${srcdir} -host=${host} -target=${target} -with_target_subdir=${with_target_subdir} -with_build_subdir=${with_build_subdir} -with_multisubdir=${with_multisubdir} -ac_configure_args="--enable-multilib ${ac_configure_args}" -CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} -libiberty_topdir=${libiberty_topdir} -) diff --git a/contrib/binutils/libiberty/pexecute.c b/contrib/binutils/libiberty/pexecute.c deleted file mode 100644 index 347c4db..0000000 --- a/contrib/binutils/libiberty/pexecute.c +++ /dev/null @@ -1,792 +0,0 @@ -/* Utilities to execute a program in a subprocess (possibly linked by pipes - with other subprocesses), and wait for it. - Copyright (C) 1996-2000 Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public -License as published by the Free Software Foundation; either -version 2 of the License, or (at your option) any later version. - -Libiberty is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with libiberty; see the file COPYING.LIB. If not, -write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -/* This file exports two functions: pexecute and pwait. */ - -/* This file lives in at least two places: libiberty and gcc. - Don't change one without the other. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <stdio.h> -#include <errno.h> -#ifdef NEED_DECLARATION_ERRNO -extern int errno; -#endif -#ifdef HAVE_STRING_H -#include <string.h> -#endif -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif -#ifdef HAVE_STDLIB_H -#include <stdlib.h> -#endif -#ifdef HAVE_SYS_WAIT_H -#include <sys/wait.h> -#endif - -#include "libiberty.h" -#include "safe-ctype.h" - -/* stdin file number. */ -#define STDIN_FILE_NO 0 - -/* stdout file number. */ -#define STDOUT_FILE_NO 1 - -/* value of `pipe': port index for reading. */ -#define READ_PORT 0 - -/* value of `pipe': port index for writing. */ -#define WRITE_PORT 1 - -static char *install_error_msg = "installation problem, cannot exec `%s'"; - -/* pexecute: execute a program. - -@deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int flags) - -Executes a program. - -@var{program} and @var{argv} are the arguments to -@code{execv}/@code{execvp}. - -@var{this_pname} is name of the calling program (i.e., @code{argv[0]}). - -@var{temp_base} is the path name, sans suffix, of a temporary file to -use if needed. This is currently only needed for MS-DOS ports that -don't use @code{go32} (do any still exist?). Ports that don't need it -can pass @code{NULL}. - -(@code{@var{flags} & PEXECUTE_SEARCH}) is non-zero if @env{PATH} should be searched -(??? It's not clear that GCC passes this flag correctly). (@code{@var{flags} & -PEXECUTE_FIRST}) is nonzero for the first process in chain. -(@code{@var{flags} & PEXECUTE_FIRST}) is nonzero for the last process -in chain. The first/last flags could be simplified to only mark the -last of a chain of processes but that requires the caller to always -mark the last one (and not give up early if some error occurs). -It's more robust to require the caller to mark both ends of the chain. - -The result is the pid on systems like Unix where we -@code{fork}/@code{exec} and on systems like WIN32 and OS/2 where we -use @code{spawn}. It is up to the caller to wait for the child. - -The result is the @code{WEXITSTATUS} on systems like MS-DOS where we -@code{spawn} and wait for the child here. - -Upon failure, @var{errmsg_fmt} and @var{errmsg_arg} are set to the -text of the error message with an optional argument (if not needed, -@var{errmsg_arg} is set to @code{NULL}), and @minus{}1 is returned. -@code{errno} is available to the caller to use. - -@end deftypefn - -@deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags}) - -Waits for a program started by @code{pexecute} to finish. - -@var{pid} is the process id of the task to wait for. @var{status} is -the `status' argument to wait. @var{flags} is currently unused (allows -future enhancement without breaking upward compatibility). Pass 0 for now. - -The result is the pid of the child reaped, or -1 for failure -(@code{errno} says why). - -On systems that don't support waiting for a particular child, @var{pid} is -ignored. On systems like MS-DOS that don't really multitask @code{pwait} -is just a mechanism to provide a consistent interface for the caller. - -@end deftypefn - -@undocumented pfinish - - pfinish: finish generation of script - - pfinish is necessary for systems like MPW where a script is generated that - runs the requested programs. */ - -#ifdef __MSDOS__ - -/* MSDOS doesn't multitask, but for the sake of a consistent interface - the code behaves like it does. pexecute runs the program, tucks the - exit code away, and returns a "pid". pwait must be called to fetch the - exit code. */ - -#include <process.h> - -/* For communicating information from pexecute to pwait. */ -static int last_pid = 0; -static int last_status = 0; -static int last_reaped = 0; - -int -pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags) - const char *program; - char * const *argv; - const char *this_pname; - const char *temp_base; - char **errmsg_fmt, **errmsg_arg; - int flags; -{ - int rc; - - last_pid++; - if (last_pid < 0) - last_pid = 1; - - if ((flags & PEXECUTE_ONE) != PEXECUTE_ONE) - abort (); - -#ifdef __DJGPP__ - /* ??? What are the possible return values from spawnv? */ - rc = (flags & PEXECUTE_SEARCH ? spawnvp : spawnv) (P_WAIT, program, argv); -#else - char *scmd, *rf; - FILE *argfile; - int i, el = flags & PEXECUTE_SEARCH ? 4 : 0; - - if (temp_base == 0) - temp_base = choose_temp_base (); - scmd = (char *) xmalloc (strlen (program) + strlen (temp_base) + 6 + el); - rf = scmd + strlen(program) + 2 + el; - sprintf (scmd, "%s%s @%s.gp", program, - (flags & PEXECUTE_SEARCH ? ".exe" : ""), temp_base); - argfile = fopen (rf, "w"); - if (argfile == 0) - { - int errno_save = errno; - free (scmd); - errno = errno_save; - *errmsg_fmt = "cannot open `%s.gp'"; - *errmsg_arg = temp_base; - return -1; - } - - for (i=1; argv[i]; i++) - { - char *cp; - for (cp = argv[i]; *cp; cp++) - { - if (*cp == '"' || *cp == '\'' || *cp == '\\' || ISSPACE (*cp)) - fputc ('\\', argfile); - fputc (*cp, argfile); - } - fputc ('\n', argfile); - } - fclose (argfile); - - rc = system (scmd); - - { - int errno_save = errno; - remove (rf); - free (scmd); - errno = errno_save; - } -#endif - - if (rc == -1) - { - *errmsg_fmt = install_error_msg; - *errmsg_arg = (char *)program; - return -1; - } - - /* Tuck the status away for pwait, and return a "pid". */ - last_status = rc << 8; - return last_pid; -} - -/* Use ECHILD if available, otherwise use EINVAL. */ -#ifdef ECHILD -#define PWAIT_ERROR ECHILD -#else -#define PWAIT_ERROR EINVAL -#endif - -int -pwait (pid, status, flags) - int pid; - int *status; - int flags; -{ - /* On MSDOS each pexecute must be followed by it's associated pwait. */ - if (pid != last_pid - /* Called twice for the same child? */ - || pid == last_reaped) - { - errno = PWAIT_ERROR; - return -1; - } - /* ??? Here's an opportunity to canonicalize the values in STATUS. - Needed? */ -#ifdef __DJGPP__ - *status = (last_status >> 8); -#else - *status = last_status; -#endif - last_reaped = last_pid; - return last_pid; -} - -#endif /* MSDOS */ - -#if defined (_WIN32) && ! defined (_UWIN) - -#include <process.h> - -#ifdef __CYGWIN__ - -#define fix_argv(argvec) (argvec) - -extern int _spawnv (); -extern int _spawnvp (); - -#else /* ! __CYGWIN__ */ - -/* This is a kludge to get around the Microsoft C spawn functions' propensity - to remove the outermost set of double quotes from all arguments. */ - -static const char * const * -fix_argv (argvec) - char **argvec; -{ - int i; - - for (i = 1; argvec[i] != 0; i++) - { - int len, j; - char *temp, *newtemp; - - temp = argvec[i]; - len = strlen (temp); - for (j = 0; j < len; j++) - { - if (temp[j] == '"') - { - newtemp = xmalloc (len + 2); - strncpy (newtemp, temp, j); - newtemp [j] = '\\'; - strncpy (&newtemp [j+1], &temp [j], len-j); - newtemp [len+1] = 0; - temp = newtemp; - len++; - j++; - } - } - - argvec[i] = temp; - } - - for (i = 0; argvec[i] != 0; i++) - { - if (strpbrk (argvec[i], " \t")) - { - int len, trailing_backslash; - char *temp; - - len = strlen (argvec[i]); - trailing_backslash = 0; - - /* There is an added complication when an arg with embedded white - space ends in a backslash (such as in the case of -iprefix arg - passed to cpp). The resulting quoted strings gets misinterpreted - by the command interpreter -- it thinks that the ending quote - is escaped by the trailing backslash and things get confused. - We handle this case by escaping the trailing backslash, provided - it was not escaped in the first place. */ - if (len > 1 - && argvec[i][len-1] == '\\' - && argvec[i][len-2] != '\\') - { - trailing_backslash = 1; - ++len; /* to escape the final backslash. */ - } - - len += 2; /* and for the enclosing quotes. */ - - temp = xmalloc (len + 1); - temp[0] = '"'; - strcpy (temp + 1, argvec[i]); - if (trailing_backslash) - temp[len-2] = '\\'; - temp[len-1] = '"'; - temp[len] = '\0'; - - argvec[i] = temp; - } - } - - return (const char * const *) argvec; -} -#endif /* __CYGWIN__ */ - -#include <io.h> -#include <fcntl.h> -#include <signal.h> - -/* mingw32 headers may not define the following. */ - -#ifndef _P_WAIT -# define _P_WAIT 0 -# define _P_NOWAIT 1 -# define _P_OVERLAY 2 -# define _P_NOWAITO 3 -# define _P_DETACH 4 - -# define WAIT_CHILD 0 -# define WAIT_GRANDCHILD 1 -#endif - -/* Win32 supports pipes */ -int -pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags) - const char *program; - char * const *argv; - const char *this_pname; - const char *temp_base; - char **errmsg_fmt, **errmsg_arg; - int flags; -{ - int pid; - int pdes[2], org_stdin, org_stdout; - int input_desc, output_desc; - int retries, sleep_interval; - - /* Pipe waiting from last process, to be used as input for the next one. - Value is STDIN_FILE_NO if no pipe is waiting - (i.e. the next command is the first of a group). */ - static int last_pipe_input; - - /* If this is the first process, initialize. */ - if (flags & PEXECUTE_FIRST) - last_pipe_input = STDIN_FILE_NO; - - input_desc = last_pipe_input; - - /* If this isn't the last process, make a pipe for its output, - and record it as waiting to be the input to the next process. */ - if (! (flags & PEXECUTE_LAST)) - { - if (_pipe (pdes, 256, O_BINARY) < 0) - { - *errmsg_fmt = "pipe"; - *errmsg_arg = NULL; - return -1; - } - output_desc = pdes[WRITE_PORT]; - last_pipe_input = pdes[READ_PORT]; - } - else - { - /* Last process. */ - output_desc = STDOUT_FILE_NO; - last_pipe_input = STDIN_FILE_NO; - } - - if (input_desc != STDIN_FILE_NO) - { - org_stdin = dup (STDIN_FILE_NO); - dup2 (input_desc, STDIN_FILE_NO); - close (input_desc); - } - - if (output_desc != STDOUT_FILE_NO) - { - org_stdout = dup (STDOUT_FILE_NO); - dup2 (output_desc, STDOUT_FILE_NO); - close (output_desc); - } - - pid = (flags & PEXECUTE_SEARCH ? _spawnvp : _spawnv) - (_P_NOWAIT, program, fix_argv(argv)); - - if (input_desc != STDIN_FILE_NO) - { - dup2 (org_stdin, STDIN_FILE_NO); - close (org_stdin); - } - - if (output_desc != STDOUT_FILE_NO) - { - dup2 (org_stdout, STDOUT_FILE_NO); - close (org_stdout); - } - - if (pid == -1) - { - *errmsg_fmt = install_error_msg; - *errmsg_arg = program; - return -1; - } - - return pid; -} - -/* MS CRTDLL doesn't return enough information in status to decide if the - child exited due to a signal or not, rather it simply returns an - integer with the exit code of the child; eg., if the child exited with - an abort() call and didn't have a handler for SIGABRT, it simply returns - with status = 3. We fix the status code to conform to the usual WIF* - macros. Note that WIFSIGNALED will never be true under CRTDLL. */ - -int -pwait (pid, status, flags) - int pid; - int *status; - int flags; -{ -#ifdef __CYGWIN__ - return wait (status); -#else - int termstat; - - pid = _cwait (&termstat, pid, WAIT_CHILD); - - /* ??? Here's an opportunity to canonicalize the values in STATUS. - Needed? */ - - /* cwait returns the child process exit code in termstat. - A value of 3 indicates that the child caught a signal, but not - which one. Since only SIGABRT, SIGFPE and SIGINT do anything, we - report SIGABRT. */ - if (termstat == 3) - *status = SIGABRT; - else - *status = (((termstat) & 0xff) << 8); - - return pid; -#endif /* __CYGWIN__ */ -} - -#endif /* _WIN32 && ! _UWIN */ - -#ifdef OS2 - -/* ??? Does OS2 have process.h? */ -extern int spawnv (); -extern int spawnvp (); - -int -pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags) - const char *program; - char * const *argv; - const char *this_pname; - const char *temp_base; - char **errmsg_fmt, **errmsg_arg; - int flags; -{ - int pid; - - if ((flags & PEXECUTE_ONE) != PEXECUTE_ONE) - abort (); - /* ??? Presumably 1 == _P_NOWAIT. */ - pid = (flags & PEXECUTE_SEARCH ? spawnvp : spawnv) (1, program, argv); - if (pid == -1) - { - *errmsg_fmt = install_error_msg; - *errmsg_arg = program; - return -1; - } - return pid; -} - -int -pwait (pid, status, flags) - int pid; - int *status; - int flags; -{ - /* ??? Here's an opportunity to canonicalize the values in STATUS. - Needed? */ - int pid = wait (status); - return pid; -} - -#endif /* OS2 */ - -#ifdef MPW - -/* MPW pexecute doesn't actually run anything; instead, it writes out - script commands that, when run, will do the actual executing. - - For example, in GCC's case, GCC will write out several script commands: - - cpp ... - cc1 ... - as ... - ld ... - - and then exit. None of the above programs will have run yet. The task - that called GCC will then execute the script and cause cpp,etc. to run. - The caller must invoke pfinish before calling exit. This adds - the finishing touches to the generated script. */ - -static int first_time = 1; - -int -pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags) - const char *program; - char * const *argv; - const char *this_pname; - const char *temp_base; - char **errmsg_fmt, **errmsg_arg; - int flags; -{ - char tmpprogram[255]; - char *cp, *tmpname; - int i; - - mpwify_filename (program, tmpprogram); - if (first_time) - { - printf ("Set Failed 0\n"); - first_time = 0; - } - - fputs ("If {Failed} == 0\n", stdout); - /* If being verbose, output a copy of the command. It should be - accurate enough and escaped enough to be "clickable". */ - if (flags & PEXECUTE_VERBOSE) - { - fputs ("\tEcho ", stdout); - fputc ('\'', stdout); - fputs (tmpprogram, stdout); - fputc ('\'', stdout); - fputc (' ', stdout); - for (i=1; argv[i]; i++) - { - fputc ('\'', stdout); - /* See if we have an argument that needs fixing. */ - if (strchr(argv[i], '/')) - { - tmpname = (char *) xmalloc (256); - mpwify_filename (argv[i], tmpname); - argv[i] = tmpname; - } - for (cp = argv[i]; *cp; cp++) - { - /* Write an Option-d escape char in front of special chars. */ - if (strchr("'+", *cp)) - fputc ('\266', stdout); - fputc (*cp, stdout); - } - fputc ('\'', stdout); - fputc (' ', stdout); - } - fputs ("\n", stdout); - } - fputs ("\t", stdout); - fputs (tmpprogram, stdout); - fputc (' ', stdout); - - for (i=1; argv[i]; i++) - { - /* See if we have an argument that needs fixing. */ - if (strchr(argv[i], '/')) - { - tmpname = (char *) xmalloc (256); - mpwify_filename (argv[i], tmpname); - argv[i] = tmpname; - } - if (strchr (argv[i], ' ')) - fputc ('\'', stdout); - for (cp = argv[i]; *cp; cp++) - { - /* Write an Option-d escape char in front of special chars. */ - if (strchr("'+", *cp)) - fputc ('\266', stdout); - fputc (*cp, stdout); - } - if (strchr (argv[i], ' ')) - fputc ('\'', stdout); - fputc (' ', stdout); - } - - fputs ("\n", stdout); - - /* Output commands that arrange to clean up and exit if a failure occurs. - We have to be careful to collect the status from the program that was - run, rather than some other script command. Also, we don't exit - immediately, since necessary cleanups are at the end of the script. */ - fputs ("\tSet TmpStatus {Status}\n", stdout); - fputs ("\tIf {TmpStatus} != 0\n", stdout); - fputs ("\t\tSet Failed {TmpStatus}\n", stdout); - fputs ("\tEnd\n", stdout); - fputs ("End\n", stdout); - - /* We're just composing a script, can't fail here. */ - return 0; -} - -int -pwait (pid, status, flags) - int pid; - int *status; - int flags; -{ - *status = 0; - return 0; -} - -/* Write out commands that will exit with the correct error code - if something in the script failed. */ - -void -pfinish () -{ - printf ("\tExit \"{Failed}\"\n"); -} - -#endif /* MPW */ - -/* include for Unix-like environments but not for Dos-like environments */ -#if ! defined (__MSDOS__) && ! defined (OS2) && ! defined (MPW) \ - && ! (defined (_WIN32) && ! defined (_UWIN)) - -extern int execv (); -extern int execvp (); - -int -pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags) - const char *program; - char * const *argv; - const char *this_pname; - const char *temp_base ATTRIBUTE_UNUSED; - char **errmsg_fmt, **errmsg_arg; - int flags; -{ - int (*func)() = (flags & PEXECUTE_SEARCH ? execvp : execv); - int pid; - int pdes[2]; - int input_desc, output_desc; - int retries, sleep_interval; - /* Pipe waiting from last process, to be used as input for the next one. - Value is STDIN_FILE_NO if no pipe is waiting - (i.e. the next command is the first of a group). */ - static int last_pipe_input; - - /* If this is the first process, initialize. */ - if (flags & PEXECUTE_FIRST) - last_pipe_input = STDIN_FILE_NO; - - input_desc = last_pipe_input; - - /* If this isn't the last process, make a pipe for its output, - and record it as waiting to be the input to the next process. */ - if (! (flags & PEXECUTE_LAST)) - { - if (pipe (pdes) < 0) - { - *errmsg_fmt = "pipe"; - *errmsg_arg = NULL; - return -1; - } - output_desc = pdes[WRITE_PORT]; - last_pipe_input = pdes[READ_PORT]; - } - else - { - /* Last process. */ - output_desc = STDOUT_FILE_NO; - last_pipe_input = STDIN_FILE_NO; - } - - /* Fork a subprocess; wait and retry if it fails. */ - sleep_interval = 1; - pid = -1; - for (retries = 0; retries < 4; retries++) - { - pid = fork (); - if (pid >= 0) - break; - sleep (sleep_interval); - sleep_interval *= 2; - } - - switch (pid) - { - case -1: - *errmsg_fmt = "fork"; - *errmsg_arg = NULL; - return -1; - - case 0: /* child */ - /* Move the input and output pipes into place, if necessary. */ - if (input_desc != STDIN_FILE_NO) - { - close (STDIN_FILE_NO); - dup (input_desc); - close (input_desc); - } - if (output_desc != STDOUT_FILE_NO) - { - close (STDOUT_FILE_NO); - dup (output_desc); - close (output_desc); - } - - /* Close the parent's descs that aren't wanted here. */ - if (last_pipe_input != STDIN_FILE_NO) - close (last_pipe_input); - - /* Exec the program. */ - (*func) (program, argv); - - fprintf (stderr, "%s: ", this_pname); - fprintf (stderr, install_error_msg, program); - fprintf (stderr, ": %s\n", xstrerror (errno)); - exit (-1); - /* NOTREACHED */ - return 0; - - default: - /* In the parent, after forking. - Close the descriptors that we made for this child. */ - if (input_desc != STDIN_FILE_NO) - close (input_desc); - if (output_desc != STDOUT_FILE_NO) - close (output_desc); - - /* Return child's process number. */ - return pid; - } -} - -int -pwait (pid, status, flags) - int pid; - int *status; - int flags ATTRIBUTE_UNUSED; -{ - /* ??? Here's an opportunity to canonicalize the values in STATUS. - Needed? */ -#ifdef VMS - pid = waitpid (-1, status, 0); -#else - pid = wait (status); -#endif - return pid; -} - -#endif /* ! __MSDOS__ && ! OS2 && ! MPW && ! (_WIN32 && ! _UWIN) */ diff --git a/contrib/binutils/md5.sum b/contrib/binutils/md5.sum deleted file mode 100644 index c62704f..0000000 --- a/contrib/binutils/md5.sum +++ /dev/null @@ -1,3022 +0,0 @@ -0636e73ff0215e8d672dc4c32c317bb3 COPYING -f30a9716ef3762e3467a2f62bf790f0a COPYING.LIB -9cdb15c1e49c0070192d6d1c7a195e7e Makefile.in -07c33a285703b40cd6f93a478e97e03b README -22383b04c0616f41ee4ba51baca24655 bfd/ChangeLog -ceab81aa1f02825092808fdafba0239d bfd/COPYING -5a266b5dba92eea6d99752a62548bb2d bfd/doc/ChangeLog -1e5a6fbefd1aaed4433ace8afce78961 bfd/doc/Makefile.am -a464bee4132fb2fa44c4d2e46b58a754 bfd/doc/Makefile.in -0fbe144d8d1782e0379db812371c6a57 bfd/doc/aoutx.texi -6f34186ad28a5b230efc088a709560de bfd/doc/archive.texi -f98e3a1458953a5a6fae44a5c5f75e30 bfd/doc/archures.texi -84be077fe0d16ded1d48b6bd4602f737 bfd/doc/bfd.info -a31bdf4569c4f1cd2745113b3083aa30 bfd/doc/bfd.info-1 -6911c8229b2daa3efa2ce01bd699c793 bfd/doc/bfd.info-2 -efa0b7d03876abc3e57a529aa5b43048 bfd/doc/bfd.info-3 -39bdefc46b786b1663d0b84f64fcf04f bfd/doc/bfd.info-4 -b2c4637dbb3c0690b75e900477fa1224 bfd/doc/bfd.info-5 -33ed65a4ba35b35445e5684b8454a0b9 bfd/doc/bfd.info-6 -ba54c1f2d34777c4624608c8cd032ade bfd/doc/bfd.info-7 -0b6e6b0217a3682a89b784120d6c6912 bfd/doc/bfd.texinfo -bf1f24c962732c18cedacc546e577d38 bfd/doc/bfdint.texi -8b6ecc6029ed69110c2fd06605bbb028 bfd/doc/bfdsumm.texi -aeb854f56071a92ed682ea3a47ef412e bfd/doc/bfdt.texi -a08da988e834eaa44ce036daed384f3f bfd/doc/cache.texi -4e6650cba5f9d8f2bc248e7edfe2b166 bfd/doc/chew.c -9b20193a1b085b49ad22e22a94d7eade bfd/doc/coffcode.texi -99105e514872b3e0f5eadbc9844efeed bfd/doc/core.texi -e67d8b07516154c4ddbee2e3bab3d75e bfd/doc/doc.str -c60b298f07f5a175f2325d48bd009bdb bfd/doc/elf.texi -d41d8cd98f00b204e9800998ecf8427e bfd/doc/elfcode.texi -4e84142a7f35ea897af65f69d33fbae5 bfd/doc/format.texi -1d846f321c1f04f609386d3c31201c93 bfd/doc/hash.texi -7ac9a36b8a72594048188cd4ee5012dc bfd/doc/init.texi -e17fcdf3ea8e298f1327ed8c4649a156 bfd/doc/libbfd.texi -6f212b00766abadea5b686c91c024f16 bfd/doc/linker.texi -5fa24958e8a60b2f879af658e615ccc0 bfd/doc/makefile.vms -75adee5262cfe18e955d31dcec3d9a54 bfd/doc/opncls.texi -5bf597a23995b21bfaefa45638e33df3 bfd/doc/proto.str -6f8560b2e86ac189a40bce16c927dcdb bfd/doc/reloc.texi -81e47720738cbb4c3361b092baf90841 bfd/doc/section.texi -fd78f14948d36f7fae45d29db7b0d521 bfd/doc/syms.texi -d193493718f22e2de122b05b741f660b bfd/doc/targets.texi -f7f4648407c03c8d7ecdac1e9b3c267a bfd/po/Make-in -445a1c3ee4b5467304d3568fc54a9530 bfd/po/bfd.pot -6aaeff367ac449364787e94b6db53183 bfd/ChangeLog-9193 -78e72a396e9d529dc2f9e3f6c0eb7efb bfd/ChangeLog-9495 -45851bb85b21afd2c2247c5bd531eda0 bfd/ChangeLog-9697 -3a8b2876879b53a8f247a03416527a48 bfd/ChangeLog-9899 -d618facc3e8ce8bf3d02ba452e1be6ab bfd/MAINTAINERS -cac2c8b510bd39ae04fe5bfce40a197e bfd/Makefile.am -d99c8cebc58f57cc7982b4755bfcb6c5 bfd/Makefile.in -6455e3c85b31e588ecb75f7d3c945c8d bfd/PORTING -11627ef87a2a20a3326b87602d051620 bfd/README -cd26654c6eb30680694867e434e40044 bfd/TODO -fa9dc5a90d06b56e4fc7388caa0936f2 bfd/acinclude.m4 -3d436bc3696617e5f5539e46fbb81763 bfd/aclocal.m4 -783909cb3ba12056ddfd113362c66b8f bfd/aix386-core.c -15d641f38a61d43e9540e89296e67321 bfd/aout-adobe.c -d56d591b9a3938cd12de14ca63863c47 bfd/aout-arm.c -e00ccede7e9e61f87ad5d8b67810817b bfd/aout-cris.c -d80798e7e80396610c9817724df3d0fc bfd/aout-encap.c -0bb2732a15a0255366389fa13f5034b8 bfd/aout-ns32k.c -d4ee6f5c992ea87510be7b202fc06dfb bfd/aout-sparcle.c -2f8b4091d064635ae41681ee597078d0 bfd/aout-target.h -3e051d26fb5cbdd0c8530d67a5a829ad bfd/aout-tic30.c -c2fa21aea08313dffcc9b4a2a3e9ca5b bfd/aout0.c -710ff75a0a234773691c069654dd8ba6 bfd/aout32.c -cae169ce11deb6f450104c569c23c853 bfd/aout64.c -4a67efea73c2bf40983f1570607e10de bfd/aoutf1.h -2e0b7e96647fd0d8a75c730fc92bd7ea bfd/aoutx.h -e9c89491cabfaf3db12368e423003172 bfd/archive.c -ed85bcca32de659b4ac834648c69e47a bfd/archures.c -43473bfc2577fc75e330907ad43b810d bfd/armnetbsd.c -68fc30620cce0b416e21fc8bf9ffb66d bfd/bfd-in.h -d101e9977294c79488c7038e11bb8872 bfd/bfd-in2.h -1ec8f01cd36a0410d6a358c13450d32c bfd/bfd.c -43ab9de01b31034b63b1e34e58e171bf bfd/binary.c -5b0964ce2bef841eca1cc28ac170b340 bfd/bout.c -794d989c69536eac1b969452a240c617 bfd/cache.c -6d3c1b378bc7ed685664fe6eca297523 bfd/cf-i386lynx.c -545c111611d3dddaae8c666293aac89b bfd/cf-m68klynx.c -09a8617f3c790897c5ac230aa7c9e683 bfd/cf-sparclynx.c -ecf07e87f41eacfbb3f69e959b67986f bfd/cisco-core.c -06ecc8e343ca4331ab10c8f00a9df323 bfd/coff-a29k.c -2af31e3d92988fb31c0970a686aa7960 bfd/coff-alpha.c -be66609cf0885355395701084da2a073 bfd/coff-apollo.c -25815e411716c71b2e39e46996716db5 bfd/coff-arm.c -04d8d5fe37fd8bdbf2c70031ff92db80 bfd/coff-aux.c -57df3015110d34f4a343941c45f60577 bfd/coff-go32.c -3546fff401b9a26bcd4121820ea52797 bfd/coff-h8300.c -6e844c7259f2b47eeb578984f8b06b7a bfd/coff-h8500.c -edc1a2a2a4106ddbe929545af6898e31 bfd/coff-i386.c -eedf5424ec64783efbb545eb930fbd8e bfd/coff-i860.c -f03155ea586d01ced8c85c43ec93dc9f bfd/coff-i960.c -eae36e1c87fce17a42f52b56f71d1841 bfd/coff-ia64.c -80ff3a9c87e1335f5fcd991a398c159f bfd/coff-m68k.c -646163dbbe28724f933cc5dff8d6b522 bfd/coff-m88k.c -9fd04d7b0c69cd43a51a42e4cac313e3 bfd/coff-mcore.c -85217ef58e511dbf42d4b007f8f8e624 bfd/coff-mips.c -0fe98f356a19d05611fa133c217e77e5 bfd/coff-pmac.c -b31637614abfd34b5e72ad0f76f6418c bfd/coff-ppc.c -92197be7dfa58b4f3c079ea0e91c165b bfd/coff-rs6000.c -14096c1501e38762f71ecc48819cc389 bfd/coff-sh.c -56dadcdfef723b9fd53ecc9a501f616f bfd/coff-sparc.c -ff09554abd281030f46ccc417c403aa9 bfd/coff-stgo32.c -0a6bcb90289a5f62cb39fb0ec0858560 bfd/coff-svm68k.c -eddc8ea37292e1e57f26435d884e432b bfd/coff-tic30.c -e6300d33022fe5164ebb75d09c20fabb bfd/coff-tic54x.c -015b6a9faba6e0ee871d1c3e751c4261 bfd/coff-tic80.c -f8c6308a039c92faded1d165112668a2 bfd/coff-u68k.c -59a6770435f62b0214de775a03bf4e9c bfd/coff-w65.c -d958f107aae4a2592d9bbc57e2fc50c5 bfd/coff-we32k.c -81a2479479af147514f6cbe7ca941e07 bfd/coff-z8k.c -b599fc0cbd45a2d9cb95845f9802ba28 bfd/coff64-rs6000.c -d4e3ce939d94c50f67c16ba80bbd809f bfd/coffcode.h -3029424ada4af130ef96b8e1d7a99a53 bfd/coffgen.c -94a1415b45d3f1ca4c1cbd2cb591f62d bfd/cofflink.c -c81791ff3f60009e8d28464b6c53c396 bfd/coffswap.h -1d6832ab0a312bf399ac892d9666ef25 bfd/config.bfd -2ebfc42d5d2a4668d364f1b54968b4bc bfd/config.in -d1292a46d15e8d2b2b9c0fc4f837e375 bfd/configure -a8485b69f68d81f4ef2f29b51bb36d85 bfd/configure.com -da932a956ba7ad830b729bafd4af4644 bfd/configure.host -12427c9975895d3dfc3cfa7724e630bc bfd/configure.in -13256bb517cdf3f1b4b04eaabc8a4490 bfd/corefile.c -6bc9b90664a2ebdf2b85f19dce0b7f11 bfd/cpu-a29k.c -f93b02f976ea91934c4118be4ed019d4 bfd/cpu-alpha.c -ebc8e4333cf21216de587d22524c9f57 bfd/cpu-arc.c -2ac57d0ff930768b2fa927123e660ec9 bfd/cpu-arm.c -9b9349ab23aa88786581dc0734f31316 bfd/cpu-avr.c -89de8746c4102f5b0b89ff0b19314d7b bfd/cpu-cris.c -6c476a3781d45cdca390650b9273d3ed bfd/cpu-d10v.c -7a7d89b109710f951f825992832fb422 bfd/cpu-d30v.c -fe25690c8c53442b507f5247c9635748 bfd/cpu-fr30.c -567c27d0eb1ca67f1767099379a5957f bfd/cpu-h8300.c -2b2928d3eba5ec4e99916940f24319b5 bfd/cpu-h8500.c -5e942a325f1b1a2e50767f070ce3895c bfd/cpu-hppa.c -5020c76b76859038dd5a92a46647a667 bfd/cpu-i370.c -03868248f282503ee1ddc86c81d77804 bfd/cpu-i386.c -b6d0fbb65c82465573f28353a930b3b6 bfd/cpu-i860.c -42d1e5cfdae1ac51322e21ac410d7bc9 bfd/cpu-i960.c -b7bffd30c0e7b6134a923b1be64ece2e bfd/cpu-ia64-opc.c -2e48697f67575deb45fb727619267da3 bfd/cpu-ia64.c -cdbfa4a9703bf5bfca24f4b7d6bc49a7 bfd/cpu-m10200.c -3dcc6de8db1ffd6408ad3f3dd080b0d3 bfd/cpu-m10300.c -4b5332540a2a4d907dd2d0d6552b4f2f bfd/cpu-m32r.c -0ff542774da1203f6f6496971e8f33b8 bfd/cpu-m68hc11.c -5f6585a0783899916bc3bd9ce42c0624 bfd/cpu-m68hc12.c -431570536021941e2fb8658707a8deba bfd/cpu-m68k.c -480b3bebf9d0b948bc3d51c23fbd511f bfd/cpu-m88k.c -ecc303dc3afabbc076d866c4b1d40191 bfd/cpu-mcore.c -84aedb91a48659311061f3779e1cc5b2 bfd/cpu-mips.c -a0985008fc628157c9b27afceb9fa5fb bfd/cpu-ns32k.c -57fd58bea31545e419d39485059294a4 bfd/cpu-pj.c -21b3055e3b8cca8b2fa65ea72c010fbf bfd/cpu-powerpc.c -2634d322a7c1b737c5ba95d727e70d5c bfd/cpu-rs6000.c -76591b09ebf820167a73bee3d4f8b608 bfd/cpu-sh.c -6c1f0f9816581e6654cfb4476ec51386 bfd/cpu-sparc.c -4a7876d7cfd8a37c9e37f95d0968e7b4 bfd/cpu-tic30.c -b43f6e6ead72cff7ff28c87cec93a33a bfd/cpu-tic54x.c -424e7a355ca4b115f657609a91ade54e bfd/cpu-tic80.c -6d0acf764ac828e6db63a074a54b80ba bfd/cpu-v850.c -722f3f2dceee71c5eae9ab6d9a12e4a2 bfd/cpu-vax.c -42b04e46e5c22d8231df9062c48f9cf8 bfd/cpu-w65.c -3d3a88c1679b541231b65d10b197595c bfd/cpu-we32k.c -17738f4235390683e20471a7a52ff886 bfd/cpu-z8k.c -bf7c79bca2a5503d8e5a08eb2093e354 bfd/demo64.c -325284c2aa7c21d58bf3592f16147525 bfd/dep-in.sed -66ddc5e71a123f88fae4b649913a3625 bfd/dwarf1.c -8e226ff61ec8397b649fcea23d18c5e6 bfd/dwarf2.c -2bd82ca961cf8804c71a8a0f9418612d bfd/ecoff.c -bb90a452e36b92549e623ae4b11b71b3 bfd/ecofflink.c -338f536d95996bf70af288e87e2661bf bfd/ecoffswap.h -35a5d5aa67cdcb354a57872bd6abf5ab bfd/efi-app-ia32.c -e11d2ca6f1bb770ed54aa40386f69b6b bfd/efi-app-ia64.c -069cfcb9e552adb039a5e7f8f54bf045 bfd/elf-bfd.h -a45567b7ed9963c8917942cfb177f137 bfd/elf-hppa.h -dea405a2cadc109a396e598e426782e3 bfd/elf-m10200.c -b0bf972d5ef56f0c349e552cf6225116 bfd/elf-m10300.c -7557a9d743f544179e1914eafb71ba2e bfd/elf.c -c612153791413796ae7b0afe055e345d bfd/elf32-arc.c -8107b55913a0bf1fe46d8ceed7ae71bf bfd/elf32-arm.h -0ff7faa86372c71faaba9df3828878cc bfd/elf32-avr.c -36378f4202010b3f3b89fd679a49320e bfd/elf32-cris.c -c885ba8e2901116ce03d2b3dccac4e89 bfd/elf32-d10v.c -0235362bfd052c523c133bf570acbd53 bfd/elf32-d30v.c -49faab1462b330c4c49dbe7c9d180eaf bfd/elf32-fr30.c -e8040020c66e66a42fd98d2bc855e805 bfd/elf32-gen.c -3ee4163b4b9d0c3b7a164627c08771c8 bfd/elf32-hppa.c -b7922397f8a9f48d5a4fc64833db13f9 bfd/elf32-hppa.h -f23b710d855b7173334c6718bf6cd688 bfd/elf32-i370.c -90cf2ef15a659400e8feb6645a367f6a bfd/elf32-i386.c -d644f126ec840265005aeb71f67906e7 bfd/elf32-i860.c -95d5d92e7306b53ea5ab95c62e2b5ea1 bfd/elf32-i960.c -bef5efb28c6db1170c54e9fd3497aeee bfd/elf32-m32r.c -3ac813e93933b49eb51dc510faff890b bfd/elf32-m68hc11.c -ebbf73fbb693283520892daf4eaed2de bfd/elf32-m68hc12.c -84b69778a652d2cfc29bcbf5d82d33af bfd/elf32-m68k.c -6d08a2b4a53db400e322f8f712aa9498 bfd/elf32-m88k.c -1f60d815efdef6aeaa046f8b354f53e4 bfd/elf32-mcore.c -4fbbadc82c574345b50e8ce7a7c46cbc bfd/elf32-mips.c -b3684e979f1de64ee10aa23e5685c5c2 bfd/elf32-pj.c -17c6ae4e2299f25c786a18af88639931 bfd/elf32-ppc.c -18f44608c596c17f9b986a18a3c9fa1e bfd/elf32-sh-lin.c -177d3fec0eaa269a02d1d00174ffd176 bfd/elf32-sh.c -b4b4859eb5d5c1c85481a34897fc1cda bfd/elf32-sparc.c -f73cf274c056492df2771950064a22a9 bfd/elf32-v850.c -ed57bd460ee2d4a61a5c445f280f295c bfd/elf32.c -ab7d515fdfd6173798101dd1247c38e4 bfd/elf64-alpha.c -7d66675b4fb106331426ca0775a0dd71 bfd/elf64-gen.c -dfe015d5db4e49f664194f73f3bd3aa6 bfd/elf64-hppa.c -8d4af471848e82a40a426088ad312988 bfd/elf64-hppa.h -fdeb99876d995a5113705d365c39882f bfd/elf64-mips.c -805e4b8c3b808a837780d88677b2b8d8 bfd/elf64-sparc.c -51948652723cb7cbdc5bf48f68972960 bfd/elf64-x86-64.c -0df4bff9f99908d451625f14be3dc667 bfd/elf64.c -04c179c481f73ef38f4fde45099ea774 bfd/elfarm-nabi.c -7a2f68e293672a469707ee7247ca431f bfd/elfarm-oabi.c -1c857bcc6db894788e6d9612d9190fcd bfd/elfcode.h -a179dd23bcf17071bcd156e30739e502 bfd/elfcore.h -4665db235c5fc322fe645ec556a02351 bfd/elflink.c -eec699dcafd99021dcd6ca470b97bfcb bfd/elflink.h -ee628b92cd241097a81fd761ecfe709f bfd/elfxx-ia64.c -0067bc443dde2afdfdcfa15fb2107267 bfd/elfxx-target.h -5f9b71e52009091cb901280cbe42283c bfd/epoc-pe-arm.c -c9f006f05a9b9f4d6be5fa84dcad8b6a bfd/epoc-pei-arm.c -00882a27abee3c09285429e99d2872ee bfd/format.c -4498092435cf035affd5b3f0d859f7f1 bfd/freebsd.h -c16189d94fa43e845e6b066e6bd29401 bfd/gen-aout.c -ee6fc742a96faf09cbe76a5b8933d3c4 bfd/genlink.h -663a6979bd331c91d1385445edeca7b0 bfd/go32stub.h -6e40031d51114640cfeba4f70e8fce2d bfd/hash.c -d231e6f23f8ca89aa2914992a30a7439 bfd/host-aout.c -4967093aecdbcaebab4be47ad87369f0 bfd/hp300bsd.c -23f63c6bf8c8a673de96d7400861f16b bfd/hp300hpux.c -5cfacfdd3fde9b8c36cbec0486280982 bfd/hppabsd-core.c -035696490716fd55aa20a97a0137f622 bfd/hpux-core.c -42b78f2024c6114d60dce39873229d91 bfd/i386aout.c -f9e0718ca8ae927a262a15b909ca38ad bfd/i386bsd.c -ab28a73ed28b2cb083c882f194d8e590 bfd/i386dynix.c -78373f6cb8c37a9bca0681d2a20af1fb bfd/i386freebsd.c -735a4d6ae9285e257a8cdd64b0ead47a bfd/i386linux.c -4209c991c4f25fb8eb32a8f2437f8292 bfd/i386lynx.c -b90ee8151f8b7c972b6dd46d6beede62 bfd/i386mach3.c -0ce260445c167060070abf30a9e53c70 bfd/i386msdos.c -cb70bc2c9f165797e7bdd0999f3abe31 bfd/i386netbsd.c -ab3df517926791ecae7ca2156c959cb3 bfd/i386os9k.c -bcbeff36cc77a574f222cabed9cf99fd bfd/ieee.c -38785bca5642dd3180e2fad821cedd64 bfd/ihex.c -35b7f1acea0a7c53f6785b40d6970b93 bfd/init.c -dbacd89b0524dc23409add426b7472c8 bfd/irix-core.c -00338a689deaa57875ec90cc111c41f0 bfd/libaout.h -d168900c72cfeaf166dafd27860da0c2 bfd/libbfd-in.h -54fd88f9cf5efec9f04566762600d19a bfd/libbfd.c -426446ce4e817753d7424ef4a42e0ea2 bfd/libbfd.h -670240432b1392be37be4e295d43b03b bfd/libcoff-in.h -c00c38f574930e065d00ee76b5b4b6a8 bfd/libcoff.h -dec4128d1fedb44090e144ceff634fd9 bfd/libecoff.h -714e36507b340c549ba044a151edbdb8 bfd/libhppa.h -809c3ca7fcfbcb52a7e89dbb7d3e3201 bfd/libieee.h -71aaf625a223bf8edb9cb1426fa0e575 bfd/libnlm.h -85a8008401af9b2ba92de57c32eee942 bfd/liboasys.h -1ee2ef5ed0cc707ef280e29d5e7d3c3b bfd/libpei.h -c71ee68d6a6055f1b6775ff042e4c300 bfd/linker.c -17e42ae480674d8ab750a635c250225e bfd/lynx-core.c -837d4132caf5e4cb009d65b614bf5ddc bfd/m68k4knetbsd.c -ef9f1794858f2a82cf432f809297307b bfd/m68klinux.c -c7a2b0353c8a2b2796a66ce71991d2e7 bfd/m68klynx.c -c6fc3e1de6dc74acd4945b2190587398 bfd/m68knetbsd.c -32f14321dcbc5b8eda9a2510e3d906af bfd/m88kmach3.c -5de4da6a9169effb512e6ba4d014d420 bfd/makefile.vms -4755d408c8274e1ecccf6218928dcf14 bfd/mipsbsd.c -5971cd61d7c10702978519aa5ed41474 bfd/mpw-config.in -85bd791a2ac9c9d7c2bea1932665d568 bfd/mpw-make.sed -ffdf9f0b0e709d01320c67cbf89eb61a bfd/netbsd-core.c -08197a4e2682c16a478d1d40d26c3ce7 bfd/netbsd.h -7bea89213da645698442c08f787b5ef1 bfd/newsos3.c -5b5a6b2076f5d451f84fbc5e5593df79 bfd/nlm-target.h -3fe07db0117ce532feafa057cd418c00 bfd/nlm.c -6e68f62fb373e47b3b0483f78f68a61d bfd/nlm32-alpha.c -3cc80747d16f524a1fab743e6f4607cd bfd/nlm32-i386.c -67161ce31c23459c26291b06c5571132 bfd/nlm32-ppc.c -62934679d489e139b65d6474d4b85e12 bfd/nlm32-sparc.c -ad09e68167b48df24f238e874a31a152 bfd/nlm32.c -7d6920efa240ddfe625a9d076cd6510e bfd/nlm64.c -a37d20d7c5f95eac0ba8e72ddd34157c bfd/nlmcode.h -651e70e9dc3e8ab81ac750d642be169f bfd/nlmswap.h -8e9c830cacb3843634b4438619c73365 bfd/ns32k.h -9d9d06b881cde8a6f76df36b0478fd03 bfd/ns32knetbsd.c -603c5e4485d4073f712bde82f05c3ab1 bfd/oasys.c -d19472d4764ea44d34f0aa1ae28f8ea1 bfd/opncls.c -286a3a9d629da6889f1bd0222f046dd2 bfd/osf-core.c -359181d31e0067bb155f3130f09014b6 bfd/pc532-mach.c -28eb753042c518eb7613dc0c07a9d712 bfd/pe-arm.c -46dc4c0e41d9ac58d901ba24bf87ec58 bfd/pe-i386.c -eac157e8749a4d566f023fc73ad2701b bfd/pe-mcore.c -10af86983af7f89f498269be562242dc bfd/pe-mips.c -2408372ef3e1635e1f21849c2df91516 bfd/pe-ppc.c -8a9f5341f8b811ff4c9fefafa89a6f58 bfd/pe-sh.c -b1211436c28e181afcc8ff2ecf88cdef bfd/peXXigen.c -9631d64e8b1f1f63001359dd94506a91 bfd/pei-arm.c -351655074548989187fe875754b59a71 bfd/pei-i386.c -dbd6eb2c16f6c94bb0d3af6970467b5c bfd/pei-mcore.c -ea8a74b5980841010a185ebd539e874f bfd/pei-mips.c -f15a63befa27efcdbcd3711ecddd89a2 bfd/pei-ppc.c -46016926e380a707142c8078f62dfb64 bfd/pei-sh.c -c6ba7bb0aee2254c824408f4ebb1bafe bfd/peicode.h -135fcf4f350b6df18bc13667f0877ddd bfd/ppcboot.c -2646e6098d56703b47e5dd24f142f9f9 bfd/ptrace-core.c -bc3a5994f67ded8dd965a8159c3e04f5 bfd/reloc.c -1429ff69337a27fc5e5947c011bacf7a bfd/reloc16.c -d05920c33c8e35c43e6b22ff14b165e3 bfd/riscix.c -0d2c4a7c00dc63b2739abc22c82cfdf1 bfd/rs6000-core.c -98fb2a13f09a7833c9a8cb6d998d55b9 bfd/sco5-core.c -a80fa7325ce9c43ab3c9df9eb86a4e53 bfd/section.c -946a61fb3971a2703997a3e24da9efaf bfd/som.c -f4cab5ccf3d2f6c08f1a0665bd9a9a3a bfd/som.h -bf0c4c812e4319f9fc2891c1ddd22524 bfd/sparclinux.c -795fae048517419029a27b49302244ed bfd/sparclynx.c -ea009eea5d4bd499cfcc6ec25ff8d083 bfd/sparcnetbsd.c -9c5d025db2c856faa1cde13845fe0d6b bfd/srec.c -891289f18ef687556cab8f090331e3fe bfd/stab-syms.c -05ff64098a17cc71f4e623323c2262d3 bfd/stabs.c -1ded054093de910d9786c62bc4fe8cc6 bfd/stamp-h.in -5003da336bebe34495f3eb23f11e8530 bfd/sunos.c -ca78ceb2375111f455986ce25f607e87 bfd/syms.c -bcc86dba28f942df39328408dde24d01 bfd/sysdep.h -d143a64c16594367d7b4034951a1d553 bfd/targets.c -26dac42ee68d1de97152743dd098bd83 bfd/targmatch.sed -7c96f19a6c01b1b4704c8f7915c46a19 bfd/tekhex.c -6aeb10d91a1614ef27dfed54c94ecba8 bfd/trad-core.c -56c006a80866e026335d4db420be7516 bfd/vaxnetbsd.c -70319dc6d45749efd52f9d1393f1688c bfd/versados.c -62552477c5cfcc583cbfdf6da1be2cc6 bfd/vms-gsd.c -03148dc2fdb5f8b2fa0378995908c3ec bfd/vms-hdr.c -9e245904fabf6630c8137c37a2908027 bfd/vms-misc.c -cfe21991d8cccc770d34b0dfefa351fe bfd/vms-tir.c -a953dee93ee3269e5a0d2f0eddc8517a bfd/vms.c -ee46c5eaac647cd1d1685c506202d18e bfd/vms.h -4772c3a29f7fcc7d9c10f1e42fa14cf5 bfd/xcoff-target.h -71e5116d9e043a87784b978c63b82b2d bfd/xcofflink.c -74b9e8377ce5ef7f2ad8914ad5e1dd41 bfd/hosts/alphalinux.h -6626deeac79edaa6eef30082a4fd9dd4 bfd/hosts/alphavms.h -70e1a59995604c3b804469fa27b92d94 bfd/hosts/decstation.h -7f90b6f7c21bcc67525386bdb9399540 bfd/hosts/delta68.h -5a75f0a8518cdf994c6837632317650a bfd/hosts/dpx2.h -6d9ebd0f91f9085690638821e2ce67e0 bfd/hosts/hp300bsd.h -50735617194ee653f1cf99af40a7dbc9 bfd/hosts/i386bsd.h -c3d90b1a06731c814d89371f91583bb9 bfd/hosts/i386linux.h -90fa9751fedd9623f399b8bcd6a646b3 bfd/hosts/i386mach3.h -09a90ebd4e56bce95e72a93c6274997e bfd/hosts/i386sco.h -1d13cbc7201d1b35dfd2353027122d33 bfd/hosts/i860mach3.h -779197139aaf874e61ef9339cdf7df30 bfd/hosts/m68kaux.h -c40f7966cbdb0fac0b4366c9c61eac06 bfd/hosts/m68klinux.h -2563c4d1fef8234619b1c2007dfdaf90 bfd/hosts/m88kmach3.h -8fbd4bfd38ea85aeedac03e1962242dc bfd/hosts/mipsbsd.h -f61dc4a9a9a665ab9fba6861214bdea3 bfd/hosts/mipsmach3.h -d4e865701ae3a5149a05ff92b2542e94 bfd/hosts/news-mips.h -2a46cd81291f56275932a241e022f567 bfd/hosts/news.h -21af1454d516fbfd996f6d6bc3b8db9b bfd/hosts/pc532mach.h -2440e7cdd4e85ead6516650e1329bd0f bfd/hosts/riscos.h -31fe7c1b8aaaf0174c5fe2ef83298ca9 bfd/hosts/symmetry.h -627775bbea4f1d59b97edfa80e81a259 bfd/hosts/tahoe.h -1214020ec5befbef1dda50900deb4740 bfd/hosts/vaxbsd.h -9b476271b3bc5815a37f6b887c092090 bfd/hosts/vaxult.h -9b476271b3bc5815a37f6b887c092090 bfd/hosts/vaxult2.h -9fd8ff8120f96817fe7b034b4ed9b4f5 binutils/po/POTFILES.in -bfb5c178c2404196ab54d7532a61e3d4 binutils/po/Make-in -0c3e2088c29f5140c34d4c1a4cf50efb binutils/po/binutils.pot -327a79cbc083ebf99b8c70353167405b binutils/ChangeLog -2472bb0eaaa74c1313fa692818c05de1 binutils/ChangeLog-9197 -14304b5ca4a2273914dfcad6be18564e binutils/ChangeLog-9899 -13eece6d011b883aa4547d6456769697 binutils/MAINTAINERS -f4074cf64ffef103687013a2e96d6fd0 binutils/Makefile.am -0ceae7f8e4364ac489da69717c9bfea0 binutils/Makefile.in -abacc206a632053405f9da3d19f357c0 binutils/NEWS -d3c110ce10986acf5652bcede3ba5d15 binutils/README -949ae831863e3d2d546a13e90598af7d binutils/acinclude.m4 -c76743519e57c546f30f57013f446bec binutils/aclocal.m4 -c1436a898294a0066903a5104d59658e binutils/addr2line.1 -c1296f6a626273f10323beba4c496201 binutils/addr2line.c -98881d2c88484e6af6d780a96771be58 binutils/ar.1 -a04cdb2cef55746e411d28760663335c binutils/ar.c -ffbb491f2776bf07259287e518ab943e binutils/arlex.c -65306c2e52d8644d8b373eaa39b24062 binutils/arlex.l -ca083bf7f778d5c3abb4dcf85f7fb069 binutils/arparse.c -9f796192da100ab75cc8e8986cf5ec9f binutils/arparse.h -5e234398e134240a685477dd35dfa867 binutils/arparse.y -42e0a4af5d75962dbed3ab8c34b5c3f3 binutils/arsup.c -0bf4eb9b7b9f8964c5d0aea4f501ea70 binutils/arsup.h -f443d4e0d5c81d99f3ca85c213929794 binutils/binutils.info -3d7f73b3f96ca7ba3a1ffb206393592e binutils/binutils.info-1 -519fe824e3b2fbcba9e27c543f16cafb binutils/binutils.info-2 -df7e54f71f2886c89077e97cd576f7ac binutils/binutils.info-3 -4e2cca724195b6b7503bfd507420da3b binutils/binutils.texi -84e127713d45f096f8b6a23cf646e73f binutils/bucomm.c -fb0535da62e6833d2db9abfc40161404 binutils/bucomm.h -6e32645619af004d54c2b09867e2bed8 binutils/budbg.h -0b097861a14f344d75659c82a0329699 binutils/coffdump.c -712cbcb633b810aeca514045f7a091cb binutils/coffgrok.c -727709ba9f525b95a78b7aa3453baffa binutils/coffgrok.h -4e92063f698d7013de0286ef44322816 binutils/config.in -4359fdef33618e0323337df0588c5cc3 binutils/config.texi -ef0db6edcbe0610762e2414a9cfbc8a4 binutils/configure -0df24a539b5dcfb1c9b147d28b80e05d binutils/configure.com -b3a87f9e52b1cc40780b932ba7ea9909 binutils/configure.in -150a0434297702b55b12a72ee3836b4e binutils/cxxfilt.man -bd5c323adf047cfa77d61ab3a1d30948 binutils/debug.c -d067535d0ee0e2dfef7c101ae9ed5afd binutils/debug.h -52960f8f6f672312531d1cdcb4bde2cf binutils/deflex.c -f3bc4c49528dbeb97029c901b2a1cfeb binutils/deflex.l -a5799c90522edb7749356475e2b3c076 binutils/defparse.c -01fa40dc7e4ed75477d60fe6853be93e binutils/defparse.h -4f39891c79936bdfb4f03bb4b5cd1f39 binutils/defparse.y -fb7920a70d8eba8b94fd446da371604e binutils/dep-in.sed -826fb11427b3c2ce4aa0d35d57ebfcdf binutils/dlltool.c -fcd4c7531e0ae0b27cc707d49df82bda binutils/dlltool.h -2d6e186f8e50d1cfd2dbb2c6d77aa25a binutils/dllwrap.c -d7bd6f5d07c781caf5cd1a0b20633900 binutils/filemode.c -321ff0d85aa4e062bb891eba8f971734 binutils/ieee.c -4d04341c680f1136f390abd07d49caef binutils/is-ranlib.c -920b2431a9bafbda1144b22258327b10 binutils/is-strip.c -39ac662d88dea0e279c66fee67cac871 binutils/mac-binutils.r -fb2055ce0e0f73de2e8df95cc40641d9 binutils/makefile.vms-in -f82d9835fa96d421d65a5ea7f5cb5299 binutils/maybe-ranlib.c -aa064dac8c2147d98b05609a47b80ddd binutils/maybe-strip.c -1d9d64c1d1409968c8f722c009b71b32 binutils/mpw-config.in -2ccc0b509ed732287996815f4ec3bb81 binutils/mpw-make.sed -3f9006583fe2a2baee6469944a4d6c06 binutils/nlmconv.1 -d13531ce33278c0b9469db895bb1d7e8 binutils/nlmconv.c -cf949369d105afd57bab40a2101f089b binutils/nlmconv.h -43f2bf49637f73763c155357169d3d6e binutils/nlmheader.c -3426060b7fba0ed0184a410e33bf7fd3 binutils/nlmheader.h -5fd07036b1458259b61aba4be0b68831 binutils/nlmheader.y -216a9371bddca8d4638e129ad21a4337 binutils/nm.1 -59f887c696b56a5fd7c47faa4e031d81 binutils/nm.c -b3c63de023675571764212902c24ee77 binutils/not-ranlib.c -7b521296e81503ee1a37cc77039dc203 binutils/not-strip.c -30b1bb7f3abcfa73a3c6b4b059329712 binutils/objcopy.1 -fb8a2b8519754c33584893536f1c9600 binutils/objcopy.c -542a5564ba0a8082d59cdcdc8151c665 binutils/objdump.1 -8c9fef7b45cd7432093fbf89466a225f binutils/objdump.c -f9e36e9e0cd55ab620e09fdebeca42cb binutils/prdbg.c -020c2cec49a443a1b1865f95077e044e binutils/ranlib.1 -bec38036243f76c13fa87b092c0292e4 binutils/ranlib.sh -352580333a5a5446ee5846eda6ed72e7 binutils/rclex.c -d482dbfc392432a79f29b921679073c2 binutils/rclex.l -218b925653d29f7fa28c0f4a4a7f7423 binutils/rcparse.c -0bb76c3e578d61500674d6fafb307be3 binutils/rcparse.h -df9b51d3071dfd3be7e34e765bbad589 binutils/rcparse.y -ddd9b9d17599b40e8eb39c954503ee6b binutils/rdcoff.c -c13b08d97206def27a7f8612f0b73e89 binutils/rddbg.c -32295c33f18819cfe0d40d7f75213dc2 binutils/readelf.c -301dda393ce6198dab5c0fd289e3d333 binutils/rename.c -d128d999bb8a16ffc6c6a8d10eb05a41 binutils/resbin.c -616cbfbe6d9e4a292c807f7fd9b8f993 binutils/rescoff.c -2560f6c6d92efe9cac783ad2ac24e13a binutils/resrc.c -e266faaa14043a879715b85dbf53d48a binutils/resres.c -b62e62e9c7d29e37c5968c1a005f3eae binutils/sanity.sh -e0d20337f2d99c6f1546cc14750c2af7 binutils/size.1 -c74508b4e2d421b3e011e4334742205c binutils/size.c -f56f7d79f8b8754d1270ad6c8e2215ea binutils/srconv.c -7bdd8bcf3f73100f2ba7a7455c04ee39 binutils/stabs.c -1ded054093de910d9786c62bc4fe8cc6 binutils/stamp-h.in -0548ad6ecd51c170effca26be02c225b binutils/strings.1 -b9c4d10fa3fc66eaf6fb3a525957d563 binutils/strings.c -d2c537d036457e8b2a8ec56ea0a37a60 binutils/strip.1 -35812e6671c0dacf4b209aedd62cb242 binutils/sysdump.c -e5df2443c5572a565ab25e875341c257 binutils/sysinfo.c -c872c0449117476453fa1156a4ddd4fe binutils/sysinfo.h -b5558d092a056006f557bde14786e7f3 binutils/sysinfo.y -360e007536fd5fc8211a294bbaa1a8be binutils/syslex.c -58ee0c7157e6cd1f73af7ae76033054b binutils/syslex.l -2a0d9dfb5514c6c076eae77e837c9418 binutils/sysroff.info -bc126ab62a0177393350b365f3a5e40e binutils/unwind-ia64.c -836ad638b88e86bdb20e53e885f778a2 binutils/unwind-ia64.h -ccedd336cd29294e43a17ba0d6e23c52 binutils/version.c -195751181452e4a1a8f04ec25db22e71 binutils/windres.c -6b39b8d57876e2116d6cc9a25d095196 binutils/windres.h -d5e5a7f1ce5f0bfdac6677f94363937b binutils/winduni.c -656d6daadd2719e5d0c7fe398114e95a binutils/winduni.h -33a17a3bd3de007bd19f721d6499f665 binutils/wrstabs.c -34d0ab842ffa4318e8cbe2bba4c565dd binutils/testsuite/binutils-all/bintest.s -769e0d6ed347b047fb2540949475d543 binutils/testsuite/binutils-all/ar.exp -a1f33ff9c6d058fa281146d85da8a7ad binutils/testsuite/binutils-all/objcopy.exp -d58edef3a25f7729b8fa76f61a2c9648 binutils/testsuite/binutils-all/nm.exp -8e5c9079f46f332db8bbe679b64c878b binutils/testsuite/binutils-all/hppa/addendbug.s -d91ecc8b2ba6965842cf206d8144c3e1 binutils/testsuite/binutils-all/hppa/freg.s -4412faac86e3f31dd926f7cca1b34fda binutils/testsuite/binutils-all/hppa/objdump.exp -8c020e9f1b3dd06718965e6a68bee100 binutils/testsuite/binutils-all/objdump.exp -c6a30881e7a8df05c3769f70c797d338 binutils/testsuite/binutils-all/readelf.exp -fd5d39184621cf8c2e7ff6b2404d299d binutils/testsuite/binutils-all/readelf.h -25d9186ef9252a2db8ef03ad11337e1e binutils/testsuite/binutils-all/readelf.r -93a710740488294f2458be7b750ccadb binutils/testsuite/binutils-all/readelf.s -e597a5420641d9d64c21fee25118b7cc binutils/testsuite/binutils-all/readelf.s-64 -b1d2f987e8bc3b99c2f25d3b1ad0ba7d binutils/testsuite/binutils-all/readelf.ss -22c83167f1761586e80d622551da44d3 binutils/testsuite/binutils-all/readelf.ss-64 -04ab5a3452defc08311819709f841b07 binutils/testsuite/binutils-all/readelf.ss-mips -99e8a65be94223ecc838421b47b19c49 binutils/testsuite/binutils-all/readelf.ss-tmips -ea24bec237106a0e7811279341c8ad4c binutils/testsuite/binutils-all/readelf.wi -472ee848e6a70cc6a512a388ca695d58 binutils/testsuite/binutils-all/size.exp -96869108191b6a2bfb097357132aee71 binutils/testsuite/binutils-all/testprog.c -3be37588c17084be375a802b4d40388e binutils/testsuite/ChangeLog -9fdd25912eef439ee83ad374bfc5a271 binutils/testsuite/config/default.exp -332890f8e08b7aa8c60bb35f6065c211 binutils/testsuite/config/hppa.sed -6c8f3fff368112453697522201a340ce binutils/testsuite/lib/utils-lib.exp -bf1e177862ddef9aa6970474ca011825 config/mpw/ChangeLog -43d2a9ca5ff1a5f5acd3390b7b082830 config/mpw/MoveIfChange -d9387d651ddbc91875c97259d0fc35af config/mpw/README -a31a49fd4c06ba2b08ff299cc2cfac0d config/mpw/forward-include -a9ee17c3900e8edf08a3cf209a87cf2d config/mpw/g-mpw-make.sed -df7cf8189011eae6ec32c27a268ebc06 config/mpw/mpw-touch -082758f13e230f38a846e9017ee6025d config/mpw/mpw-true -39980e1a3d29624ec94a6df2dfb8dcd2 config/mpw/null-command -71b670c5a9868b2833972721f73578e0 config/mpw/open-brace -7588b51a118ab73de5d6a3ba0fc1e47f config/mpw/tr-7to8-src -082758f13e230f38a846e9017ee6025d config/mpw/true -02a96b04d8fd1586bfca132bac4e1a4e config/ChangeLog -70c03dac891f6bc7d806b9427b31bc86 config/acinclude.m4 -141167afa246fce5e59bb9e55cfb2fc8 config/mh-a68bsd -2b5476085f7589e173bd81316a7549c2 config/mh-aix386 -57925a69ccb24ae7ca7cf949a07d26d3 config/mh-apollo68 -9b65dc7f50a7134932aa278ac0378703 config/mh-armpic -8d82479feea57715325ee949952ae5e5 config/mh-cxux -ddde55c2eac58773f99aabb2f011e206 config/mh-cygwin -251cf9b667a963075140fcfa616f06da config/mh-decstation -a3dc79b2e3494813c3a0b352d2185c17 config/mh-delta88 -ab6f38194c18de21e5ac0761d0d6352d config/mh-dgux -615158832b3fca3cea2f51053e67590e config/mh-dgux386 -2738c9de2581bc9c2d21f48950b18bec config/mh-djgpp -9b65dc7f50a7134932aa278ac0378703 config/mh-elfalphapic -153649fe7fb621b814baad06a2bf299f config/mh-hp300 -3330f1730b6b4bb70b09ffe2415c74be config/mh-hpux -3330f1730b6b4bb70b09ffe2415c74be config/mh-hpux8 -9b65dc7f50a7134932aa278ac0378703 config/mh-i370pic -740855ebe34cb2d01fba1f1bcb4264cf config/mh-ia64pic -7add3042f79e57cdcb52abf304c26a70 config/mh-interix -25c3bd9e7778c2c5d799fb6f1615be3f config/mh-irix4 -ffaaae454726b7ec67de856093365ec1 config/mh-irix5 -bc99b6de866022c39cde3cc7eda83fe3 config/mh-irix6 -1acb83eaa6a78c587598bd7efc2025d9 config/mh-lynxos -6bace932d30f092a27fba43e01226c04 config/mh-lynxrs6k -740855ebe34cb2d01fba1f1bcb4264cf config/mh-m68kpic -7bb6a9aa44a68e1e71f76cf8b8c2d135 config/mh-mingw32 -44882b0820862d0e134a8e4e5537afce config/mh-ncr3000 -42f074ecc1191e9ebda8e447c4f46713 config/mh-ncrsvr43 -90b19906d7ba40a6e4b83efb959809c7 config/mh-necv4 -21c5c77600fd6fb58f378ef2acf0190c config/mh-openedition -9b65dc7f50a7134932aa278ac0378703 config/mh-papic -9b65dc7f50a7134932aa278ac0378703 config/mh-ppcpic -e263a8fdee36cbc610757f2317da3991 config/mh-riscos -ac3fc3e8d21f9f9fe83c4cbde3890387 config/mh-sco -c502a579b42cb78af2154966343f491f config/mh-solaris -fa84a282ce7cd6876d1eac368a31a368 config/mh-sparcpic -2e3ce1267c492dd862c48b59eab932ac config/mh-sun3 -278ff58db0fc6c75e1cd39ca2ad1acfe config/mh-sysv -a0992273a62d3448fe6ea65a74250899 config/mh-sysv4 -08516ddc97d1ada83d4bd631bd1964be config/mh-sysv5 -e75a559cf75354c524229f480b5f6e7a config/mh-vaxult2 -740855ebe34cb2d01fba1f1bcb4264cf config/mh-x86pic -f80e59daab2815b9faf70f2fe2f0ec2c config/mpw-mh-mpw -f60c118789c383f2548e2f8969513865 config/mt-aix43 -6eee2b9b80994128082ebcfb8285239d config/mt-armpic -96289d06809692c31d71e69c4bedb6d7 config/mt-d30v -6eee2b9b80994128082ebcfb8285239d config/mt-elfalphapic -6eee2b9b80994128082ebcfb8285239d config/mt-i370pic -4d21c96a048f825b25f5ecb7259866ef config/mt-ia64pic -9c9256a473bc2e1204e258e48246cabf config/mt-linux -4d21c96a048f825b25f5ecb7259866ef config/mt-m68kpic -2067ce86494ccb89791fe169eee8c198 config/mt-netware -5aa8f75c6588d513ce199e2e44c206e2 config/mt-ospace -6eee2b9b80994128082ebcfb8285239d config/mt-papic -6eee2b9b80994128082ebcfb8285239d config/mt-ppcpic -05fc6527f7fe0692e7bd51c24868c2a3 config/mt-sparcpic -4c029f499ccf3ba2561603b2a113178e config/mt-v810 -12b3030d3d59526c374c15af4f5944dd config/mt-wince -4d21c96a048f825b25f5ecb7259866ef config/mt-x86pic -8f1f7dafc590b26d22f3e597284f25b9 config-ml.in -e0d75b8ca062b8ec4eebf664aab1644a config.guess -306d551fd358a6363d2446486f1b8821 config.if -3a43bdabca8b9eca92530bb3ea2eeb24 config.sub -2523c7ca068da11d38e06af6347abce9 configure -0473df9cb9367e9c8a77c289a6f5f764 configure.in -e28364a0df955105a7f6898cc8ca366e etc/Makefile.in -213e80930c0be010bb250612af54775f etc/configure -e9b828169fe54bf6414ec1f4376af077 etc/configure.in -27fb25be358ff0eec0a44ac86f3872ee etc/standards.texi -fc8ef2abb184ab45779484c10d4d8d8f etc/make-stds.texi -a76594be1e11898d26d9bdf1f54af07b etc/standards.info -5ee7bcaad637e7010a2581db7927a16a etc/configure.texi -193f671ff984e81653741fa7c212a232 etc/configure.info -1a911cd9b8902678f64b5e33d457a8bd etc/configure.info-1 -ca127e48a13744e2fff22df3b893264e etc/configure.info-2 -1686cccb56366de0a01e848bfbfd9f22 etc/configure.info-3 -a20b40a0a5d3282f6a97c627be1e38c6 etc/configbuild.ein -570746cd93c4dae506cf2a6153a2a1b3 etc/configbuild.fig -f97ac2d5e05edeb335b73f8b6beef581 etc/configbuild.jin -b2851bb6d77822adc89ffc6d323b5fea etc/configbuild.tin -e67b330b1ad623f1bd3850483cd4666f etc/configdev.ein -c1f7c41d3e596256ab5f5f933a66293f etc/configdev.fig -8e14386548b8da4c5072aa2abea55886 etc/configdev.jin -32fc10cbdbf679bd0ffc8857cf069b43 etc/configdev.tin -e75bd9994061d19f9670d08acbd01eb1 gas/config/aout_gnu.h -a802dbfeda3550bfd22804228399f0c2 gas/config/atof-ieee.c -4027fb83cf42e6199aea0cb2526a06fc gas/config/atof-tahoe.c -14a0f251c1273cce5c62b3a5edfc3dab gas/config/atof-vax.c -09c324e401be218c9f9b18833e2bfd9b gas/config/e-crisaout.c -88c6165199c1aae7bd9c2733ad9a1847 gas/config/e-criself.c -8915ab931627c03103b8ff52bd2060eb gas/config/e-i386aout.c -4592324396b51379efcdefa7b75a17da gas/config/e-i386coff.c -90f70110e875b74bf055abc7f609c4be gas/config/e-i386elf.c -a153ff4dc91266991257426d1a9d7309 gas/config/e-mipsecoff.c -be51facd59d0de4cc60d8b0a64360795 gas/config/e-mipself.c -4f384db2ef30841ca0502269a3e8f438 gas/config/itbl-mips.h -5abd9bcd8f0e5ce25309035cbf3bc0fe gas/config/m68k-parse.h -869147d7bca490ff7f20fbe121715a99 gas/config/m68k-parse.y -0517b56ef366ac53f4921e66d1a85b2b gas/config/m88k-opcode.h -8d517bccecde0b721a58b01a14731bb6 gas/config/obj-aout.c -06b407be57cbacc7ba05787f8072be7d gas/config/obj-aout.h -84532c4badb5b5a414ea7366c240b1f7 gas/config/obj-bout.c -fdc8729ecc7985ac4dc9531bf8ef8e77 gas/config/obj-bout.h -a15d8ba751d3b7dbfb8b378a57fc7fb3 gas/config/obj-coff.c -c8c39016cef6730efd244c450075c988 gas/config/obj-coff.h -6e39bf9284bfa403132fbc486c0058b5 gas/config/obj-ecoff.c -39d1ce7b5d484ca95d660c2a1e4eebd0 gas/config/obj-ecoff.h -5ad09dc220a6763becd6e5916e939354 gas/config/obj-elf.c -34d18bd7dc155d66c4196ab7d06f7240 gas/config/obj-elf.h -fc5244809078292ed69543b590057d60 gas/config/obj-evax.c -409f2700494fb5da88cd17bd13787e30 gas/config/obj-evax.h -1a5fb62914ddd24d361b7b129a038361 gas/config/obj-generic.c -5697e716124f3115e85dea04de9597fc gas/config/obj-generic.h -9e0918da00ab277c95f9a2b9e4f5f29d gas/config/obj-hp300.c -7b4f9af8c88a8fddf18a0b0a2d81b0db gas/config/obj-hp300.h -6bee9b63dc974cdcfd38fc323627c123 gas/config/obj-ieee.c -c3c18ef4a1af26d29718ad6ce33cb4dd gas/config/obj-ieee.h -32d6ee58a1474027c5403a0fae7a9ba4 gas/config/obj-multi.c -9f5bf398a837e7a19947e088a9443b9f gas/config/obj-multi.h -16a236759175a5714c77962a358d3c5c gas/config/obj-som.c -80b8ff6d8f8c6f69b33d1a0275753fe1 gas/config/obj-som.h -8ea02b18794c00460bc81a2b8119739a gas/config/obj-vms.c -92be5fb47ee648292dfb0bc7ff27326b gas/config/obj-vms.h -c1894be92519dd48b0314109f1881012 gas/config/tc-a29k.c -c5139d88aed8bf2b090309497013dd6f gas/config/tc-a29k.h -211e99ec1bb1759368747760c893df82 gas/config/tc-alpha.c -33d0731b8586c060675186d139597c41 gas/config/tc-alpha.h -a8fc2b9440f26a722f34715f08991ba7 gas/config/tc-arc.c -081e35843ad7dcfeb68b50aedcab491e gas/config/tc-arc.h -e15ea2817e89bc3ad3355c2c7207cd87 gas/config/tc-arm.c -c920e78d25bbdd5900958e04709fd4b8 gas/config/tc-arm.h -463b2242e8e491564d5e0e1506bb06de gas/config/tc-avr.c -37d6caa633b2f7901f443b5307e8a905 gas/config/tc-avr.h -00c243430f9f2f60ab15245d6bd15e7e gas/config/tc-cris.c -c201f4750843a1fd322b38f8ed4e6bda gas/config/tc-cris.h -2f9c666879c01e30c44aaf445b1033b5 gas/config/tc-d10v.c -8faf078fa60927d88ed23dbd23ef1a38 gas/config/tc-d10v.h -c08f0392e2dbbddc8f04f0779343f336 gas/config/tc-d30v.c -8b7945ccc65e5da78d3a9fe09c2308e6 gas/config/tc-d30v.h -0ed0301072d2438031d4e222b3d06d57 gas/config/tc-fr30.c -ee4d3a84b465216e750f06b0fcdba621 gas/config/tc-fr30.h -d41d8cd98f00b204e9800998ecf8427e gas/config/tc-generic.c -eec169238b80630136c19235264cb04f gas/config/tc-generic.h -ad92b1751356945284c3450fe0ed00c4 gas/config/tc-h8300.c -801eb9030ae51576454343bceed3f8a4 gas/config/tc-h8300.h -312f280c2f4d500378edd99087c7ff98 gas/config/tc-h8500.c -664c496490b0f88854b345cb940eca9d gas/config/tc-h8500.h -f763378e31a8c10cbb8437e2513b53b5 gas/config/tc-hppa.c -4393890693232f88d07a9e1d76544d0e gas/config/tc-hppa.h -73d71eb5625c8cab823b05718dad8379 gas/config/tc-i370.c -50392712885658244102256d4333dbbb gas/config/tc-i370.h -1287427633324e0b6ef2563288452b55 gas/config/tc-i386.c -0d8b9453c5c2b85fbf52d5d18075bd5e gas/config/tc-i386.h -f8adb51ebafdb40f294def677366a81f gas/config/tc-i860.c -0b60639885f14b9d4262b1b5695e4ddf gas/config/tc-i860.h -cc609a2100c2e89d7c34c9e3a40cc3c1 gas/config/tc-i960.c -f46200f85ff3c2db7a0a88c7834014ce gas/config/tc-i960.h -1ef7e0b07d22b5947cce3237e4c99ead gas/config/tc-ia64.c -55a5ee0b822753196340782ebdb63fb7 gas/config/tc-ia64.h -2c414ce59771fab4925ecdf8d8c0fe68 gas/config/tc-m32r.c -1b6e3bee9d679bdad05dd205bee78995 gas/config/tc-m32r.h -a12bd005331953eec47146cd4b2fcbb3 gas/config/tc-m68851.h -eb109194d0009839d36ba51165ed6082 gas/config/tc-m68hc11.c -a298ed6402724d90e5b8edee560a6a7e gas/config/tc-m68hc11.h -023972affb12beccb32294a9a1908d65 gas/config/tc-m68k.c -20302dc874a9489ce7bb7a38876de1b3 gas/config/tc-m68k.h -6d621a3e526cc0a6d2b657dea4a2305d gas/config/tc-m88k.c -107c3b50693b48561ea3e1f21427f814 gas/config/tc-m88k.h -ef5e629ce116e621dcfdc2f24c9f2511 gas/config/tc-mcore.c -79faecc51abb67e48eac14101fa5f41b gas/config/tc-mcore.h -720b0edaa61cef121c857642cf070877 gas/config/tc-mips.c -f1f594c95b827a8e431f1a7fad5fdca5 gas/config/tc-mips.h -851173367f8b9e7ba049651482357a34 gas/config/tc-mn10200.c -a1d9a4975a26d18367a870bcfd757ad0 gas/config/tc-mn10200.h -15ecdb549363635ad76b2c3a86e700de gas/config/tc-mn10300.c -7f67c8f56a13301960fd818cbbfabcc4 gas/config/tc-mn10300.h -b00eae3c8b6829291b629c31015075e2 gas/config/tc-ns32k.c -2de740c8af5873b4d86571cb87a4278f gas/config/tc-ns32k.h -47f42d9d2b0868e4b8f317101b0c1684 gas/config/tc-pj.c -8dc88fa36c8ae8d4d6dc0dd424b15154 gas/config/tc-pj.h -e53e90d9045ed48820f1b5b07c98bea2 gas/config/tc-ppc.c -801e811b0a3d378913351cdb8556d0c6 gas/config/tc-ppc.h -b9bde6879b21d1fc21732d1c17b243ea gas/config/tc-sh.c -23301ea5ae6486c30131563f56983c4e gas/config/tc-sh.h -2f6a18c71d581798af6ef0148f863c4d gas/config/tc-sparc.c -845af70a42df937b9ebf4c1d19002d75 gas/config/tc-sparc.h -745fe32b81053e3b80ecb325654425ab gas/config/tc-tahoe.c -ffcd4331c7d6d28e97466a66f3620f2b gas/config/tc-tahoe.h -bc08cecd35802bed257d11dc5ee3aa02 gas/config/tc-tic30.c -172636d7d3732eb57c67ead9709d4d96 gas/config/tc-tic30.h -9d9818beb4f8c04429d8442d1624be53 gas/config/tc-tic54x.c -8797523948d01e18fdd637d6dbe36d4d gas/config/tc-tic54x.h -82c9a73a973825d66c344d6e271f4174 gas/config/tc-tic80.c -a8de106e568896428baa8b248f1f7d8f gas/config/tc-tic80.h -dd5e427d8cac9e551d263fddc7144024 gas/config/tc-v850.c -5ce308c35dd719428af4510cb7adde41 gas/config/tc-v850.h -f9107adcd738a440490415bd12bd5db8 gas/config/tc-vax.c -a782b0af9745557989f35bb76a300bc8 gas/config/tc-vax.h -6db1110e7f9a9f839c5bd245aa8b3b34 gas/config/tc-w65.c -7ce6ac4d03348c1102b1d6e4308bf1e2 gas/config/tc-w65.h -3e5bb9333fd37bcbbfc45d3b918e79de gas/config/tc-z8k.c -b985cc503b319a201bc0ddf5a2e9cb23 gas/config/tc-z8k.h -40b4f0d89e0f7a47828f7e6b2eb98cf8 gas/config/te-386bsd.h -0d6f3b4695c8a69980eef0635a4b376b gas/config/te-aux.h -904c7780c93025e1c16bd7facc5eb6d5 gas/config/te-delt88.h -c30935955b6e3e593aec0c121bf741fb gas/config/te-delta.h -47cd21925072d94dd095186c5202b92d gas/config/te-dpx2.h -fbce03dceb71bf68d8c872bbb69b35aa gas/config/te-dynix.h -7e2acd95eb4766b4530cd90d5da12e11 gas/config/te-epoc-pe.h -4215a65e5e9aaf52a39c0277cec05a06 gas/config/te-freebsd.h -9677889ebc4d2d31b7cf1d99bf884883 gas/config/te-generic.h -9c4b72d5db2a3b58fe216e98e5d1604e gas/config/te-go32.h -fdfff2ba26de59e5e34124666bbe255a gas/config/te-hp300.h -e2bdcb851ea04db026cbd75585ce50c7 gas/config/te-hppa.h -ffe54b5f97c4c93a036fcb434b0e2ce3 gas/config/te-hppa64.h -8a89d0db3087edfef6adb3d11e461332 gas/config/te-hppalinux64.h -37ed6767b7669c59a6f01cf229bb2763 gas/config/te-hpux.h -c5c5a24aae2ba252078a1e9aba6f29dc gas/config/te-i386aix.h -48983355f44a1998351bc155fe48f093 gas/config/te-ic960.h -19b403b208d810d952e172e14e5ccc4d gas/config/te-interix.h -4cfb2f20ec1301d37e9ff374e46317ce gas/config/te-linux.h -0525817b2f140459473072028c30da2b gas/config/te-lnews.h -2d77aec1c4985fc5f3a8eee88e95dec7 gas/config/te-lynx.h -36d49af0e764532aaae5a64d2c046790 gas/config/te-mach.h -9f70e9ab23ffcbdddf605e1f7b9479c4 gas/config/te-macos.h -7adae751b97b48a10ca1f8483e539d6b gas/config/te-nbsd.h -42e509551b9c1e76f3a8f4621d2eee03 gas/config/te-nbsd532.h -c34e9c2b58482673113e11fd998598c1 gas/config/te-pc532mach.h -158cb175a491e482d6e0d3412b0bb216 gas/config/te-pe.h -a9cbae48ef62e7a20c33d8a94c576b4b gas/config/te-ppcnw.h -a8a052866cd9c40ef31c0f4eaf7d653f gas/config/te-psos.h -0ff6629cbf363fc1b3d16c4ee4877f1c gas/config/te-riscix.h -4e442b2838e599466e9cc0fa346021fc gas/config/te-sparcaout.h -68cff7532af5d9dc4f8678dbd215506f gas/config/te-sun3.h -589c88a6aa89ffe655b1f8924e13bbd6 gas/config/te-svr4.h -667553559949ecb7bc468a6fda1003f4 gas/config/te-sysv32.h -5e785cb6f9a16599434f78b525b2a943 gas/config/te-tmips.h -5dc896f3c45078f34974fe05fb94ee3e gas/config/te-wince-pe.h -6599faa23572d356256aa616b013c64d gas/config/vax-inst.h -fd1ee35049f9bb5ca0b5b40b8109e49f gas/config/vms-a-conf.h -ed8248ba3c34b041f1d8942b285d6196 gas/config/vms-conf.h -cf987871e5d5e86f6aa12afbc89fc785 gas/CONTRIBUTORS -ceab81aa1f02825092808fdafba0239d gas/COPYING -49b0c513e9e8f5c5f2d0f7a71435c914 gas/ChangeLog -416a26a1162590c860fb1fefffc54cca gas/ChangeLog-9295 -6d8b241f06f94a04f180294552ee41a2 gas/ChangeLog-9697 -f577af562fb6cac4e22d6b5ae67235ac gas/ChangeLog-9899 -d618facc3e8ce8bf3d02ba452e1be6ab gas/MAINTAINERS -c7d8894c1b4cae0cb9632c80b08092d7 gas/Makefile.am -4f2f7020e0b422aca1cc93158938388e gas/Makefile.in -d9a8e0c26cac87a5c4618803fe69ecde gas/NEWS -0ed4366c2ef5bde49890368940dc9fa3 gas/README -e8b1e941cbf0b441da52f38fd2ea9725 gas/README-vms -c66ab308e6d86fac0000d1a9322838b1 gas/acinclude.m4 -43e54453976ff55cd63629d58e04fc0e gas/aclocal.m4 -0713cc4c7ba088fb707c5ccf5420b551 gas/app.c -44c182a81fe50344e603258add9cc6f4 gas/as.c -ce2e7980d3ce0ebb9027297f3059e8b2 gas/as.h -70eee11ef3b99a2aef25cc4e5355cf38 gas/asintl.h -a13029645c6a330d47f64661c7d7e472 gas/atof-generic.c -75bf496ec970dc9712e80b4a5a4af824 gas/bignum-copy.c -c096b326d8cba2abd6ece3ebb29df4c1 gas/bignum.h -00240c3f69e4d6cafdf8b729e6e84d6d gas/bit_fix.h -8fa009ac31ba211585c4f4ad3f80bed7 gas/cgen.c -f2b1a3d53180488da57702ce8d6257d4 gas/cgen.h -65dd281f88f92212b81bb354359b3336 gas/cond.c -e46511c2ddcf00256c007081122f6678 gas/config-gas.com -039f9a3e0b0fa261d5b5c272be4422de gas/config.in -d9692a1b832b0d71391ac34ad78b1b49 gas/configure -aae9c95aaea1df86eb2621b27ed3a99a gas/configure.in -454732b991bc3adfbaed197eb7e87709 gas/debug.c -402433baaaa08f73e6ec935228d2e751 gas/dep-in.sed -e3fd8ef3d3d26dcd037e9bc72b5f1c91 gas/depend.c -4b78ba859f531df84c9d04ba0eadc95f gas/dwarf2dbg.c -191371b169a1a50bf4cfb6e95875f083 gas/dwarf2dbg.h -05e52c03f16bce065122a178cb04f2bf gas/ecoff.c -2ade498ef51a01b944ba9620a2f803f3 gas/ecoff.h -2c00a55daccea8fa31dd514eb9ae7b95 gas/ehopt.c -57b3fe37aafdffc79479ab3da84f901e gas/emul-target.h -305fc57eaa656bac0b150bcc1ca2538d gas/emul.h -c08f06fdeb6fc93631a01d7b53dd846f gas/expr.c -03b127e2410c495a62d3f43bc0351b5c gas/expr.h -35c5208ec46fa524456e2a41c18c67d8 gas/flonum-copy.c -88bdca4528df9b542227513c3617a0b2 gas/flonum-konst.c -2aaf2ac6e8260efb36ebf67b54ac6a78 gas/flonum-mult.c -9b9175f8704d4952a56acef82dd58f85 gas/flonum.h -6727bca8a71f454d76057aaad0b98707 gas/frags.c -8584b7ba7291c886b9db82ad72401cf1 gas/frags.h -49fc4a865d0a8dd8d46951b592d50ebe gas/gasp.c -f728bf7e9df39918cf8c7467d5fa7478 gas/gdbinit.in -00715f54f0585d4c32ab362142dac7a3 gas/hash.c -ef6eb8d70fe48af05178e9af3ed9448b gas/hash.h -e94dab0cc4b68a0ef5ce9dfdfcb09984 gas/input-file.c -0df025a05b963cc8d9a890a686c92334 gas/input-file.h -acbcd05187266da779112cd208f312f8 gas/input-scrub.c -af2dde296a48962feabc18ea603b9480 gas/itbl-lex.c -637856676a2c5e17d45ca48ee4d1edfa gas/itbl-lex.l -fbc898da80a636f469f7765a1c6d50d6 gas/itbl-ops.c -5ae99999af9ac5c1850c36b5f4921be9 gas/itbl-ops.h -8568d6f215619a4ce44c36e32a3e65ff gas/itbl-parse.c -04faf433a35cef1d6b5e9f445aaf6acc gas/itbl-parse.h -b2285f69b5092425e6fa8b4195130f66 gas/itbl-parse.y -c7fe4764b8aa7ac76eeed0a1de98a8d9 gas/link.cmd -687e8b5eb64646e802334fd785512a73 gas/listing.c -fb844327efbb1aeae5f388f656026f39 gas/listing.h -adc284330e8a889f23d9153dc9eba7ad gas/literal.c -962769307588bcf7e9b053afaf508395 gas/m68k-parse.c -afe7080b22bc9b5e058f473469ced030 gas/mac-as.r -b4edaba52caffcedfa007bea5a46ef73 gas/macro.c -9f90a230cb447aa332f3dbf23af429da gas/macro.h -b905aee5c2a099f7d2579459121c7e2b gas/make-gas.com -c3cd93b34bceee0379472974735c6f6b gas/makefile.vms -5ab92a359045f71aec9afc090f1e9ec8 gas/messages.c -829e2d776ea96775c8298d5efddc22e7 gas/mpw-config.in -3c7892f4cb73a22801aa4656e36bb469 gas/mpw-make.sed -d5ef56b704245ff8f113091d867f6c6f gas/obj.h -e09da02faa41e17d061587cf2e6df050 gas/output-file.c -afffb943b1ad26344f206ee6bc357279 gas/output-file.h -486dad21992ef1bbad46ca481351cfdb gas/read.c -aea4edd3f3a9223bdd7b719e6aa46390 gas/read.h -e7258e74de805cdf31e919271531c1b7 gas/sb.c -cff195f2e145a3038579a1501e9fdbf5 gas/sb.h -5364361aa996d6ecf5f78a55b3110b8b gas/stabs.c -1ded054093de910d9786c62bc4fe8cc6 gas/stamp-h.in -dd55eb01ef944ba463cb2ce5f34a7647 gas/struc-symbol.h -f0b4d340f2ea14f0b248792e6c103174 gas/subsegs.c -260af34792338267f3927dc44a3a8197 gas/subsegs.h -752685a6111312f1187d42e7aa0b930b gas/symbols.c -e78b627a67a43e407e6cc9d3966e6474 gas/symbols.h -1da751d730b752f86eca5aaa24c563b2 gas/tc.h -df57d3e0b2752e5caab5294b3acee98c gas/vmsconf.sh -88a4db7edc70e897c4a8923cbf78bf68 gas/write.c -78b058a7d893939c2ab422c2e85789d2 gas/write.h -bb547fe62002b67ae96d3c52f72f9de2 gas/doc/Makefile.am -2423cc0876c2510df60a5275b0bdd5b0 gas/doc/Makefile.in -be60028bc97199721b146eb35125cc2d gas/doc/all.texi -41db9086dadd0f035d15cb3d92bd1203 gas/doc/as.1 -362e4e8e3c9ac37b1cc1148df43222f4 gas/doc/as.info -85161d87cc0e0d4297787c63456db47f gas/doc/as.info-1 -b81884593f4f05d264946d7a4891701e gas/doc/as.info-2 -b2d9e66a77e2e2986070575c066816c5 gas/doc/as.info-3 -26ae00e2c16b261a3a90dcb8cc4d4da7 gas/doc/as.info-4 -a696a5ced8c5d881f5ea63097dfc0597 gas/doc/as.info-5 -e09cf158c7e7cb65bdee3eebcff58ff9 gas/doc/as.info-6 -41fe1393b25845f0a16585f076c52f3c gas/doc/as.info-7 -94705e2e9f12c6ec33493e5dc00d4343 gas/doc/as.info-8 -94123531607079712cdc98925b407eb0 gas/doc/as.info-9 -2fbd5270dcebd346a0991e021a6f8915 gas/doc/as.texinfo -a59215bdf94de57a0285409852af014d gas/doc/c-a29k.texi -e01a5d41dd1d11b839b779cf991abe7b gas/doc/c-arc.texi -6c7a0c6eb13ad819b865fdca9b883da8 gas/doc/c-arm.texi -5dfb627124dfb35ac44d11fdd435d36c gas/doc/c-d10v.texi -670a3dc2d7f147e973d1540d3e02059e gas/doc/c-d30v.texi -6e93279725365b5846b332617955f22b gas/doc/c-h8300.texi -1e370e38bad3cf84368e988413793571 gas/doc/c-h8500.texi -4dc0aab471ec88e9f732b465812e10ab gas/doc/c-hppa.texi -517ef856eea39abb37275974217b7297 gas/doc/c-i370.texi -5e674e1c182709037cb3536a60efb929 gas/doc/c-i386.texi -e8d13a43c909238a5916ce17e31d3ea5 gas/doc/c-i860.texi -42b8ac98b598dd6f2ece88fabb284af0 gas/doc/c-i960.texi -147c08afa3ccc82a2d9485e5f1a59317 gas/doc/c-m32r.texi -fb7536ff2e6681fa34501b7c320df664 gas/doc/c-m68hc11.texi -e0de947758a2e436eb5d00cb411666b7 gas/doc/c-m68k.texi -5be2114dfab16f3522fc347cd44da217 gas/doc/c-mips.texi -677a7e5662a701c8a5f9d82943f36257 gas/doc/c-ns32k.texi -b12cf56f6b45fa508ec963382efcc726 gas/doc/c-pj.texi -a3350f042ea6b18add50514707eb5d13 gas/doc/c-sh.texi -c87b3dff39869ac245c49a82edafb776 gas/doc/c-sparc.texi -29f6dccc43df1302dedd26fca1c362b1 gas/doc/c-tic54x.texi -f5679aeb7a13f072790a4cd15c511019 gas/doc/c-v850.texi -6d7f87c13f69ca2595e95c9eab762d92 gas/doc/c-vax.texi -5810de21486a935844319423d7a6e9cf gas/doc/c-z8k.texi -79b45497aca1b0c05295f8f2faee4b6f gas/doc/gasp.info -8ba1c8507b412944e6c7bdc67da6d964 gas/doc/gasp.texi -4359fdef33618e0323337df0588c5cc3 gas/doc/gasver.texi -73b674cd9bd9d15802cc28334b6a25e1 gas/doc/h8.texi -cf12d9be0d41e433cda51d024905eb5c gas/doc/internals.texi -25c9af2d17e31c41a405f4da0a58984e gas/po/POTFILES.in -bfb5c178c2404196ab54d7532a61e3d4 gas/po/Make-in -8d085be47b4986e1d1f7b90d59722bb2 gas/po/gas.pot -189b37e66fa0d5345240ac619d9c94c3 gas/testsuite/config/default.exp -febbd8dc88b45e9686846ca773346af2 gas/testsuite/ChangeLog -6fdc3af8b63d5c8dd0a98137215d3753 gas/testsuite/gas/all/cofftag.d -acc0977114e4b9e65b9d2aa95c35ff8f gas/testsuite/gas/all/align.d -a60277af402def6d8b222eb7aa29fd72 gas/testsuite/gas/all/align.s -a43c5656afe02c36a6e1ef61a6027724 gas/testsuite/gas/all/cofftag.s -7642a824a63aa87c0f0c07ebab2ea9ba gas/testsuite/gas/all/comment.s -b693149b9cb9c53162d7d2eddc0ee4e8 gas/testsuite/gas/all/cond.d -a0744db73ab7d631e72a1107ffb1c1d8 gas/testsuite/gas/all/cond.s -7ec8ad8becdaf04c09bde661a8ae427e gas/testsuite/gas/all/diff1.s -a3ed4c57221d0e6ae68721825604f04d gas/testsuite/gas/all/float.s -d5cade1146f240feeeb31fa7cee691f3 gas/testsuite/gas/all/gas.exp -ff0067e6fc03e40d69f6d4a3df69c315 gas/testsuite/gas/all/itbl -ae3b5706bcb2b5451fa0da52c419c576 gas/testsuite/gas/all/itbl-test.c -0a1bc24fd58a8e10476fda0bd5b649ed gas/testsuite/gas/all/itbl.s -b61a6aca515ae31b7be7abda0a152bbc gas/testsuite/gas/all/p1480.s -c9637636fc150630e2d44c82892f2551 gas/testsuite/gas/all/p2425.s -856ac38b9fe37e63d8173f9299961115 gas/testsuite/gas/all/struct.d -0b2dc0f909d4928a8de943eade54a345 gas/testsuite/gas/all/struct.s -8ba076a868d6d446a4ab1462add54fd3 gas/testsuite/gas/all/x930509.s -1a8de6cbd6b3c02a2a483c8cd6ce42a7 gas/testsuite/gas/arc/branch.d -19197f29a6d87e3e78495e7a47ebf496 gas/testsuite/gas/arc/adc.d -1b06ceb2288c093be970d894568fa5da gas/testsuite/gas/arc/adc.s -65084e57125295318062997e920c19af gas/testsuite/gas/arc/add.d -75e6baa15e0d53599edfd7ec770375b6 gas/testsuite/gas/arc/add.s -4927747f607ee7be7bf50e7fd6ef02ee gas/testsuite/gas/arc/alias.d -54f01e033f0d248759b8fc6fb71a06db gas/testsuite/gas/arc/alias.s -b8a7885db402fc70652f0410a5820d50 gas/testsuite/gas/arc/and.d -b8fce093a488f7b1c2e6418f7c31c9e3 gas/testsuite/gas/arc/and.s -4bafbcb8f67131a387ad56e5b1bcfac1 gas/testsuite/gas/arc/arc.exp -aa32ccad03a6d294726c0e58e6d2250a gas/testsuite/gas/arc/asl.d -af955c8cf38c553fa4221383c64b6b13 gas/testsuite/gas/arc/asl.s -56384c65539866b6e7fc0a0a05eabce8 gas/testsuite/gas/arc/asr.d -9887c6e68d8176e71d75b9d91604e914 gas/testsuite/gas/arc/asr.s -5288b51666fdc9bb0c65a07671c3c9fd gas/testsuite/gas/arc/b.d -78b81ebb3355a47d5c478e1e56444ffb gas/testsuite/gas/arc/b.s -402522bfb20c4387e1faba27224186ac gas/testsuite/gas/arc/bic.d -ab22388e1552b8926d7b8960f9a6fe20 gas/testsuite/gas/arc/bic.s -ec7abac24fa3c402b31f624a3ff9de77 gas/testsuite/gas/arc/bl.d -e2c237cc25d1cfc82c9285818858e329 gas/testsuite/gas/arc/bl.s -8432db29eb95c38348bb4216a28f43a4 gas/testsuite/gas/arc/branch.s -1165c7d246f9e1a548af4c5b7f4e5f60 gas/testsuite/gas/arc/brk.d -872c85cca67988958ef95591b4fecb7d gas/testsuite/gas/arc/brk.s -acf1eca3b061941ff367bba7654f8a2e gas/testsuite/gas/arc/extb.d -0ab2d9abcadcf93d9b6dd8eb0962d7ab gas/testsuite/gas/arc/extb.s -cb8963efc4b0412d0cf5f6d2d4412d14 gas/testsuite/gas/arc/extw.d -e66a84df62389472e90d215276e87384 gas/testsuite/gas/arc/extw.s -53684f8cb4cc475d5632ffa22555b6c5 gas/testsuite/gas/arc/flag.d -2b6e2dd0335ebc45bb694de8cc2f4c6b gas/testsuite/gas/arc/flag.s -dd35c9020fa1c43318beec05e9d63dd6 gas/testsuite/gas/arc/insn3.d -c9f07db5b59a1a725b1cb520c7dfffe2 gas/testsuite/gas/arc/insn3.s -6623a00a22962dfb1afcb24a2f8920bb gas/testsuite/gas/arc/j.d -7ee6358f55317d08d08f864238c78515 gas/testsuite/gas/arc/j.s -431696fbe85080394483a455208af19c gas/testsuite/gas/arc/jl.d -4a56cf56903f8e4c25dd7865dd1a92df gas/testsuite/gas/arc/jl.s -59910ad05ca1dd842920f3ca9f4b491d gas/testsuite/gas/arc/ld.d -d5a8532516e863d33880e4a649f8ebc9 gas/testsuite/gas/arc/ld.s -4d7ba9b754c7afdba41dfec82239bc30 gas/testsuite/gas/arc/ld2.d -28379656fb4f5c37963ed6991c582ed6 gas/testsuite/gas/arc/ld2.s -af5c07a06b5ab10049b70efc03fe4310 gas/testsuite/gas/arc/lp.d -657d876ad61daec2d6de3a4269bfeaf3 gas/testsuite/gas/arc/lp.s -0b801348feff41c1625f9c681af122c5 gas/testsuite/gas/arc/lsr.d -a9c2ebcafcfc68a8bb7014172813ee2c gas/testsuite/gas/arc/lsr.s -ae005c091f26b4ceac5b19e8c13d8835 gas/testsuite/gas/arc/math.d -c632e7e9e19d65e75557a5e42d513905 gas/testsuite/gas/arc/math.s -42cc6922491da263d6ab87fca2593794 gas/testsuite/gas/arc/mov.d -5bbe3186d21f23263b4a3743cfb1c0e5 gas/testsuite/gas/arc/mov.s -ff9e23ba171eb9fab4ae4bf71ca1964f gas/testsuite/gas/arc/nop.d -4b5a9a087212c040ef94e7cfc7c64113 gas/testsuite/gas/arc/nop.s -c596ab98be90e4fcdb2e92e35e3ca66f gas/testsuite/gas/arc/or.d -a9984178263c3d2fdc55aa82c0850038 gas/testsuite/gas/arc/or.s -152d55e75d6f7079d969d4582e98e32c gas/testsuite/gas/arc/rlc.d -7186c231f11739791f407f6ad9bfdfcd gas/testsuite/gas/arc/rlc.s -f67f42d8077195a9ed9da2cd3ff93889 gas/testsuite/gas/arc/ror.d -0f4fa90aec1e6518392567bb89d7420f gas/testsuite/gas/arc/ror.s -cce2b1054c09a0d526bc548ea162dc6c gas/testsuite/gas/arc/rrc.d -2a33859e8d1450a314390aee1eed985c gas/testsuite/gas/arc/rrc.s -7d0b42fa66729b4df6f26c5daa47c6ee gas/testsuite/gas/arc/sbc.d -6d4e549168ccb7340e4c87d6c3ca9f06 gas/testsuite/gas/arc/sbc.s -b0ae0aa5baea6246ee417710ad641653 gas/testsuite/gas/arc/sexb.d -e3e0516272a27d4fdde6e78fcfc0beae gas/testsuite/gas/arc/sexb.s -753f0757cceff8d9fba7da206607b32c gas/testsuite/gas/arc/sexw.d -505c87905fe1b3b19909f4ff658880e8 gas/testsuite/gas/arc/sexw.s -04e291c6c4227ad3ea068b33bcca2bee gas/testsuite/gas/arc/sleep.d -4b2c68f86079ddc3738d423a7d9286ec gas/testsuite/gas/arc/sleep.s -dd35c9020fa1c43318beec05e9d63dd6 gas/testsuite/gas/arc/sshift.d -285d03daf381a393d3099a8ff7ad1b92 gas/testsuite/gas/arc/sshift.s -15bcea7e5243fe6d08107039eff96e76 gas/testsuite/gas/arc/st.d -0416aa9321cbdc9a725bc459453431cc gas/testsuite/gas/arc/st.s -e913933835012629d5199008027146f4 gas/testsuite/gas/arc/sub.d -beca3fc3b72a58cc4eadd2369592d87f gas/testsuite/gas/arc/sub.s -f2c956a2c8d124cf6924a93a3b18641d gas/testsuite/gas/arc/swi.d -458a27c1ed4ecb3d834bc928af3a1969 gas/testsuite/gas/arc/swi.s -ca575363e502545e2e5d2a6ab64c6af8 gas/testsuite/gas/arc/warn.exp -8bdd04be09313ff33dba220b78d26d8c gas/testsuite/gas/arc/warn.s -9020b43e63291859faac20e7065787d9 gas/testsuite/gas/arc/xor.d -c1a790a7f1cc4e88b2235b226fae54b2 gas/testsuite/gas/arc/xor.s -218ceddbec7e4efdd63a6186a62fded9 gas/testsuite/gas/template -abe5158404494a7b0e74db43f784559a gas/testsuite/gas/alpha/fp.d -eb3ec5f424ad44c0e52fe488caa1402e gas/testsuite/gas/alpha/fp.exp -820ca91b26e95c2ba803e8b9a0ebe76e gas/testsuite/gas/alpha/fp.s -a1361a5b37b54c593cbef99cd85f28a9 gas/testsuite/gas/arm/arch4t.s -e805204a7256772ed77713643ce06a08 gas/testsuite/gas/arm/adrl.d -fea3d814c57f0d641ed3e2b30e3fe9da gas/testsuite/gas/arm/adrl.s -035a15045a9f50492d980d3fac9ef34a gas/testsuite/gas/arm/arm7dm.s -84352b71a635ec348f8370891582ca03 gas/testsuite/gas/arm/arm.exp -217d22388024d3ceb3c80613491f9d13 gas/testsuite/gas/arm/arm3.s -1eb3fbffc325dda43f0f98e8237840f7 gas/testsuite/gas/arm/arm6.s -3b3aa7939f5a6f1b53dc96025bbcfdd4 gas/testsuite/gas/arm/el_segundo.d -b5f8101bcc3f3cc7e46c4e89b30a29f7 gas/testsuite/gas/arm/arm7t.d -acdb01f03b31a3f8cae20ac99db63be5 gas/testsuite/gas/arm/arm7t.s -d594c5bb1795675960702c68c17df8aa gas/testsuite/gas/arm/copro.s -9b3a93b21d21ee58a49c1d0039a555de gas/testsuite/gas/arm/el_segundo.s -6f3f35f3d1f4b051fddba9412542e087 gas/testsuite/gas/arm/float.s -2134e910175749a301307015d968cbb1 gas/testsuite/gas/arm/immed.s -796fb4584e45dbc501f5e85b09182a2d gas/testsuite/gas/arm/inst.d -d451b7fb925e026001176d59277d67c5 gas/testsuite/gas/arm/inst.s -b2fd7458f8e0d2cf15a9249f9fedac4d gas/testsuite/gas/arm/le-fpconst.d -01ece05c7a31cb680e04d26a1f7dc281 gas/testsuite/gas/arm/le-fpconst.s -3613c7ccdfda8492ba8127d99020ff2b gas/testsuite/gas/arm/pic.d -528c3bb56cc6ae2b19157b75203221c6 gas/testsuite/gas/arm/pic.s -55a46d871a3fe4417039c85265d830a1 gas/testsuite/gas/arm/thumb.s -f91305f065fc92ec4cfd34af31197ff7 gas/testsuite/gas/arm/xscale.d -814449ccde23eaac315e913ef381756a gas/testsuite/gas/arm/xscale.s -109b1e2f911068bd6a3280a90061ea8b gas/testsuite/gas/cris/binop-extx.d -eed41e12ba1edecaaa2d3c3789332377 gas/testsuite/gas/cris/addi.d -04449730390af545ba20b42dccd5fe09 gas/testsuite/gas/cris/addi.s -29cdb8544456ec0d40f1b406db48473a gas/testsuite/gas/cris/binop-cmpmove.d -d2a858f83be22b61d2299cc2e5e10a0b gas/testsuite/gas/cris/binop-cmpmovx.d -e31ad643fe65589cbbdb034e1e5f197f gas/testsuite/gas/cris/binop-segref.s -7f94279e488ea079e8a1568dbeb09974 gas/testsuite/gas/cris/binop.d -0128aaa3d875adaf235960d488417afc gas/testsuite/gas/cris/binop.s -a3e707e09eac0416e1d96af6bc910dd0 gas/testsuite/gas/cris/bork.d -67a42ca84f31bc333b785695009221fa gas/testsuite/gas/cris/bork.s -d77f50b1d3d668af993e9fb633b9f401 gas/testsuite/gas/cris/branch-warn-1.s -eb037cb8821e59f91c4e4b787f56cd78 gas/testsuite/gas/cris/branch-warn-2.s -6cf3f5c1d500bd9b0a1de2c3416dffe0 gas/testsuite/gas/cris/branch-warn-3.s -6475601840a6f889ee9eccdc91023bf9 gas/testsuite/gas/cris/branch.d -caff7842b5ef92ca805daf6782c1e414 gas/testsuite/gas/cris/branch.s -4e520a3efff1f37f0de6df15c0a34c10 gas/testsuite/gas/cris/break.d -700be97c0689c4196f0da1842abcc231 gas/testsuite/gas/cris/break.s -2aaf552ea3b069446af5a6a18ad2c7e0 gas/testsuite/gas/cris/brokw-1.d -82d4b8908cfe41325173b31ad92d03fc gas/testsuite/gas/cris/brokw-1.s -a13ae25cf3ec8d458caa16dc63c2b828 gas/testsuite/gas/cris/brokw-2.d -99acc6281a586d428c2e81f5a3e76020 gas/testsuite/gas/cris/brokw-2.s -9fb7e1ca811a353db12fab28f6d7a630 gas/testsuite/gas/cris/brokw-3.d -b5ea3631270db99bda62649c3d96f03d gas/testsuite/gas/cris/brokw-3.s -c4d5e7abbcaf212d987111b7c1e2040e gas/testsuite/gas/cris/bwtest-err-1.s -d80841d50a9461e6e7533c43e44dd4d1 gas/testsuite/gas/cris/ccr.d -fb52bd22addaa45d2f47fc8fc5bcc63f gas/testsuite/gas/cris/ccr.s -0d39e0e05353afc3532e275b909fdbeb gas/testsuite/gas/cris/clear.d -0c2ea11d1047cf554432ca3d4e9d03cc gas/testsuite/gas/cris/continue.d -c87164ab4042aef14e7b7bed37d62d46 gas/testsuite/gas/cris/continue.s -944c9803d087eee985d9f792da7c29be gas/testsuite/gas/cris/cris.exp -ab7c0afd8d2cd448c3b0576af049256b gas/testsuite/gas/cris/diffexp-ovwr.d -a5073cd621e46c9b6b371425b3a8059a gas/testsuite/gas/cris/diffexp-ovwr.s -ee8c39803ebc83959f29ae641da137a0 gas/testsuite/gas/cris/fragtest.d -8de93219134f7b607edec27266d57c27 gas/testsuite/gas/cris/fragtest.s -37ac7adec86ed5a8fd0ef39db9a607f4 gas/testsuite/gas/cris/jump-type.d -1763110b16f52ce71e7111a466e55493 gas/testsuite/gas/cris/labfloat.d -2788020656f9952ba2200bfe6ed8b5f6 gas/testsuite/gas/cris/labfloat.s -63b363c29b7f111d3522135b27a5baac gas/testsuite/gas/cris/macroat.d -f2ac553ad97357a22204205c1c2c64d5 gas/testsuite/gas/cris/macroat.s -7972fbd01b55832d66e9afe5b21a44d9 gas/testsuite/gas/cris/movem-to-reg.d -06f511d9c5dfbbd6ec70e6b5fd954735 gas/testsuite/gas/cris/nosep.d -fc504e0b22b646ea6326e679962d2062 gas/testsuite/gas/cris/nosep.s -e87fda2ed120152aed5ef5927f48514d gas/testsuite/gas/cris/oneop-type.d -2cdc382a264a948b2290859f9b0722f2 gas/testsuite/gas/cris/operand-err-1.s -a9f5ed5476ee8f09aeb8676f6751b01f gas/testsuite/gas/cris/prefix.d -ce78d7541cba3153c036b973d48c2233 gas/testsuite/gas/cris/prefix.s -cef8a89ceeecbfe4d7566ccbfdd4a357 gas/testsuite/gas/cris/pushpop-byte-sreg.d -1e8ffe5e395258d271453a7d182b125e gas/testsuite/gas/cris/pushpop-dcr1-sreg.d -d97ab94343d60cc33c71b43c1fb5cabd gas/testsuite/gas/cris/pushpop-dword-sreg.d -b27c33ec812e847a147601591093ccf0 gas/testsuite/gas/cris/pushpop-word-sreg.d -38ca765cb65923ca112c69a5b347c04e gas/testsuite/gas/cris/pushpop.d -5f57132a6921dd590b853ab871c16039 gas/testsuite/gas/cris/pushpop.s -e4c7c0f31b9839d5536151310f544ee3 gas/testsuite/gas/cris/quick-s6.d -7fa1053d2735accfe207c6bd9dc2c699 gas/testsuite/gas/cris/quick-u5.d -0c9904527686c1ab40e8b41ebd824baf gas/testsuite/gas/cris/quick-u6.d -078d655cbc167283db8ba953c3148a1b gas/testsuite/gas/cris/quick.s -b76b6dbc2e3d8675977eba8b2c80fdeb gas/testsuite/gas/cris/range-err-1.s -fb6ff1ccf6bc8984d311335bb1c65de2 gas/testsuite/gas/cris/range-err-2.s -1aa963985a948084e7f57bc64ae394dc gas/testsuite/gas/cris/rd-regprefix-1.d -483b2b941bdac034989505d636c292bb gas/testsuite/gas/cris/rd-regprefix-1.s -ec4ae60abafccecdf76cfa6db8973836 gas/testsuite/gas/cris/rd-regprefix-1b.d -ba3a8b1d41f12777d99bb3b0f0242e4a gas/testsuite/gas/cris/reg-to-mem.d -c36b1354d494fa3d14e0f53cbdad14d1 gas/testsuite/gas/cris/regprefix-err-1.s -daf514b146b6d788c0d44a44c78fb084 gas/testsuite/gas/cris/regreg.d -57d564c932d2ec3a002e095c03b43755 gas/testsuite/gas/cris/regreg.s -9b3f927669d4ef8900289aa5ec407517 gas/testsuite/gas/cris/return.d -618b1c16f597a8c927d63668befe360c gas/testsuite/gas/cris/return.s -e0ccfd23d8757d8497bf9428ced9a2be gas/testsuite/gas/cris/scc.d -dfef1f180533d93400114eb0106e4047 gas/testsuite/gas/cris/scc.s -a4016c7d0fb8462d531bedf3d29db82a gas/testsuite/gas/cris/sep-err-1.s -0d8192d5d6fc2d3cf97a212a82d0ce7e gas/testsuite/gas/cris/sep-err-2.s -faaccaed133c943daeb19f14b890ac70 gas/testsuite/gas/cris/sep-err-3.s -62e83deae56f617278b9cc972afe4da2 gas/testsuite/gas/cris/separator.d -e929807163f06ba801c4d3d98eef047a gas/testsuite/gas/cris/separator.s -7dd5458e20d0ecb5c21cff9fa0a9f46a gas/testsuite/gas/cris/shexpr-1.d -f6aed27cb988eadba85e4dacfcef485e gas/testsuite/gas/cris/shexpr-1.s -47b5ed349286a89189e5915c07a7d945 gas/testsuite/gas/cris/sreg-to-x.d -36ee6b68e98b7cbd9ffd498673bb83a8 gas/testsuite/gas/cris/string-1.d -ba96569c4c3a69683f9eda2f2e804ac9 gas/testsuite/gas/cris/string-1.s -5649d5e6ddaf6789f15e1b8cb1979b1c gas/testsuite/gas/cris/string-2.d -6ddd84549c2ae105a7ffc9e339d1e37e gas/testsuite/gas/cris/string-2.s -80c15d753b5f84e6b2dc8834e2f8906e gas/testsuite/gas/cris/test.d -b7120a4705aa9a380d545c5a796c3159 gas/testsuite/gas/cris/unimplemented.d -962270c17acff6001a62ba57047c826a gas/testsuite/gas/cris/unimplemented.s -ddd6a1784dc2c7a34042c0a5fb3c1800 gas/testsuite/gas/cris/unop-mem.d -ec2af75e8927ac1b38d610129de5962b gas/testsuite/gas/cris/unop.s -75063b64ce4c7ce0ccb58e946587b1fb gas/testsuite/gas/cris/us-err-1.s -57983a53289a7da6c1ed399d7fe0a3e9 gas/testsuite/gas/cris/us-err-2.s -89b77f3261be6a0b6f7c2117ec573b35 gas/testsuite/gas/cris/us-err-3.s -a325d1070d73f0a40781fd4c0feb8055 gas/testsuite/gas/cris/x-to-byte-sreg.d -5f4256191fa514d404b9b31f0b48d973 gas/testsuite/gas/cris/x-to-dcr1-sreg.d -183314b6dae188dbb4ed4b3dfbfbd02a gas/testsuite/gas/cris/x-to-dword-sreg.d -be4438db4d0c5d5a732331453a4f54b3 gas/testsuite/gas/cris/x-to-word-sreg.d -c1a784e8e7fc1cb601b7c63df2e1320f gas/testsuite/gas/d10v/d10.exp -0004da131d3e5488db3b4b89bd259250 gas/testsuite/gas/d10v/inst.d -bbe173f89d3ad611d31b7cf43d88291c gas/testsuite/gas/d10v/inst.s -d7768075c27bdbdff4a1347c6b1746d0 gas/testsuite/gas/d30v/bittest.d -a15d68d40c502f8fb891fb71e6a331b4 gas/testsuite/gas/d30v/align.d -8ab5843e51782cc8150825c0aed13da9 gas/testsuite/gas/d30v/align.s -8a9471a2ce14a0c94c7af09fd8cf6f7c gas/testsuite/gas/d30v/array.d -afb9ee8fc39b6c6a3b5a607f0958dd2b gas/testsuite/gas/d30v/array.s -36ccce5414200c372215e06d70d6aad0 gas/testsuite/gas/d30v/bittest.l -4b9689db23a80dfeeb4e6217aaf0a8ad gas/testsuite/gas/d30v/bittest.s -df0c590e221f5dd7900a1c128978ecea gas/testsuite/gas/d30v/d30.exp -5c2ba5b08a8d87ddfc1a70cf2d7c90aa gas/testsuite/gas/d30v/guard-debug.d -739c4467a3344e1787f7b4bdbf919705 gas/testsuite/gas/d30v/guard-debug.s -24a691232054571885f6c30112e51658 gas/testsuite/gas/d30v/guard.d -59254ab788d218d38c2c0d6e71251e76 gas/testsuite/gas/d30v/guard.s -748040da85ada059191e19f00e2488f6 gas/testsuite/gas/d30v/inst.d -39cdbdd6bd65bb5930b303daa6d76dcd gas/testsuite/gas/d30v/inst.s -02e401be332104808af7c8300005fe7d gas/testsuite/gas/d30v/label-debug.d -7f982990c748276d508b09332cdae4f6 gas/testsuite/gas/d30v/label-debug.s -c483a48ce51ab77c8dee11cfab64b50a gas/testsuite/gas/d30v/label.d -7f982990c748276d508b09332cdae4f6 gas/testsuite/gas/d30v/label.s -26406f9a3cbcac3df375ce96f2bf6d60 gas/testsuite/gas/d30v/mul.d -d16bd2d8de2333b4d7ee533c7fbdb1c4 gas/testsuite/gas/d30v/mul.s -3f5d45bfe5794cd78197dab5eba2c4e6 gas/testsuite/gas/d30v/opt.d -cd67e61c7ea236940d9b65c880a564b4 gas/testsuite/gas/d30v/opt.s -7ede5044d404df6c8e7e4397218784b3 gas/testsuite/gas/d30v/reloc.d -2ed511260d2382d512257ccd75e39887 gas/testsuite/gas/d30v/reloc.s -d06a422e5cd491385a39700e8488ebe2 gas/testsuite/gas/d30v/serial.l -26005134b177b676ea077b771aa246cc gas/testsuite/gas/d30v/serial.s -ecab3756772637d3e43ed51d3afe89dd gas/testsuite/gas/d30v/serial2.l -4c96fc10e8ae0de631d7681473ac66eb gas/testsuite/gas/d30v/serial2.s -fbd1fa6f75f8a3d34dd0eb6b9bcfecf2 gas/testsuite/gas/d30v/serial2O.l -4c96fc10e8ae0de631d7681473ac66eb gas/testsuite/gas/d30v/serial2O.s -7fc2a4f0d0ed0a1e698ef2e351bacd11 gas/testsuite/gas/d30v/warn_oddreg.l -04cb44d9a5a4e2791243c475947c1dfa gas/testsuite/gas/d30v/warn_oddreg.s -3aa51e33fc3c4fb00d9f02ab8b6c1412 gas/testsuite/gas/elf/ehopt0.d -6d8da292baf24ce6878336c3bed5a1db gas/testsuite/gas/elf/ehopt0.s -7ddf696baeb3e5954c1d5755625f4f5c gas/testsuite/gas/elf/elf.exp -2e585cb42734f16db2d5af3c7e3b8ae0 gas/testsuite/gas/elf/section0.d -94799bbca15898e61e62e52d81f0bcca gas/testsuite/gas/elf/section0.s -045c78bad26109f03785866dccb0aef6 gas/testsuite/gas/elf/section1.d -b892afd90c0c8f8d9b5486dcd484d815 gas/testsuite/gas/elf/section1.s -5c0da9476fde1f1fb1257eb5a7c1864b gas/testsuite/gas/elf/section2.e -365f7f4f8f6fa73bf0c738244defbb98 gas/testsuite/gas/elf/section2.e-mips -10cd1b592475b4aa51fad4414503db94 gas/testsuite/gas/elf/section2.l -5a42c78c814dadc7e4a11cba2a795f97 gas/testsuite/gas/elf/section2.s -8f760ce7cf5b0bcea1fd0c123134bc4b gas/testsuite/gas/fr30/allinsn.d -f43f517834a1bcead42dab25e75f41d0 gas/testsuite/gas/fr30/allinsn.exp -fdf34a19cb21c9273e472a9bb4c9e97f gas/testsuite/gas/fr30/allinsn.s -4a1055775cc266d1a0458ce050e653d3 gas/testsuite/gas/fr30/fr30.exp -2924c535df55b6a32889011860a29689 gas/testsuite/gas/h8300/addsub.s -8b119bf28b7ba30807a8850b9edf96d3 gas/testsuite/gas/h8300/addsubh.s -5b8c73d8de33afa02ff707f67065a1ef gas/testsuite/gas/h8300/addsubs.s -d86b31775e7398f8bc4d446d9d0a017b gas/testsuite/gas/h8300/bitops1.s -15fd0f35907c986489fa36bddebbb526 gas/testsuite/gas/h8300/bitops1h.s -584a7cd8ad886afe1f0d2f9b5d817467 gas/testsuite/gas/h8300/bitops1s.s -30ff0841f2e26ebb8e15aa636a64e4a5 gas/testsuite/gas/h8300/bitops2.s -a741bf520d8175248d8c363dd660cad9 gas/testsuite/gas/h8300/bitops2h.s -2e137c2f7cf12903edc7dd00bfe6d409 gas/testsuite/gas/h8300/bitops2s.s -3d15e82abb0f85bdfacdbb653e083999 gas/testsuite/gas/h8300/bitops3.s -82edeaa989ae932805db0608f8cc235a gas/testsuite/gas/h8300/bitops3h.s -f5395cd9806896db584e3fbbdb548389 gas/testsuite/gas/h8300/bitops3s.s -6249a5e4419949642c98aaa14f3d8b10 gas/testsuite/gas/h8300/bitops4.s -5a394a0dbef8a7f14e4294b4dcfed8a5 gas/testsuite/gas/h8300/bitops4h.s -791083648e92754b6c62f3201681ece1 gas/testsuite/gas/h8300/bitops4s.s -23aecc0c8af29a4bf18f97a9607677d5 gas/testsuite/gas/h8300/branch.s -1f02561f75f4c45679ba42b0492cc58a gas/testsuite/gas/h8300/branchh.s -e251ed292c39572dbd1364f73d5fd32e gas/testsuite/gas/h8300/branchs.s -f0e5262ac4229fe320614df5a40f35e9 gas/testsuite/gas/h8300/cbranch.s -30d75e5d8c2ef426fe42a377456bda0b gas/testsuite/gas/h8300/cbranchh.s -5fdbcffb87056d813eafd925d9c763f0 gas/testsuite/gas/h8300/cbranchs.s -80cc8a6d96ee17417ea03077199ad4d7 gas/testsuite/gas/h8300/cmpsi2.s -3be6267a929c5b26e8f4d69491d0877a gas/testsuite/gas/h8300/compare.s -b2030d679f34f4563b5a00cbe2c1d072 gas/testsuite/gas/h8300/compareh.s -94eec517c2a5cefb40f7bcc8a338a83a gas/testsuite/gas/h8300/compares.s -437e6b6cef5f904dd70a700cd486f7ea gas/testsuite/gas/h8300/decimal.s -9b32251ca7b543949470558b507ca6b3 gas/testsuite/gas/h8300/decimalh.s -56fe63d196d46b2f8dc1c4bfca0c351d gas/testsuite/gas/h8300/decimals.s -0c35be5ae497429ff49aa3076805fda3 gas/testsuite/gas/h8300/divmul.s -d37984dfb136ed1c465a17ac6ff8cbb4 gas/testsuite/gas/h8300/divmulh.s -d37984dfb136ed1c465a17ac6ff8cbb4 gas/testsuite/gas/h8300/divmuls.s -f813008dac0b658d469085e795844664 gas/testsuite/gas/h8300/extendh.s -4d7497fb959f22fd9f7b666d4c61eee6 gas/testsuite/gas/h8300/extends.s -75a67be04365505ad29c72fef5a9ffe9 gas/testsuite/gas/h8300/ffxx1.d -fac5432bff2a42ebe3ace2a5431b0028 gas/testsuite/gas/h8300/ffxx1.s -67fb823dadfe9cc61cc4c40717871318 gas/testsuite/gas/h8300/h8300.exp -d068dc8b49ea5e3a2841052399d04411 gas/testsuite/gas/h8300/incdec.s -57ef072e39a9e088908da70b650fe6b7 gas/testsuite/gas/h8300/incdech.s -68127cbf4156b232462ded46fb1eeb96 gas/testsuite/gas/h8300/incdecs.s -ad670f4be1807bfa3361ea5dfdc0658d gas/testsuite/gas/h8300/logical.s -4baf511d4fbb91925e6de834c9b49ea5 gas/testsuite/gas/h8300/logicalh.s -c4d9cba61beedae407c0c1260e6e1d5d gas/testsuite/gas/h8300/logicals.s -3c56ddac8216a69a609103570d7b3e49 gas/testsuite/gas/h8300/macs.s -fb0d77314633b62d40a4a054311960e8 gas/testsuite/gas/h8300/misc.s -0474a81ccc5b5408fc54aa171faafb52 gas/testsuite/gas/h8300/misch.s -11bb474016acda38cc0db95df94487a3 gas/testsuite/gas/h8300/miscs.s -9193c97fad2ede164c0c90d605b70f46 gas/testsuite/gas/h8300/mov32bug.s -1883f564d24d685c8dc63486f070f4a6 gas/testsuite/gas/h8300/movb.s -fcd326aa9537340e99b1100508c3aa5b gas/testsuite/gas/h8300/movbh.s -7145f97672f9645e3de195a7fdf55a1b gas/testsuite/gas/h8300/movbs.s -d8c9bc7371b9b1d46a2eefb32d90d58d gas/testsuite/gas/h8300/movlh.s -0e5f5a058fd24a750a53bfa817b326a5 gas/testsuite/gas/h8300/movls.s -3674b05426b7d9c23e487af7bb8465e2 gas/testsuite/gas/h8300/movw.s -75e9728e4f42fb7fbedbba7ed96b11db gas/testsuite/gas/h8300/movwh.s -b0068c567a3f9efc6b3b31cf95a5a318 gas/testsuite/gas/h8300/movws.s -911d1f05cbac2099a9f3d2c76df2d656 gas/testsuite/gas/h8300/multiples.s -4393180d58ab1ed9d690f02ff183b6f6 gas/testsuite/gas/h8300/pushpop.s -4d82e273acc364dfaddc59b3a13ee22e gas/testsuite/gas/h8300/pushpoph.s -8ff1c8b35100699d39d44f67e19a5176 gas/testsuite/gas/h8300/pushpops.s -6cc6731a0e070e666e164d9163629113 gas/testsuite/gas/h8300/rotsh.s -7bc113956c8ca4ddcd42503e4bd530e3 gas/testsuite/gas/h8300/rotshh.s -811af24ecd9436d020bfaf84413f5847 gas/testsuite/gas/h8300/rotshs.s -3f42a581ab454d64c32db9aee33ef424 gas/testsuite/gas/hppa/basic/basic.exp -f0fc0667db6fc80b90e168e77d21a710 gas/testsuite/gas/hppa/basic/add.s -98ee4fb8ed790b202a1c065b7e0b997b gas/testsuite/gas/hppa/basic/add2.s -57ad58f96f1a781f50c99315319025b2 gas/testsuite/gas/hppa/basic/addi.s -d9c4ae7672d35624f16301c6c3d2d6e3 gas/testsuite/gas/hppa/basic/branch.s -018bafaddc464bf5344056a4a6ba62aa gas/testsuite/gas/hppa/basic/branch2.s -2744044afb6af0ffe892e71482c7e83b gas/testsuite/gas/hppa/basic/comclr.s -30e98c333c6c3c41f4230609d617d4bd gas/testsuite/gas/hppa/basic/copr.s -18c064b287abc57be5f66793ce0a4ed8 gas/testsuite/gas/hppa/basic/coprmem.s -593e94c43830b50ccf4ccf7aefdabc9a gas/testsuite/gas/hppa/basic/dcor.s -54b1bb4ce869350a6860eea7ef011576 gas/testsuite/gas/hppa/basic/dcor2.s -7f9d07824ecdd65dce64fdbb8ab88668 gas/testsuite/gas/hppa/basic/deposit.s -9e7936d6dca987e90acb029a0794e50c gas/testsuite/gas/hppa/basic/deposit2.s -4179bc45da0c3f5c674c51bce4f3ef42 gas/testsuite/gas/hppa/basic/deposit3.s -5532f754b3ee74d823c916f73352f531 gas/testsuite/gas/hppa/basic/ds.s -ebef581b3abd2e0a860dc45c474dcc77 gas/testsuite/gas/hppa/basic/extract.s -f0c6b56da1f75e189baf27d8c1f535fe gas/testsuite/gas/hppa/basic/extract2.s -51d8fb411be8712bd0c7ce811ad6dc38 gas/testsuite/gas/hppa/basic/extract3.s -a982fc398cedf2e44201d59012ee7066 gas/testsuite/gas/hppa/basic/fmem.s -a0babc25ea6d4372cb5eccc0ae3f4825 gas/testsuite/gas/hppa/basic/fmemLRbug.s -91548514b195f47807497ea510c61712 gas/testsuite/gas/hppa/basic/fp_comp.s -9847e0fce8c6da72b7f980b441367739 gas/testsuite/gas/hppa/basic/fp_comp2.s -698e8f34a3b345696ad42ea0fe3a42dc gas/testsuite/gas/hppa/basic/fp_conv.s -50c67d6e1a3d6914794a948be62b14f6 gas/testsuite/gas/hppa/basic/fp_fcmp.s -67b6a72f5e598098f02c322b08238380 gas/testsuite/gas/hppa/basic/fp_misc.s -bf748287a3393071018df9ef711ff79e gas/testsuite/gas/hppa/basic/imem.s -382400fc1867cc374e7a9a97620ba203 gas/testsuite/gas/hppa/basic/immed.s -3dcb29aed920c5fca9f33ae76fa7bf5e gas/testsuite/gas/hppa/basic/logical.s -40808c7e14c9dd94905f168f5bd28a9d gas/testsuite/gas/hppa/basic/media.s -3f9890f5f05691d773c5252cca7c3bdb gas/testsuite/gas/hppa/basic/perf.s -5cc775342d33290ccc79a2c3392ba59c gas/testsuite/gas/hppa/basic/purge.s -585389c4c1113b467f309f8b53564ddf gas/testsuite/gas/hppa/basic/purge2.s -bc0a3320065bbb6f8c7226807fa35e7d gas/testsuite/gas/hppa/basic/sh1add.s -7682c249ad6ac5dce5a7a0d5c70b9759 gas/testsuite/gas/hppa/basic/sh2add.s -3976fa98bed24429b469cc702b660e93 gas/testsuite/gas/hppa/basic/sh3add.s -69cfdc26fc07d25504dfb30978448340 gas/testsuite/gas/hppa/basic/shift.s -f588468f60d1393a578d3147a655f303 gas/testsuite/gas/hppa/basic/shift2.s -d35888a201d29276d5f468576ce69678 gas/testsuite/gas/hppa/basic/shift3.s -b3128437c366866da97f401491e4854c gas/testsuite/gas/hppa/basic/shladd.s -8ed6a738a1fd2383dbe99d68c8cf59e4 gas/testsuite/gas/hppa/basic/shladd2.s -66715cf6565b3eabaabafd99e8b2dab6 gas/testsuite/gas/hppa/basic/special.s -1af275b55a5680b0a941bfdf1e5496e9 gas/testsuite/gas/hppa/basic/spop.s -cbe82b7200c01fac6ef8ad8c4c90e4a0 gas/testsuite/gas/hppa/basic/sub.s -7f6527cc71e690f05a0d73c733c1b14b gas/testsuite/gas/hppa/basic/sub2.s -c2fd7d2c7fc3f77c944b5af56ebbcb7d gas/testsuite/gas/hppa/basic/subi.s -857c66689b29c2902448ccfc8b55d78a gas/testsuite/gas/hppa/basic/system.s -9dec6c8e5b94b75cb0e0fb27c16ce4ee gas/testsuite/gas/hppa/basic/system2.s -05e8ccf6f72f4a0efbdf0f852a206023 gas/testsuite/gas/hppa/basic/unit.s -1ed85cf259a78d3d86ea435e74dfcbe6 gas/testsuite/gas/hppa/basic/unit2.s -03008cde62428d4ff2464bef8cb8bcd2 gas/testsuite/gas/hppa/basic/weird.s -73cbb56b2c330327d9c06ea89af0cd91 gas/testsuite/gas/hppa/README -d93edd3b974fa05de350f6104c63af74 gas/testsuite/gas/hppa/parse/align1.s -6a7df2ab8d1491f8f64f60fb0a359558 gas/testsuite/gas/hppa/parse/align2.s -85d6e969f063c0bee9565d096c43657e gas/testsuite/gas/hppa/parse/appbug.s -72ae2fe9c7ff74b0267402ab93c59282 gas/testsuite/gas/hppa/parse/badfmpyadd.s -b0dd08d05ad154fa1797fbb7b65f1b3a gas/testsuite/gas/hppa/parse/block1.s -44d0164ab1f3f2f8201ca4cac02f0a91 gas/testsuite/gas/hppa/parse/block2.s -7012f9c767f18688e051c168e218464b gas/testsuite/gas/hppa/parse/calldatabug.s -d26fcb5186e8ffda4892557ecf9d836a gas/testsuite/gas/hppa/parse/callinfobug.s -36132d401bbf31234a71915b94762a26 gas/testsuite/gas/hppa/parse/defbug.s -8355f3baa7c8bf6dfdde12165f166988 gas/testsuite/gas/hppa/parse/entrybug.s -a8c2940c51c368a14265009963ce4a7d gas/testsuite/gas/hppa/parse/exportbug.s -0aa9ab25448da72ed059168f45ee4e11 gas/testsuite/gas/hppa/parse/exprbug.s -464c7378f55821348860da76fd77ed2e gas/testsuite/gas/hppa/parse/fixup7bug.s -69d79811f23cb30bd2c536063a29c137 gas/testsuite/gas/hppa/parse/global.s -eae1949a6363097a7e2ef5bd260b9aa7 gas/testsuite/gas/hppa/parse/labelbug.s -a7ec38bf59489eb49f4bd3ce752f7cb4 gas/testsuite/gas/hppa/parse/linesepbug.s -adf3dd32e97d184fa3a923e977ac0f20 gas/testsuite/gas/hppa/parse/lselbug.s -e09d99b9bb0cc52546de922bf02a3a13 gas/testsuite/gas/hppa/parse/nosubspace.s -8161b5f30367ba86f14e168e2fbf025a gas/testsuite/gas/hppa/parse/parse.exp -030b7a7332dca245ae8a65a00ab8e169 gas/testsuite/gas/hppa/parse/procbug.s -ba4a443e4362a957c9eda52f33e9ed56 gas/testsuite/gas/hppa/parse/regpopbug.s -b19738063af645b6f2231ee644131542 gas/testsuite/gas/hppa/parse/spacebug.s -16d00a249972a7d82fd5b443a6c006ea gas/testsuite/gas/hppa/parse/ssbug.s -6e77c97c02695c15f9f54b9b531a5e2b gas/testsuite/gas/hppa/parse/stdreg.s -e4c3228c9e3a74eb9b2170caafd9cf4c gas/testsuite/gas/hppa/parse/stringer.s -b91fabc2587cd34b7543fe16032d9c3e gas/testsuite/gas/hppa/parse/undefbug.s -ad0e0513effd832ce4787671ac4c5eac gas/testsuite/gas/hppa/parse/versionbug.s -7f9b2353d22448012a9435f7b80ccf1a gas/testsuite/gas/hppa/parse/xmpyubug.s -629e685800d946a73fba78f4f9e2a342 gas/testsuite/gas/hppa/reloc/applybug.s -e7eccf3a36e653b9312fc78bb40a5022 gas/testsuite/gas/hppa/reloc/blebug.s -9c8150c0635455986ba2e99432e230ad gas/testsuite/gas/hppa/reloc/blebug2.s -cfe88051f0bd644932bc22814216e804 gas/testsuite/gas/hppa/reloc/blebug3.s -2e83d05979fd4ec0c399182ad7513423 gas/testsuite/gas/hppa/reloc/exitbug.s -a7ab875345b2ba9a0c1e6aee0c0b23cb gas/testsuite/gas/hppa/reloc/fixupbug.s -84f724d5d6335f9367de5e493847499c gas/testsuite/gas/hppa/reloc/funcrelocbug.s -8fd8e8d6557a090221c4b9382f712183 gas/testsuite/gas/hppa/reloc/labelopbug.s -79c490df3cf5ac395769cfd1378b598b gas/testsuite/gas/hppa/reloc/longcall.s -6fedcfa10d24c76dde19990cbdb53c1a gas/testsuite/gas/hppa/reloc/picreloc.s -a30d0372d62d0a448e374ed80897e3bf gas/testsuite/gas/hppa/reloc/plabelbug.s -f2f905140c0955e2a88e451fad681f42 gas/testsuite/gas/hppa/reloc/r_no_reloc.s -5042b71ae3f83b270fa17a2b7f27fc92 gas/testsuite/gas/hppa/reloc/reduce.s -bc728b6253b6c770472ed22f5def04e0 gas/testsuite/gas/hppa/reloc/reduce2.s -45668f4718492900a833f2d3ebe47e57 gas/testsuite/gas/hppa/reloc/reduce3.s -5fce2ee045a8f221d7d4a0470786d00b gas/testsuite/gas/hppa/reloc/reloc.exp -2813e26c00aa991fb8cc3f67b56ae4f6 gas/testsuite/gas/hppa/reloc/roundmode.s -c690211a1ccb9ebe1cda17e17b5d1cf4 gas/testsuite/gas/hppa/reloc/selectorbug.s -c0e4f0dd244fb83332f776ca09756e5b gas/testsuite/gas/hppa/unsorted/align3.s -a7b6914341e97c943a5b931b5ff724a1 gas/testsuite/gas/hppa/unsorted/align4.s -d5ecda3dffcd60591d33b1718f89d02c gas/testsuite/gas/hppa/unsorted/brlenbug.s -0854f5ede3fb810256df5394b5d17a6f gas/testsuite/gas/hppa/unsorted/common.s -563abc929a52d7539bb83a990fbfcb65 gas/testsuite/gas/hppa/unsorted/fragbug.s -3c295194b6d3754be9b7b7da67fddcb4 gas/testsuite/gas/hppa/unsorted/globalbug.s -af9e915b6ea1a8a691914d94bb230546 gas/testsuite/gas/hppa/unsorted/importbug.s -741867661d59451b7d71d392fc0d7206 gas/testsuite/gas/hppa/unsorted/labeldiffs.s -0aa46fc17784b72b21d387564dddde36 gas/testsuite/gas/hppa/unsorted/locallabel.s -f8705df6b564ae8bc51ff8255048afd1 gas/testsuite/gas/hppa/unsorted/ss_align.s -da24d502a74952b6c5895ffc62d541d1 gas/testsuite/gas/hppa/unsorted/unsorted.exp -dabaf1f82986e409d20127484c8388e3 gas/testsuite/gas/i386/general.l -4f13cd819c9c8bdc0e25c3e1ea7e0be1 gas/testsuite/gas/i386/amd.d -c89704ccdc6abd42145480c444772394 gas/testsuite/gas/i386/amd.s -481a82666e24dd35712ddbe1953070fc gas/testsuite/gas/i386/float.l -0df7ab956e3209428d665890983ef957 gas/testsuite/gas/i386/float.s -c6f32143c1a338a7e3c688cadb2a27b3 gas/testsuite/gas/i386/general.s -f55987a25b2d327d6cce6d34c2f1f3e4 gas/testsuite/gas/i386/i386.exp -54bf1dea9d3fa662fd489d8ba6123a50 gas/testsuite/gas/i386/intel.d -19173fe8ed78eaf92af5f4e7219aed51 gas/testsuite/gas/i386/intel.s -734d748810614b19b03ac10dfde2b1f4 gas/testsuite/gas/i386/intelpic.d -10af8323b3fdfb2580629d4bbb96414f gas/testsuite/gas/i386/intelpic.s -92c2460d4bc6a3d856918e182ca720b3 gas/testsuite/gas/i386/inval.l -ebaaadf5e7218736c6523e8c024e4a63 gas/testsuite/gas/i386/inval.s -e6d4cc21cd6fd3850a2527bd9a0602df gas/testsuite/gas/i386/jump.d -a5ac8a9636b7ab8c6a732203d0914133 gas/testsuite/gas/i386/jump.s -73d7f5fe54695a0d1baff6361ee951af gas/testsuite/gas/i386/jump16.d -72fb343c916713f2da32dd3ebcb13cd7 gas/testsuite/gas/i386/jump16.s -c4bd4a9c5d709255664ff19de89fe4ce gas/testsuite/gas/i386/katmai.d -3e427af40c4ab651d69de595d3f996f7 gas/testsuite/gas/i386/katmai.s -d566afc7ce85d649e11306e09c745945 gas/testsuite/gas/i386/modrm.l -1d1696a1b6db5c16aa2463cdd8b6a045 gas/testsuite/gas/i386/modrm.s -a9f88835bfba484b001209393305e9ab gas/testsuite/gas/i386/naked.d -b4fe60a42e7f416e8bcfc4c911652c79 gas/testsuite/gas/i386/naked.s -91f562b065b071024b4ad049253cc00b gas/testsuite/gas/i386/opcode.d -7c8d765ebc016ae5b7ce8941230d47ba gas/testsuite/gas/i386/opcode.s -d1ab72522efa161dc5bb0d5d34c6cbe3 gas/testsuite/gas/i386/prefix.d -18eb6094372a8ea6dcedecc52d4bbafb gas/testsuite/gas/i386/prefix.s -6d542d1a416f943f08f7081f0ea15d6e gas/testsuite/gas/i386/relax.d -1b8a63c63fa1cb4fd0069ad74110d3a8 gas/testsuite/gas/i386/relax.s -73bd114ee58f8613e40dcc68dc44ecab gas/testsuite/gas/i386/reloc.d -785e2743dba0137e0235c3a40f7ed72b gas/testsuite/gas/i386/reloc.s -2d08693d201a298eb883722a268fb281 gas/testsuite/gas/i386/sse2.d -266867e323b3248cd8cdad201276821d gas/testsuite/gas/i386/sse2.s -108a9548a770fe8d5f7e2f92c9418545 gas/testsuite/gas/i386/ssemmx2.d -e73e0f652b697100e02db9b419b06cd0 gas/testsuite/gas/i386/ssemmx2.s -04f524b94eb61aaf58b37c180ab1e373 gas/testsuite/gas/i386/white.l -305b7d730a90ea5ac8fb330a3bf13fec gas/testsuite/gas/i386/white.s -62171adf925034f2497f65c4381bda77 gas/testsuite/gas/i386/x86_64.d -167651a8472e8240a82c364ac9738761 gas/testsuite/gas/i386/x86_64.s -dbbf38f460db18779a5e3b6d064eb499 gas/testsuite/gas/ia64/dv-branch.d -ec058dd65d1af91fe84f41b725857462 gas/testsuite/gas/ia64/dv-branch.s -956561267da937b1be0fada7c6ea25c7 gas/testsuite/gas/ia64/dv-entry-err.l -e635d21d0f94975c7df306096506d41b gas/testsuite/gas/ia64/dv-entry-err.s -d2c80d56ca498f06aaed101e323f583f gas/testsuite/gas/ia64/dv-imply.d -a4c835f4336ab0d7bea5c1251fe02f94 gas/testsuite/gas/ia64/dv-imply.s -091538d6530e8a161937745d99426d7a gas/testsuite/gas/ia64/dv-mutex-err.l -91d93a728f474aa95c998e07a884224c gas/testsuite/gas/ia64/dv-mutex-err.s -8126eb7a7fcdd728745e456cb576a1e3 gas/testsuite/gas/ia64/dv-mutex.d -91cb93a568ee81bf4a049bfcad3be8f4 gas/testsuite/gas/ia64/dv-mutex.s -faad91ad280ed985504df18b5df67462 gas/testsuite/gas/ia64/dv-raw-err.l -47f0ecc4a6d44c41bceba1bf96951931 gas/testsuite/gas/ia64/dv-raw-err.s -042d6a6ba6e6fab95e540ea3f117cadd gas/testsuite/gas/ia64/dv-safe.d -c06a2d45e380eacc79be2946865839ea gas/testsuite/gas/ia64/dv-safe.s -b08507477c737fd99ecbcdaf985f7864 gas/testsuite/gas/ia64/dv-srlz.d -fcb5ba635bb6c1bf11217572aed8c194 gas/testsuite/gas/ia64/dv-srlz.s -47a1c9e8c8d646cb1276022156938aef gas/testsuite/gas/ia64/dv-war-err.l -96d62a881175a15f9d0eb1464592de82 gas/testsuite/gas/ia64/dv-war-err.s -c29583516e19e2b432fc8be35ccfd38c gas/testsuite/gas/ia64/dv-waw-err.l -5120b50924c7c72ed617ecf58bb839c4 gas/testsuite/gas/ia64/dv-waw-err.s -4702e0589d4ecfea81d623654726c865 gas/testsuite/gas/ia64/fixup-dump.pl -3340310e879de7f94d7008a34cd902e3 gas/testsuite/gas/ia64/ia64.exp -e6ff55117be31d2e2338afa8ba6743e1 gas/testsuite/gas/ia64/opc-a-err.l -c10f248c93a66cf00810e181bcf47859 gas/testsuite/gas/ia64/opc-a-err.s -d01bcbbb33e4aaddf588cf96bb2818c3 gas/testsuite/gas/ia64/opc-a.d -7a4b4b8b83d010b15200291b7428d900 gas/testsuite/gas/ia64/opc-a.pl -25a4e13b65c5c563854c68b27850ec27 gas/testsuite/gas/ia64/opc-a.s -6f669176b63ccb7041cff7a0c43bdd2a gas/testsuite/gas/ia64/opc-b.d -a6e1c6d4094099abc90c4eddf392cf90 gas/testsuite/gas/ia64/opc-b.pl -0a0dcd4d0f92863aacd3374f10cf89d4 gas/testsuite/gas/ia64/opc-b.s -87d4c9bce119a46f50cd7873ecdbb579 gas/testsuite/gas/ia64/opc-f.d -e44f587f12c4e939d44570b92b5ca82b gas/testsuite/gas/ia64/opc-f.pl -7de8eef520f311b774af7bdea416eee9 gas/testsuite/gas/ia64/opc-f.s -08b1ba95e8fd11a0f7f8c1f3705e0be2 gas/testsuite/gas/ia64/opc-i.d -6df89ea375d396efe8cd150381479c12 gas/testsuite/gas/ia64/opc-i.pl -2574b1a2f2579fa030a50947773fa6c0 gas/testsuite/gas/ia64/opc-i.s -95ae13460bb1d9601c083697cac119e9 gas/testsuite/gas/ia64/opc-m.d -85878e0564576b3b7bafb3eb82660f7d gas/testsuite/gas/ia64/opc-m.pl -df0663aeae5336e53e1d06b3e39f6bb2 gas/testsuite/gas/ia64/opc-m.s -42205102976e466e5bbffcdd4d3cfcb7 gas/testsuite/gas/ia64/opc-x.d -da315d802d151e76d7d335473c729f38 gas/testsuite/gas/ia64/opc-x.s -cd152fa44d0a9ca4200fbec848788915 gas/testsuite/gas/ia64/regs.d -e6ce0da8b25a4cd6c5b44068eb4278cd gas/testsuite/gas/ia64/regs.pl -b6c72b3bbf42fd15250f957014a139c9 gas/testsuite/gas/ia64/regs.s -c8161d7293bcc7692937ee4d5b16fc60 gas/testsuite/gas/ieee-fp/x930509a.exp -b0509b0492fd2fc8448b011ae03a41b8 gas/testsuite/gas/ieee-fp/x930509a.s -649f145a8122db7f91f18b85740849a5 gas/testsuite/gas/m32r/allinsn.d -239bb6ea0e35bbe2e8a5939edab2a2cb gas/testsuite/gas/m32r/allinsn.exp -5f9b6e2b9934e8a02576ba496d16ab72 gas/testsuite/gas/m32r/allinsn.s -74ef82c499b9dbc10b25373e6823c276 gas/testsuite/gas/m32r/error.exp -d71cb8f6eee3bbdd0ccecaaca513831a gas/testsuite/gas/m32r/fslot.d -da6bcd9a061b6fdd7a4ee5b2aec6811a gas/testsuite/gas/m32r/fslot.s -da48ccf2513f4723fced3d98ee902eee gas/testsuite/gas/m32r/fslotx.d -c81e23eb3020f45236c4ef7e98a14008 gas/testsuite/gas/m32r/fslotx.s -13b1a745fafe89b83fc828fa73bc0ea5 gas/testsuite/gas/m32r/high-1.d -0c257c8a3667fa667e99bb3cb9aff5a7 gas/testsuite/gas/m32r/high-1.s -873accfff909b6aac6b9a2e8cf961856 gas/testsuite/gas/m32r/interfere.s -d8115906f69c19b93a1fa6deba5b2d70 gas/testsuite/gas/m32r/m32r.exp -6b48ad39eeb0006e1fc1c9010cfbc21d gas/testsuite/gas/m32r/m32rx.d -778e305ed7747652af13150f315591a9 gas/testsuite/gas/m32r/m32rx.exp -3e3e8b05f1651dbc0692a8a20fc804ba gas/testsuite/gas/m32r/m32rx.s -c0b5f95ee4eec971ea74dc81435baec8 gas/testsuite/gas/m32r/outofrange.s -32f8410f7bdb6db49efc7016f230360f gas/testsuite/gas/m32r/relax-1.d -ee56272ade0ca1ed891d0bcdc81d1173 gas/testsuite/gas/m32r/relax-1.s -ffadebffc2057e150da0f56aa0f6d511 gas/testsuite/gas/m32r/relax-2.d -dfd4ad2ea1d8b29e222e48a671c648e1 gas/testsuite/gas/m32r/relax-2.s -debc3c1322cf7602d46e1657a4249b10 gas/testsuite/gas/m32r/uppercase.d -3ad7dc32e323605aaf71cc84e39717df gas/testsuite/gas/m32r/uppercase.s -d21d472754ca0f699e8faf8c95175ec1 gas/testsuite/gas/m32r/wrongsize.s -9187362c4020cfb7b9df8782637bb65d gas/testsuite/gas/m68hc11/all_insns.d -f17b7c3ca3c536ffa8e6df6dc2f439f1 gas/testsuite/gas/m68hc11/all.exp -57022ccbd6cef54a3a8ece7847d6569f gas/testsuite/gas/m68hc11/all_insns.s -7bd42f694ffddccc2e193372d35e2541 gas/testsuite/gas/m68hc11/insns-dwarf2.d -afeb3f5fe5cf302f22c11a8a73c76fe6 gas/testsuite/gas/m68hc11/insns.d -b40598fa9d279a12c73b904dc7f640cd gas/testsuite/gas/m68hc11/insns.s -d77d9f6b2a194247a6d436103c2aa5a6 gas/testsuite/gas/m68hc11/lbranch-dwarf2.d -2ce8f16d1b2813d639637246318a2fa5 gas/testsuite/gas/m68hc11/lbranch.d -270514d96ae94f63ea38a4eb9fccd095 gas/testsuite/gas/m68hc11/lbranch.s -7e3463ce5e0c47ca8bdaaf6f3d443f8d gas/testsuite/gas/m68hc11/malis-include.s -41ba77d190f160fb60f0392b97e0d453 gas/testsuite/gas/m68hc11/malis.d -a469d5986f2366e13cba507b0314fdfd gas/testsuite/gas/m68hc11/malis.s -89d1a83096ae0248028459092e1518ca gas/testsuite/gas/m68hc11/opers12-dwarf2.d -9931e7658c6388e1ad91fb3bb0f38a38 gas/testsuite/gas/m68hc11/opers12.d -bfd8edd9e0edf8fb9cd5ea3ebf070461 gas/testsuite/gas/m68hc11/opers12.s -d36654135443b0740d6b2c78b03ad44b gas/testsuite/gas/m68k/bitfield.d -2a34f43b42955f46a42618a50182de68 gas/testsuite/gas/m68k/all.exp -fa19c98907bd173f6de4c396ef9acd45 gas/testsuite/gas/m68k/bitfield.s -1c229d52fdc1160c9dd9f74b19c1ec69 gas/testsuite/gas/m68k/cas.d -20e0445e36d8d9f35c6022fa7118a3da gas/testsuite/gas/m68k/cas.s -96de03f7fc5967e5d267ae957ac508cf gas/testsuite/gas/m68k/disperr.s -26dfd242ac765008271e85e25d9d8446 gas/testsuite/gas/m68k/fmoveml.d -205a85d6482891f58292e065222b78fa gas/testsuite/gas/m68k/fmoveml.s -b14e11a2793fb32f7d471e31e4ecf7b9 gas/testsuite/gas/m68k/link.d -ea9ee18230b981ada48e2b69bb566220 gas/testsuite/gas/m68k/link.s -85e6de04e2d6138d3b0e1e3e932fc884 gas/testsuite/gas/m68k/op68000.d -d72997199e7c0cfb9dae24c9bc0347fd gas/testsuite/gas/m68k/operands.d -d5012d936b1b45db947e4a29a883fc9d gas/testsuite/gas/m68k/operands.s -b334f15354ebeffb3acba502cc1dae67 gas/testsuite/gas/m68k/p2410.s -ce5152b0da290f444d58c6ef03d48e02 gas/testsuite/gas/m68k/p2663.s -9f97c8240a44cb8d55e355b3577f7a7d gas/testsuite/gas/m68k/pcrel.d -3bc8cba59ef27f67c6c6e2a67717db04 gas/testsuite/gas/m68k/pcrel.s -c1fce4f35335083fbf7d4538c5a7230f gas/testsuite/gas/m68k/pic1.s -6ebe1f8291de253ee6ce0e469b3e03aa gas/testsuite/gas/m68k/t2.d -ba9a3e851cb31d41e5a33c44dc3ebd13 gas/testsuite/gas/m68k/t2.s -3a162ab2de5525fc4745144a511922c9 gas/testsuite/gas/m68k-coff/p2389a.s -4117edd076cf599f92777cbfea5d59ba gas/testsuite/gas/m68k-coff/gas.exp -45f1ecda71b05960409560f553228a2d gas/testsuite/gas/m68k-coff/p2389.s -29f7789ff1bca9100fda6a1276c73f70 gas/testsuite/gas/m68k-coff/p2430a.s -2c65e9837c0fa5884e6d7aa8ab7f5b27 gas/testsuite/gas/m68k-coff/p2430.s -9ae5a3f91535cb9ce86b48698e6096b1 gas/testsuite/gas/m68k-coff/t1.s -abc6ff7e3825198ada07ac55f4f3ab7e gas/testsuite/gas/m88k/m88k.exp -dccbd7ad6ededd07df99af498231642d gas/testsuite/gas/m88k/init.d -ebcd9dfb18999e4f42a3c3d5a53fcb81 gas/testsuite/gas/m88k/init.s -ef6c6bcefee3f0df10bbe2455661acc7 gas/testsuite/gas/macros/macros.exp -06148aa2e0046074be6e05308a79b642 gas/testsuite/gas/macros/err.s -f64593bf9530d575f681a8566ef216c3 gas/testsuite/gas/macros/irp.d -e284db7fba30dba3218492a95521d6b1 gas/testsuite/gas/macros/irp.s -369273a5f986fd76ff12a8c638e722a0 gas/testsuite/gas/macros/strings.d -b320acc9c113dd9d1967db7ee0857e8a gas/testsuite/gas/macros/rept.d -f5abc6437f073dff4af533a36ea9d280 gas/testsuite/gas/macros/rept.s -efbeac5d9e630c2251fa42fd98bdfd47 gas/testsuite/gas/macros/semi.d -e772243ae7fe04097bba952a6d9173bd gas/testsuite/gas/macros/semi.s -8990b11a483140af060adb1ff48c4cc5 gas/testsuite/gas/macros/strings.s -df6bcb5dd71cf55583464fc270bc52a1 gas/testsuite/gas/macros/test1.d -74a3db320fafd23b64c4ab6f48a17246 gas/testsuite/gas/macros/test1.s -ac43f2633f23586812df9e1a40627d82 gas/testsuite/gas/macros/test2.d -0fd6102941c5acb1bb8e85a697a2ff23 gas/testsuite/gas/macros/test2.s -7e8aafe277f842553e1bf935c32fa0e8 gas/testsuite/gas/macros/test3.d -1dbcc25102396060274f0b3d1268f47c gas/testsuite/gas/macros/test3.s -0544bcf7466e18eabd7d715e3059b24f gas/testsuite/gas/mcore/allinsn.d -3f84389ae5d2fa1891f6db5a66746c47 gas/testsuite/gas/mcore/allinsn.exp -0ee353f47d16db7430f79032977dc1af gas/testsuite/gas/mcore/allinsn.s -537103a0821acc23c643173a5b44062a gas/testsuite/gas/mips/break20.d -9c3689024c183a4b37014fce89d4c0eb gas/testsuite/gas/mips/abs.d -93b8bd81a813fed709cc6b5639d4552a gas/testsuite/gas/mips/abs.s -74518b2a94faa95c13c4d18516e73a48 gas/testsuite/gas/mips/add.d -3aee944bf3dc58dded8dd88c0ef7e205 gas/testsuite/gas/mips/add.s -0cecb6450a4984efe4d9dc93d53bb71d gas/testsuite/gas/mips/and.d -31c4e7dfe6203941f0a009c79fe9aedb gas/testsuite/gas/mips/and.s -be2f88510c23cf738e68b90ba8ed4984 gas/testsuite/gas/mips/beq.d -0c68387d4560df31811cf1a8acbc2958 gas/testsuite/gas/mips/beq.s -44bb49c8b2818b785c9ad7d0dec45df4 gas/testsuite/gas/mips/bge.d -eca0c74d018c0e56f81d49381b5f9a6c gas/testsuite/gas/mips/bge.s -c4faa565be53610538b153932918c3c0 gas/testsuite/gas/mips/bgeu.d -5a9a9ba8716b251c9b6aea9a9ddfed78 gas/testsuite/gas/mips/bgeu.s -588722af7a657b70b24f95c275fb2939 gas/testsuite/gas/mips/blt.d -e28cc53eef33d048effa03ff1d696991 gas/testsuite/gas/mips/blt.s -c7725bfac64a9dd54047de1f24f4106d gas/testsuite/gas/mips/bltu.d -08821d562fd1d36b49bb73ec19a1b818 gas/testsuite/gas/mips/bltu.s -01e30fca71ae643c6acb0e4c3d579f1c gas/testsuite/gas/mips/break20.s -dd381a80a3175c0433c2778e559e66f7 gas/testsuite/gas/mips/delay.d -f8386c3523ad68825b3b91215e3ce856 gas/testsuite/gas/mips/delay.s -6ce614bbef53b14bfaae9d392f25d8e4 gas/testsuite/gas/mips/div-ilocks.d -e18c56b9627325cb9dfc2fb280a822a1 gas/testsuite/gas/mips/div.d -6da8cc8418138e9b9ee39ac970e437da gas/testsuite/gas/mips/div.s -e86f1ff9069e89abc5f1398f3c2537ba gas/testsuite/gas/mips/dli.d -89a3d7e768db094a0b11ede7bfca879d gas/testsuite/gas/mips/dli.s -e66f7bf10e7ba1ebcee5676a941b05f8 gas/testsuite/gas/mips/e32-rel2.d -f578f2ded6569ab283de19d512a81cdb gas/testsuite/gas/mips/e32el-rel2.d -ed701440c13f9150f1e0048ee440e710 gas/testsuite/gas/mips/elf-rel.d -eb8cd56831349b3482483c425b481301 gas/testsuite/gas/mips/elf-rel.s -d2a5c89ee0e80dc9e0bc21bb0e30c063 gas/testsuite/gas/mips/elf-rel2.d -f7a0c6062a5a8fe838e93a14441b72bc gas/testsuite/gas/mips/elf-rel2.s -a43901f3dcf1dd5a64c0fd2c23f20f7c gas/testsuite/gas/mips/elf-rel3.d -bed8097caa447a2852d225642aed4711 gas/testsuite/gas/mips/elf-rel3.s -6531d00a109f1e0829eda1178a1b886a gas/testsuite/gas/mips/elf_e_flags.c -6bbeff5a2159c064f18894cc7bd9b7ef gas/testsuite/gas/mips/elf_e_flags.s -4da3a439698c64eaff4bd734ce0c63c4 gas/testsuite/gas/mips/elf_e_flags1.d -f5171663be58260ab0f111c9a75b4bca gas/testsuite/gas/mips/elf_e_flags2.d -9aa4cb59fdd9f8957c758e5bbc51b7d4 gas/testsuite/gas/mips/elf_e_flags3.d -bd5416cb0030cdc4871db84d061ff5c6 gas/testsuite/gas/mips/elf_e_flags4.d -50e4a37ba95ae53c1e082de05669c17a gas/testsuite/gas/mips/elfel-rel.d -4a0d4da918ec2b87774c61b0ac676833 gas/testsuite/gas/mips/elfel-rel2.d -162ad232f56d6e4900c815de5cdaf845 gas/testsuite/gas/mips/elfel-rel3.d -2fd3b92c729abb0ea1523ccf238b5025 gas/testsuite/gas/mips/elfel-rel3.s -b1d5e0f6b6bf2a8981fc5cf052b4a312 gas/testsuite/gas/mips/empic.d -749cf53f3155f1f122aa79bf71ccacbc gas/testsuite/gas/mips/empic.s -b47234477b017d8640d0a583d17b44cb gas/testsuite/gas/mips/itbl -3be9cfa967f82e0b4325b152baf0f23a gas/testsuite/gas/mips/itbl.s -f749ed9a6daa0dcdfd342b2a75b42e76 gas/testsuite/gas/mips/jal-empic.d -21fcb5fb003bdd5da6023ae14ddf8136 gas/testsuite/gas/mips/jal-svr4pic.d -644da8eaec6c846730e2b965a6fb0e39 gas/testsuite/gas/mips/jal-svr4pic.s -fc6fd411b87de4fe1e4103bdfda61933 gas/testsuite/gas/mips/jal-xgot.d -027b54f716266d307c80de2320fcf930 gas/testsuite/gas/mips/jal.d -2a9d8534b670ee90e9212ab2a706cf87 gas/testsuite/gas/mips/jal.s -5ae53c3943254fdd8222308abb126d38 gas/testsuite/gas/mips/la-empic.d -e9c696756945df68acdf916951943741 gas/testsuite/gas/mips/la-empic.s -cbdace2f18d6d189af31230093ca5e3c gas/testsuite/gas/mips/la-svr4pic.d -68a536a51395e0081f92221ec4cb61e8 gas/testsuite/gas/mips/la-xgot.d -6705c5e988e1c2a99690af6dda603789 gas/testsuite/gas/mips/la.d -f479612dc60112156a66a5292a60b205 gas/testsuite/gas/mips/la.s -0417463ce8f1bbac44b82e9a09f58321 gas/testsuite/gas/mips/lb-empic.d -b941d24b4746291a2fe361540766913b gas/testsuite/gas/mips/lb-pic.s -1f66be9b27c8016b848e92a9acd96d5d gas/testsuite/gas/mips/lb-svr4pic.d -2f5e8e5ef8600d736cb629afe7485528 gas/testsuite/gas/mips/lb-xgot-ilocks.d -d9289421eb691d41e325b6dd6a18c1ae gas/testsuite/gas/mips/lb-xgot.d -b9b03ce62abe797e2aef0c820265c772 gas/testsuite/gas/mips/lb.d -e9d35a3d0cdd51294a858378d467574d gas/testsuite/gas/mips/lb.s -5120a014142934b9ec8957e5744a3260 gas/testsuite/gas/mips/ld-empic.d -767e91de3b9f92ce2a668642a2ea2fbe gas/testsuite/gas/mips/ld-ilocks-addr32.d -7cec7e938337dca05a5f45ca501cae66 gas/testsuite/gas/mips/ld-ilocks.d -3e1c4e9e2e45a90c704db383f9551b8a gas/testsuite/gas/mips/ld-pic.s -bdb41be78c421144777ffd68ce9cc12a gas/testsuite/gas/mips/ld-svr4pic.d -30530f8ed4203f0e6335f1f4af66c0ed gas/testsuite/gas/mips/ld-xgot.d -49b44c3c7b60070dfbdd9c8b2f3954ea gas/testsuite/gas/mips/ld.d -8b08d1b9548f0a0ece2cede37c07ec87 gas/testsuite/gas/mips/ld.s -1969dda2d40fff88c811833cd9ae5f51 gas/testsuite/gas/mips/li.d -b5df74ea9e934e9bf65cd0bba8eac411 gas/testsuite/gas/mips/li.s -9dbe0e03a5386d5721ff8fc5391dab33 gas/testsuite/gas/mips/lif-empic.d -3f909a73d3a8fcdb607e4cc27437766a gas/testsuite/gas/mips/lif-svr4pic.d -7005137e25034def6329f2f60e0996fd gas/testsuite/gas/mips/lif-xgot.d -24416fc0940341f36bc025aefc05c604 gas/testsuite/gas/mips/lifloat.d -a0a03d60c7fdb7e812a9f97325945910 gas/testsuite/gas/mips/lifloat.s -642de403c1e77713b324b2a165adf6f8 gas/testsuite/gas/mips/lineno.d -c2034fba9031ad7f3bc0a1128ae6198f gas/testsuite/gas/mips/lineno.s -b9be97c1aa73ebe314f85ce9890aa75e gas/testsuite/gas/mips/mips.exp -a9a10694a9e4101fc40f1b5fa6d8d999 gas/testsuite/gas/mips/mips16-e.d -4785c49a602347865df48551df7121fc gas/testsuite/gas/mips/mips16-e.s -0d9982c499e97a5f2a40d9b592586193 gas/testsuite/gas/mips/mips16-f.d -7146e7075936aa4a1434864cf7bf6d4e gas/testsuite/gas/mips/mips16-f.s -97b3d39a4f90d82f4d405ac12f4d5e72 gas/testsuite/gas/mips/mips16.d -a686ad0a2da9fe043d717c57b4580d0b gas/testsuite/gas/mips/mips16.s -15f633e687d2e28e792496ad3cb4dc4c gas/testsuite/gas/mips/mips32.d -9f4640a5a47e4b1a26a968bc837de82a gas/testsuite/gas/mips/mips32.s -282d43dd59cb14d4ee715f2131946725 gas/testsuite/gas/mips/mips4.d -1d91653bf695ab6b54caf527440eb0b2 gas/testsuite/gas/mips/mips4.s -f35695633c08bea813f1c5da947c770c gas/testsuite/gas/mips/mips4010.d -cd49d59fb8e9057e6313f5ff630015b9 gas/testsuite/gas/mips/mips4010.s -3fadda766878ce990b5372bc2d1096d5 gas/testsuite/gas/mips/mips4100.d -957bb8b99fce311beffd2fe9f3a0eddc gas/testsuite/gas/mips/mips4100.s -1e6151ac3b3ac15d2556fd22174e2a29 gas/testsuite/gas/mips/mips4650.d -5c10900661e0928e9a340c3c925418b1 gas/testsuite/gas/mips/mips4650.s -0b85782f82b845c698359f73731196c5 gas/testsuite/gas/mips/mips64.d -4929310e699e0e1ac8bc28e44030ebff gas/testsuite/gas/mips/mips64.s -d54d4a935c5a458282d8b82f7a890831 gas/testsuite/gas/mips/mipsel16-f.d -56c7733ca5f7e921738b527a5f447964 gas/testsuite/gas/mips/mul-ilocks.d -0b2e9dc8e1a3454098fd8fb66651fc5a gas/testsuite/gas/mips/mul.d -03190409f6e3f76c2b66c8ab590d10bf gas/testsuite/gas/mips/mul.s -24250759fab3a88ba80dc09edff83f78 gas/testsuite/gas/mips/nodelay.d -c46536d17d5ebad3eee458a52073330b gas/testsuite/gas/mips/rol.d -5f8fefb5bda995779109a3d959bc071f gas/testsuite/gas/mips/rol.s -d4c27ce7dd87092e695e4df919a7ef61 gas/testsuite/gas/mips/sb.d -15410af41b16b3678e11c8c7d4d6d7a7 gas/testsuite/gas/mips/sb.s -5d3f8be0295dfe3afa394af2d492190b gas/testsuite/gas/mips/sync.d -ffcef95bbefaf3a59e62285fe39bda76 gas/testsuite/gas/mips/sync.s -bb8eff4fb1f49d667833720ec1ed1a45 gas/testsuite/gas/mips/telempic.d -d7d31ccd74befcdad7317366421d5329 gas/testsuite/gas/mips/tempic.d -7ac6d404e2e9d57ca4cd51e929b836fe gas/testsuite/gas/mips/tmips16-e.d -f02641e647b4b68646fe54322af84d5f gas/testsuite/gas/mips/tmipsel16-e.d -a9f05cfa4f3975b1ec93ee3cc56561ec gas/testsuite/gas/mips/trap20.d -f7d1e998d2057f17dfa22040879794f5 gas/testsuite/gas/mips/trap20.s -0b9071247431c2b789835f4dc4ec45ec gas/testsuite/gas/mips/trunc.d -6206de0006f0d3b3552c2c4de6d4d40c gas/testsuite/gas/mips/trunc.s -e5f5b974d0da7c046bb033afcf60fc48 gas/testsuite/gas/mips/uld.d -4dfc3d5c85518711401b4a15122c6cea gas/testsuite/gas/mips/uld.s -ea3815f56ffded46b428ff097414aa19 gas/testsuite/gas/mips/ulh-empic.d -42668d2b953e17216dad9ff5b51a11b8 gas/testsuite/gas/mips/ulh-pic.s -5158cd2e3607a2a5db193c8407f2b383 gas/testsuite/gas/mips/ulh-svr4pic.d -ed27ca0c51a00192b6d32d81a354aa2a gas/testsuite/gas/mips/ulh-xgot.d -4c374b4e6113d1add0a7b267949a1bf0 gas/testsuite/gas/mips/ulh.d -d4c1e8e91b66176d0dd73baa903929d9 gas/testsuite/gas/mips/ulh.s -8a640531f9842fac05e6a906e0cd4e33 gas/testsuite/gas/mips/ulw.d -ed019962f9d9264d80ac0a3ec29faaf3 gas/testsuite/gas/mips/ulw.s -ab4867894e361a5bd27a784519eabced gas/testsuite/gas/mips/usd.d -c4f723634a0f69013515468922c55a04 gas/testsuite/gas/mips/usd.s -f0fac62ab8f363574dc13b6b5b43ec5d gas/testsuite/gas/mips/ush.d -fa20601e0c404bd38a90edf5f43077bb gas/testsuite/gas/mips/ush.s -3c18be69c1508086bc845c86099ddab6 gas/testsuite/gas/mips/usw.d -59b429c3b2d1ea0daf2377204cbdfdca gas/testsuite/gas/mips/usw.s -b00b8e50d58ac967e8e84c9dc8df9075 gas/testsuite/gas/mn10200/basic.exp -c58581edb3ac95b306f040bbc2c16678 gas/testsuite/gas/mn10200/add.s -b117e36f812c2eb416156d441f26185e gas/testsuite/gas/mn10200/logical.s -9411b8190fac3aad748696ea30bba5b0 gas/testsuite/gas/mn10200/bcc.s -efa2232339233fab01e2fe7ca6c2f3cf gas/testsuite/gas/mn10200/bccx.s -aabf4d8010190b4ebadb4d4dce938282 gas/testsuite/gas/mn10200/bit.s -3f51363ea969316f726dc5529904888e gas/testsuite/gas/mn10200/cmp.s -874b6bc0f155eecbaffecb93a5642416 gas/testsuite/gas/mn10200/ext.s -1ff17a9ade34cc243a67f4e5afb1873e gas/testsuite/gas/mn10200/muldiv.s -ea8599975d89b01f9aaba3b664947565 gas/testsuite/gas/mn10200/mov1.s -3386b14210f3cd873dde20c6166162c6 gas/testsuite/gas/mn10200/mov2.s -a0b70b1cc9ec5e2783428dcc483ee86d gas/testsuite/gas/mn10200/mov3.s -6e62837e492b9688e29de9625549b402 gas/testsuite/gas/mn10200/mov4.s -e37e1b13a06659d005a650675dcf3935 gas/testsuite/gas/mn10200/movb.s -f6ce44141165b449c3cb51ebe486e98e gas/testsuite/gas/mn10200/movbu.s -32dfde7ae5c5361c03c746481b7aee8d gas/testsuite/gas/mn10200/movx.s -723c642cba806a6ce6dda8c3881ef233 gas/testsuite/gas/mn10200/other.s -21b9f1644f5a62fdc603b218708648f3 gas/testsuite/gas/mn10200/shift.s -7ac2864fac53b6b778c4aba3efb1a2e1 gas/testsuite/gas/mn10200/sub.s -3c5d635c4e529ba743b2062006ab8a00 gas/testsuite/gas/mn10300/am33_2.s -02ba050389aba06e510285db97af882b gas/testsuite/gas/mn10300/add.s -3bb44c38f4fbab75c570123d255c57f8 gas/testsuite/gas/mn10300/am33.s -dfe221c89fe65738a2360f231c2b6794 gas/testsuite/gas/mn10300/am33_3.s -593bbef9992d2f23b91f4ea176b28957 gas/testsuite/gas/mn10300/am33_4.s -62ae8325beee2a8180a39e125355ba2b gas/testsuite/gas/mn10300/am33_5.s -90dcb58c5eb364963271d465adac73ef gas/testsuite/gas/mn10300/am33_6.s -ae77079066eabaa0cc3b0db53f95500b gas/testsuite/gas/mn10300/am33_7.s -631a649907d27d317cee70928c6c27fc gas/testsuite/gas/mn10300/am33_8.s -04890830259a2f960fa1ef6f2d344ee8 gas/testsuite/gas/mn10300/basic.exp -9411b8190fac3aad748696ea30bba5b0 gas/testsuite/gas/mn10300/bcc.s -b15e3790182c7ba25b21a4185f2a55e6 gas/testsuite/gas/mn10300/bit.s -647a9c89d56b470cb3fef7839a32834d gas/testsuite/gas/mn10300/cmp.s -3828018d3809076328223d9d3c1e48c5 gas/testsuite/gas/mn10300/ext.s -f6db4622ff4a88bc9ebf44aec56bc245 gas/testsuite/gas/mn10300/extend.s -f2b5260884e40bc35f8694403da505f8 gas/testsuite/gas/mn10300/logical.s -d3d15560536638ff0e38a1cd6bea678a gas/testsuite/gas/mn10300/loop.s -e554261a6559698fe2722b841dd1b5e3 gas/testsuite/gas/mn10300/mov1.s -1453d74ea0d60c24e054f9443aa26fe4 gas/testsuite/gas/mn10300/mov2.s -8d091f8bc50686881c4104f6dc9b6ab7 gas/testsuite/gas/mn10300/mov3.s -e5df57ebcca23c27b6c2399780e9a146 gas/testsuite/gas/mn10300/mov4.s -384122880cfa3e6fa4a8b08c350c62a8 gas/testsuite/gas/mn10300/movbu.s -075a3ba2756f3cf09ac1926492ccf614 gas/testsuite/gas/mn10300/movhu.s -155d5bd225998f0bf8a65d543230adc5 gas/testsuite/gas/mn10300/movm.s -aa222b2f903cde208e2be8c3972e3c8a gas/testsuite/gas/mn10300/muldiv.s -9cbe29313848966be970cdecdc09e7b2 gas/testsuite/gas/mn10300/other.s -293fa500fcb2e85940176a545801b046 gas/testsuite/gas/mn10300/shift.s -ed9edfd6a0eea176f6974376bd321b10 gas/testsuite/gas/mn10300/sub.s -961a51d51720b650cb383a6aa510d4d9 gas/testsuite/gas/mn10300/udf.s -4b259d611c94c789b73572d5b0863a5b gas/testsuite/gas/mri/comment.d -5ffc5b9af8cd82e8ff721a39d583a9cb gas/testsuite/gas/mri/char.d -016f8a629209b7d7313c4a4e3c37c909 gas/testsuite/gas/mri/char.s -84c565776c727a1f5986b5d8d39ba13e gas/testsuite/gas/mri/comment.s -aca62962ea755bbc1aaeb56b32c53974 gas/testsuite/gas/mri/common.d -7b6bfc157de809b518bb8820f293f78c gas/testsuite/gas/mri/common.s -c3db4a831aaf5f148abfde517fff14f2 gas/testsuite/gas/mri/constants.d -df9ad2212b59618793c7080d043c14e4 gas/testsuite/gas/mri/constants.s -2258c0445fb6b2005828c77b96c0520a gas/testsuite/gas/mri/empty.s -78ea402a49a07c1a325a03a28be37678 gas/testsuite/gas/mri/equ.d -83843a1d515852848a6fc1054a984792 gas/testsuite/gas/mri/equ.s -ceec8399c07b39bee0a4ea07eece6d2f gas/testsuite/gas/mri/expr.d -21255a47a57f7e00246072b10af9b641 gas/testsuite/gas/mri/expr.s -bc4dc43acfdddf49f994908c7e26abe6 gas/testsuite/gas/mri/float.d -4f7756364607bd924587f3689b8b16b7 gas/testsuite/gas/mri/float.s -2e7a0a8ee1508d01e6532c6c6c7b11b1 gas/testsuite/gas/mri/for.d -70d33f74b91d862f9f9b6c4dd173ce58 gas/testsuite/gas/mri/for.s -75333d0367e1162e0f31471a7731fbf5 gas/testsuite/gas/mri/if.d -ba2ce35b0663f91570cc0725695f2f0f gas/testsuite/gas/mri/if.s -4b03ed946465a72d469e2aeff2ddd6f5 gas/testsuite/gas/mri/immconst.d -f1f5c0c93c39409b9a82cf956d42e39e gas/testsuite/gas/mri/label.d -ed17ca77ec65b8492a436ad06a222487 gas/testsuite/gas/mri/label.s -31e12f9de66d36f631e1883a3f763077 gas/testsuite/gas/mri/moveml.d -4e57586c117d02856b0a1e2fe1e199cb gas/testsuite/gas/mri/moveml.s -6f90672446c28d52cef0a7a5ce335254 gas/testsuite/gas/mri/mri.exp -4f6263a77a91affd2a0cd34b177000bd gas/testsuite/gas/mri/repeat.d -1684df3330c24639ae41d526858b2a80 gas/testsuite/gas/mri/repeat.s -67ebccbf76d5002534361af491abfddf gas/testsuite/gas/mri/semi.d -da1cdabe1af1adb9735d5d609dccca32 gas/testsuite/gas/mri/semi.s -bf93368342190b86a250e95b9de09d8a gas/testsuite/gas/mri/while.d -cdd1ad74d4bb0147f32931b83c7383be gas/testsuite/gas/mri/while.s -f3a7124485548781ba12a81c18199e29 gas/testsuite/gas/pj/ops.d -308d2177ed3b3b087d977e46c924fc0c gas/testsuite/gas/pj/ops.s -a6667ed6fc7b116477f95ef897bc5444 gas/testsuite/gas/pj/pj.exp -96a9890816c6c3314d3862d35fe59f3f gas/testsuite/gas/ppc/astest.d -5254d1fc440f434a46e97eb96b2735c1 gas/testsuite/gas/ppc/astest.s -b9b4926634e4c4e6e812b47b38a2f84b gas/testsuite/gas/ppc/astest2.d -9ae09fa391c3aa343824a7745551b28e gas/testsuite/gas/ppc/astest2.s -318ca470fd4b138732e4907c229b9bf6 gas/testsuite/gas/ppc/ppc.exp -d2e3625ca66a7c30b9270f806c67c877 gas/testsuite/gas/ppc/simpshft.d -0fc9ce29053c855d0a3abe241d93c961 gas/testsuite/gas/ppc/simpshft.s -f32ff8e646f5d0e0fbc6ecb76c4682e5 gas/testsuite/gas/sh/basic.exp -83d353a7646413b74d2087aa22fae13b gas/testsuite/gas/sh/err-1.s -495cac29a4993f28c4782ef285228c38 gas/testsuite/gas/sh/err.exp -70b8c1e3f6395cf992292993dcbdf601 gas/testsuite/gas/sh/fp.s -4b815d3da1c2d2bceeb98994c659c492 gas/testsuite/gas/sparc/membar.d -392efaa6637a8734d3ab35e579615a53 gas/testsuite/gas/sparc/asi.d -8f35c68aef641d7cc35698d67a32557e gas/testsuite/gas/sparc/asi.s -521b5671f3aa6bae70f78b5f3d37de1a gas/testsuite/gas/sparc/membar.s -12b5e618325d4a4bc80cb8766bbfc064 gas/testsuite/gas/sparc/mism-1.s -706c79f848f389921b20f0f64dde1ecd gas/testsuite/gas/sparc/mismatch.exp -d85c226fa388a66bd2689ba3efedf5e4 gas/testsuite/gas/sparc/prefetch.d -0b615422f6c8ad3fe5c42f2a8c7af1e4 gas/testsuite/gas/sparc/prefetch.s -9c7bc5ce86d96a964c5c7f02d43db0da gas/testsuite/gas/sparc/rdpr.d -09f5e33dbd927c548c928b9db9f14fe0 gas/testsuite/gas/sparc/rdpr.s -78517d2fce6c7707fd2f09689ebc3d72 gas/testsuite/gas/sparc/reloc64.d -7d56aec0e050e09c004a33abd25a9293 gas/testsuite/gas/sparc/reloc64.s -08afa18cf165a3043a6b92153526c876 gas/testsuite/gas/sparc/set64.d -1facb5655fe83c44ac900776c563e717 gas/testsuite/gas/sparc/set64.s -59861c3ea98eff8780189bc79824a7b4 gas/testsuite/gas/sparc/sparc.exp -3564e46bcf53613a512e32f2633c3d05 gas/testsuite/gas/sparc/splet-2.d -69817b445f39a0e3cf591de872fa74e5 gas/testsuite/gas/sparc/splet-2.s -5fa3fb7a059f3fd315df0af21e0c9619 gas/testsuite/gas/sparc/splet.d -6236b0423a317e0a2340bdb317c54d1e gas/testsuite/gas/sparc/splet.s -a6b1a41bb26dc70e130bc42ef7133cc7 gas/testsuite/gas/sparc/synth.d -0e0dead95b89c31c1ed49b21c430bc1a gas/testsuite/gas/sparc/synth.s -b041cafa83c1f1f131ca949780217e54 gas/testsuite/gas/sparc/synth64.d -0303005116e0116e28f1dd473ca39f28 gas/testsuite/gas/sparc/synth64.s -8f196520d2f35fd1890df94723f6aec3 gas/testsuite/gas/sparc/unalign.d -1eeb1d4db023af72c50e896a4bb90638 gas/testsuite/gas/sparc/unalign.s -10dd2c15d6932af5f1203d03fbc6dae6 gas/testsuite/gas/sparc/wrpr.d -d44c4548a463c3e491d6fdaaa0f20177 gas/testsuite/gas/sparc/wrpr.s -f65f40edb42735b8af3a4baaacd662f5 gas/testsuite/gas/sparc-solaris/addend.exp -7dd4467acc1dda3c1753ebcbfeeead33 gas/testsuite/gas/sparc-solaris/addend.s -dd2ab79e6bd90288569274206313966b gas/testsuite/gas/sparc-solaris/gas.exp -b2d813e248b8ec085ca8d551271274bf gas/testsuite/gas/sparc-solaris/sol-cc.s -2e927e8072e145441bb882a01e3ac8cd gas/testsuite/gas/sparc-solaris/sol-gcc.s -54a6b727f437bf7989e266329d0dd875 gas/testsuite/gas/sun4/addend.d -b648f70387617b14507805caeea0b6d6 gas/testsuite/gas/sun4/addend.exp -7dd4467acc1dda3c1753ebcbfeeead33 gas/testsuite/gas/sun4/addend.s -8d19328fb89c3001a897cbf2f4f3b92d gas/testsuite/gas/symver/symver.exp -f942ca1487fba1e0fa62d14b0f2cca1d gas/testsuite/gas/symver/symver0.d -7f2d42503901978e4eb5bab37fd01df2 gas/testsuite/gas/symver/symver0.s -711847708837ed39c80fa62ab704b649 gas/testsuite/gas/symver/symver1.d -1d6eb4d5a6cbf6ac541ca7d4c561b74f gas/testsuite/gas/symver/symver1.s -b44c04d7f2b689d60bccae544b854f95 gas/testsuite/gas/symver/symver2.l -7214f11688ed0284f53c3c060fa973bf gas/testsuite/gas/symver/symver2.s -d37568e052e76a50c9d4775eede01585 gas/testsuite/gas/symver/symver3.l -7f58a39bd0e6eda06fa15260adaa1044 gas/testsuite/gas/symver/symver3.s -aaf2746f913c7c81f487786bd9b99543 gas/testsuite/gas/symver/symver4.l -ff40f84c77b398ca408422048eb1684e gas/testsuite/gas/symver/symver4.s -c2401f7310b24ae252e1905a90fbb133 gas/testsuite/gas/symver/symver5.l -ed56c563fc819e4c50c4160a17f8abae gas/testsuite/gas/symver/symver5.s -a3a92a55022c0edb85d34af1d1739ee8 gas/testsuite/gas/symver/symver6.l -73c983230d1435795774501e7247e78c gas/testsuite/gas/symver/symver6.s -06219e9948de26c5c3c06e783256d8e5 gas/testsuite/gas/tic54x/address.d -78c05303f9f0cbc1a4610cafd8684961 gas/testsuite/gas/tic54x/address.s -fb347ccf07d51593edd432f687aa5376 gas/testsuite/gas/tic54x/addrfar.d -25c170a2e98a7b134c9d90c32965c1b3 gas/testsuite/gas/tic54x/align.d -59a3b1b5bc5d51e4f20df8ea41128d88 gas/testsuite/gas/tic54x/align.s -6b7b3e8e956870e9d7ce471e2a1b6ebf gas/testsuite/gas/tic54x/all-opcodes.d -16b138265d758ee38dbf89a41696f4b4 gas/testsuite/gas/tic54x/all-opcodes.s -6ed8469e573b882990ad930cd270b1b1 gas/testsuite/gas/tic54x/asg.d -64c9ec95e386f8e5d0040c26fee7321c gas/testsuite/gas/tic54x/asg.s -fcd7df0d00621d5b547d92bd23c4ca62 gas/testsuite/gas/tic54x/cons.d -671f83be79acf4e42032f33d828864ac gas/testsuite/gas/tic54x/cons.s -2f04f28d19f65600c0958cf168558a6d gas/testsuite/gas/tic54x/consfar.d -f29bcaee02fc92a68ccfdd32f6999527 gas/testsuite/gas/tic54x/extaddr.d -7eae8033cffbecce992afdaa9c339ff6 gas/testsuite/gas/tic54x/extaddr.s -953d25fcac101a1860be2b36bb61ec50 gas/testsuite/gas/tic54x/field.d -534ff025c4a332a0b3a4811c889d9637 gas/testsuite/gas/tic54x/field.s -e8334221e9d81711a8120983fc654f4b gas/testsuite/gas/tic54x/in_mlib.asm -6b81ff294df52cc2ee0cde1d128f3253 gas/testsuite/gas/tic54x/labels.d -aae9f04acb5f59969bf1f0465d7c78bd gas/testsuite/gas/tic54x/labels.inc -b745801cf3d0eb59ca1b1a583e26a0b1 gas/testsuite/gas/tic54x/labels.s -28e2dc705290da3c4d7010494599f100 gas/testsuite/gas/tic54x/loop.d -4a609e1f44de00f164f48203d5df870b gas/testsuite/gas/tic54x/loop.s -eb2b6fc38f9bd4793dd7020a05122e3b gas/testsuite/gas/tic54x/lp.d -2c650e0c313376b80d7a6950039ff3b4 gas/testsuite/gas/tic54x/lp.s -c8161a6bcb529ab6c94cfa3a3521e429 gas/testsuite/gas/tic54x/macro.d -d76d2e7a0d946a16279b4eeafcfa0cc7 gas/testsuite/gas/tic54x/macro.s -09c277ba1f7d69551c473cd20cbb14bd gas/testsuite/gas/tic54x/macro1.s -ddbfc019917d779c19002992f3929367 gas/testsuite/gas/tic54x/macros.lib -7ad5a03901cc52759b77b30e51f34875 gas/testsuite/gas/tic54x/math.d -1ff7d6cd1fb20b8cde42e82ea5e38dfa gas/testsuite/gas/tic54x/math.s -aa3b0bac4ffdf82c7a4b6121ec3fc560 gas/testsuite/gas/tic54x/opcodes.d -03c7d9751c849b0f4a04ce24d181e494 gas/testsuite/gas/tic54x/opcodes.s -d1f6def2d5b9c1a697baaa24128bc192 gas/testsuite/gas/tic54x/sections.d -4c9b7302923b60d63cd64bee9dd621d5 gas/testsuite/gas/tic54x/sections.s -41deec8226f138d357d5a06609ff7c1b gas/testsuite/gas/tic54x/set.d -cdf1f13fafc4d4abd831567cdda40eff gas/testsuite/gas/tic54x/set.s -cdf7f966b14c2ae2815b55e4b6eaa023 gas/testsuite/gas/tic54x/struct.d -28bcc7e09d20e59e1ccb70e318f45324 gas/testsuite/gas/tic54x/struct.s -3a49bc7e30027613e26e13d25b7f5dbd gas/testsuite/gas/tic54x/subsym.d -a6d4e40952285da31a31a7146766dc04 gas/testsuite/gas/tic54x/subsym.s -a3547e6b13dd61f04ad639ae18c38bb3 gas/testsuite/gas/tic54x/subsym1.s -b2df4dd8056e7236407bbc4c60b27b02 gas/testsuite/gas/tic54x/tic54x.exp -f3ab69523e22267482a9bb7a4ca35543 gas/testsuite/gas/tic80/align.lst -bed809ed517aeb7c1246209c7f5b0ede gas/testsuite/gas/tic80/add.d -98eb432f2b3667f4172bc7bf8279fae8 gas/testsuite/gas/tic80/add.lst -126505861238887b38542c2c007b4f44 gas/testsuite/gas/tic80/add.s -26a1a236ac7ccef8f9d5ae9f771a1e15 gas/testsuite/gas/tic80/align.d -e184de59b384a0b61f611f43fd0481db gas/testsuite/gas/tic80/bitnum.d -0bd85a81ad6b84115fb27616eec5abd5 gas/testsuite/gas/tic80/align.s -4e8424d297ee11749b57a2dec2bfd7be gas/testsuite/gas/tic80/bitnum.lst -8670ee2178617d2fab1746489ec22609 gas/testsuite/gas/tic80/bitnum.s -4d4729704be4f2a668a5b8f589fc6922 gas/testsuite/gas/tic80/ccode.d -ee5b688ae7df591cadc29f06f26845a0 gas/testsuite/gas/tic80/ccode.lst -2b9858d4ebadb84b9197d33ccc1422e1 gas/testsuite/gas/tic80/ccode.s -7a715f4871362014afea0032c8ab1bde gas/testsuite/gas/tic80/cregops.d -74aaf84be9651b7d468afe9d57016a6d gas/testsuite/gas/tic80/cregops.lst -ef4ba470d30ac045a040677b704ffc66 gas/testsuite/gas/tic80/cregops.s -626d4a37405c1c8ebc93a7be21c2a9b0 gas/testsuite/gas/tic80/endmask.d -46833c7025b93bab36f855a40a5be3ce gas/testsuite/gas/tic80/endmask.lst -00643dd65f546646666046d4e2cfdef5 gas/testsuite/gas/tic80/endmask.s -6fa3699cda567401f6236547132b0d20 gas/testsuite/gas/tic80/float.d -f97907246c6a0d4370a3b08b1f7d6829 gas/testsuite/gas/tic80/float.lst -e9392428f1929a6f12c8d0c5bfc7d95c gas/testsuite/gas/tic80/float.s -924d1ef98e49d0d881d7936c76795f26 gas/testsuite/gas/tic80/regops.d -68f717e98126f6612a5fa278576ffcb1 gas/testsuite/gas/tic80/regops.lst -16bbb022a6816956f454d4f141d87b8f gas/testsuite/gas/tic80/regops.s -ff82220cf29c5cd876cb0ba8a495695a gas/testsuite/gas/tic80/regops2.d -207cc576c6c79969fe4510ae1c0fb1e0 gas/testsuite/gas/tic80/regops2.lst -0e21bec7cf7231f015d0890f3c60c750 gas/testsuite/gas/tic80/regops2.s -cab98129d538fef49483e468bea9cab7 gas/testsuite/gas/tic80/regops3.d -fb72f4fadb5605b36c53f5c798139907 gas/testsuite/gas/tic80/regops3.lst -dca27d2d5b2888ad207b35cbb5a5c1bf gas/testsuite/gas/tic80/regops3.s -4a437df1abe33ea3d6b4a744dd1b3c71 gas/testsuite/gas/tic80/regops4.d -d127941ee0d43b5f508f2e40744df9fc gas/testsuite/gas/tic80/regops4.lst -610f8fb61cc924958615f15cbd3fb591 gas/testsuite/gas/tic80/regops4.s -987bf57eb106e1f96eef6b5a8add52c1 gas/testsuite/gas/tic80/relocs1.c -96d6b8f21498eb373bcd7cf1c0438c0c gas/testsuite/gas/tic80/relocs1.d -1932c15229e0d07381c8f8cea548fd75 gas/testsuite/gas/tic80/relocs1.lst -db5aaea7f4cbc104391f2a92ac06f28f gas/testsuite/gas/tic80/relocs1.s -22e1b37d7fdb2c192a1203a5e71a7fad gas/testsuite/gas/tic80/relocs1b.d -e53f695a65c5ec81a507b69f66537d65 gas/testsuite/gas/tic80/relocs2.c -420fdeac1619d019ca440ea87663d870 gas/testsuite/gas/tic80/relocs2.d -04fecb799cbd9447e058e8d53ed75ff4 gas/testsuite/gas/tic80/relocs2.lst -5c763a74cae5be60ace2421226e27631 gas/testsuite/gas/tic80/relocs2.s -2c1dc022a0f215dae6dea890f28798d8 gas/testsuite/gas/tic80/relocs2b.d -d7d5f18226711cd03767a8e2538cdbef gas/testsuite/gas/tic80/tic80.exp -ce0fc256b576a00b3292ad52441d079c gas/testsuite/gas/v850/basic.exp -b3daff1073feeab915c5d25268ab1d71 gas/testsuite/gas/v850/arith.s -d33db5351243bff28f76ada8284737dc gas/testsuite/gas/v850/branch.s -fd5263cb3409650f6bb2e9b610eab2d9 gas/testsuite/gas/v850/bit.s -e3d311e55349338e4876c3711ed91c46 gas/testsuite/gas/v850/compare.s -986292c2ba21464166aa337ab580a139 gas/testsuite/gas/v850/fepsw.s -5f8e79e5bec30791f19218a7ad23040d gas/testsuite/gas/v850/hilo.s -f7d87df456dee97f2d28be5a29afde0a gas/testsuite/gas/v850/hilo2.s -36254aabdcf9005f2dd8e7fba47de388 gas/testsuite/gas/v850/jumps.s -ee5a6da54e89a759bccef5da2ce4747e gas/testsuite/gas/v850/logical.s -79263247214c7d46c383e26aafc74d31 gas/testsuite/gas/v850/mem.s -2db16d6b7c2aa2cc17e621ac1da852eb gas/testsuite/gas/v850/misc.s -8c5fd0446e831223f93adebecec8a2b2 gas/testsuite/gas/v850/move.s -90c3465d11f275837ad5b9cac2dd51c4 gas/testsuite/gas/v850/range.s -10e8b025bce8af1b59c395fc5799236c gas/testsuite/gas/v850/reloc.s -9dab247181eb9a6ca08677f2b567cec0 gas/testsuite/gas/vax/quad.exp -c36a2f8942f73fe7a5550ba90d2ecfd7 gas/testsuite/gas/vax/quad.s -1e191c0d4f723e71c2f4f44b14cfa942 gas/testsuite/gas/vtable/entry0.d -bb679f23724eed5be0d4524e7f14005c gas/testsuite/gas/vtable/entry0.s -0b1998d125aec2d1e508c646ac5da657 gas/testsuite/gas/vtable/entry1.d -bb679f23724eed5be0d4524e7f14005c gas/testsuite/gas/vtable/entry1.s -64f7daf21aa03263ec1f75c8b4ebbebe gas/testsuite/gas/vtable/inherit0.d -a37bd60d99eb2ada7ec2360039dc1b4a gas/testsuite/gas/vtable/inherit0.s -a90dff346874aeab5a7833b62a12e5db gas/testsuite/gas/vtable/inherit1.l -fcc7f1b5a640e5714a1bcd9d50df7979 gas/testsuite/gas/vtable/inherit1.s -1b1f9e422b1d90576fac2ffee6256a9f gas/testsuite/gas/vtable/vtable.exp -5c08b2b199bcea246a03344173d3f96b gas/testsuite/gasp/assign.asm -99deacf6e3a96c8e21a453709af6ca01 gas/testsuite/gasp/INC1.H -a926c95abb0d81a9a764bed20ca06f0c gas/testsuite/gasp/INC2.H -269356bda8c304ef47bacd331b4fc968 gas/testsuite/gasp/mri/embed.asm -fd5ca6b2f3c6e59aa7040e532f28600e gas/testsuite/gasp/mri/embed.out -6b8744910f78aef4b165e287973af04f gas/testsuite/gasp/mri/exists.asm -ac5385c093c3023ebc8370ef66cf3b41 gas/testsuite/gasp/mri/exists.out -ceadf5cddc8000502be2f2fbc24cabec gas/testsuite/gasp/mri/irp.asm -c41e38e1116c0009a93516f09e86f839 gas/testsuite/gasp/mri/irp.out -728e6db3e88d2ddb22e424fc2e404dae gas/testsuite/gasp/mri/irpc.asm -c4d925d7fdc60ddafa773c5b7830cf2e gas/testsuite/gasp/mri/irpc.out -bc9ea91fe33eea9993f7dd5b737cb880 gas/testsuite/gasp/mri/macro.asm -8bf5e77911c284a34bfdf9c3f34d9e49 gas/testsuite/gasp/mri/macro.out -7a68842c90401e4b34071449715e0f0e gas/testsuite/gasp/mri/narg.asm -87693669559588c329af7213cd9c487a gas/testsuite/gasp/mri/narg.out -d0af25ef7f1c265d961ee9e088cf8276 gas/testsuite/gasp/mri/rept.asm -e2065f7a89c27a29049327cf8e31b18e gas/testsuite/gasp/mri/rept.out -563a4800e8b40729415090306bce6554 gas/testsuite/gasp/assign.err -42447b48e38c0caa7934fe72d48f1724 gas/testsuite/gasp/assign.out -7e11017965ff9319ca614e437e3b269a gas/testsuite/gasp/condass.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/condass.err -e7bf1012067a2a9008084234aea5c23c gas/testsuite/gasp/condass.out -03ec63f9050b6d77982db47bd7216cda gas/testsuite/gasp/crash.asm -f92c854daee87f8949312ec1faf02864 gas/testsuite/gasp/crash.err -9f1a1ec87f3fcc35cf3ab8f943ee0f04 gas/testsuite/gasp/crash.out -70aced41deb34edfe61b2888a0f2d2b4 gas/testsuite/gasp/crash1.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/crash1.err -a23d7921aa2ba917503b2994e53ddf1a gas/testsuite/gasp/crash1.out -0a6ae29a56ebe74b4f93dc149949dbe5 gas/testsuite/gasp/crash2.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/crash2.err -d18e176c99fab5d444ef8ef98ef476c1 gas/testsuite/gasp/crash2.out -e8e046b711151d3439e06411493b6b67 gas/testsuite/gasp/data.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/data.err -dd5d6726c6d3ab3b244367d15e5a33a5 gas/testsuite/gasp/data.out -d3a831ce902a2c7a641807d41bf060b3 gas/testsuite/gasp/exp.asm -635e19beab5dc8dbda0faae105390da5 gas/testsuite/gasp/exp.err -3cfa517a87ee6808108dd82d821a9142 gas/testsuite/gasp/exp.out -d9840554d6f6404180190fb46ecfa609 gas/testsuite/gasp/gasp.exp -6952d6e84b8eff6f8ad3735049384d9b gas/testsuite/gasp/include.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/include.err -38f5ce2c3d1abd4c85cbae3381a35d00 gas/testsuite/gasp/include.out -b336cf59f3381637b0bbc85903836f49 gas/testsuite/gasp/listing.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/listing.err -d64ca2c01c09d852ee97d0b9e283f427 gas/testsuite/gasp/listing.out -2cbe9e11582b63f485413fb0c8d4882a gas/testsuite/gasp/macro.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/macro.err -3aeb89bd83e0cf8b84c7281b5191ba07 gas/testsuite/gasp/macro.out -8111773c73a99298c21c45704eb6fa11 gas/testsuite/gasp/mdouble.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/mdouble.err -fbfd85681f676ecec67e21d8aa571bf6 gas/testsuite/gasp/mdouble.out -a7284cd713fd12560f811939fc784860 gas/testsuite/gasp/pl1.asm -76cefca44793036ef20556314fdafadd gas/testsuite/gasp/pl1.err -266d215f1b5b7d6743c3bb75be698654 gas/testsuite/gasp/pl1.out -b67a3bb2f6c1256c5252c8f3b6e76bfd gas/testsuite/gasp/pl2.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/pl2.err -21bd454e41c190fc028359db94f60626 gas/testsuite/gasp/pl2.out -80cb3c666405f7145b2a385fc6e4dfbd gas/testsuite/gasp/pl3.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/pl3.err -089301edb4b459a59d61ffcfe7d709dc gas/testsuite/gasp/pl3.out -b8410781da6854955ede10668b40acb0 gas/testsuite/gasp/pl4.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/pl4.err -4344b2df49ee03937e0e6757e9546441 gas/testsuite/gasp/pl4.out -f0836880911e25120d0e919a3e3c9a6e gas/testsuite/gasp/pl5.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/pl5.err -531bce879bdb6df7858a251b2489548c gas/testsuite/gasp/pl5.out -214848f5a01f2721b749c0d6d179fc7a gas/testsuite/gasp/pl6.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/pl6.err -6c5154a2e0886aa2ed34040e9fe697c4 gas/testsuite/gasp/pl6.out -ed7dc7cdd7cba3f7d2bfd972654e741b gas/testsuite/gasp/pl7.asm -76cefca44793036ef20556314fdafadd gas/testsuite/gasp/pl7.err -2b0bfdec74d0f2d405f6dcaf11e9cb9d gas/testsuite/gasp/pl7.out -c2ec7a594dd444a867ccb269a255c592 gas/testsuite/gasp/pl8.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/pl8.err -a01ab58299b4bbda08c5a55e3152301d gas/testsuite/gasp/pl8.out -1b8fdb309983468765a0f26231b7db2a gas/testsuite/gasp/pr7583.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/pr7583.err -a29f353fa5f949d2eb12b499baf3bd0c gas/testsuite/gasp/pr7583.out -f94a30de39715bba6e11b2720e2a7a24 gas/testsuite/gasp/reg.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/reg.err -129ad1aea55cbd6afe5b5e44c433ee57 gas/testsuite/gasp/reg.out -6287f41f28e5d0a372bcec00489a1fcc gas/testsuite/gasp/rep.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/rep.err -0d497169dff397f2e446fe23b5ee981f gas/testsuite/gasp/rep.out -a91feea67b9afd9c2d123299e917cdb2 gas/testsuite/gasp/repeat.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/repeat.err -7fe9d715fbf1f3e90c282b69c8a388af gas/testsuite/gasp/repeat.out -a0420f1482401d14d10ef4d4c8da644f gas/testsuite/gasp/reperr.asm -76cefca44793036ef20556314fdafadd gas/testsuite/gasp/reperr.err -f4c30bc7915f5d47168f3b47094c1449 gas/testsuite/gasp/reperr.out -e042647132f714b19a98c4ab535fcf69 gas/testsuite/gasp/reperr1.asm -527eea9a7e1feaa36aee5f84c4691465 gas/testsuite/gasp/reperr1.err -5bde34ef89fa801ac3eaf1c59f7d4763 gas/testsuite/gasp/reperr1.out -b4b91fe28ecaa31df9618a2a4a9e2a76 gas/testsuite/gasp/reperr2.asm -443731a66bbfcc1831647071a681f5b1 gas/testsuite/gasp/reperr2.err -a9f1da65b7f9da6492a84ce6296970fa gas/testsuite/gasp/reperr2.out -f85e0a8deb6e54c906e2750b42d7cfd2 gas/testsuite/gasp/reperr3.asm -4eeca830592748b13cde26461bac739b gas/testsuite/gasp/reperr3.err -2f151098b19ade3dad0cbef222e86a5d gas/testsuite/gasp/reperr3.out -1b326c95c48895d14dba16c01e763bb0 gas/testsuite/gasp/sdata.asm -0c62f96d2af905dfa64eb1427a600c11 gas/testsuite/gasp/sdata.err -657f7bdf02673edba4a055158e9cb587 gas/testsuite/gasp/sdata.out -6b52ad9f5150dfabecadf59651b01012 gas/testsuite/gasp/sfunc.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/sfunc.err -3f5c6078bb1164493fd7d975fa78134c gas/testsuite/gasp/sfunc.out -c928b32a65029c49d6add1539b555a17 gas/testsuite/gasp/t1.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/t1.err -37921430797b568a3ac395ffdcd1030c gas/testsuite/gasp/t1.out -94f4985650874fa3f2223be2ca97a494 gas/testsuite/gasp/t2.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/t2.err -e63f0cf737dcecca010288e940156820 gas/testsuite/gasp/t2.out -0aa649aaacfcdbf138acd6302e51444b gas/testsuite/gasp/t3.asm -76cefca44793036ef20556314fdafadd gas/testsuite/gasp/t3.err -cb8d602227b2b4e0ee0cbc24905b1c92 gas/testsuite/gasp/t3.out -65f971bbfd23b3e6f4f256550fa6c999 gas/testsuite/gasp/while.asm -d41d8cd98f00b204e9800998ecf8427e gas/testsuite/gasp/while.err -a68b47ff34892c8fa97aaf9cc09bc975 gas/testsuite/gasp/while.out -133e9f8bb4d12ac7e498f0ac5d0246c0 gas/testsuite/lib/doobjcmp -5725f8e58e03bd6026f3e2721e1db22e gas/testsuite/lib/doboth -aad4965bf0067bf9fb71acc19f7877d4 gas/testsuite/lib/dostriptest -bdf5e4dee40167a92f0a45965b0375b7 gas/testsuite/lib/dotest -af650aab07403b5a05623713b613856f gas/testsuite/lib/dounsreloc -30764ced5c424e3c2c384059cbe2a227 gas/testsuite/lib/dounssym -5cbf6643d54a0c593fffc5eb026afd65 gas/testsuite/lib/gas-defs.exp -d78aaf1191d033531d00fa9888214ee0 gas/testsuite/lib/gas-dg.exp -499042a4448e4b2d3bd2b2a1b0b5d859 gas/testsuite/lib/run -c25a2b439faecdbc5a8cd011fb753f1f gettext.m4 -f830d343ce09eb11786979f2ce0bf68d gprof/po/POTFILES.in -bfb5c178c2404196ab54d7532a61e3d4 gprof/po/Make-in -ba1bcadd6275dd4ce7f7663645c967ac gprof/po/gprof.pot -b167dc5dcf583c07feecea0f8003e647 gprof/.gdbinit -8b210aedaec55d2d7d197fc9fd49e2de gprof/ChangeLog -d618facc3e8ce8bf3d02ba452e1be6ab gprof/MAINTAINERS -deef5e76f10703bf9ad39c89e1900111 gprof/Makefile.am -eb9abc12601593ac6521d4786a708b77 gprof/Makefile.in -55be9544e8fe419300921fa44a0aa692 gprof/NOTES -84c06350a03466660f0f691ed1220657 gprof/TEST -62728c5b834e3893e5414a8bae9a99d8 gprof/TODO -b33dab2d2e4ea1694e3d63ff4715142b gprof/acconfig.h -2e77183c94ff25e517327793c2db2e55 gprof/acinclude.m4 -245c5c6842c9a94a0e48a3d8deeebe75 gprof/aclocal.m4 -e778a923257c810d68dec13fd488eb17 gprof/alpha.c -56d1218121151f1e7557f69ea5241ea0 gprof/basic_blocks.c -ca39735906fdd30d5e4123366e064b55 gprof/basic_blocks.h -fb26efc191946b1c391604afbadfe436 gprof/bb_exit_func.c -67083749ab9eb7b9869f600e24046960 gprof/bbconv.pl -25e7c14a812ac2befca1efaba7326de3 gprof/bsd_callg_bl.c -cadeef23b67be4bb67efb8d51c426a84 gprof/bsd_callg_bl.m -c2d75700c52ecc745ba87093070c2415 gprof/call_graph.c -aaf334303399885b664cb82016829e9a gprof/call_graph.h -d2d5dc44d4751291a986e067fc8487ed gprof/cg_arcs.c -f4b4564ff4855580d031efb91d6b96c8 gprof/cg_arcs.h -d698389b5fb62def7dca627e691f69f2 gprof/cg_dfn.c -9763120b90a70649f8da911568b308fc gprof/cg_dfn.h -f38dbd64edd9486f1caf893b22dc17b9 gprof/cg_print.c -0982459c755ac5d97b53a306ec100aba gprof/cg_print.h -b8cefe113dfdf660fcf039d46fec1d84 gprof/configure -55653a53a4dc8a073937819596bacfeb gprof/configure.in -6124e24af0d750f7ad26144e2e549e25 gprof/corefile.c -69ca0d5792b82ef544c23d1ad975c43e gprof/corefile.h -fb7920a70d8eba8b94fd446da371604e gprof/dep-in.sed -b25cb6184818f6bb4dea4962b70ea3bb gprof/flat_bl.c -d6498bb2d3ec24087785cd109c215067 gprof/flat_bl.m -8929b59fb940ea7c3d784d48d652200d gprof/fsf_callg_bl.c -609bbce6f5cedf6b0c8d25c3061b582a gprof/fsf_callg_bl.m -82f03d11db14e68944e0afe9b989de7d gprof/gconfig.in -95f54ce5c8c2dab23e194640fcd4e7cb gprof/gen-c-prog.awk -9478de676b8aef7172f520c48c6e7b6c gprof/gmon.h -c9a6058973dc17f9603ec7302347c6db gprof/gmon_io.c -16cff2f007a3be70b454770aaa01e8e5 gprof/gmon_io.h -2911752bcbb7d22a193dcc22d3c8abed gprof/gmon_out.h -24d890c7d2b01bf70a015038155504a2 gprof/gprof.1 -180ebbeb622b3f0a7e6f2373b0f9c5f0 gprof/gprof.c -1f49635b9990b75a4f482f23f80639df gprof/gprof.h -fd4e33072a67b1aed065e8a56a681c01 gprof/gprof.info -7a0a344dee265ffc777fed1dac3f40fd gprof/gprof.info-1 -e0558f0ebe0660c2f99b60e45aa3b86e gprof/gprof.info-2 -4f5a8f8d3c765480e3926b416714bb8b gprof/gprof.info-3 -cd3f0020f31b79a9b3c26e7066d24550 gprof/gprof.texi -774dcfa219e6de263957873db9bb656a gprof/hertz.c -02cf975780e3e9ea8f94840e5e907513 gprof/hertz.h -3e1ff6771e7e61c5838928f2c549d985 gprof/hist.c -6926b0108166d8ad8581e568f9c82b3d gprof/hist.h -de5f7a6bc76456fcde059a4c496dcbef gprof/i386.c -a41c773603a5e194a6a96222a73da05d gprof/search_list.c -a0c5df87181a20319a478d8f4c6aad8c gprof/search_list.h -b4d532476731b57e44ba662fc0cded13 gprof/source.c -9a6fbf36a7ef053211da8d84411a00c4 gprof/source.h -fb1a645046a0682ea7c81a99c9d58504 gprof/sparc.c -1ded054093de910d9786c62bc4fe8cc6 gprof/stamp-h.in -0317be88177207a78e64a3ca49783604 gprof/sym_ids.c -c5d1c00631c1434a38b4d75c37996a36 gprof/sym_ids.h -abcb4dccea34be3939eb77be053c32d1 gprof/symtab.c -7bc5ed3a10d3698b36cccd7ab92ee679 gprof/symtab.h -c53db119688d6704d758ca2c264eadfa gprof/tahoe.c -33ade2a875836fa6fe418757473dbe3e gprof/utils.c -9174a73ed79e0d552e57d09390065985 gprof/utils.h -80e67bdaa5940b70f9dd3aa7d3e7c1d1 gprof/vax.c -056e5ad4bbaad338a99f25d1c82a6b54 include/ChangeLog -94d55d512a9ba36caa9b7df079bae19f include/COPYING -6514be18199969dce1c96374a8d2f48f include/aout/ChangeLog -cc18d2a17ec338312f00622e1fa4692e include/aout/adobe.h -a7ad447d7a0696596a330bbe0e1bf620 include/aout/aout64.h -c6b08000298f64bb35885212da785e44 include/aout/ar.h -0b3a71cdc523174aee63e9db7b093187 include/aout/dynix3.h -64818c4cc3aab586e47bc9daa57ed4e2 include/aout/encap.h -d56e5b7b7841033c99960c96365579c4 include/aout/host.h -5d9fed058c072b61553cf62174a8e37e include/aout/hp.h -3b82142ce45a3be868eb0eda0a107c47 include/aout/hp300hpux.h -d82993bf02befd5682dcd44b076ad991 include/aout/hppa.h -e91c2c24d9be7b5cbfa6047d799cb850 include/aout/ranlib.h -d06f0176a5098d444f22d53fabc7c2e8 include/aout/reloc.h -7ab3b77967f4eb33111904b27f0796a2 include/aout/stab.def -4fc8401a176b5d472bc2a60e1a0917ab include/aout/stab_gnu.h -f76759c6246b1e8376e84e0c1d8ef6bc include/aout/sun4.h -e8f3b123eb50e26e1d38ca5af44d9ba1 include/coff/ChangeLog -19860cc610e4a705a4706e96d21c3b83 include/coff/a29k.h -552fa1e45d76f2c7892c12472a3ac391 include/coff/alpha.h -3b46257336484efd619c1d349f26758f include/coff/apollo.h -24e7f4f443444e67f0cf849662f36f90 include/coff/arm.h -7b2f28b2e4bf9e88bb4a23a3e96e99f6 include/coff/aux-coff.h -c6d820306c035dd8dd33743a04701097 include/coff/ecoff.h -5ef1801dfbf3fd9d07b95d8e5a075438 include/coff/go32exe.h -aa8789afe1c0c03506bfe72b6d03e557 include/coff/h8300.h -71e1ab83c4f3edad768f13096af183df include/coff/h8500.h -9f42dbf0d95444bb422133f705ae5b50 include/coff/i386.h -c4f8a3ba91f77c4dafc810968584c027 include/coff/i860.h -10948521baf96106b8b1a493b76e6428 include/coff/i960.h -37b14ce150fc5efb823f8a24bf036917 include/coff/ia64.h -4b9d948ced9fa1991bc044284eda23a2 include/coff/internal.h -f2d5296a6f39f7cb8b11123dc2e9446a include/coff/m68k.h -2ec742a1917661fce2c9a968c67742cd include/coff/m88k.h -ad94876330906bc5cd98ce46ecb3147c include/coff/mcore.h -d78f43558e5749316731ff8da7afbee2 include/coff/mips.h -e592618085487f0bc467ae02d7ebdf27 include/coff/mipspe.h -bbe77385f8f20e3871cd2a3310348376 include/coff/pe.h -c0a52b2daa52523bc0c4a5958af2a055 include/coff/powerpc.h -ca7551ab79d241ffbb45086318f24ec5 include/coff/rs6000.h -58270182d29df55e7ebac9935b7ce813 include/coff/rs6k64.h -6863d4494aaa304631d878c6c0d32bae include/coff/sh.h -d93e26806dd11c6c492db5f4cfc50dbc include/coff/sparc.h -49952fda1e759e5aa659f8f78d7e0ba0 include/coff/sym.h -ac2f6431d01bacf541ecc3e5e8dc5499 include/coff/symconst.h -d404152f19d5fd917f5c213cab9dfe55 include/coff/ti.h -a943e5f95323f5c3a0d0cc76899b3157 include/coff/tic30.h -00a943a23f99cb26ae4ef0f1cd874052 include/coff/tic54x.h -2bea3280a510b0e60456554172c30f7d include/coff/tic80.h -8243e196db4d55775bea63595f65cdc3 include/coff/w65.h -f65be1056446cc9f95448245334c9346 include/coff/we32k.h -5b68b9272205b8a20a37a7244f936e54 include/coff/z8k.h -d618facc3e8ce8bf3d02ba452e1be6ab include/MAINTAINERS -de46742edca3a9276eefa5ae8fdee5eb include/alloca-conf.h -15001c35bd6d66101a28ff4d4f48c6b9 include/ansidecl.h -2aa37081b825fc7f9371fb2f2bb14477 include/bfdlink.h -e4247635fdf4b4f00f70e8d0fb756cf7 include/bin-bugs.h -0134165067ac86d517e032aa5a861e4c include/bout.h -c4f59b0838482455edea3d3ec13bfe62 include/callback.h -96b8f1978567a85a54e7985a848d1bed include/demangle.h -68e677849a73047588da295c7b37165e include/dis-asm.h -bdf2bd343ec6e5fb41e946812accd405 include/dyn-string.h -df592480ae2f45f93360b1f1270756ab include/filenames.h -8a01536b114929e73727fdd96b0f39b0 include/floatformat.h -d54eb7868908574db9965575a16c1819 include/fnmatch.h -b2cd17a9267bc2e92df461d3170cb15c include/fopen-bin.h -87444b5c85b3c2bc734f8b86157b15db include/fopen-same.h -2f3ef0265ac665d61a8721a78c47a79f include/fopen-vms.h -7b08d623511997558fcc99b0df47efc5 include/gdbm.h -3a8f21303285c19af2ff8a2d88c9599d include/getopt.h -0a7705129476cbc81cb4a95a69b5177a include/hashtab.h -09291cabd10c827ec23605fd27575d8b include/hp-symtab.h -4140d269a4d719013db3beba8f684572 include/ieee.h -39f09bdf2a300b24072642a1bb540149 include/libiberty.h -e1b9929975775d9831fb9d726e48230e include/md5.h -07de9606e88a074c745d5bbcd835c1e2 include/oasys.h -88d315194393cec8fa190539965d5113 include/objalloc.h -63b71216672f5453f509d6111030e0ef include/obstack.h -82709f401badc29ca812065155ff60b9 include/os9k.h -a9720ee19979bb321c07fabfa9c50bea include/partition.h -d011632065e457c8589b28d0c53e5b04 include/progress.h -8a280b18f0cabe5ebf764a3030dd481a include/remote-sim.h -12f13d7f77320135261fd50e0abd94ba include/safe-ctype.h -c8670b4767badb71a4da8a851b014eee include/sim-d10v.h -866d60698fbecc154ad3cf29e029ebc6 include/sort.h -d8d1601c2d1ee96513826d0cba20ba1b include/splay-tree.h -4ebaa58a8bcb2ad62a520447123446ed include/symcat.h -dbea2ed322e7ea959fc2a2c3949d01ef include/elf/ChangeLog -f42fa13c6c33a69368f7ba26963fe866 include/elf/alpha.h -3bf4ae3474c9c4b8310da4a84aec1dca include/elf/arc.h -2fe80e192d9659bea7b0bdaa31aa149e include/elf/arm.h -58a80a77bf1669d85ca0d6095e6e85b4 include/elf/avr.h -2cfc0b1bf4c1d7d5bc9fdfe215f72619 include/elf/common.h -81b2f401fb8c6bff37f28f811a70210b include/elf/cris.h -f65a19cb8f5a2d53a4c0f71c90bef0e7 include/elf/d10v.h -e1bbf4eba14b2efe2dd202e9a7038bd1 include/elf/d30v.h -d350084ff96d123c4ee539745ed1ef2c include/elf/dwarf.h -744b35dfe0baf98be9bc289bd0f00448 include/elf/dwarf2.h -bd2e0d99c91c060a6afd29a774572ae9 include/elf/external.h -2adb44173bb9ba06c13aef464c4701a3 include/elf/fr30.h -0899399867f5ede8459434cb58862e61 include/elf/hppa.h -3244632ab2a049af0ebcef9b16c9f0b5 include/elf/i370.h -91ea37d0949ed5198393c4e36cac949b include/elf/i386.h -6e10443e0f1746964a6cc3fa883215b5 include/elf/i860.h -4f6c7e8248b9ec284b181a55ff15a17a include/elf/i960.h -2e5a2836ae170cd5df905e1badfb6c6f include/elf/ia64.h -57a2acfa4c0f4764f1f181b0deee1741 include/elf/internal.h -f2816b5aaef73516d44b235aa098e22a include/elf/m32r.h -d289b5c4850dd5c1979d66a9568ad9db include/elf/m68hc11.h -c8eda6e35260f4d7f9897ad95a2248c5 include/elf/m68k.h -97ed3477e1b76ff78e6ae3c361506869 include/elf/mcore.h -d2fdeb878c7b8c208630b9a9a2ff5e84 include/elf/mips.h -9090a0078b91916eb138a6e96ba1ffab include/elf/mn10200.h -238dcb5869243682d1de4b464c288fbc include/elf/mn10300.h -f9cffe9859496c157656bbd3a7b7459f include/elf/pj.h -9d168cba90f8b5bd18e49bd33876f3c5 include/elf/ppc.h -883bdfc4fbbbd6a89013a5522ce509f9 include/elf/reloc-macros.h -5f9856492ae08f28a4a37826e7398365 include/elf/sh.h -36bd8460c99395fd2c73b66e5882380e include/elf/sparc.h -3aa9b74a41a552e5cff4d62cdb2017db include/elf/v850.h -a02d6617c483d114704d8b89e7af3e0c include/elf/x86-64.h -5dbb507e309b9fe20c45d16972bfb936 include/mpw/sys/resource.h -6bc56500657f8c3b71b20af4c69e967f include/mpw/sys/file.h -6bc56500657f8c3b71b20af4c69e967f include/mpw/sys/param.h -745d20e08d92b71d289da383e8a47168 include/mpw/sys/stat.h -99098422e0de596f6a2e552220346da7 include/mpw/sys/time.h -009a0ee881c63ae879dd80dde06daca5 include/mpw/sys/types.h -34d253468a44fc96db48e38814a2e4ce include/mpw/ChangeLog -ac05e56eb8acd390d0fa557abc21380d include/mpw/README -d1c1f4e66376b9ef2e8d4c79446503ba include/mpw/dir.h -c293cf9a745465e2371edda6e3f700d5 include/mpw/dirent.h -fd0c0ec6483a6ac794cfe370f323c8e7 include/mpw/fcntl.h -211595cb825444acd3656a8172a3261c include/mpw/grp.h -7a2ba7b6e2b168f335e8d53b1003ab24 include/mpw/mpw.h -32f1e7dc45c3a15418ec5e0998f1f8f3 include/mpw/pwd.h -55d48ac5e6e6ef01dcad00aeb8b33831 include/mpw/spin.h -043c8982bc0ff4fd987727abd7341aa9 include/mpw/stat.h -94cd8a35a9f625ee6a4d19ef2a481042 include/mpw/utime.h -30ab289a4d9376ba8ec961019e3c291c include/mpw/varargs.h -17e1d26830cfdfcfd3f10ac77b0fbca8 include/nlm/ChangeLog -ee9fe4c84a50cb6d303eb3848fbd6eba include/nlm/alpha-ext.h -cd1bbe2052d94d6d0ba5892f15b1d48a include/nlm/common.h -3c99c8ba8f85e2cb10829f35e3223113 include/nlm/external.h -119b651e264af67466b26517fa1ab516 include/nlm/i386-ext.h -83eee47917743f8eadb3cab94449dbee include/nlm/internal.h -5446642ff3b9fee027d46b00a0cd9383 include/nlm/ppc-ext.h -12311cd52e4c3cbb45b2f8eb775cc8c4 include/nlm/sparc32-ext.h -de353dec3d3156369ebeda0962c5b39e include/opcode/ChangeLog -462ffbe74d2be5d6f8607b4f072e53f5 include/opcode/a29k.h -0c6d0efab2da874133036face81c3666 include/opcode/alpha.h -0281afdeeedaeafda7a17fd25a67ec00 include/opcode/arc.h -f51724681cb616b8ddaa4ed0aacb67fb include/opcode/arm.h -98fab9ee305c764c0d98bdaa52ddb874 include/opcode/avr.h -32ab4453846d992862d569d9873ba281 include/opcode/cgen.h -b68941a9545d607ec5245a96ccd399c9 include/opcode/convex.h -58d48256e88159d47d7911df439e43f3 include/opcode/cris.h -ac443bb309a4a778383af46b6f101901 include/opcode/d10v.h -61819e55d807e7953d1864c88ba74c1c include/opcode/d30v.h -38c8a41b5a691d7f48cfa40495e0c5a2 include/opcode/h8300.h -b74df8d0c0456132c090adf9b7173a65 include/opcode/hppa.h -7e3c952acc4568fdd1d873147e3c0d2d include/opcode/i370.h -ba1c64016e7e1949f14a81b15651e106 include/opcode/i386.h -b2d9c35e0647c729335b50866309ed9b include/opcode/i860.h -10654d7ed7402428c40546e33e5f147c include/opcode/i960.h -05bf164aa56c4c5ab3dcb35d8785aac1 include/opcode/ia64.h -7628171c45c02183c4c952b6760ebcdd include/opcode/m68hc11.h -ba270bed72f4cbb17d70d9964a2779c7 include/opcode/m68k.h -fad6ef73bfcbcf77fb6ff04c05d2b215 include/opcode/m88k.h -5a1abd8839180eaa24ffd1dff62739f9 include/opcode/mips.h -43e315bf6f41c74ceeb8422191c76ffb include/opcode/mn10200.h -ad7ece4aed093a098c3ea27047837dad include/opcode/mn10300.h -f08f60834808b211b5ea9531e53bfd49 include/opcode/np1.h -8201356f4327535622d9aaefab8f7e42 include/opcode/ns32k.h -2686b284377642c3a6afb790785808f4 include/opcode/pj.h -10a57ede0f7fe1825b0412223edf5852 include/opcode/pn.h -56e3e2af3e522292571f6a8b18255f99 include/opcode/ppc.h -57b6865994b962b82214d3e543408f2a include/opcode/pyr.h -67834671955468c7dcaf51979772ef9c include/opcode/sparc.h -c69e19287023c929ac20ee5311acfadc include/opcode/tahoe.h -2b0f365ad336acad633a116537cfd018 include/opcode/tic30.h -f6d161f577d67533b30aa8fa85ca3c33 include/opcode/tic54x.h -d2c9644c874999bbb1f275ebf8adea86 include/opcode/tic80.h -f02fe800bd8571f3e2677aa2c3a06c90 include/opcode/v850.h -e78acf38376a53ce9ac029cdd1c4d560 include/opcode/vax.h -d41d8cd98f00b204e9800998ecf8427e include/regs/ChangeLog -5afe8eb5573965dfb58378e4e46f3813 install-sh -c3f98161a09663d4152a318793fde272 intl/ChangeLog -e824af0ffcae539e52cac31fa3faf1d5 intl/Makefile.in -ee2ff1244c36ed348643bd1a51001f4f intl/acconfig.h -6e16646448de7fab92862eefbdcca179 intl/aclocal.m4 -da7585912c32cc902a40682c188c9c76 intl/bindtextdom.c -caa3581b00edb0a7d3811a24a3e46c5c intl/cat-compat.c -da5e55ccdeae42d336d8f9225cebfd75 intl/config.h -bd51dd1c7684c9f15ee4532bfd7bf12f intl/config.in -05c6a93ed8c2801c09dfe15e6cd47452 intl/config.status -2f9be0885ee6447a29fd0550b52c40aa intl/configure -eb4685d54a1e3da00cab275a5c3fa6c4 intl/configure.in -b542cbb1c1c4a9dfac867172246e0a20 intl/dcgettext.c -63df19e31e5f6a6df817da915b44ed3d intl/dgettext.c -4db7c1b94ee4cda24bc74474f3a59a3e intl/explodename.c -4b12bb77b2d9d268b8ec6ee39d12c4a8 intl/finddomain.c -a3f9f228e0044a48c00cf5970b8be258 intl/gettext.c -2ba9a94b32d0c8056e617e85ad7a994a intl/gettext.h -5f9d7d7a72a3e8e42034c55b5c7f83eb intl/gettextP.h -5fca7fa018536a827790bf56e384cb5d intl/hash-string.h -93e4ab4b2eba5d2b8a36e1b2380190c5 intl/intl-compat.c -f00903218b78761c55cd76aea43e0cad intl/intlh.inst.in -3ee800e1115b811c49bd4f0b8a6a65aa intl/l10nflist.c -792fd16022a69b1321042701c46218d0 intl/libgettext.h -07e60d7ada1d5cf14da1c4c2823feaf0 intl/libintl.glibc -88c9303406b57aeed1f313b827c28e3a intl/linux-msg.sed -bc7989f895f4e4e38d43419dc0f4777b intl/loadinfo.h -441f20d1c11229acbe9eb350b162548a intl/loadmsgcat.c -122fc9bc010467ff915e57aa7114a780 intl/localealias.c -606344532ffc07b36812c0d04acb1f38 intl/po2tbl.sed.in -1ded054093de910d9786c62bc4fe8cc6 intl/stamp-h -6283160be713ad0dc1102617ada6fa54 intl/textdomain.c -0be261721efcbc3f04680d99e149f18a intl/xopen-msg.sed -c289dc63e731d4a1da809249e0922832 ld/emulparams/aixppc.sh -2e897117043ad88f2c7bcf35a606d76b ld/emulparams/README -4f6b4154113438f7481f4661d09daabe ld/emulparams/a29k.sh -b313a6fa271657abd14511455050cdb2 ld/emulparams/aixrs6.sh -29fda341c48f8b90fbf258b6d475867e ld/emulparams/alpha.sh -91e308e524924e29bc43412f89a2fead ld/emulparams/arcelf.sh -2e08024e0d4b3c527d426e134d4af1ef ld/emulparams/arm_epoc_pe.sh -a061559a038d4e5b1efe929656c6eabd ld/emulparams/armaoutb.sh -a419e5e9b54e9511306099d0f8ddf0a5 ld/emulparams/armaoutl.sh -d7a431dc9e8878378179623ccf9bfb47 ld/emulparams/armcoff.sh -b89887d1de91912a100a09e766faafeb ld/emulparams/armelf.sh -27ee98332d14972c9906e52f38dbc915 ld/emulparams/armelf_linux.sh -4e88bc5535572c27ad8e22ea4f245202 ld/emulparams/armelf_oabi.sh -0f7bcbd8a14e3f6392834cf18fde47fb ld/emulparams/armnbsd.sh -f8974ac24d96f452ff36b40a6203383d ld/emulparams/armpe.sh -d054a3453b323338552bb636ebb8e116 ld/emulparams/avr1200.sh -35959d43d0a857cea44143e597becec1 ld/emulparams/avr23xx.sh -6bce86ca67f3e0d62294eb9bd2635402 ld/emulparams/avr4433.sh -3c8c6bed009efce2bf0242ef1d003245 ld/emulparams/avr44x4.sh -b79ca66a017af6b2cc9612337262291c ld/emulparams/avr85xx.sh -d612b547d13f97624ad3cabe1406a152 ld/emulparams/avrmega103.sh -b9db3ff305090194178987e80d8ed449 ld/emulparams/avrmega161.sh -fe83397f7a2e0de4d02d04b61f229a25 ld/emulparams/avrmega603.sh -d47b82239f4ac8c14355a94378cf39b7 ld/emulparams/coff_sparc.sh -2106e6a6c645d248df9265a8408980c2 ld/emulparams/crisaout.sh -ce0b745d5a04bfd7bb575b1c7180641e ld/emulparams/criself.sh -57b93a092a4cac65e988765446eb13da ld/emulparams/crislinux.sh -4e68ea19373cca478057e6a64814e143 ld/emulparams/d10velf.sh -17e84454d13546953021ef10207da62f ld/emulparams/d30v_e.sh -094a88671f30762402b9e5c78e4e3e9e ld/emulparams/d30v_o.sh -b904add983e2aa12033b4c8812a73cb4 ld/emulparams/d30velf.sh -162d7cba8938432d260e1e9321bf43ce ld/emulparams/delta68.sh -e8fa19901f4c10300649e6c2d30be9f8 ld/emulparams/ebmon29k.sh -b30522a3c37bc370dfe45f546cca3127 ld/emulparams/elf32_i860.sh -3d9de5e9ff61c57dfe7cae3508863c7f ld/emulparams/elf32_i960.sh -5521057ee51d04b9c5be955ad01fa01d ld/emulparams/elf32_sparc.sh -1dd17564c9aff8b6c2e40e7a9f571b7a ld/emulparams/elf32b4300.sh -f64269d5383ab08f0c9e5b79c788caf0 ld/emulparams/elf32bmip.sh -989be87f670515d0a102da2ee6102e7c ld/emulparams/elf32bmipn32.sh -52f1a6b5e20bd996dc715168c8700d56 ld/emulparams/elf32bsmip.sh -09ad12c799e0de160ea05b5e2c67977d ld/emulparams/elf32btsmip.sh -41c14a8d73070481da1f2559785322b0 ld/emulparams/elf32ebmip.sh -6f124bd5baf085b40380db07a4ba7c2e ld/emulparams/elf32elmip.sh -ed5f10fa7edc2674622078dbfd378434 ld/emulparams/elf32fr30.sh -8c345571cb4a1d16f3335639204f1b3b ld/emulparams/elf32i370.sh -e6c4955bf2db80c6964e66af709f05cb ld/emulparams/elf32l4300.sh -0fc4b854a11f17219053f735f3f6cec2 ld/emulparams/elf32lmip.sh -1e20413e271fd05e253b187172ba8137 ld/emulparams/elf32lppc.sh -92f6cc4fe8ca41fb6e6d15cd4f72838f ld/emulparams/elf32lppcsim.sh -1143fb3d9743c026ec587df088bd31f8 ld/emulparams/elf32lsmip.sh -f3acecc64f5801ead7fcc37b95faa23f ld/emulparams/elf32ltsmip.sh -b0bd40fd4790073da2ca8a139dd5abbb ld/emulparams/elf32mcore.sh -5e3d03a5417dbd051c0f465b832d15d4 ld/emulparams/elf32ppc.sh -2d539f783dfb7d0fe71e2554f4b14841 ld/emulparams/elf32ppclinux.sh -7790d9c91fc199cc51434abe289bf438 ld/emulparams/elf32ppcsim.sh -792c26246fde59e0f132bb33c4039b48 ld/emulparams/elf64_ia64.sh -7448f80602579636b9e1898cd5a37228 ld/emulparams/elf64_sparc.sh -ed729adb5c8420afe7245240e95db0f1 ld/emulparams/elf64alpha.sh -769fdd8cbe0bf5e72ca8dca7d78d3259 ld/emulparams/elf64bmip.sh -8135eedeb358358243d545461b0090dd ld/emulparams/elf64btsmip.sh -ff249db25e56dc6b03a8b61eb8a89070 ld/emulparams/elf64hppa.sh -e3f95201ea2635af31251e96b95d75c6 ld/emulparams/elf64ltsmip.sh -7ebad7c632abef6e016c94541d4ad30b ld/emulparams/elf_i386.sh -e853a2e087ac512a0cfa5ffc4baa6474 ld/emulparams/elf_i386_be.sh -05e655e5b9bba0d20b4020d660720f56 ld/emulparams/elf_i386_chaos.sh -b48b2c27f9bc85ff6c979aafcdf82bf3 ld/emulparams/elf_x86_64.sh -a12d58b36cd6e31986d7515c77fec3af ld/emulparams/gld960.sh -16e204dd1b3a385eb2dcf14ccddaa50a ld/emulparams/gld960coff.sh -3a7b9aaf11eae3f3cbd21b6220434ad0 ld/emulparams/h8300.sh -38e60b173489d53692974c5b6a04cfb9 ld/emulparams/h8300h.sh -f9d708a8c553ed19183a1f638fe633b4 ld/emulparams/h8300s.sh -b3b0d0be943fd5517fbc171778f63de0 ld/emulparams/h8500.sh -6dabd6ffde56b2445c38969243d3575e ld/emulparams/h8500b.sh -6d71814235108ce0faa35813c1959495 ld/emulparams/h8500c.sh -e8b9174ddad38feceda59af2dbec0d09 ld/emulparams/h8500m.sh -f0a112f331b4c6bfbfbb1895cdd63eff ld/emulparams/h8500s.sh -54b7e862187330b80b6314b2c1c1b05e ld/emulparams/hp300bsd.sh -4bbb1b67f14d1e124683aecbd19e69cf ld/emulparams/hp3hpux.sh -7af6e1ad74bc71f864b9c04412f1bebc ld/emulparams/hppaelf.sh -dbcd064517314bc119e4b54ae7847284 ld/emulparams/hppalinux.sh -0537af9ab3953ed67d099959cd4e181c ld/emulparams/i386aout.sh -5ed1f528a6752f2ed12d48977cc43da1 ld/emulparams/i386beos.sh -ca54144cdb2703b51ceb13bc03e36c83 ld/emulparams/i386bsd.sh -d05a50688386622b8ad4e4c1f2286662 ld/emulparams/i386coff.sh -8d213758c362dee91c9aca3fe2521321 ld/emulparams/i386go32.sh -da7411bcf5fc48e4739d94a108c64f56 ld/emulparams/i386linux.sh -7d2e038dbd7439a23c353688c7ff6087 ld/emulparams/i386lynx.sh -fdc6893b38868d4006e1d62edc5a09bd ld/emulparams/i386mach.sh -63dc5bed51de89c74fdfb27b20c5dcc9 ld/emulparams/i386moss.sh -95e2973323b32d1896c6e19758582b09 ld/emulparams/i386msdos.sh -fd44b883579ad95580bf3cae88bd91b4 ld/emulparams/i386nbsd.sh -5714ea774490dece5da92c0fc5c72d77 ld/emulparams/i386nw.sh -189c01efee7710b9d1b107f60db173a9 ld/emulparams/i386pe.sh -168c0e6c22de9f60b4cfd893a1e0a4f0 ld/emulparams/i386pe_posix.sh -50cd18f6ac43ffed547adab63eaf7fd0 ld/emulparams/lnk960.sh -02117bc90d8d122568f4695bb15d61b7 ld/emulparams/m32relf.sh -17f327870e9d5f2b67bb6767084eae64 ld/emulparams/m68hc11elf.sh -f11b453814e07dfe2f126c575f25db31 ld/emulparams/m68hc11elfb.sh -30b81dcf1f3db68cdb1e15bce5b41d78 ld/emulparams/m68hc12elf.sh -7d1044ca8b044c1a519d8db2db658577 ld/emulparams/m68hc12elfb.sh -2c03157a829a79d93b2ca4b5005f032a ld/emulparams/m68k4knbsd.sh -173818cf70910edb066aa57cbad66829 ld/emulparams/m68kaout.sh -00b17c39c4dcf1058751dc07f30dbea3 ld/emulparams/m68kaux.sh -f0580d8a518bcc77032874c9cb72809d ld/emulparams/m68kcoff.sh -d82fefa828fc4538f17bb3f788352154 ld/emulparams/m68kelf.sh -7d5b500c05a8f5cd0eccbbc81dc99139 ld/emulparams/m68klinux.sh -89788f2245a4c41e33afab79e70e6bb7 ld/emulparams/m68klynx.sh -37404d78456eeb52a674a4dcbbb9bb36 ld/emulparams/m68knbsd.sh -13f758bfc68e72e4e1df1cc8e8b01407 ld/emulparams/m68kpsos.sh -71a6bb6cc26e527411df45774831e1fc ld/emulparams/m88kbcs.sh -f1fa919d1c7900c6c69ad1137c008524 ld/emulparams/mcorepe.sh -6c5efc2d80801d3ab24a03f11d108e39 ld/emulparams/mipsbig.sh -8589776726fb0a88568b9dbda5660c35 ld/emulparams/mipsbsd.sh -9b4dac4f3c4dcd64fa56cef06eff44fa ld/emulparams/mipsidt.sh -a9f7e459186328fe620a7923de39340c ld/emulparams/mipsidtl.sh -60661603c73c5ec9883d1f65e561e2d6 ld/emulparams/mipslit.sh -8cb42fe6977ca6c642cb7b96a9b0fda0 ld/emulparams/mipslnews.sh -1e83e0caf4fa27128375fc0ee5b0d362 ld/emulparams/mipspe.sh -cb9ddc7149bdc45e4894ad3c5f7043dc ld/emulparams/mn10200.sh -16199cff84a98df6ed43d1032f86d4ac ld/emulparams/mn10300.sh -49337298ecef7c4e2569237b614c9675 ld/emulparams/news.sh -a712bce9b19b7554abdf8de63140c88e ld/emulparams/ns32knbsd.sh -a9ad37848e6c339a4fe81f322c3f3390 ld/emulparams/pc532macha.sh -332eddb90f3e1d4a5a320243735ebf5c ld/emulparams/pjelf.sh -8e2b9fce572d19af6ce84e6efbb74add ld/emulparams/pjlelf.sh -cbcbc06cb401fb2074140cb8b535d4e8 ld/emulparams/ppcmacos.sh -f71b3cd563ff272019f928ca9cbd0eba ld/emulparams/ppcnw.sh -762b6a9cb39066b56d9cee03286dcf82 ld/emulparams/ppcpe.sh -ff7570d6bf2e39ba10e74a394052028b ld/emulparams/riscix.sh -e1c80afa234bc21751979b515fb688e2 ld/emulparams/sa29200.sh -f363ccd6fc740ceec31fa8001cf2e9a0 ld/emulparams/sh.sh -131aec9365eaee35bf7d15d9e28dec96 ld/emulparams/shelf.sh -8b4b3eed32de796acbcf4a2b11a83e3b ld/emulparams/shelf_linux.sh -0806db54e70993cecdd7023f339e4d39 ld/emulparams/shl.sh -70d54bfad0f08afc691f19192fb244f8 ld/emulparams/shlelf.sh -d1cb0ddcc185836f97a39dd37a0f49cb ld/emulparams/shlelf_linux.sh -a316da8cf4e620c00377e161b3a15fa0 ld/emulparams/shpe.sh -6062ec8406144fbbe4ad32e193a7ac04 ld/emulparams/sparcaout.sh -16bbfb9268886d428a81d42f007c5f20 ld/emulparams/sparclinux.sh -d004a32b2e6edcc69d900c2207bcbbbb ld/emulparams/sparclynx.sh -957bd3e925d255ac965dde1aa7303f40 ld/emulparams/sparcnbsd.sh -8f86834d923d64e45861594e4dc8c457 ld/emulparams/st2000.sh -f8ff78cfcc19d1d4389a84330615a363 ld/emulparams/sun3.sh -04380fc27e6223ffc89d2b43f9421434 ld/emulparams/sun4.sh -5d10f221cc393b1ae1719132de13f3da ld/emulparams/tic30aout.sh -4fc903e37671053625509f7486c63816 ld/emulparams/tic30coff.sh -aead097a3385a27cba7210470e150a10 ld/emulparams/tic54xcoff.sh -786ca05591eada9f7fbf7d5804dc0b81 ld/emulparams/tic80coff.sh -31a5bc747cdaf134204652bf78e61771 ld/emulparams/v850.sh -060bf2672cf53a505f23d413017e0be4 ld/emulparams/vanilla.sh -1689044462ea8c0a614ff1b3a91a0192 ld/emulparams/vax.sh -1e240622a795d134bad0e8a60460b9ae ld/emulparams/vsta.sh -7efc4f8c9d1eca2e14084bcd65535b9a ld/emulparams/w65.sh -cd93ec9e7e74cadfaf8044cca1581111 ld/emulparams/z8001.sh -8890ef4fad0e25044c8d3200a9e77ee7 ld/emulparams/z8002.sh -2a5cb94cef3195c5006cbcccd4ea6a78 ld/ChangeLog -1ae0cd65c8a7fb4e347f5a8584cafd1a ld/ChangeLog-9197 -2e154e4e100af48493f6fa789d4517ae ld/ChangeLog-9899 -d618facc3e8ce8bf3d02ba452e1be6ab ld/MAINTAINERS -52fe75d2d3eacdf3865e9968e646030f ld/Makefile.am -4be7a6136d60892a1971cbfbbdd19a6e ld/Makefile.in -8adc4dd7a7707cade1f72f88c49b818a ld/NEWS -d3f15e73b68c6d694e6eddcdc11f1f04 ld/README -01627b664c7e61ab5dc202bb72913e0a ld/TODO -b802b0cc52e6c72a326c11a64c8155a0 ld/acinclude.m4 -f1734965ff3907806ff585fdbcda515d ld/aclocal.m4 -bcd1abcd9f55cd39380e86555cd04488 ld/config.in -bdcfe9939e2b527a2c7ac3a4cbd09f6b ld/configure -59c74394349437e37d4c7e5284aecb50 ld/configure.host -a6a60d7fb5c82dde521faa647f2b2f49 ld/configure.in -d4092cb236ed20c3872e350b7e3863a4 ld/configure.tgt -d3d9eb4581bec474a3cf465160b1371e ld/deffile.h -37e7fb1b97db43bb03690e4e7468f8ee ld/deffilep.y -93fbfa053ffcf82c36613c2e7ca30eda ld/dep-in.sed -e2677a696ed870d444e53cf69e8a69f6 ld/gen-doc.texi -5a7a6887613081ade332f14f1262f907 ld/genscripts.sh -d3d6fc53e5f8d5e5f962266911f0441b ld/h8-doc.texi -a9ea9d042e8f202d1ae318bb4dcdeda6 ld/ld.1 -dc12c63e536bb4d30122799fcfcd61b2 ld/ld.h -9af8fa62657be80f73f1c25215971bcb ld/ld.info -8f0d53a6eedd7210635c279880569300 ld/ld.info-1 -b9e92eaf7909800eb27222331671da4f ld/ld.info-2 -d514b36ea675f9b1770d33101fe77c92 ld/ld.info-3 -84441dd528c1fc2bf3e446b0a20a240b ld/ld.info-4 -07f47d1279b089736e2bfa62102b1ad0 ld/ld.info-5 -c35193580f679ead6fe0137ced6ada69 ld/ld.info-6 -34c8d5659cc0bc70a2448f8e260d73ea ld/ld.texinfo -42041e4e16e2fe5e78b67fbead7a431b ld/ldcref.c -bdd86d7671d31e05370e5c4dd6563c27 ld/ldctor.c -5feb38f9fdfff03477a2e903ab3b0a9a ld/ldctor.h -eb13c3d4870762f25fcd6620cb14e53c ld/ldemul.c -e922c33a61aab25af6710d9809c4f4c0 ld/ldemul.h -a4bd1472be8a8e931a82825b319da567 ld/ldexp.c -ceebb9e2a2f925e2dd6bd5eefdf13166 ld/ldexp.h -367eab4d73a8b2eba9e1f317dcb3b7e9 ld/ldfile.c -16f4a7510b084d57d6bdaf97da6193f8 ld/ldfile.h -9b2dada8716782c20350d43caa2f21b7 ld/ldgram.c -469602bdd786d950e9759b5c1c607058 ld/ldgram.h -615e9abfaa087941ac1a665b03f6c9d5 ld/ldgram.y -991cdf89843c7a85c80939a69f7744e5 ld/ldint.texinfo -8ca47fabed6fbbcd7a76307cd0392d00 ld/ldlang.c -573b0985ee45448098b2ecfd7ef68754 ld/ldlang.h -e3589edbe9619a856c94a9e1472af695 ld/ldlex.c -695387a63964774ce8bad66fa3cbc3ac ld/ldlex.h -ab34ade19af66bcf41fd1cdf8316fbce ld/ldlex.l -0456d4b5849cae5e7b5602e180c81fb1 ld/ldmain.c -9bf1eb955e180d436f5179fba53a1582 ld/ldmain.h -eaf5e555807b6f79e3df15fd87d501ab ld/ldmisc.c -ade62229096754b98373b9ae23d91b70 ld/ldmisc.h -3a602698f02818af629d09f4bd3f7fee ld/ldver.c -672e26e69ab6b241da6d7e5e4775f943 ld/ldver.h -4359fdef33618e0323337df0588c5cc3 ld/ldver.texi -79e7b100959436e9e1e63d4dca95b6ed ld/ldwrite.c -2b0d7a0f98da7f507f182b4dd2f9b616 ld/ldwrite.h -72c0de82995b3f382dd79e9b8aee3744 ld/lexsup.c -d2c2ef9b2c8b24061720ae93db1c4908 ld/mac-ld.r -26d2c38dee9ec69444252636bb0f6cc9 ld/mpw-config.in -75da5b27b1aed0cd7e35b59d9816e8ba ld/mpw-elfmips.c -1aa6339246f903df40d56a6e1741125a ld/mpw-eppcmac.c -d59f31235ae0e62676d70df668146a3a ld/mpw-esh.c -b20a61570cea5126bbe2247bbf21b3c6 ld/mpw-idtmips.c -01eb948a7c267f614ce2d08c8270170f ld/mpw-make.sed -d42ccc86b79c8964f38a1411f8b7c5c3 ld/mri.c -2ad4dc287abf549ea050d6ff283d603c ld/mri.h -98560f9c1fc2227cc7c788586914cc15 ld/pe-dll.c -da3989e60b39997de519cdbb5e6ea757 ld/pe-dll.h -1ded054093de910d9786c62bc4fe8cc6 ld/stamp-h.in -3f6f936b110ea5a5399a1446a3193c62 ld/sysdep.h -33d53fcbafe88b22932a3319277862ea ld/emultempl/armcoff.em -b812a798c37d8d5f5901f1821a8a648a ld/emultempl/README -9b159b0dcd1b4592439409005af127bf ld/emultempl/aix.em -12544d37e7ba4af1aa940499b149eb02 ld/emultempl/armelf.em -9f11acc5b293ac007ef4f30069a0148c ld/emultempl/armelf_oabi.em -995bbfc228460e4eef6eef52a09384a9 ld/emultempl/astring.sed -da24b8a824c3f326149884affe72b954 ld/emultempl/beos.em -d2fc27e169746e4690b9255988f3f959 ld/emultempl/elf32.em -410858b431ec254ac37f760c1ea87f1a ld/emultempl/generic.em -0a9fdf535a7a19ab8b1bad9713888740 ld/emultempl/gld960.em -76c0c089a4a55b0c9621b49d38908e67 ld/emultempl/gld960c.em -6b0ca1358cf1f8c0066f2e5301f46d56 ld/emultempl/hppaelf.em -6f50e5470dba075e580db09276f7d3db ld/emultempl/linux.em -9ee4fb106dcb3642b3c10ffd1e55457a ld/emultempl/lnk960.em -e959cab000712c2d7827b28020188272 ld/emultempl/m68kcoff.em -b995be733fe9aaafa45af874c12102a6 ld/emultempl/m68kelf.em -448e845763e60a5c713e3b2fc9863cf3 ld/emultempl/mipsecoff.em -a8190e4a0b5cca5b8677d8bb2d39940f ld/emultempl/ostring.sed -e14202a045cb3c41ebfe042228e3252d ld/emultempl/pe.em -8be5c13555bd37d1c70bbb1006b583da ld/emultempl/sunos.em -e21fa8d986017ca6352be94fdff217bd ld/emultempl/ticoff.em -1fc5ca4c2d336b91b473c13b241bf2b9 ld/emultempl/vanilla.em -63397aaa2c2074aa7be7ffe57b2e6c69 ld/po/POTFILES.in -ea2baddf1654fa8df40eb033d33b6068 ld/po/Make-in -c8e20dea09bd30058704c752a202c8b9 ld/po/ld.pot -d471f7a5a3dc4deffa1a8f2039a38504 ld/scripttempl/alpha.sc -01c6e3598e372d510730e381dd25c2cd ld/scripttempl/README -fdcbfdd0b93aa6b73e1b73127b28bdae ld/scripttempl/a29k.sc -ebac9206176b1d49526ea9edbc71867a ld/scripttempl/aix.sc -8e2be304cab1b30f2770ca3dd188f47f ld/scripttempl/armaout.sc -11e720b2d4fbd6b8ad9ce26f980acd6a ld/scripttempl/aout.sc -f40cc9e187c16d5d4170456ccb17d03a ld/scripttempl/armcoff.sc -119e975ce8b1005742840a9152c03a99 ld/scripttempl/crisaout.sc -3fb69113f5952434021a5fc481d5b417 ld/scripttempl/delta68.sc -a4e630a7a2094f2b44f19e41069e4433 ld/scripttempl/ebmon29k.sc -2f6206dfef231404aa0babbf12d2b69c ld/scripttempl/elf.sc -c7f5cfe3ed0b5773a9d2107c7fe08475 ld/scripttempl/elf32avr.sc -744fd7db42c234328f24006210a9f7a9 ld/scripttempl/elfd10v.sc -557b6406e74fc2c9cefe6233f95fe5a8 ld/scripttempl/elfd30v.sc -6ad7e39a3e5729ad923402573fd2351f ld/scripttempl/elfi370.sc -e96aae5650c97ddede3769205d9256f6 ld/scripttempl/elfm68hc11.sc -b435ff7b33225c47a2c42481b66fd5b6 ld/scripttempl/elfm68hc12.sc -5393b9689fa4a05d916c9ebbb54f015f ld/scripttempl/epocpe.sc -bb39f599d5755db06b3516d0471fe7f0 ld/scripttempl/h8300.sc -03a31f296b07be57364e68342f141a75 ld/scripttempl/h8300h.sc -b3675a21a2701e05a7895b6a28108d25 ld/scripttempl/h8300s.sc -6c57b9f11a6f50c46ecce9df62061dbf ld/scripttempl/h8500.sc -39da8240aa7f5aca7b23d93bcf243bb8 ld/scripttempl/h8500b.sc -a1235b4e692307533adc69d75c98da06 ld/scripttempl/h8500c.sc -45c5f295e421e663e1843207ae13951a ld/scripttempl/h8500m.sc -b6ce335a288c23cf897c944a84aafe3b ld/scripttempl/h8500s.sc -786aba3e828af6519ac1cb21ca5ebd9e ld/scripttempl/hppaelf.sc -973ec6d5280fe67f4694d07f03b6991e ld/scripttempl/i386beos.sc -89f55fbb09da1e8728f74f0dfda3192d ld/scripttempl/i386coff.sc -606d3f3a80d30603f3bbaf5c75ca3bee ld/scripttempl/i386go32.sc -debc01664da1e6913ca6ee1d350c7c9f ld/scripttempl/i386lynx.sc -dd4667c5e75a68e5bcc4b0769830974b ld/scripttempl/i386msdos.sc -f14aed79776fb856704487766477ef6b ld/scripttempl/i960.sc -ac993ea32406502f14b7089c4239296f ld/scripttempl/m68kaux.sc -0acb5ea28c8feeee6aae68de5fb62a67 ld/scripttempl/m68kcoff.sc -5ac24db89fd94088b97b9b2a9b5c6ea2 ld/scripttempl/m68klynx.sc -66790e6da2a36230461c111c12e5a6fc ld/scripttempl/m88kbcs.sc -d942ea1043bca95ad16a43702655862c ld/scripttempl/mcorepe.sc -13a45868ad3e92575be92f1558d1c9b7 ld/scripttempl/mips.sc -756f010bc1fcebe9cb08b1c8afa66389 ld/scripttempl/mipsbsd.sc -3219d28558d7ee8ceac00771c0f41aad ld/scripttempl/nw.sc -305f38a09603aa92f10e6d0b4cfc7680 ld/scripttempl/pe.sc -47e02e8254495a858dbef6c19c1ac173 ld/scripttempl/pj.sc -219f146ba7cb4c7346c9abd2a6c78798 ld/scripttempl/ppcpe.sc -ab0f8d8220dc084233dee358c5e57433 ld/scripttempl/psos.sc -1ca280b61dcc707ecc1128cfa80b8243 ld/scripttempl/riscix.sc -cd076d3e4b10af9d6eec06ff494e1c6e ld/scripttempl/sa29200.sc -e9bf54b19fd6c440995f4bf7a7a34d64 ld/scripttempl/sh.sc -1231890eaa6427329f4e49ef29a3b632 ld/scripttempl/sparccoff.sc -a56557b365a2fc1cf4070c7c5663b79c ld/scripttempl/sparclynx.sc -6277ea502afc8c184eeccce4362d538b ld/scripttempl/st2000.sc -f9f56c0b4c0548aadba5f30ee7f105fe ld/scripttempl/tic30aout.sc -581d4b5a31b2f67b8274aa96b201af92 ld/scripttempl/tic30coff.sc -d66c340121962b6706c37311253b0ea8 ld/scripttempl/tic54xcoff.sc -b6d1e44df8ff2382dcc53bf1816a4177 ld/scripttempl/tic80coff.sc -9767716444e270cbeda9727d75e12b39 ld/scripttempl/v850.sc -922fccd6995f0a119365fd7ceb7b25ce ld/scripttempl/vanilla.sc -9ef634e16ac4537117ea157867e85207 ld/scripttempl/w65.sc -474b1c82cd04327e7433dd108c93e239 ld/scripttempl/z8000.sc -4c78bc0be539fce5e7b7d076f918b568 ld/testsuite/config/default.exp -3205f2e22c9761eb0c10696266fdaf4d ld/testsuite/ChangeLog -b9b40d74b338fd9bf9a0999931d1b6e8 ld/testsuite/ld-bootstrap/bootstrap.exp -4b9f7ea09166acbf0b5d72c88c5b3956 ld/testsuite/ld-cdtest/cdtest-bar.cc -7d245ef3c98762296b516547243311d0 ld/testsuite/ld-cdtest/cdtest-foo.cc -6db246fa73606a55b99fd68fc8b67e5d ld/testsuite/ld-cdtest/cdtest-foo.h -42bc325afd7f1f937f20faa53c9f1490 ld/testsuite/ld-cdtest/cdtest-main.cc -cfb423f4424fe65c2fe45d99c49ff558 ld/testsuite/ld-cdtest/cdtest.dat -f0953d15141cfb527557cdf3e2491e89 ld/testsuite/ld-cdtest/cdtest.exp -d989349ade37c6c902c049861488e70b ld/testsuite/ld-checks/checks.exp -328c5cac80b76bd422b0b77d5517d175 ld/testsuite/ld-checks/asm.s -536a4d2e63692344109849b984f9da06 ld/testsuite/ld-checks/script -8e56f3234a0494775108d96aa30d18da ld/testsuite/ld-elfvers/vers.exp -5f2c2be170fc2ea8b5f4b1d7e8d72165 ld/testsuite/ld-elfvers/vers1.c -580fae4dde72b7ecb4ddf9a2fb369b72 ld/testsuite/ld-elfvers/vers1.dsym -0f0d48d66a7468bb1ea8f0f907f65f74 ld/testsuite/ld-elfvers/vers1.map -e70fa3cc72507e3c454eeaff68f8c28f ld/testsuite/ld-elfvers/vers1.sym -d739eb560d4a0f23ab4cf60df5378602 ld/testsuite/ld-elfvers/vers1.ver -ca85484e74a669868fc7e52fe11d7fb4 ld/testsuite/ld-elfvers/vers13.asym -e8cdfeee2880948d113226cb5004d92c ld/testsuite/ld-elfvers/vers15.c -63a46548615c9f270349f427719d1b10 ld/testsuite/ld-elfvers/vers15.dsym -46f1035151fe2009e5de509d8f7ebaf2 ld/testsuite/ld-elfvers/vers15.sym -63f2b3b06a796f7a49a90902fbadd4ad ld/testsuite/ld-elfvers/vers15.ver -d71d95fe36a6bc2f88c952ac37cb990a ld/testsuite/ld-elfvers/vers16.c -ff7574e34a600f7ae616a4384f98ad0f ld/testsuite/ld-elfvers/vers16.dsym -d057681641b9fc14e87f35c677b6243d ld/testsuite/ld-elfvers/vers16.map -92e6d0ae0c0aef2c17de9ef04d6bf7f2 ld/testsuite/ld-elfvers/vers16a.c -4d81c8fe8c0b5ea33ef6c4001cfee806 ld/testsuite/ld-elfvers/vers16a.dsym -fb67971a2dd673bf9ae0506459f0bf2d ld/testsuite/ld-elfvers/vers16a.ver -a2e06e03cf5f45c27839f309a5388b81 ld/testsuite/ld-elfvers/vers17.c -35a714a53e208be7dd7f246285c4dd30 ld/testsuite/ld-elfvers/vers17.dsym -db62e32b4b422023390633f11005c406 ld/testsuite/ld-elfvers/vers17.map -bf382203a5c52664aa6e7728abbbd31a ld/testsuite/ld-elfvers/vers17.ver -64ce133534d131385b4d10606c423b81 ld/testsuite/ld-elfvers/vers18.c -3a85e7068b4a30ec5e7585a14b19ce69 ld/testsuite/ld-elfvers/vers18.dsym -31b6949806df3bd1f959a957bed07ff6 ld/testsuite/ld-elfvers/vers18.map -99fdeff24e389af67f2125724e3c0c2b ld/testsuite/ld-elfvers/vers18.sym -3727b5769ad6291477eb3ffaa67eb9d2 ld/testsuite/ld-elfvers/vers18.ver -039a925919afb81dc1ee342704f38935 ld/testsuite/ld-elfvers/vers19.c -c1b9e106ce57e5a1d19a19e5ad108ea6 ld/testsuite/ld-elfvers/vers19.dsym -56042a92306b44d3b68444cb64f9c768 ld/testsuite/ld-elfvers/vers19.ver -0a2838d86e28cda599478f48e5b5bdfd ld/testsuite/ld-elfvers/vers2.c -6c04dd6b5a1f83b8ad01dc66e0cef2c9 ld/testsuite/ld-elfvers/vers2.dsym -0f243904b21ec2e5cda0083a35f9708e ld/testsuite/ld-elfvers/vers2.map -a597d603357c6c6537d1ee1e806a56d6 ld/testsuite/ld-elfvers/vers2.ver -2198856c8569cc7494ffe89650a9e63b ld/testsuite/ld-elfvers/vers3.c -c1b9e106ce57e5a1d19a19e5ad108ea6 ld/testsuite/ld-elfvers/vers3.dsym -d02949a2cd805d83970ffc3229895e01 ld/testsuite/ld-elfvers/vers3.ver -eaeb7b786e1af44d384e8c84dc7a2dc4 ld/testsuite/ld-elfvers/vers4.c -41acbfbc82b54219566366b069b2ce34 ld/testsuite/ld-elfvers/vers4.sym -e878b24651400ca1fb1bdc0c16a22848 ld/testsuite/ld-elfvers/vers4a.dsym -41acbfbc82b54219566366b069b2ce34 ld/testsuite/ld-elfvers/vers4a.sym -e15e85042ec35363e4bc97c35187187a ld/testsuite/ld-elfvers/vers4a.ver -940d06960890b0eb73114f452b44604a ld/testsuite/ld-elfvers/vers5.c -3874cf48820bc48dd48d1ee16551af06 ld/testsuite/ld-elfvers/vers6.c -440222caab8e6f857b77c1ba50d81e84 ld/testsuite/ld-elfvers/vers6.dsym -b355de4ba2834305bca9bf3b7cc91e70 ld/testsuite/ld-elfvers/vers6.sym -c6dda7839f06ae8858d0d413c6b436dc ld/testsuite/ld-elfvers/vers6.ver -8c6338ab91836afb2918ef463e5e899a ld/testsuite/ld-elfvers/vers7.c -9a7ae246a7154e67158fc0cdcda850d8 ld/testsuite/ld-elfvers/vers7.map -8d7f1e06f9194fa66402e5efff269754 ld/testsuite/ld-elfvers/vers7a.c -b3fdb5ca0a4cf57530bf9d838fe825da ld/testsuite/ld-elfvers/vers7a.dsym -d466ec8b7fcadee36db85cac92c1601a ld/testsuite/ld-elfvers/vers7a.sym -3cbade7d1c3f4ac6ccbc83cebf13d3f7 ld/testsuite/ld-elfvers/vers7a.ver -258f61144bcd39b444b75dba182129e6 ld/testsuite/ld-elfvers/vers8.c -3a208e171858590f5717735bf85432b6 ld/testsuite/ld-elfvers/vers8.map -36514fcaa2e950e55d5930aa97782ea2 ld/testsuite/ld-elfvers/vers8.ver -2866447458043d608659fc1fe92f617a ld/testsuite/ld-elfvers/vers9.c -21dcd2120edc32b5e36974abdc6e1f3e ld/testsuite/ld-elfvers/vers9.dsym -0d2f6f5317e5732e649745046ab2ab9a ld/testsuite/ld-elfvers/vers9.sym -ba97850c4c77d6ae99535f328268af22 ld/testsuite/ld-elfvers/vers9.ver -a1502268321d4816ffa1d1bb1cf335e1 ld/testsuite/ld-elfvsb/elf-offset.ld -26f7423a78988457f44e1879ec1ec1b1 ld/testsuite/ld-elfvsb/elfvsb.dat -c7e4e3bb61152914b24ca9d48c7414e8 ld/testsuite/ld-elfvsb/elfvsb.exp -996a5cc52bf7b1f6356ea1e77aaca26e ld/testsuite/ld-elfvsb/main.c -a5d04655b47574a63e0d034c2b15ecf8 ld/testsuite/ld-elfvsb/sh1.c -2a301406fc0d5ccedb5fe48db23d0838 ld/testsuite/ld-elfvsb/sh2.c -b77b2046bde3f0f47b7ed8412f4e095f ld/testsuite/ld-empic/empic.exp -e7337619d5f156145600727d89a92cad ld/testsuite/ld-empic/relax.t -9890e4435b569df5957bf349ae070544 ld/testsuite/ld-empic/relax1.c -06661c7d74d2309ff2e35b10146bd41e ld/testsuite/ld-empic/relax2.c -9bb9724eff6590e585dd1969fac15dff ld/testsuite/ld-empic/relax3.c -c192f60f33fc224b5c2c16766d07994d ld/testsuite/ld-empic/relax4.c -a8b21f91a17c7ecd1f8ca5b7f00e075b ld/testsuite/ld-empic/run.c -37bc1d770c9e77e637c46e1ae7992247 ld/testsuite/ld-empic/runtest1.c -a27a7a90ff46445fa4334638ec71ce3d ld/testsuite/ld-empic/runtest2.c -75a0208d669a12ec40c6c09cda96a4b4 ld/testsuite/ld-empic/runtesti.s -e882253a7b0f660986d5794a36239b1b ld/testsuite/ld-scripts/cross1.c -dacdbdd934565fa39a43a2a2372dfe7f ld/testsuite/ld-scripts/cross1.t -2bad1250e1d3998f3c2d678b1b90d275 ld/testsuite/ld-scripts/cross2.c -f4850b548feaf5705683c9096cad261d ld/testsuite/ld-scripts/cross2.t -6cda0a6cae6d6fe585c175aa49c2578e ld/testsuite/ld-scripts/cross3.c -8e5623c6b47db95f8e2be269f12dd48f ld/testsuite/ld-scripts/crossref.exp -3987c7a541be314eb899fb320d1236aa ld/testsuite/ld-scripts/defined.exp -89dc613e3ce213bd756b77d022667dac ld/testsuite/ld-scripts/defined.s -d3b1800f46a71805045a3a5732fd42bc ld/testsuite/ld-scripts/defined.t -5dc9106fd27359a7db37212f56b0c101 ld/testsuite/ld-scripts/phdrs.exp -9af38df1b2580b0ee309b0acfb185537 ld/testsuite/ld-scripts/phdrs.s -56a4859269de48bfbf859d4d0a327e9f ld/testsuite/ld-scripts/phdrs.t -b4fdfa8cd5673593833160a46be7b211 ld/testsuite/ld-scripts/script.exp -8ef222fed2cbd6222ef9c4bfb5caceb3 ld/testsuite/ld-scripts/script.s -b9bc56b095f61ceef7cb9a948be41609 ld/testsuite/ld-scripts/script.t -a673788e6a586931f65fee9d8964d0b8 ld/testsuite/ld-scripts/scriptm.t -b17503e5b20c63c8c98c18694e77f1c9 ld/testsuite/ld-scripts/sizeof.exp -de2cf65f9506880e63f0fdd46bb23c12 ld/testsuite/ld-scripts/sizeof.s -feffaafc250ae18dfdd493f8a6c4f2c6 ld/testsuite/ld-scripts/sizeof.t -c135cc5906cdf4cfe49d4c51df63c515 ld/testsuite/ld-scripts/weak.exp -3591b42540bac07bfbb66f7f0ce59d88 ld/testsuite/ld-scripts/weak.t -8df46a87530dbe689785bcc1c1a75da7 ld/testsuite/ld-scripts/weak1.s -b3bb044bcdc10e3eccef47d0c2c2429e ld/testsuite/ld-scripts/weak2.s -0490e9a40c7efa469100cf3f29ea8143 ld/testsuite/ld-selective/3.cc -3f6043e6b6bd49e760b9e753b6aaf9ac ld/testsuite/ld-selective/1.c -237d849095a360c8cad108dd7c84812b ld/testsuite/ld-selective/2.c -dcfb7a28e3bdf5d5453248236fbd60bc ld/testsuite/ld-selective/4.cc -a2c9c1152a0133516e4640ed96422473 ld/testsuite/ld-selective/5.cc -c5363d796238787cdb2c6ae148b90831 ld/testsuite/ld-selective/selective.exp -fe57a8477f445b968630a746d538da92 ld/testsuite/ld-sh/sh.exp -1480d5643c4a3a7456700440e9f108dc ld/testsuite/ld-sh/sh1.s -4a6b928d31480c42bc368db1a2d729b3 ld/testsuite/ld-sh/sh2.c -486895674299bb2c523133e56a567c1f ld/testsuite/ld-sh/start.s -a1502268321d4816ffa1d1bb1cf335e1 ld/testsuite/ld-shared/elf-offset.ld -662fbaf1e1bfcf9e0f69ece262c1fbc9 ld/testsuite/ld-shared/main.c -1ac7636415298be4ec10d57894d7bd92 ld/testsuite/ld-shared/sh1.c -dda81aa1c99d9fd983ae39378b5b69fd ld/testsuite/ld-shared/sh2.c -7ac9ed1cf3e4b23bd77743315f0560d5 ld/testsuite/ld-shared/shared.dat -8309ff0409c524b5958d7ffb2295f541 ld/testsuite/ld-shared/shared.exp -8b38128b19d7be0a9f143a3fae14669f ld/testsuite/ld-shared/sun4.dat -e8d8c5ef094b26b46377375f8ef076c3 ld/testsuite/ld-shared/symbolic.dat -bf16787cbff593c9377800bda68bc12b ld/testsuite/ld-shared/xcoff.dat -8541a6beb8232366c133e9097a10c8d2 ld/testsuite/ld-srec/srec.exp -ff2b78b0df3a6bc56644e35ec4f068bd ld/testsuite/ld-srec/sr1.c -6524623299b50b9299f4b3fca543b0fa ld/testsuite/ld-srec/sr2.c -16d9ac8f3038072368a8550eb60b5d26 ld/testsuite/ld-srec/sr3.cc -b619c6e42cb950ef08a2be4baed7e558 ld/testsuite/ld-undefined/undefined.c -80908f8a2cc2983b2e57ab40e0505045 ld/testsuite/ld-undefined/undefined.exp -68086317a3885311286459eb9083c71c ld/testsuite/ld-undefined/weak-undef.exp -d46f02756d74cac491eccd91c9497ca3 ld/testsuite/ld-undefined/weak-undef.s -ff2b7f892a6ef004c2076f2bab575ec0 ld/testsuite/ld-undefined/weak-undef.t -29efa44de09187dfbd1badee054c2ffd ld/testsuite/ld-versados/versados.exp -a3dd5e83356444e20dfff2b6986f9701 ld/testsuite/ld-versados/t1-1.ro -20fa39afdcf19846ef54b8c8a63c09fa ld/testsuite/ld-versados/t1-2.ro -750043b1377753643d66f2ea010d1d64 ld/testsuite/ld-versados/t1.ld -1ea1a397873490e5a225282b08911b79 ld/testsuite/ld-versados/t1.ook -b73a148ff92b3b9f50118dedddc8e9aa ld/testsuite/ld-versados/t2-1.ro -6521d61c4bf4f500cb868ded9a47044e ld/testsuite/ld-versados/t2-2.ro -ed2b6b448335acf507dc34b5a01710d8 ld/testsuite/ld-versados/t2-3.ro -7020c6c2928c89ca798f517226862f1c ld/testsuite/ld-versados/t2.ld -fb1e9ddf26ad5af0d34950d762f68ed9 ld/testsuite/ld-versados/t2.ook -d8417145277c2f71b3d7c058472f3577 ld/testsuite/lib/ld-lib.exp -e2677a696ed870d444e53cf69e8a69f6 ld/configdoc.texi -7b65854f594c84e80295173de277b3dc libiberty/config/mh-cxux7 -4004fdcde347fda58406b4b84a995c66 libiberty/config/mh-aix -b2eafdc4d4e0928a5d0e89d5f6fe116c libiberty/config/mh-beos -044204f5b4bcac5eae2face0602129ae libiberty/config/mh-fbsd21 -904bdcd9daf97fa55a9ca8901ffe7435 libiberty/config/mh-openedition -38e76da568ab25260754fdb9d5080513 libiberty/config/mh-windows -f30a9716ef3762e3467a2f62bf790f0a libiberty/COPYING.LIB -536f1ea00e95287882c108f51be00df5 libiberty/ChangeLog -d43770145fb3c3433ac33986770a7b36 libiberty/Makefile.in -08cc0e5f8cd2cc6bc1e4114011be131b libiberty/README -5ca0eba5b33e5f6952114bfe84c167b9 libiberty/aclocal.m4 -de46742edca3a9276eefa5ae8fdee5eb libiberty/alloca-conf.h -18b3e90c1496f1db337b93a2c3bda513 libiberty/alloca.c -d54574b77c40ff38a37139b4df4918c8 libiberty/argv.c -d837d38495c38d45d1c8bd94eda40b39 libiberty/asprintf.c -d89da155295f797db9f987220ef9af4f libiberty/atexit.c -0ec74e2bf6de5ac2ee096696b3f7dfb5 libiberty/basename.c -8536a9fe63d5270026766fb6a833c0e3 libiberty/bcmp.c -37f840db36868cae15135e9beb9d9c5b libiberty/bcopy.c -c5855ab06709314b196b5ceb7a7cb5dc libiberty/bsearch.c -3e539dda7281866347213ed444830f9b libiberty/bzero.c -fd01fef67ce311c2462b1957ff06282e libiberty/calloc.c -815fb49e28a8980f8b838aaecaefa891 libiberty/choose-temp.c -4c081fe106364d829d16c720e3a99ad0 libiberty/clock.c -6abc10aedbbd94274f97174a9ec454dd libiberty/concat.c -fdaf5fdc2a84ff34103604588aea1a3b libiberty/config.h-vms -bb2688eeee0799b47128613436b5731f libiberty/config.in -6ba918af7eec27cd147903518d519d46 libiberty/config.table -fde4aae2aac71c6837d5db1db1f4b880 libiberty/configure -9cc359fd1437d6afd69b5169104ddffd libiberty/configure.in -8493d27a97881009393ceec1aa431f0e libiberty/copysign.c -4427c696ecc360a813ecf063589f84a3 libiberty/cp-demangle.c -9463d7142e481f2a98e594901ca5a9f6 libiberty/cplus-dem.c -231d3202aadb19e1d3209fa0797b4ec4 libiberty/dyn-string.c -62121149a1d62bef125c75380131b180 libiberty/fdmatch.c -85de4ab7bf13ff400ecbd15001f91950 libiberty/floatformat.c -5a0e7522053fc29b178bcd5ee644aaee libiberty/fnmatch.c -3508056d5c091a4a066ef6895b66a63c libiberty/getcwd.c -2deefd98fad4fd25e2ed0facd2e5518f libiberty/getopt.c -5fd11388f488b53ec69eeb3e71161636 libiberty/getopt1.c -f4ed35bf0db2796c07db055f638abec8 libiberty/getpagesize.c -9fc32d36b7617e6393b8d8aa4dc8a5e0 libiberty/getpwd.c -b9bdf217753be4c1315c3a9689983290 libiberty/getruntime.c -e05e129c9bbfca9c792724adff237e85 libiberty/hashtab.c -d707920a44f45525dc4c6e310926a210 libiberty/hex.c -004477cba1e0a85a2d443bee4a0af269 libiberty/index.c -4c4b7edb35b7ffbbba5e7e2ec399d559 libiberty/insque.c -e331b31ce1cbf27a44f2fbeb54fa7b17 libiberty/makefile.vms -d985e08160b8aec6f4ba23175400181c libiberty/md5.c -cdca3f90987260a7a860aee136ca740a libiberty/memchr.c -2439abd355027df270d48733215f891a libiberty/memcmp.c -f59c3c95c9ab8b66dfccaa3d7ba1f878 libiberty/memcpy.c -8dda7ebe5e2c3c6c28aa53e06b283fcb libiberty/memmove.c -57043300d663328adbb1b40c2cd7793e libiberty/memset.c -bd2a139d55d7bbaeee671b50a45992fa libiberty/mkstemps.c -969668698375a7ecf08bc086b9613a31 libiberty/mpw-config.in -54c65d1bafd7d8d29b9d29761d977020 libiberty/mpw-make.sed -9de6f56befd6350286f5a42836a8433a libiberty/mpw.c -7897e43bedd2def4beb6eb73003efa68 libiberty/msdos.c -9fbb504341d8982f9439a168b9ef825e libiberty/objalloc.c -41b517bd87e0312eb4f1c72f641c2008 libiberty/obstack.c -34f70650591a3e50bf80a47259b21063 libiberty/partition.c -170b24f0daa4451a1a0c61badc6a2592 libiberty/pexecute.c -1c26add2214f8d43e42a3ef76e0a2c4e libiberty/putenv.c -892047691cd75e110b6c995047656068 libiberty/random.c -9afa19a52697f0d83a8f94c8f55b0140 libiberty/rename.c -b751b6a5c19944eded4cfcba1fd527df libiberty/rindex.c -438e62574b58fc80136eb9b43aa4d6b7 libiberty/safe-ctype.c -fb5ea509ef834b0fae40b4de9e121a4e libiberty/setenv.c -1f3c59265795bbeeaa0682e30ec008fa libiberty/sigsetmask.c -bcd38bbff8e80df6e908d7ee57d7b681 libiberty/sort.c -4a3173c26ad8cb30302e1425135647f8 libiberty/spaces.c -ea6978858b89cbdbf2bb796522e38603 libiberty/splay-tree.c -406f9df3aca1c9cb104e35d93aa5f19a libiberty/strcasecmp.c -25493d01cf01dddc7326eb6bb39b59d7 libiberty/strchr.c -352f6f1cb2e6025866d406ede3a475c0 libiberty/strdup.c -db0fc51193ca195a3f588e5184e1987a libiberty/strerror.c -00040f08f420f8336e67840133efdd87 libiberty/strncasecmp.c -2e333001f8ef8e01ae2f153e51b59ce4 libiberty/strncmp.c -19847187ca2ed7b38342718371b57a89 libiberty/strrchr.c -022d5e8aa132e524de1a9e087867161e libiberty/strsignal.c -58984b80dbe4d3364feda5c675b3e23c libiberty/strstr.c -0cd5eef7fa7708a43350f98eacf8776a libiberty/strtod.c -a0e7c73c62ba8a24e1590c27e34c59d3 libiberty/strtol.c -e06d6526f14dcd0834827520331fef16 libiberty/strtoul.c -d0b4c29a87478edc4c2c69c3e9d2be0a libiberty/tmpnam.c -8824ff84682ec60eca212b518429db18 libiberty/vasprintf.c -1e46cffdcdf7e68d72a8f24c71c04d08 libiberty/vfork.c -280fb05a979214b0876be4c9dc7d4061 libiberty/vfprintf.c -9a46f8a6bd6b911849f209d09e94b66f libiberty/vmsbuild.com -893d859616bab673df0504cb02a7feec libiberty/vprintf.c -d187e50a7a7817fcbf2bbd6595093756 libiberty/vsprintf.c -52860722750d8633eb78d1dbe6db4f5b libiberty/waitpid.c -5caf61856a76a6eb1cb52bb1c86501c5 libiberty/xatexit.c -357b147749e719e3c69315ac83c6a4bf libiberty/xexit.c -e404c730a2531595d5fea1c5da957e98 libiberty/xmalloc.c -b0feb91e581c43d5ae41b0576e877ab3 libiberty/xmemdup.c -6ec02ce9b4802dd6939200d4d2faba6a libiberty/xstrdup.c -e70805298181e0f55a52a64b17d72904 libiberty/xstrerror.c -f209fdb2c52db4462c254e6b8d89f2ee libiberty/testsuite/Makefile.in -6319e17edb27c399c30f1596c2ce41b5 libiberty/testsuite/demangle-expected -5cd31fc5e2e642e2de1c3d6a0792b431 libiberty/testsuite/regress-demangle -cc28484945e89f4d469672c4b1beaabe libtool.m4 -30c8f1fcca77253cf9e9657caac44c12 ltcf-c.sh -3a3fcd8d6f8accd80d1d41301045b2d8 ltcf-cxx.sh -1bf2c254103b812c60e6c8e8b90e4c83 ltcf-gcj.sh -9dedd8a70b17964941f1446787f61c2d ltconfig -906ef7ec1319467f83cfc91083949b01 ltmain.sh -734690a438420e8479e15d8ee6971792 makefile.vms -393d298125f8e03c13364afe447b308d missing -fbe2467afef81c41c166173adeb0ee20 mkdep -bc994884d395541d40c4192919a89a21 mkinstalldirs -c71ddf72c059891ca0bd1727f5aa0de1 move-if-change -a8fe1ab072e42efff2a0ec883d91130b mpw-README -af52692753387da2241fc4bc6ccec120 mpw-build.in -5479cbb3e13987fe2170b7a403b82e8f mpw-config.in -d186332a893eacec29defecdc3524ecf mpw-configure -96312bdd41def6a5946784d468dc29d3 mpw-install -7476f5d64c6678694b06bc7aba53fb97 opcodes/po/POTFILES.in -bfb5c178c2404196ab54d7532a61e3d4 opcodes/po/Make-in -87185f7dbaa4e4671dd4d64d491ed41e opcodes/po/opcodes.pot -5d10e6815b371dfeb9c53be2e06fc199 opcodes/ChangeLog -47912714837729ee35d5261ffff2941c opcodes/ChangeLog-9297 -2b70061d7488180442b52de1c9a9e819 opcodes/ChangeLog-9899 -d618facc3e8ce8bf3d02ba452e1be6ab opcodes/MAINTAINERS -253bd0a237fe51f196cde6b19edb1d19 opcodes/Makefile.am -2008005afc9d925a582285b3debb7968 opcodes/Makefile.in -84f5802b0b8a97be111d90fbe1eb5bc1 opcodes/a29k-dis.c -901749e9292ba1f5f109f5cc195bfe8b opcodes/acinclude.m4 -1738493e94ddf315a5f49742feabafdd opcodes/aclocal.m4 -edc549a6c86437daebd9ca4d85dac4d1 opcodes/alpha-dis.c -d57fd8d45f9ef301948abe020b8ea6ed opcodes/alpha-opc.c -407f2ac5f227ea3ab0fdbc29a2c157b8 opcodes/arc-dis.c -b35daf399df5036ff496742fbc5e08ec opcodes/arc-dis.h -8b5ec96c147acb9028e535b3ad80525b opcodes/arc-ext.c -2c085be449e338c2bda530572029c8c9 opcodes/arc-ext.h -6406fb8a25796d8042fcfbea50575876 opcodes/arc-opc.c -9e2b20ce7eeb3a319398ce3eb1d478f7 opcodes/arm-dis.c -011a87a896e0f67c2954e823b7ae037f opcodes/arm-opc.h -598016dc5a3065f79d352c18f24761cb opcodes/avr-dis.c -e9c941efc984cb22a689256e26e43e14 opcodes/cgen-asm.c -84c6a72bc58e3efe77abaa65e9190f86 opcodes/cgen-asm.in -d6cf591b1c7d4d3dbe9306ae800c132f opcodes/cgen-dis.c -7d118a2ff1141006931f55bffcd8e2ea opcodes/cgen-dis.in -b75826a34eee8fb6a90848adcc4377f0 opcodes/cgen-ibld.in -0086c001b35c9036a2d8cacae262aff4 opcodes/cgen-opc.c -95f1a3447a2b756b0f3a2b1cbdb98a16 opcodes/cgen.sh -0063bd27512e913f600d7732d1f6b455 opcodes/config.in -64774095a357e0c5dc0968329dff579c opcodes/configure -bcf375e26bbff52dc5d8df5f33a648d4 opcodes/configure.in -a2f28fa183e6adf5e888277d00a09ec0 opcodes/cris-dis.c -f9210ed755224660483db100711cd468 opcodes/cris-opc.c -3ff7eece27f0263ad962483020d1596d opcodes/d10v-dis.c -0557da1786712b947f0f29cd6141d7e1 opcodes/d10v-opc.c -b8ff24c42fbc4e3520c40784e6d870d6 opcodes/d30v-dis.c -0eebf1cce2cfd05039625773a97b8d40 opcodes/d30v-opc.c -003af092c5d632b4f4d90904faecd02e opcodes/dep-in.sed -21a789d7e4f7c00d4658aa7894ebb5f2 opcodes/dis-buf.c -2900c6f1a9f22b5291942c8ab5a1cc38 opcodes/disassemble.c -8575543eddea6b4909ecdd4aa7f96382 opcodes/fr30-asm.c -91642ad67bfffb844412fe3fc162732b opcodes/fr30-desc.c -44cf09ad36fa37532727361c3d655469 opcodes/fr30-desc.h -621fc334dc302583ba0d3936c47d73f1 opcodes/fr30-dis.c -7e3a44e24211aa6f1791a28192093777 opcodes/fr30-ibld.c -75fd4b7a627f6abf22338ce0f2b5744b opcodes/fr30-opc.c -751349749f75da04fc8ca9f007346f03 opcodes/fr30-opc.h -734b36ee7995c1e6bc93a338b9d66af2 opcodes/h8300-dis.c -dd0cbe2eae0c7d890d713979641e0836 opcodes/h8500-dis.c -be7eeeaaf1ac843e1b1b862a2abbaeab opcodes/h8500-opc.h -9e4136c02128d5cffedc2b42b26e13f8 opcodes/hppa-dis.c -8baa539d215e542bf822c36afd58d1d3 opcodes/i370-dis.c -f2ffaf6eaf3da84601fa3e11c75cb3b6 opcodes/i370-opc.c -5e6140717c388d0ba1193e3b12da9284 opcodes/i386-dis.c -325271abed39e7901f8e311329b7cd40 opcodes/i860-dis.c -e09d15cb2de4a4b71fc524e5dca3ea33 opcodes/i960-dis.c -f0469cd9c1a3c87e3bfd3a24c910f4c6 opcodes/ia64-asmtab.c -4c555d2fbf3bb0d7002a8108f7e28656 opcodes/ia64-asmtab.h -8384cb8430b26dfecca57f6cd6828fcd opcodes/ia64-dis.c -a9d29c4a2268f28092c985c7ad75a13d opcodes/ia64-gen.c -c36c8bd413a36bdbb0769eb453f96233 opcodes/ia64-ic.tbl -0d52960c8b9c111364271ff7c52049b6 opcodes/ia64-opc-a.c -8bc6bf983afd8d19ecbfd3956b3af1c2 opcodes/ia64-opc-b.c -8c9afa7e15881357af5fe46b1f5d80a4 opcodes/ia64-opc-d.c -c617e97d72c9f654b0305faf8b4ae10c opcodes/ia64-opc-f.c -c7e9b3273a3c819c81ad3807e3f86d43 opcodes/ia64-opc-i.c -489e185e02196bd26948258825b9d5ce opcodes/ia64-opc-m.c -5ade2d80b63adb27604e529c84ec0bf1 opcodes/ia64-opc-x.c -729f8bb05396f283169ef6d5cb5c62d1 opcodes/ia64-opc.c -354757cd4b638d7e50f0b34fd6e2c87a opcodes/ia64-opc.h -be62c652f94c6c4e4c7339a42025c43a opcodes/ia64-raw.tbl -b3d7452b4310332b7974b34b09f65a6d opcodes/ia64-war.tbl -a4eed6589f8feed99206080f7362eb7a opcodes/ia64-waw.tbl -a9d541dd9eccd3a1ea0415880b9521a7 opcodes/m10200-dis.c -cdf93ebf301a6f4b4072b2dfe4b56083 opcodes/m10200-opc.c -e999a55493e5bb73dccd2c2f49245bcf opcodes/m10300-dis.c -95476f50fb47e0c8423e8cdba158b341 opcodes/m10300-opc.c -c3c8430e52ed581bb9703f342223cfc1 opcodes/m32r-asm.c -c4ee7ef5b002da4ace8feed1be237d02 opcodes/m32r-desc.c -4842ca40e0cc8f7213279fd51fbb360c opcodes/m32r-desc.h -4d8e90904be8aecf6edf3f9e4affb910 opcodes/m32r-dis.c -452bd9f0a50294c59e6d9ded993b8934 opcodes/m32r-ibld.c -519f99255995a52ea031a68947874d03 opcodes/m32r-opc.c -065e44be10d96ee13c9d99fbd652cb4b opcodes/m32r-opc.h -b04da92be306da6813f23b988280eac7 opcodes/m32r-opinst.c -750ee68160890cb6bb8dc85f42f8fab7 opcodes/m68hc11-dis.c -534406cb1900704eb5bd5a8ab7c15362 opcodes/m68hc11-opc.c -b6d13f9c4898cd69610db32745c555a0 opcodes/m68k-dis.c -f95df4c61edcb7a72e97c651be941245 opcodes/m68k-opc.c -ac754e1e474d8bbd929f0a2f76026917 opcodes/m88k-dis.c -d129eed92c6947db4372b285656ef9a1 opcodes/makefile.vms -deddfa1e5bfc0d1cd272bb335c44f6ed opcodes/mcore-dis.c -5d1d73c7fcd371c3a4bb39d4a8e5cb44 opcodes/mcore-opc.h -378f487e8bd120f93fc5c8df05f10435 opcodes/mips-dis.c -3637f95bf25a1298bdebbbcc1ef8b2be opcodes/mips-opc.c -c5f2a79141b09a53e3430582f3559b7b opcodes/mips16-opc.c -5de239a139c71421a7cce634f8deca83 opcodes/mpw-config.in -031902d455df71012bd4603e5d616ca6 opcodes/mpw-make.sed -8720ca17359e24396f182810719f226a opcodes/ns32k-dis.c -81a682289129e3eefb7cfd6ce9d10d92 opcodes/opintl.h -5fd78854f081acef734b6313c9db3ed8 opcodes/pj-dis.c -7d29ed3a2cb830feadb1382aa3895b6f opcodes/pj-opc.c -ebd0146069b8dc7f178514f29b861060 opcodes/ppc-dis.c -1959550f862696159952f6d1cd19a589 opcodes/ppc-opc.c -81aca074f5c2f015f2607f33e4e2766f opcodes/sh-dis.c -7a4b5aac9ceabeaed3863691a70e6ab6 opcodes/sh-opc.h -ff77e2ad868c4cb2a913a04bbda42594 opcodes/sparc-dis.c -c35af9a7f84cf1a894d7595d914bba1d opcodes/sparc-opc.c -1ded054093de910d9786c62bc4fe8cc6 opcodes/stamp-h.in -8e4842844d864baf1d2056cf0651c2df opcodes/sysdep.h -5909eef2aabc61a8d5e9a71c9734defe opcodes/tic30-dis.c -368332708cdfe65a7195a852455d2e52 opcodes/tic54x-dis.c -971f75d91d6ba40f2040d21eb6f80b1f opcodes/tic54x-opc.c -0bbe03c2f65c1128fd6a0b0916315af3 opcodes/tic80-dis.c -2225052326dd29b94a99ca86fb0086d8 opcodes/tic80-opc.c -b0eefa85cb7a554ecd2056548d6d1b28 opcodes/v850-dis.c -5e2518c50d12ebda6e1fc9dd836c3602 opcodes/v850-opc.c -9f55832c633c46d55657de6006a6a1f0 opcodes/vax-dis.c -3cda2aff2cc4a955064f8a3f58a1887f opcodes/w65-dis.c -988ea26bcea3fd0093c354df06c24c1a opcodes/w65-opc.h -390692c1210bfd6864093e5dda087337 opcodes/z8k-dis.c -2bab6fea415ef1dbac1f958c912bc0d2 opcodes/z8k-opc.h -98b13794afa1b64b2c38411a2c72d404 opcodes/z8kgen.c -0b03c02d551d6f9d9db0c64ddde56500 setup.com -7d7855ad10def38a17850f5b17d3a9dd symlink-tree -0a8fa11d23b640dd1b15a36f8a7f0d3f texinfo/texinfo.tex -7588c5103af27cc93537977f059f52dc ylwrap |