diff options
author | cvs2svn <cvs2svn@FreeBSD.org> | 2008-05-29 02:30:00 +0000 |
---|---|---|
committer | cvs2svn <cvs2svn@FreeBSD.org> | 2008-05-29 02:30:00 +0000 |
commit | 1b0d6c33e687a800761e8ed241d01033c1740896 (patch) | |
tree | af6850df60d069ba0ac76bada3eadde2afa919bb | |
parent | b7e4108c6b8c33f7649d6dafbc4d1336dcdc96e7 (diff) |
This commit was manufactured by cvs2svn to create tagvendor/binutils/2.15.20040523
'binutils-vendor-binutils_2_15_20040523'.
Notes
Notes:
svn path=/vendor/binutils/dist/; revision=179404
svn path=/vendor/binutils/2.15.20040523/; revision=179406; tag=vendor/binutils/2.15.20040523
145 files changed, 122 insertions, 70658 deletions
diff --git a/contrib/binutils/bfd/doc/bfd.texi b/contrib/binutils/bfd/doc/bfd.texi deleted file mode 100644 index ea0ca9e56dc9..000000000000 --- a/contrib/binutils/bfd/doc/bfd.texi +++ /dev/null @@ -1,585 +0,0 @@ -@section @code{typedef bfd} -A BFD has type @code{bfd}; objects of this type are the -cornerstone of any application using BFD. Using BFD -consists of making references though the BFD and to data in the BFD. - -Here is the structure that defines the type @code{bfd}. It -contains the major data about the file and pointers -to the rest of the data. -@* -. -@example -struct _bfd -@{ - /* The filename the application opened the BFD with. */ - CONST char *filename; - - /* A pointer to the target jump table. */ - const struct bfd_target *xvec; - - /* To avoid dragging too many header files into every file that - includes `@code{bfd.h}', IOSTREAM has been declared as a "char - *", and MTIME as a "long". Their correct types, to which they - are cast when used, are "FILE *" and "time_t". The iostream - is the result of an fopen on the filename. However, if the - BFD_IN_MEMORY flag is set, then iostream is actually a pointer - to a bfd_in_memory struct. */ - PTR iostream; - - /* Is the file descriptor being cached? That is, can it be closed as - needed, and re-opened when accessed later? */ - - boolean cacheable; - - /* Marks whether there was a default target specified when the - BFD was opened. This is used to select which matching algorithm - to use to choose the back end. */ - - boolean target_defaulted; - - /* The caching routines use these to maintain a - least-recently-used list of BFDs */ - - struct _bfd *lru_prev, *lru_next; - - /* When a file is closed by the caching routines, BFD retains - state information on the file here: */ - - file_ptr where; - - /* and here: (``once'' means at least once) */ - - boolean opened_once; - - /* Set if we have a locally maintained mtime value, rather than - getting it from the file each time: */ - - boolean mtime_set; - - /* File modified time, if mtime_set is true: */ - - long mtime; - - /* Reserved for an unimplemented file locking extension.*/ - - int ifd; - - /* The format which belongs to the BFD. (object, core, etc.) */ - - bfd_format format; - - /* The direction the BFD was opened with*/ - - enum bfd_direction @{no_direction = 0, - read_direction = 1, - write_direction = 2, - both_direction = 3@} direction; - - /* Format_specific flags*/ - - flagword flags; - - /* Currently my_archive is tested before adding origin to - anything. I believe that this can become always an add of - origin, with origin set to 0 for non archive files. */ - - file_ptr origin; - - /* Remember when output has begun, to stop strange things - from happening. */ - boolean output_has_begun; - - /* Pointer to linked list of sections*/ - struct sec *sections; - - /* The number of sections */ - unsigned int section_count; - - /* Stuff only useful for object files: - The start address. */ - bfd_vma start_address; - - /* Used for input and output*/ - unsigned int symcount; - - /* Symbol table for output BFD (with symcount entries) */ - struct symbol_cache_entry **outsymbols; - - /* Pointer to structure which contains architecture information*/ - const struct bfd_arch_info *arch_info; - - /* Stuff only useful for archives:*/ - PTR arelt_data; - struct _bfd *my_archive; /* The containing archive BFD. */ - struct _bfd *next; /* The next BFD in the archive. */ - struct _bfd *archive_head; /* The first BFD in the archive. */ - boolean has_armap; - - /* A chain of BFD structures involved in a link. */ - struct _bfd *link_next; - - /* A field used by _bfd_generic_link_add_archive_symbols. This will - be used only for archive elements. */ - int archive_pass; - - /* Used by the back end to hold private data. */ - - union - @{ - struct aout_data_struct *aout_data; - struct artdata *aout_ar_data; - struct _oasys_data *oasys_obj_data; - struct _oasys_ar_data *oasys_ar_data; - struct coff_tdata *coff_obj_data; - struct pe_tdata *pe_obj_data; - struct xcoff_tdata *xcoff_obj_data; - struct ecoff_tdata *ecoff_obj_data; - struct ieee_data_struct *ieee_data; - struct ieee_ar_data_struct *ieee_ar_data; - struct srec_data_struct *srec_data; - struct ihex_data_struct *ihex_data; - struct tekhex_data_struct *tekhex_data; - struct elf_obj_tdata *elf_obj_data; - struct nlm_obj_tdata *nlm_obj_data; - struct bout_data_struct *bout_data; - struct sun_core_struct *sun_core_data; - struct trad_core_struct *trad_core_data; - struct som_data_struct *som_data; - struct hpux_core_struct *hpux_core_data; - struct hppabsd_core_struct *hppabsd_core_data; - struct sgi_core_struct *sgi_core_data; - struct lynx_core_struct *lynx_core_data; - struct osf_core_struct *osf_core_data; - struct cisco_core_struct *cisco_core_data; - struct versados_data_struct *versados_data; - struct netbsd_core_struct *netbsd_core_data; - PTR any; - @} tdata; - - /* Used by the application to hold private data*/ - PTR usrdata; - - /* Where all the allocated stuff under this BFD goes. This is a - struct objalloc *, but we use PTR to avoid requiring the inclusion of - objalloc.h. */ - PTR memory; -@}; - -@end example -@section Error reporting -Most BFD functions return nonzero on success (check their -individual documentation for precise semantics). On an error, -they call @code{bfd_set_error} to set an error condition that callers -can check by calling @code{bfd_get_error}. -If that returns @code{bfd_error_system_call}, then check -@code{errno}. - -The easiest way to report a BFD error to the user is to -use @code{bfd_perror}. -@* -@subsection Type @code{bfd_error_type} -The values returned by @code{bfd_get_error} are defined by the -enumerated type @code{bfd_error_type}. -@* -. -@example -typedef enum bfd_error -@{ - bfd_error_no_error = 0, - bfd_error_system_call, - bfd_error_invalid_target, - bfd_error_wrong_format, - bfd_error_invalid_operation, - bfd_error_no_memory, - bfd_error_no_symbols, - bfd_error_no_armap, - bfd_error_no_more_archived_files, - bfd_error_malformed_archive, - bfd_error_file_not_recognized, - bfd_error_file_ambiguously_recognized, - bfd_error_no_contents, - bfd_error_nonrepresentable_section, - bfd_error_no_debug_section, - bfd_error_bad_value, - bfd_error_file_truncated, - bfd_error_file_too_big, - bfd_error_invalid_error_code -@} bfd_error_type; - -@end example -@findex bfd_get_error -@subsubsection @code{bfd_get_error} -@strong{Synopsis} -@example -bfd_error_type bfd_get_error (void); -@end example -@strong{Description}@* -Return the current BFD error condition. -@* -@findex bfd_set_error -@subsubsection @code{bfd_set_error} -@strong{Synopsis} -@example -void bfd_set_error (bfd_error_type error_tag); -@end example -@strong{Description}@* -Set the BFD error condition to be @var{error_tag}. -@* -@findex bfd_errmsg -@subsubsection @code{bfd_errmsg} -@strong{Synopsis} -@example -CONST char *bfd_errmsg (bfd_error_type error_tag); -@end example -@strong{Description}@* -Return a string describing the error @var{error_tag}, or -the system error if @var{error_tag} is @code{bfd_error_system_call}. -@* -@findex bfd_perror -@subsubsection @code{bfd_perror} -@strong{Synopsis} -@example -void bfd_perror (CONST char *message); -@end example -@strong{Description}@* -Print to the standard error stream a string describing the -last BFD error that occurred, or the last system error if -the last BFD error was a system call failure. If @var{message} -is non-NULL and non-empty, the error string printed is preceded -by @var{message}, a colon, and a space. It is followed by a newline. -@* -@subsection BFD error handler -Some BFD functions want to print messages describing the -problem. They call a BFD error handler function. This -function may be overriden by the program. - -The BFD error handler acts like printf. -@* -. -@example -typedef void (*bfd_error_handler_type) PARAMS ((const char *, ...)); - -@end example -@findex bfd_set_error_handler -@subsubsection @code{bfd_set_error_handler} -@strong{Synopsis} -@example -bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type); -@end example -@strong{Description}@* -Set the BFD error handler function. Returns the previous -function. -@* -@findex bfd_set_error_program_name -@subsubsection @code{bfd_set_error_program_name} -@strong{Synopsis} -@example -void bfd_set_error_program_name (const char *); -@end example -@strong{Description}@* -Set the program name to use when printing a BFD error. This -is printed before the error message followed by a colon and -space. The string must not be changed after it is passed to -this function. -@* -@section Symbols - -@* -@findex bfd_get_reloc_upper_bound -@subsubsection @code{bfd_get_reloc_upper_bound} -@strong{Synopsis} -@example -long bfd_get_reloc_upper_bound(bfd *abfd, asection *sect); -@end example -@strong{Description}@* -Return the number of bytes required to store the -relocation information associated with section @var{sect} -attached to bfd @var{abfd}. If an error occurs, return -1. -@* -@findex bfd_canonicalize_reloc -@subsubsection @code{bfd_canonicalize_reloc} -@strong{Synopsis} -@example -long bfd_canonicalize_reloc - (bfd *abfd, - asection *sec, - arelent **loc, - asymbol **syms); -@end example -@strong{Description}@* -Call the back end associated with the open BFD -@var{abfd} and translate the external form of the relocation -information attached to @var{sec} into the internal canonical -form. Place the table into memory at @var{loc}, which has -been preallocated, usually by a call to -@code{bfd_get_reloc_upper_bound}. Returns the number of relocs, or --1 on error. - -The @var{syms} table is also needed for horrible internal magic -reasons. -@* -@findex bfd_set_reloc -@subsubsection @code{bfd_set_reloc} -@strong{Synopsis} -@example -void bfd_set_reloc - (bfd *abfd, asection *sec, arelent **rel, unsigned int count) -@end example -@strong{Description}@* -Set the relocation pointer and count within -section @var{sec} to the values @var{rel} and @var{count}. -The argument @var{abfd} is ignored. -@* -@findex bfd_set_file_flags -@subsubsection @code{bfd_set_file_flags} -@strong{Synopsis} -@example -boolean bfd_set_file_flags(bfd *abfd, flagword flags); -@end example -@strong{Description}@* -Set the flag word in the BFD @var{abfd} to the value @var{flags}. - -Possible errors are: -@itemize @bullet - -@item -@code{bfd_error_wrong_format} - The target bfd was not of object format. -@item -@code{bfd_error_invalid_operation} - The target bfd was open for reading. -@item -@code{bfd_error_invalid_operation} - -The flag word contained a bit which was not applicable to the -type of file. E.g., an attempt was made to set the @code{D_PAGED} bit -on a BFD format which does not support demand paging. -@end itemize -@* -@findex bfd_set_start_address -@subsubsection @code{bfd_set_start_address} -@strong{Synopsis} -@example -boolean bfd_set_start_address(bfd *abfd, bfd_vma vma); -@end example -@strong{Description}@* -Make @var{vma} the entry point of output BFD @var{abfd}. -@* -@strong{Returns}@* -Returns @code{true} on success, @code{false} otherwise. -@* -@findex bfd_get_mtime -@subsubsection @code{bfd_get_mtime} -@strong{Synopsis} -@example -long bfd_get_mtime(bfd *abfd); -@end example -@strong{Description}@* -Return the file modification time (as read from the file system, or -from the archive header for archive members). -@* -@findex bfd_get_size -@subsubsection @code{bfd_get_size} -@strong{Synopsis} -@example -long bfd_get_size(bfd *abfd); -@end example -@strong{Description}@* -Return the file size (as read from file system) for the file -associated with BFD @var{abfd}. - -The initial motivation for, and use of, this routine is not -so we can get the exact size of the object the BFD applies to, since -that might not be generally possible (archive members for example). -It would be ideal if someone could eventually modify -it so that such results were guaranteed. - -Instead, we want to ask questions like "is this NNN byte sized -object I'm about to try read from file offset YYY reasonable?" -As as example of where we might do this, some object formats -use string tables for which the first @code{sizeof(long)} bytes of the -table contain the size of the table itself, including the size bytes. -If an application tries to read what it thinks is one of these -string tables, without some way to validate the size, and for -some reason the size is wrong (byte swapping error, wrong location -for the string table, etc.), the only clue is likely to be a read -error when it tries to read the table, or a "virtual memory -exhausted" error when it tries to allocate 15 bazillon bytes -of space for the 15 bazillon byte table it is about to read. -This function at least allows us to answer the quesion, "is the -size reasonable?". -@* -@findex bfd_get_gp_size -@subsubsection @code{bfd_get_gp_size} -@strong{Synopsis} -@example -int bfd_get_gp_size(bfd *abfd); -@end example -@strong{Description}@* -Return the maximum size of objects to be optimized using the GP -register under MIPS ECOFF. This is typically set by the @code{-G} -argument to the compiler, assembler or linker. -@* -@findex bfd_set_gp_size -@subsubsection @code{bfd_set_gp_size} -@strong{Synopsis} -@example -void bfd_set_gp_size(bfd *abfd, int i); -@end example -@strong{Description}@* -Set the maximum size of objects to be optimized using the GP -register under ECOFF or MIPS ELF. This is typically set by -the @code{-G} argument to the compiler, assembler or linker. -@* -@findex bfd_scan_vma -@subsubsection @code{bfd_scan_vma} -@strong{Synopsis} -@example -bfd_vma bfd_scan_vma(CONST char *string, CONST char **end, int base); -@end example -@strong{Description}@* -Convert, like @code{strtoul}, a numerical expression -@var{string} into a @code{bfd_vma} integer, and return that integer. -(Though without as many bells and whistles as @code{strtoul}.) -The expression is assumed to be unsigned (i.e., positive). -If given a @var{base}, it is used as the base for conversion. -A base of 0 causes the function to interpret the string -in hex if a leading "0x" or "0X" is found, otherwise -in octal if a leading zero is found, otherwise in decimal. - -Overflow is not detected. -@* -@findex bfd_copy_private_bfd_data -@subsubsection @code{bfd_copy_private_bfd_data} -@strong{Synopsis} -@example -boolean bfd_copy_private_bfd_data(bfd *ibfd, bfd *obfd); -@end example -@strong{Description}@* -Copy private BFD information from the BFD @var{ibfd} to the -the BFD @var{obfd}. Return @code{true} on success, @code{false} on error. -Possible error returns are: - -@itemize @bullet - -@item -@code{bfd_error_no_memory} - -Not enough memory exists to create private data for @var{obfd}. -@end itemize -@example -#define bfd_copy_private_bfd_data(ibfd, obfd) \ - BFD_SEND (obfd, _bfd_copy_private_bfd_data, \ - (ibfd, obfd)) -@end example -@* -@findex bfd_merge_private_bfd_data -@subsubsection @code{bfd_merge_private_bfd_data} -@strong{Synopsis} -@example -boolean bfd_merge_private_bfd_data(bfd *ibfd, bfd *obfd); -@end example -@strong{Description}@* -Merge private BFD information from the BFD @var{ibfd} to the -the output file BFD @var{obfd} when linking. Return @code{true} -on success, @code{false} on error. Possible error returns are: - -@itemize @bullet - -@item -@code{bfd_error_no_memory} - -Not enough memory exists to create private data for @var{obfd}. -@end itemize -@example -#define bfd_merge_private_bfd_data(ibfd, obfd) \ - BFD_SEND (obfd, _bfd_merge_private_bfd_data, \ - (ibfd, obfd)) -@end example -@* -@findex bfd_set_private_flags -@subsubsection @code{bfd_set_private_flags} -@strong{Synopsis} -@example -boolean bfd_set_private_flags(bfd *abfd, flagword flags); -@end example -@strong{Description}@* -Set private BFD flag information in the BFD @var{abfd}. -Return @code{true} on success, @code{false} on error. Possible error -returns are: - -@itemize @bullet - -@item -@code{bfd_error_no_memory} - -Not enough memory exists to create private data for @var{obfd}. -@end itemize -@example -#define bfd_set_private_flags(abfd, flags) \ - BFD_SEND (abfd, _bfd_set_private_flags, \ - (abfd, flags)) -@end example -@* -@findex stuff -@subsubsection @code{stuff} -@strong{Description}@* -Stuff which should be documented: -@example -#define bfd_sizeof_headers(abfd, reloc) \ - BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, reloc)) - -#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \ - BFD_SEND (abfd, _bfd_find_nearest_line, (abfd, sec, syms, off, file, func, line)) - - /* Do these three do anything useful at all, for any back end? */ -#define bfd_debug_info_start(abfd) \ - BFD_SEND (abfd, _bfd_debug_info_start, (abfd)) - -#define bfd_debug_info_end(abfd) \ - BFD_SEND (abfd, _bfd_debug_info_end, (abfd)) - -#define bfd_debug_info_accumulate(abfd, section) \ - BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section)) - - -#define bfd_stat_arch_elt(abfd, stat) \ - BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) - -#define bfd_update_armap_timestamp(abfd) \ - BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd)) - -#define bfd_set_arch_mach(abfd, arch, mach)\ - BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach)) - -#define bfd_relax_section(abfd, section, link_info, again) \ - BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again)) - -#define bfd_link_hash_table_create(abfd) \ - BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd)) - -#define bfd_link_add_symbols(abfd, info) \ - BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info)) - -#define bfd_final_link(abfd, info) \ - BFD_SEND (abfd, _bfd_final_link, (abfd, info)) - -#define bfd_free_cached_info(abfd) \ - BFD_SEND (abfd, _bfd_free_cached_info, (abfd)) - -#define bfd_get_dynamic_symtab_upper_bound(abfd) \ - BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd)) - -#define bfd_print_private_bfd_data(abfd, file)\ - BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file)) - -#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \ - BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols)) - -#define bfd_get_dynamic_reloc_upper_bound(abfd) \ - BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd)) - -#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \ - BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms)) - -extern bfd_byte *bfd_get_relocated_section_contents - PARAMS ((bfd *, struct bfd_link_info *, - struct bfd_link_order *, bfd_byte *, - boolean, asymbol **)); - -@end example -@* diff --git a/contrib/binutils/bfd/elf32-i386-fbsd.c b/contrib/binutils/bfd/elf32-i386-fbsd.c deleted file mode 100644 index 500e0ebc0485..000000000000 --- a/contrib/binutils/bfd/elf32-i386-fbsd.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Intel IA-32 specific support for 32-bit ELF on FreeBSD. - Copyright 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. */ - -#define TARGET_LITTLE_SYM bfd_elf32_i386_freebsd_vec -#define TARGET_LITTLE_NAME "elf32-i386-freebsd" -#define ELF_ARCH bfd_arch_i386 -#define ELF_MACHINE_CODE EM_386 -#define ELF_MAXPAGESIZE 0x1000 - -#include "bfd.h" -#include "sysdep.h" -#include "elf-bfd.h" - -/* The kernel recognizes executables as valid only if they carry a - "FreeBSD" label in the ELF header. So we put this label on all - executables and (for simplicity) also all other object files. */ - -static void elf_i386_post_process_headers - PARAMS ((bfd *, struct bfd_link_info *)); - -static void -elf_i386_post_process_headers (abfd, link_info) - bfd * abfd; - struct bfd_link_info * link_info ATTRIBUTE_UNUSED; -{ - Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form. */ - - i_ehdrp = elf_elfheader (abfd); - - /* Put an ABI label supported by FreeBSD >= 4.1. */ - i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_FREEBSD; -#ifdef OLD_FREEBSD_ABI_LABEL - /* The ABI label supported by FreeBSD <= 4.0 is quite nonstandard. */ - memcpy (&i_ehdrp->e_ident[EI_ABIVERSION], "FreeBSD", 8); -#endif -} - -#define elf_backend_post_process_headers elf_i386_post_process_headers - -#include "elf32-i386.c" diff --git a/contrib/binutils/bfd/elf64-alpha-fbsd.c b/contrib/binutils/bfd/elf64-alpha-fbsd.c deleted file mode 100644 index 061b0b810302..000000000000 --- a/contrib/binutils/bfd/elf64-alpha-fbsd.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Alpha specific support for 64-bit ELF on FreeBSD. - Copyright 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. */ - -#define TARGET_LITTLE_SYM bfd_elf64_alpha_freebsd_vec -#define TARGET_LITTLE_NAME "elf64-alpha-freebsd" -#define ELF_ARCH bfd_arch_alpha -#define ELF_MACHINE_CODE EM_ALPHA -#define ELF_MAXPAGESIZE 0x10000 - -#include "bfd.h" -#include "sysdep.h" -#include "elf-bfd.h" - -/* The kernel recognizes executables as valid only if they carry a - "FreeBSD" label in the ELF header. So we put this label on all - executables and (for simplicity) also all other object files. */ - -static void elf_alpha_post_process_headers - PARAMS ((bfd *, struct bfd_link_info *)); - -static void -elf_alpha_post_process_headers (abfd, link_info) - bfd * abfd; - struct bfd_link_info * link_info ATTRIBUTE_UNUSED; -{ - Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form. */ - - i_ehdrp = elf_elfheader (abfd); - - /* Put an ABI label supported by FreeBSD >= 4.1. */ - i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_FREEBSD; -#ifdef OLD_FREEBSD_ABI_LABEL - /* The ABI label supported by FreeBSD <= 4.0 is quite nonstandard. */ - memcpy (&i_ehdrp->e_ident[EI_ABIVERSION], "FreeBSD", 8); -#endif -} - -#define elf_backend_post_process_headers elf_alpha_post_process_headers - -#include "elf64-alpha.c" diff --git a/contrib/binutils/bfd/elf64-sparc.c b/contrib/binutils/bfd/elf64-sparc.c index 90de3b974d5e..4568a22d6430 100644 --- a/contrib/binutils/bfd/elf64-sparc.c +++ b/contrib/binutils/bfd/elf64-sparc.c @@ -1638,11 +1638,7 @@ sparc64_elf_adjust_dynamic_symbol (info, h) || h->root.type == bfd_link_hash_defweak) && (h->root.u.def.section->flags & SEC_CODE) != 0)) { - if (! info->shared - && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0 - && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) == 0 - && h->root.type != bfd_link_hash_undefweak - && h->root.type != bfd_link_hash_undefined) + if (! elf_hash_table (info)->dynamic_sections_created) { /* This case can occur if we saw a WPLT30 reloc in an input file, but none of the input files were dynamic objects. diff --git a/contrib/binutils/bfd/elflink.h b/contrib/binutils/bfd/elflink.h deleted file mode 100644 index 6887e506ab74..000000000000 --- 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 f75b4caec898..000000000000 --- 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/acconfig.h b/contrib/binutils/binutils/acconfig.h deleted file mode 100644 index c38c529c901c..000000000000 --- a/contrib/binutils/binutils/acconfig.h +++ /dev/null @@ -1,34 +0,0 @@ - -/* Name of package. */ -#undef PACKAGE - -/* Version of package. */ -#undef VERSION - -/* Configured target name. */ -#undef TARGET - -/* Whether strstr must be declared even if <string.h> is included. */ -#undef NEED_DECLARATION_STRSTR - -/* Whether fprintf must be declared even if <stdio.h> is included. */ -#undef NEED_DECLARATION_FPRINTF - -/* Whether sbrk must be declared even if <unistd.h> is included. */ -#undef NEED_DECLARATION_SBRK - -/* Whether getenv must be declared even if <stdlib.h> is included. */ -#undef NEED_DECLARATION_GETENV -@TOP@ - -/* Is the type time_t defined in <time.h>? */ -#undef HAVE_TIME_T_IN_TIME_H - -/* Is the type time_t defined in <sys/types.h>? */ -#undef HAVE_TIME_T_IN_TYPES_H - -/* Does <utime.h> define struct utimbuf? */ -#undef HAVE_GOOD_UTIME_H - -/* Do we need to use the b modifier when opening binary files? */ -#undef USE_BINARY_FOPEN diff --git a/contrib/binutils/binutils/addr2line.1 b/contrib/binutils/binutils/addr2line.1 deleted file mode 100644 index 4294a502ecae..000000000000 --- a/contrib/binutils/binutils/addr2line.1 +++ /dev/null @@ -1,502 +0,0 @@ -.\" Copyright (c) 1997, 2000 Free Software Foundation -.\" See COPYING for conditions for redistribution -.TH addr2line 1 "27 March 1997" "Free Software Foundation" "GNU Development Tools" -.de BP -.sp -.ti \-.2i -\(** -.. - -.SH NAME -addr2line \- convert addresses into file names and line numbers - -.SH SYNOPSIS -.hy 0 -.na -.B addr2line -.RB "[\|" "\-b\ "\c -.I bfdname\c -.RB " | " "\-\-target="\c -.I bfdname\c -\&\|] -.RB "[\|" \-C | \-\-demangle "\|]" -.RB "[\|" "\-e\ "\c -.I filename\c -.RB " | " "\-\-exe="\c -.I filename\c -\&\|] -.RB "[\|" \-f | \-\-functions "\|]" -.RB "[\|" \-s | \-\-basenames "\|]" -.RB "[\|" \-H | \-\-help "\|]" -.RB "[\|" \-V | \-\-version "\|]" -.RB "[\|" addr addr ... "\|]" -.ad b -.hy 1 -.SH DESCRIPTION -\c -.B addr2line -translates program addresses into file names and line numbers. Given -an address and an executable, it uses the debugging information in the -executable to figure out which file name and line number are -associated with a given address. - -The executable to use is specified with the -.B \-e -option. The default is -.B a.out\c -\&. - -.B addr2line -has two modes of operation. - -In the first, hexadecimal addresses are specified on the command line, -and -.B addr2line -displays the file name and line number for each address. - -In the second, -.B addr2line -reads hexadecimal addresses from standard input, and prints the file -name and line number for each address on standard output. In this -mode, -.B addr2line -may be used in a pipe to convert dynamically chosen addresses. - -The format of the output is FILENAME:LINENO. The file name and line -number for each address is printed on a separate line. If the -.B \-f -option is used, then each FILENAME:LINENO line is preceded by a -FUNCTIONNAME line which is the name of the function containing the -address. - -If the file name or function name can not be determined, -.B addr2line -will print two question marks in their place. If the line number can -not be determined, -.B addr2line -will print 0. - -.SH OPTIONS -.TP -.BI "\-b " "bfdname"\c -.TP -.BI "\-\-target=" "bfdname" -Specify the object-code format for the object files to be -\c -.I bfdname\c -\&. - -.TP -.B \-C -.TP -.B \-\-demangle -Decode (\fIdemangle\fP) low-level symbol names into user-level names. -Besides removing any initial underscore prepended by the system, this -makes C++ function names readable. - -.TP -.BI "\-e " "filename"\c -.TP -.BI "\-\-exe=" "filename" -Specify the name of the executable for which addresses should be -translated. The default file is -.B a.out\c -\&. - -.TP -.B \-f -.TP -.B \-\-functions -Display function names as well as file and line number information. - -.TP -.B \-s -.TP -.B \-\-basenames -Display only the base of each file name. - -.SH "SEE ALSO" -.RB "`\|" binutils "\|'" -entry in -.B -info\c -\&; -.I -The GNU Binary Utilities\c -\&, Roland H. Pesch (October 1991). - -.SH COPYING -Copyright (c) 1993, 94, 95, 96, 97, 98, 1999, 2000 Free Software Foundation, Inc. -.PP -This document is distributed under the terms of the GNU Free -Documentation License, version 1.1. That license is described in the -sources for this manual page, but it is not displayed here in order to -make this manual more consise. Copies of this license can also be -obtained from: http://www.gnu.org/copyleft/. - -\" .SH 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. -\" .PP -\" 0. PREAMBLE -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 1. APPLICABILITY AND DEFINITIONS -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 2. VERBATIM COPYING -\" .PP -\" 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. -\" .PP -\" You may also lend copies, under the same conditions stated above, and -\" you may publicly display copies. -\" .PP -\" 3. COPYING IN QUANTITY -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 4. MODIFICATIONS -\" .PP -\" 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: -\" .PP -\" 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. -\" .PP -\" 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). -\" .PP -\" C. State on the Title page the name of the publisher of the -\" Modified Version, as the publisher. -\" .PP -\" D. Preserve all the copyright notices of the Document. -\" .PP -\" E. Add an appropriate copyright notice for your modifications -\" adjacent to the other copyright notices. -\" .PP -\" 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. -\" Preserve in that license notice the full lists of Invariant Sections -\" and required Cover Texts given in the Document's license notice. -\" .PP -\" H. Include an unaltered copy of this License. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" M. Delete any section entitled "Endorsements". Such a section -\" may not be included in the Modified Version. -\" .PP -\" N. Do not retitle any existing section as "Endorsements" -\" or to conflict in title with any Invariant Section. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 5. COMBINING DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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." -\" .PP - -\" 6. COLLECTIONS OF DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 7. AGGREGATION WITH INDEPENDENT WORKS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 8. TRANSLATION -\" .PP -\" 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. -\" .PP - -\" 9. TERMINATION -\" .PP -\" 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. -\" .PP - -\" 10. FUTURE REVISIONS OF THIS LICENSE -\" .PP -\" 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/. -\" .PP -\" 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. -\" .PP - -\" ADDENDUM: How to use this License for your documents -\" .PP -\" 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: -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. diff --git a/contrib/binutils/binutils/ar.1 b/contrib/binutils/binutils/ar.1 deleted file mode 100644 index d7b2caff8e64..000000000000 --- a/contrib/binutils/binutils/ar.1 +++ /dev/null @@ -1,891 +0,0 @@ -.\" Copyright (c) 1991, 1992, 1993, 1995, 1998, 1999, 2000 Free Software Foundation -.\" See section COPYING for conditions for redistribution -.TH ar 1 "1999" "Free Software Foundation" "GNU Development Tools" -.de BP -.sp -.ti \-.2i -\(** -.. - -.SH NAME -ar \- create, modify, and extract from archives. - -.SH SYNOPSIS -.hy 0 -.na -.BR ar " [\|" "-" "\|]"\c -.I {dmpqrtx}[abcfilNoPsSuvV] \c -[\|\c -.I membername\c -\&\|] \c -[\|\c -.I count\c -\&\|] \c -.I archive\c -\& \c -.I files\c -\&.\|.\|. - -.ad b -.hy 1 -.SH DESCRIPTION -The GNU \c -.B ar\c -\& program creates, modifies, and extracts from -archives. An \c -.I archive\c -\& is a single file holding a collection of -other files in a structure that makes it possible to retrieve -the original individual files (called \c -.I members\c -\& of the archive). - -The original files' contents, mode (permissions), timestamp, owner, and -group are preserved in the archive, and may be reconstituted on -extraction. - -GNU \c -.B ar\c -\& can maintain archives whose members have names of any -length; however, depending on how \c -.B ar\c -\& is configured on your -system, a limit on member-name length may be imposed (for compatibility -with archive formats maintained with other tools). If it exists, the -limit is often 15 characters (typical of formats related to a.out) or 16 -characters (typical of formats related to coff). - -\c -.B ar\c -\& is considered a binary utility because archives of this sort -are most often used as \c -.I libraries\c -\& holding commonly needed -subroutines. - -\c -.B ar\c -\& will create an index to the symbols defined in relocatable -object modules in the archive when you specify the modifier `\|\c -.B s\c -\|'. -Once created, this index is updated in the archive whenever \c -.B ar\c -\& -makes a change to its contents (save for the `\|\c -.B q\c -\|' update operation). -An archive with such an index speeds up linking to the library, and -allows routines in the library to call each other without regard to -their placement in the archive. - -You may use `\|\c -.B nm \-s\c -\|' or `\|\c -.B nm \-\-print\-armap\c -\|' to list this index -table. If an archive lacks the table, another form of \c -.B ar\c -\& called -\c -.B ranlib\c -\& can be used to add just the table. - -\c -.B ar\c -\& insists on at least two arguments to execute: one -keyletter specifying the \c -.I operation\c -\& (optionally accompanied by other -keyletters specifying \c -.I modifiers\c -\&), and the archive name to act on. - -Most operations can also accept further \c -.I files\c -\& arguments, -specifying particular files to operate on. - -.SH OPTIONS -GNU \c -.B ar\c -\& allows you to mix the operation code \c -.I p\c -\& and modifier -flags \c -.I mod\c -\& in any order, within the first command-line argument. - -If you wish, you may begin the first command-line argument with a -dash. - -The \c -.I p\c -\& keyletter specifies what operation to execute; it may be -any of the following, but you must specify only one of them: - -.TP -.B d -\c -.I Delete\c -\& modules from the archive. Specify the names of modules to -be deleted as \c -.I files\c -\&; the archive is untouched if you -specify no files to delete. - -If you specify the `\|\c -.B v\c -\|' modifier, \c -.B ar\c -\& will list each module -as it is deleted. - -.TP -.B m -Use this operation to \c -.I move\c -\& members in an archive. - -The ordering of members in an archive can make a difference in how -programs are linked using the library, if a symbol is defined in more -than one member. - -If no modifiers are used with \c -.B m\c -\&, any members you name in the -\c -.I files\c -\& arguments are moved to the \c -.I end\c -\& of the archive; -you can use the `\|\c -.B a\c -\|', `\|\c -.B b\c -\|', or `\|\c -.B i\c -\|' modifiers to move them to a -specified place instead. - -.TP -.B p -\c -.I Print\c -\& the specified members of the archive, to the standard -output file. If the `\|\c -.B v\c -\|' modifier is specified, show the member -name before copying its contents to standard output. - -If you specify no \c -.I files\c -\&, all the files in the archive are printed. - -.TP -.B q -\c -.I Quick append\c -\&; add \c -.I files\c -\& to the end of \c -.I archive\c -\&, -without checking for replacement. - -The modifiers `\|\c -.B a\c -\|', `\|\c -.B b\c -\|', and `\|\c -.B i\c -\|' do \c -.I not\c -\& affect this -operation; new members are always placed at the end of the archive. - -The modifier `\|\c -.B v\c -\|' makes \c -.B ar\c -\& list each file as it is appended. - -Since the point of this operation is speed, the archive's symbol table -index is not updated, even if it already existed; you can use `\|\c -.B ar s\c -\|' or -\c -.B ranlib\c -\& explicitly to update the symbol table index. - -However, too many different systems assume quick append rebuilds the -index, so GNU -.B ar -implements `\|\c -.B q\c -\|' as a synonym for `\|\c -.B r\c -\|'. - -.TP -.B r -Insert \c -.I files\c -\& into \c -.I archive\c -\& (with \c -.I replacement\c -\&). This -operation differs from `\|\c -.B q\c -\|' in that any previously existing members -are deleted if their names match those being added. - -If one of the files named in \c -.I files\c -\& doesn't exist, \c -.B ar\c -\& -displays an error message, and leaves undisturbed any existing members -of the archive matching that name. - -By default, new members are added at the end of the file; but you may -use one of the modifiers `\|\c -.B a\c -\|', `\|\c -.B b\c -\|', or `\|\c -.B i\c -\|' to request -placement relative to some existing member. - -The modifier `\|\c -.B v\c -\|' used with this operation elicits a line of -output for each file inserted, along with one of the letters `\|\c -.B a\c -\|' or -`\|\c -.B r\c -\|' to indicate whether the file was appended (no old member -deleted) or replaced. - -.TP -.B t -Display a \c -.I table\c -\& listing the contents of \c -.I archive\c -\&, or those -of the files listed in \c -.I files\c -\& that are present in the -archive. Normally only the member name is shown; if you also want to -see the modes (permissions), timestamp, owner, group, and size, you can -request that by also specifying the `\|\c -.B v\c -\|' modifier. - -If you do not specify any \c -.I files\c -\&, all files in the archive -are listed. - -If there is more than one file with the same name (say, `\|\c -.B fie\c -\|') in -an archive (say `\|\c -.B b.a\c -\|'), `\|\c -.B ar t b.a fie\c -\|' will list only the -first instance; to see them all, you must ask for a complete -listing\(em\&in our example, `\|\c -.B ar t b.a\c -\|'. - -.TP -.B x -\c -.I Extract\c -\& members (named \c -.I files\c -\&) from the archive. You can -use the `\|\c -.B v\c -\|' modifier with this operation, to request that -\c -.B ar\c -\& list each name as it extracts it. - -If you do not specify any \c -.I files\c -\&, all files in the archive -are extracted. - -.PP - -A number of modifiers (\c -.I mod\c -\&) may immediately follow the \c -.I p\c -\& -keyletter, to specify variations on an operation's behavior: - -.TP -.B a -Add new files \c -.I after\c -\& an existing member of the -archive. If you use the modifier \c -.B a\c -\&, the name of an existing archive -member must be present as the \c -.I membername\c -\& argument, before the -\c -.I archive\c -\& specification. - -.TP -.B b -Add new files \c -.I before\c -\& an existing member of the -archive. If you use the modifier \c -.B b\c -\&, the name of an existing archive -member must be present as the \c -.I membername\c -\& argument, before the -\c -.I archive\c -\& specification. (same as `\|\c -.B i\c -\|'). - -.TP -.B c -\c -.I Create\c -\& the archive. The specified \c -.I archive\c -\& is always -created if it didn't exist, when you request an update. But a warning is -issued unless you specify in advance that you expect to create it, by -using this modifier. - -.TP -.B f -Truncate names in the archive. -.B ar -will normally permit file names of any length. This will cause it to -create archives which are not compatible with the native -.B ar -program on some systems. If this is a concern, the -.B f -modifier may be used to truncate file names when putting them in the -archive. - -.TP -.B i -Insert new files \c -.I before\c -\& an existing member of the -archive. If you use the modifier \c -.B i\c -\&, the name of an existing archive -member must be present as the \c -.I membername\c -\& argument, before the -\c -.I archive\c -\& specification. (same as `\|\c -.B b\c -\|'). - -.TP -.B l -This modifier is accepted but not used. - -.TP -.B N -Uses the -.I count -parameter. This is used if there are multiple entries in the archive -with the same name. Extract or delete instance -.I count -of the given name from the archive. - -.TP -.B o -Preserve the \c -.I original\c -\& dates of members when extracting them. If -you do not specify this modifier, files extracted from the archive -will be stamped with the time of extraction. - -.TP -.B P -Use the full path name when matching names in the archive. -.B ar -can not create an archive with a full path name (such archives are not -POSIX complaint), but other archive creators can. This option will -cause -.B ar -to match file names using a complete path name, which can be -convenient when extracting a single file from an archive created by -another tool. - -.TP -.B s -Write an object-file index into the archive, or update an existing one, -even if no other change is made to the archive. You may use this modifier -flag either with any operation, or alone. Running `\|\c -.B ar s\c -\|' on an -archive is equivalent to running `\|\c -.B ranlib\c -\|' on it. - -.TP -.B S -Do not generate an archive symbol table. This can speed up building a -large library in several steps. The resulting archive can not be used -with the linker. In order to build a symbol table, you must omit the -`\|\c -.B S\c -\|' modifier on the last execution of `\|\c -.B ar\c -\|', or you must run `\|\c -.B ranlib\c -\|' on the archive. - -.TP -.B u -Normally, \c -.B ar r\c -\&.\|.\|. inserts all files -listed into the archive. If you would like to insert \c -.I only\c -\& those -of the files you list that are newer than existing members of the same -names, use this modifier. The `\|\c -.B u\c -\|' modifier is allowed only for the -operation `\|\c -.B r\c -\|' (replace). In particular, the combination `\|\c -.B qu\c -\|' is -not allowed, since checking the timestamps would lose any speed -advantage from the operation `\|\c -.B q\c -\|'. - -.TP -.B v -This modifier requests the \c -.I verbose\c -\& version of an operation. Many -operations display additional information, such as filenames processed, -when the modifier `\|\c -.B v\c -\|' is appended. - -.TP -.B V -This modifier shows the version number of -.BR ar . - -.PP - -.SH "SEE ALSO" -.RB "`\|" binutils "\|'" -entry in -.B -info\c -\&; -.I -The GNU Binary Utilities\c -, Roland H. Pesch (October 1991). -.BR nm ( 1 )\c -\&, -.BR ranlib ( 1 )\c -\&. - -.SH COPYING -Copyright (c) 1991, 1992, 1993, 1995, 1998, 1999, 2000 Free Software Foundation, Inc. -.PP -This document is distributed under the terms of the GNU Free -Documentation License, version 1.1. That license is described in the -sources for this manual page, but it is not displayed here in order to -make this manual more consise. Copies of this license can also be -obtained from: http://www.gnu.org/copyleft/. - -\" .SH 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. -\" .PP -\" 0. PREAMBLE -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 1. APPLICABILITY AND DEFINITIONS -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 2. VERBATIM COPYING -\" .PP -\" 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. -\" .PP -\" You may also lend copies, under the same conditions stated above, and -\" you may publicly display copies. -\" .PP -\" 3. COPYING IN QUANTITY -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 4. MODIFICATIONS -\" .PP -\" 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: -\" .PP -\" 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. -\" .PP -\" 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). -\" .PP -\" C. State on the Title page the name of the publisher of the -\" Modified Version, as the publisher. -\" .PP -\" D. Preserve all the copyright notices of the Document. -\" .PP -\" E. Add an appropriate copyright notice for your modifications -\" adjacent to the other copyright notices. -\" .PP -\" 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. -\" Preserve in that license notice the full lists of Invariant Sections -\" and required Cover Texts given in the Document's license notice. -\" .PP -\" H. Include an unaltered copy of this License. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" M. Delete any section entitled "Endorsements". Such a section -\" may not be included in the Modified Version. -\" .PP -\" N. Do not retitle any existing section as "Endorsements" -\" or to conflict in title with any Invariant Section. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 5. COMBINING DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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." -\" .PP - -\" 6. COLLECTIONS OF DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 7. AGGREGATION WITH INDEPENDENT WORKS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 8. TRANSLATION -\" .PP -\" 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. -\" .PP - -\" 9. TERMINATION -\" .PP -\" 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. -\" .PP - -\" 10. FUTURE REVISIONS OF THIS LICENSE -\" .PP -\" 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/. -\" .PP -\" 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. -\" .PP - -\" ADDENDUM: How to use this License for your documents -\" .PP -\" 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: -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. diff --git a/contrib/binutils/binutils/binutils.texi b/contrib/binutils/binutils/binutils.texi deleted file mode 100644 index 74e7cda41ee1..000000000000 --- a/contrib/binutils/binutils/binutils.texi +++ /dev/null @@ -1,3469 +0,0 @@ -\input texinfo @c -*- Texinfo -*- -@setfilename binutils.info -@include config.texi - -@ifinfo -@format -START-INFO-DIR-ENTRY -* Binutils: (binutils). The GNU binary utilities. -* ar: (binutils)ar. Create, modify, and extract from archives -* nm: (binutils)nm. List symbols from object files -* objcopy: (binutils)objcopy. Copy and translate object files -* objdump: (binutils)objdump. Display information from object files -* ranlib: (binutils)ranlib. Generate index to archive contents -* readelf: (binutils)readelf. Display the contents of ELF format files. -* size: (binutils)size. List section sizes and total size -* strings: (binutils)strings. List printable strings from files -* strip: (binutils)strip. Discard symbols -* c++filt: (binutils)c++filt. Filter to demangle encoded C++ symbols -* cxxfilt: (binutils)c++filt. MS-DOS name for c++filt -* addr2line: (binutils)addr2line. Convert addresses to file and line -* nlmconv: (binutils)nlmconv. Converts object code into an NLM -* windres: (binutils)windres. Manipulate Windows resources -* dlltool: (binutils)dlltool. Create files needed to build and use DLLs -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@ifinfo -Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 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". - -@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 -@end ifinfo - -@synindex ky cp -@c -@c This file documents the GNU binary utilities "ar", "ld", "objcopy", -@c "objdump", "nm", "size", "strings", "strip", "readelf" and "ranlib". -@c -@c Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -@c -@c This text may be freely distributed under the terms of the GNU -@c Free Documentation License. -@c - -@setchapternewpage odd -@settitle @sc{gnu} Binary Utilities -@titlepage -@finalout -@title The @sc{gnu} Binary Utilities -@subtitle Version @value{VERSION} -@sp 1 -@subtitle May 1993 -@author Roland H. Pesch -@author Jeffrey M. Osier -@author Cygnus Support -@page - -@tex -{\parskip=0pt \hfill Cygnus Support\par \hfill -\TeX{}info \texinfoversion\par } -@end tex - -@vskip 0pt plus 1filll -Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 1998, 2000, 2001 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 - -@node Top -@top Introduction - -@cindex version -This brief manual contains preliminary documentation for the @sc{gnu} binary -utilities (collectively version @value{VERSION}): - -@iftex -@table @code -@item ar -Create, modify, and extract from archives - -@item nm -List symbols from object files - -@item objcopy -Copy and translate object files - -@item objdump -Display information from object files - -@item ranlib -Generate index to archive contents - -@item readelf -Display the contents of ELF format files. - -@item size -List file section sizes and total size - -@item strings -List printable strings from files - -@item strip -Discard symbols - -@item c++filt -Demangle encoded C++ symbols (on MS-DOS, this program is named -@code{cxxfilt}) - -@item addr2line -Convert addresses into file names and line numbers - -@item nlmconv -Convert object code into a Netware Loadable Module - -@item windres -Manipulate Windows resources - -@item dlltool -Create the files needed to build and use Dynamic Link Libraries -@end table -@end iftex - -This document is distributed under the terms of the GNU Free -Documentation License. A copy of the license is included in the -section entitled "GNU Free Documentation License". - -@menu -* ar:: Create, modify, and extract from archives -* nm:: List symbols from object files -* objcopy:: Copy and translate object files -* objdump:: Display information from object files -* ranlib:: Generate index to archive contents -* readelf:: Display the contents of ELF format files. -* size:: List section sizes and total size -* strings:: List printable strings from files -* strip:: Discard symbols -* c++filt:: Filter to demangle encoded C++ symbols -* cxxfilt: c++filt. MS-DOS name for c++filt -* addr2line:: Convert addresses to file and line -* nlmconv:: Converts object code into an NLM -* windres:: Manipulate Windows resources -* dlltool:: Create files needed to build and use DLLs -* Selecting The Target System:: How these utilities determine the target. -* Reporting Bugs:: Reporting Bugs -* GNU Free Documentation License:: GNU Free Documentation License -* Index:: Index -@end menu - -@node ar -@chapter ar - -@kindex ar -@cindex archives -@cindex collections of files -@smallexample -ar [-]@var{p}[@var{mod} [@var{relpos}] [@var{count}]] @var{archive} [@var{member}@dots{}] -ar -M [ <mri-script ] -@end smallexample - -The @sc{gnu} @code{ar} program creates, modifies, and extracts from -archives. An @dfn{archive} is a single file holding a collection of -other files in a structure that makes it possible to retrieve -the original individual files (called @dfn{members} of the archive). - -The original files' contents, mode (permissions), timestamp, owner, and -group are preserved in the archive, and can be restored on -extraction. - -@cindex name length -@sc{gnu} @code{ar} can maintain archives whose members have names of any -length; however, depending on how @code{ar} is configured on your -system, a limit on member-name length may be imposed for compatibility -with archive formats maintained with other tools. If it exists, the -limit is often 15 characters (typical of formats related to a.out) or 16 -characters (typical of formats related to coff). - -@cindex libraries -@code{ar} is considered a binary utility because archives of this sort -are most often used as @dfn{libraries} holding commonly needed -subroutines. - -@cindex symbol index -@code{ar} creates an index to the symbols defined in relocatable -object modules in the archive when you specify the modifier @samp{s}. -Once created, this index is updated in the archive whenever @code{ar} -makes a change to its contents (save for the @samp{q} update operation). -An archive with such an index speeds up linking to the library, and -allows routines in the library to call each other without regard to -their placement in the archive. - -You may use @samp{nm -s} or @samp{nm --print-armap} to list this index -table. If an archive lacks the table, another form of @code{ar} called -@code{ranlib} can be used to add just the table. - -@cindex compatibility, @code{ar} -@cindex @code{ar} compatibility -@sc{gnu} @code{ar} is designed to be compatible with two different -facilities. You can control its activity using command-line options, -like the different varieties of @code{ar} on Unix systems; or, if you -specify the single command-line option @samp{-M}, you can control it -with a script supplied via standard input, like the MRI ``librarian'' -program. - -@menu -* ar cmdline:: Controlling @code{ar} on the command line -* ar scripts:: Controlling @code{ar} with a script -@end menu - -@page -@node ar cmdline -@section Controlling @code{ar} on the command line - -@smallexample -ar [-X32_64] [-]@var{p}[@var{mod} [@var{relpos}] [@var{count}]] @var{archive} [@var{member}@dots{}] -@end smallexample - -@cindex Unix compatibility, @code{ar} -When you use @code{ar} in the Unix style, @code{ar} insists on at least two -arguments to execute: one keyletter specifying the @emph{operation} -(optionally accompanied by other keyletters specifying -@emph{modifiers}), and the archive name to act on. - -Most operations can also accept further @var{member} arguments, -specifying particular files to operate on. - -@sc{gnu} @code{ar} allows you to mix the operation code @var{p} and modifier -flags @var{mod} in any order, within the first command-line argument. - -If you wish, you may begin the first command-line argument with a -dash. - -@cindex operations on archive -The @var{p} keyletter specifies what operation to execute; it may be -any of the following, but you must specify only one of them: - -@table @code -@item d -@cindex deleting from archive -@emph{Delete} modules from the archive. Specify the names of modules to -be deleted as @var{member}@dots{}; the archive is untouched if you -specify no files to delete. - -If you specify the @samp{v} modifier, @code{ar} lists each module -as it is deleted. - -@item m -@cindex moving in archive -Use this operation to @emph{move} members in an archive. - -The ordering of members in an archive can make a difference in how -programs are linked using the library, if a symbol is defined in more -than one member. - -If no modifiers are used with @code{m}, any members you name in the -@var{member} arguments are moved to the @emph{end} of the archive; -you can use the @samp{a}, @samp{b}, or @samp{i} modifiers to move them to a -specified place instead. - -@item p -@cindex printing from archive -@emph{Print} the specified members of the archive, to the standard -output file. If the @samp{v} modifier is specified, show the member -name before copying its contents to standard output. - -If you specify no @var{member} arguments, all the files in the archive are -printed. - -@item q -@cindex quick append to archive -@emph{Quick append}; Historically, add the files @var{member}@dots{} to the end of -@var{archive}, without checking for replacement. - -The modifiers @samp{a}, @samp{b}, and @samp{i} do @emph{not} affect this -operation; new members are always placed at the end of the archive. - -The modifier @samp{v} makes @code{ar} list each file as it is appended. - -Since the point of this operation is speed, the archive's symbol table -index is not updated, even if it already existed; you can use @samp{ar s} or -@code{ranlib} explicitly to update the symbol table index. - -However, too many different systems assume quick append rebuilds the -index, so GNU ar implements @code{q} as a synonym for @code{r}. - -@item r -@cindex replacement in archive -Insert the files @var{member}@dots{} into @var{archive} (with -@emph{replacement}). This operation differs from @samp{q} in that any -previously existing members are deleted if their names match those being -added. - -If one of the files named in @var{member}@dots{} does not exist, @code{ar} -displays an error message, and leaves undisturbed any existing members -of the archive matching that name. - -By default, new members are added at the end of the file; but you may -use one of the modifiers @samp{a}, @samp{b}, or @samp{i} to request -placement relative to some existing member. - -The modifier @samp{v} used with this operation elicits a line of -output for each file inserted, along with one of the letters @samp{a} or -@samp{r} to indicate whether the file was appended (no old member -deleted) or replaced. - -@item t -@cindex contents of archive -Display a @emph{table} listing the contents of @var{archive}, or those -of the files listed in @var{member}@dots{} that are present in the -archive. Normally only the member name is shown; if you also want to -see the modes (permissions), timestamp, owner, group, and size, you can -request that by also specifying the @samp{v} modifier. - -If you do not specify a @var{member}, all files in the archive -are listed. - -@cindex repeated names in archive -@cindex name duplication in archive -If there is more than one file with the same name (say, @samp{fie}) in -an archive (say @samp{b.a}), @samp{ar t b.a fie} lists only the -first instance; to see them all, you must ask for a complete -listing---in our example, @samp{ar t b.a}. -@c WRS only; per Gumby, this is implementation-dependent, and in a more -@c recent case in fact works the other way. - -@item x -@cindex extract from archive -@emph{Extract} members (named @var{member}) from the archive. You can -use the @samp{v} modifier with this operation, to request that -@code{ar} list each name as it extracts it. - -If you do not specify a @var{member}, all files in the archive -are extracted. - -@end table - -A number of modifiers (@var{mod}) may immediately follow the @var{p} -keyletter, to specify variations on an operation's behavior: - -@table @code -@item a -@cindex relative placement in archive -Add new files @emph{after} an existing member of the -archive. If you use the modifier @samp{a}, the name of an existing archive -member must be present as the @var{relpos} argument, before the -@var{archive} specification. - -@item b -Add new files @emph{before} an existing member of the -archive. If you use the modifier @samp{b}, the name of an existing archive -member must be present as the @var{relpos} argument, before the -@var{archive} specification. (same as @samp{i}). - -@item c -@cindex creating archives -@emph{Create} the archive. The specified @var{archive} is always -created if it did not exist, when you request an update. But a warning is -issued unless you specify in advance that you expect to create it, by -using this modifier. - -@item f -Truncate names in the archive. @sc{gnu} @code{ar} will normally permit file -names of any length. This will cause it to create archives which are -not compatible with the native @code{ar} program on some systems. If -this is a concern, the @samp{f} modifier may be used to truncate file -names when putting them in the archive. - -@item i -Insert new files @emph{before} an existing member of the -archive. If you use the modifier @samp{i}, the name of an existing archive -member must be present as the @var{relpos} argument, before the -@var{archive} specification. (same as @samp{b}). - -@item l -This modifier is accepted but not used. -@c whaffor ar l modifier??? presumably compat; with -@c what???---doc@@cygnus.com, 25jan91 - -@item N -Uses the @var{count} parameter. This is used if there are multiple -entries in the archive with the same name. Extract or delete instance -@var{count} of the given name from the archive. - -@item o -@cindex dates in archive -Preserve the @emph{original} dates of members when extracting them. If -you do not specify this modifier, files extracted from the archive -are stamped with the time of extraction. - -@item P -Use the full path name when matching names in the archive. @sc{gnu} -@code{ar} can not create an archive with a full path name (such archives -are not POSIX complaint), but other archive creators can. This option -will cause @sc{gnu} @code{ar} to match file names using a complete path -name, which can be convenient when extracting a single file from an -archive created by another tool. - -@item s -@cindex writing archive index -Write an object-file index into the archive, or update an existing one, -even if no other change is made to the archive. You may use this modifier -flag either with any operation, or alone. Running @samp{ar s} on an -archive is equivalent to running @samp{ranlib} on it. - -@item S -@cindex not writing archive index -Do not generate an archive symbol table. This can speed up building a -large library in several steps. The resulting archive can not be used -with the linker. In order to build a symbol table, you must omit the -@samp{S} modifier on the last execution of @samp{ar}, or you must run -@samp{ranlib} on the archive. - -@item u -@cindex updating an archive -Normally, @samp{ar r}@dots{} inserts all files -listed into the archive. If you would like to insert @emph{only} those -of the files you list that are newer than existing members of the same -names, use this modifier. The @samp{u} modifier is allowed only for the -operation @samp{r} (replace). In particular, the combination @samp{qu} is -not allowed, since checking the timestamps would lose any speed -advantage from the operation @samp{q}. - -@item v -This modifier requests the @emph{verbose} version of an operation. Many -operations display additional information, such as filenames processed, -when the modifier @samp{v} is appended. - -@item V -This modifier shows the version number of @code{ar}. -@end table - -@code{ar} ignores an initial option spelt @code{-X32_64}, for -compatibility with AIX. The behaviour produced by this option is the -default for GNU @code{ar}. @code{ar} does not support any of the other -@code{-X} options; in particular, it does not support @code{-X32} -which is the default for AIX @code{ar}. - -@node ar scripts -@section Controlling @code{ar} with a script - -@smallexample -ar -M [ <@var{script} ] -@end smallexample - -@cindex MRI compatibility, @code{ar} -@cindex scripts, @code{ar} -If you use the single command-line option @samp{-M} with @code{ar}, you -can control its operation with a rudimentary command language. This -form of @code{ar} operates interactively if standard input is coming -directly from a terminal. During interactive use, @code{ar} prompts for -input (the prompt is @samp{AR >}), and continues executing even after -errors. If you redirect standard input to a script file, no prompts are -issued, and @code{ar} abandons execution (with a nonzero exit code) -on any error. - -The @code{ar} command language is @emph{not} designed to be equivalent -to the command-line options; in fact, it provides somewhat less control -over archives. The only purpose of the command language is to ease the -transition to @sc{gnu} @code{ar} for developers who already have scripts -written for the MRI ``librarian'' program. - -The syntax for the @code{ar} command language is straightforward: -@itemize @bullet -@item -commands are recognized in upper or lower case; for example, @code{LIST} -is the same as @code{list}. In the following descriptions, commands are -shown in upper case for clarity. - -@item -a single command may appear on each line; it is the first word on the -line. - -@item -empty lines are allowed, and have no effect. - -@item -comments are allowed; text after either of the characters @samp{*} -or @samp{;} is ignored. - -@item -Whenever you use a list of names as part of the argument to an @code{ar} -command, you can separate the individual names with either commas or -blanks. Commas are shown in the explanations below, for clarity. - -@item -@samp{+} is used as a line continuation character; if @samp{+} appears -at the end of a line, the text on the following line is considered part -of the current command. -@end itemize - -Here are the commands you can use in @code{ar} scripts, or when using -@code{ar} interactively. Three of them have special significance: - -@code{OPEN} or @code{CREATE} specify a @dfn{current archive}, which is -a temporary file required for most of the other commands. - -@code{SAVE} commits the changes so far specified by the script. Prior -to @code{SAVE}, commands affect only the temporary copy of the current -archive. - -@table @code -@item ADDLIB @var{archive} -@itemx ADDLIB @var{archive} (@var{module}, @var{module}, @dots{} @var{module}) -Add all the contents of @var{archive} (or, if specified, each named -@var{module} from @var{archive}) to the current archive. - -Requires prior use of @code{OPEN} or @code{CREATE}. - -@item ADDMOD @var{member}, @var{member}, @dots{} @var{member} -@c FIXME! w/Replacement?? If so, like "ar r @var{archive} @var{names}" -@c else like "ar q..." -Add each named @var{member} as a module in the current archive. - -Requires prior use of @code{OPEN} or @code{CREATE}. - -@item CLEAR -Discard the contents of the current archive, canceling the effect of -any operations since the last @code{SAVE}. May be executed (with no -effect) even if no current archive is specified. - -@item CREATE @var{archive} -Creates an archive, and makes it the current archive (required for many -other commands). The new archive is created with a temporary name; it -is not actually saved as @var{archive} until you use @code{SAVE}. -You can overwrite existing archives; similarly, the contents of any -existing file named @var{archive} will not be destroyed until @code{SAVE}. - -@item DELETE @var{module}, @var{module}, @dots{} @var{module} -Delete each listed @var{module} from the current archive; equivalent to -@samp{ar -d @var{archive} @var{module} @dots{} @var{module}}. - -Requires prior use of @code{OPEN} or @code{CREATE}. - -@item DIRECTORY @var{archive} (@var{module}, @dots{} @var{module}) -@itemx DIRECTORY @var{archive} (@var{module}, @dots{} @var{module}) @var{outputfile} -List each named @var{module} present in @var{archive}. The separate -command @code{VERBOSE} specifies the form of the output: when verbose -output is off, output is like that of @samp{ar -t @var{archive} -@var{module}@dots{}}. When verbose output is on, the listing is like -@samp{ar -tv @var{archive} @var{module}@dots{}}. - -Output normally goes to the standard output stream; however, if you -specify @var{outputfile} as a final argument, @code{ar} directs the -output to that file. - -@item END -Exit from @code{ar}, with a @code{0} exit code to indicate successful -completion. This command does not save the output file; if you have -changed the current archive since the last @code{SAVE} command, those -changes are lost. - -@item EXTRACT @var{module}, @var{module}, @dots{} @var{module} -Extract each named @var{module} from the current archive, writing them -into the current directory as separate files. Equivalent to @samp{ar -x -@var{archive} @var{module}@dots{}}. - -Requires prior use of @code{OPEN} or @code{CREATE}. - -@ignore -@c FIXME Tokens but no commands??? -@item FULLDIR - -@item HELP -@end ignore - -@item LIST -Display full contents of the current archive, in ``verbose'' style -regardless of the state of @code{VERBOSE}. The effect is like @samp{ar -tv @var{archive}}. (This single command is a @sc{gnu} @code{ar} -enhancement, rather than present for MRI compatibility.) - -Requires prior use of @code{OPEN} or @code{CREATE}. - -@item OPEN @var{archive} -Opens an existing archive for use as the current archive (required for -many other commands). Any changes as the result of subsequent commands -will not actually affect @var{archive} until you next use @code{SAVE}. - -@item REPLACE @var{module}, @var{module}, @dots{} @var{module} -In the current archive, replace each existing @var{module} (named in -the @code{REPLACE} arguments) from files in the current working directory. -To execute this command without errors, both the file, and the module in -the current archive, must exist. - -Requires prior use of @code{OPEN} or @code{CREATE}. - -@item VERBOSE -Toggle an internal flag governing the output from @code{DIRECTORY}. -When the flag is on, @code{DIRECTORY} output matches output from -@samp{ar -tv }@dots{}. - -@item SAVE -Commit your changes to the current archive, and actually save it as a -file with the name specified in the last @code{CREATE} or @code{OPEN} -command. - -Requires prior use of @code{OPEN} or @code{CREATE}. - -@end table - -@iftex -@node ld -@chapter ld -@cindex linker -@kindex ld -The @sc{gnu} linker @code{ld} is now described in a separate manual. -@xref{Top,, Overview,, Using LD: the @sc{gnu} linker}. -@end iftex - -@node nm -@chapter nm -@cindex symbols -@kindex nm - -@smallexample -nm [ -a | --debug-syms ] [ -g | --extern-only ] - [ -B ] [ -C | --demangle[=@var{style}] ] [ -D | --dynamic ] - [ -s | --print-armap ] [ -A | -o | --print-file-name ] - [ -n | -v | --numeric-sort ] [ -p | --no-sort ] - [ -r | --reverse-sort ] [ --size-sort ] [ -u | --undefined-only ] - [ -t @var{radix} | --radix=@var{radix} ] [ -P | --portability ] - [ --target=@var{bfdname} ] [ -f @var{format} | --format=@var{format} ] - [ --defined-only ] [-l | --line-numbers ] [ --no-demangle ] - [ -V | --version ] [ -X 32_64 ] [ --help ] [ @var{objfile}@dots{} ] -@end smallexample - -@sc{gnu} @code{nm} lists the symbols from object files @var{objfile}@dots{}. -If no object files are listed as arguments, @code{nm} assumes the file -@file{a.out}. - -For each symbol, @code{nm} shows: - -@itemize @bullet -@item -The symbol value, in the radix selected by options (see below), or -hexadecimal by default. - -@item -The symbol type. At least the following types are used; others are, as -well, depending on the object file format. If lowercase, the symbol is -local; if uppercase, the symbol is global (external). - -@c Some more detail on exactly what these symbol types are used for -@c would be nice. -@table @code -@item A -The symbol's value is absolute, and will not be changed by further -linking. - -@item B -The symbol is in the uninitialized data section (known as BSS). - -@item C -The symbol is common. Common symbols are uninitialized data. When -linking, multiple common symbols may appear with the same name. If the -symbol is defined anywhere, the common symbols are treated as undefined -references. For more details on common symbols, see the discussion of ---warn-common in @ref{Options,,Linker options,ld.info,The GNU linker}. - -@item D -The symbol is in the initialized data section. - -@item G -The symbol is in an initialized data section for small objects. Some -object file formats permit more efficient access to small data objects, -such as a global int variable as opposed to a large global array. - -@item I -The symbol is an indirect reference to another symbol. This is a GNU -extension to the a.out object file format which is rarely used. - -@item N -The symbol is a debugging symbol. - -@item R -The symbol is in a read only data section. - -@item S -The symbol is in an uninitialized data section for small objects. - -@item T -The symbol is in the text (code) section. - -@item U -The symbol is undefined. - -@item V -The symbol is a weak object. When a weak defined symbol is linked with -a normal defined symbol, the normal defined symbol is used with no error. -When a weak undefined symbol is linked and the symbol is not defined, -the value of the weak symbol becomes zero with no error. - -@item W -The symbol is a weak symbol that has not been specifically tagged as a -weak object symbol. When a weak defined symbol is linked with a normal -defined symbol, the normal defined symbol is used with no error. -When a weak undefined symbol is linked and the symbol is not defined, -the value of the weak symbol becomes zero with no error. - -@item - -The symbol is a stabs symbol in an a.out object file. In this case, the -next values printed are the stabs other field, the stabs desc field, and -the stab type. Stabs symbols are used to hold debugging information; -for more information, see @ref{Top,Stabs,Stabs Overview,stabs.info, The -``stabs'' debug format}. - -@item ? -The symbol type is unknown, or object file format specific. -@end table - -@item -The symbol name. -@end itemize - -The long and short forms of options, shown here as alternatives, are -equivalent. - -@table @code -@item -A -@itemx -o -@itemx --print-file-name -@cindex input file name -@cindex file name -@cindex source file name -Precede each symbol by the name of the input file (or archive member) -in which it was found, rather than identifying the input file once only, -before all of its symbols. - -@item -a -@itemx --debug-syms -@cindex debugging symbols -Display all symbols, even debugger-only symbols; normally these are not -listed. - -@item -B -@cindex @code{nm} format -@cindex @code{nm} compatibility -The same as @samp{--format=bsd} (for compatibility with the MIPS @code{nm}). - -@item -C -@itemx --demangle[=@var{style}] -@cindex demangling in nm -Decode (@dfn{demangle}) low-level symbol names into user-level names. -Besides removing any initial underscore prepended by the system, this -makes C++ function names readable. Different compilers have different -mangling styles. The optional demangling style argument can be used to -choose an appropriate demangling style for your compiler. @xref{c++filt}, -for more information on demangling. - -@item --no-demangle -Do not demangle low-level symbol names. This is the default. - -@item -D -@itemx --dynamic -@cindex dynamic symbols -Display the dynamic symbols rather than the normal symbols. This is -only meaningful for dynamic objects, such as certain types of shared -libraries. - -@item -f @var{format} -@itemx --format=@var{format} -@cindex @code{nm} format -@cindex @code{nm} compatibility -Use the output format @var{format}, which can be @code{bsd}, -@code{sysv}, or @code{posix}. The default is @code{bsd}. -Only the first character of @var{format} is significant; it can be -either upper or lower case. - -@item -g -@itemx --extern-only -@cindex external symbols -Display only external symbols. - -@item -l -@itemx --line-numbers -@cindex symbol line numbers -For each symbol, use debugging information to try to find a filename and -line number. For a defined symbol, look for the line number of the -address of the symbol. For an undefined symbol, look for the line -number of a relocation entry which refers to the symbol. If line number -information can be found, print it after the other symbol information. - -@item -n -@itemx -v -@itemx --numeric-sort -Sort symbols numerically by their addresses, rather than alphabetically -by their names. - -@item -p -@itemx --no-sort -@cindex sorting symbols -Do not bother to sort the symbols in any order; print them in the order -encountered. - -@item -P -@itemx --portability -Use the POSIX.2 standard output format instead of the default format. -Equivalent to @samp{-f posix}. - -@item -s -@itemx --print-armap -@cindex symbol index, listing -When listing symbols from archive members, include the index: a mapping -(stored in the archive by @code{ar} or @code{ranlib}) of which modules -contain definitions for which names. - -@item -r -@itemx --reverse-sort -Reverse the order of the sort (whether numeric or alphabetic); let the -last come first. - -@item --size-sort -Sort symbols by size. The size is computed as the difference between -the value of the symbol and the value of the symbol with the next higher -value. The size of the symbol is printed, rather than the value. - -@item -t @var{radix} -@itemx --radix=@var{radix} -Use @var{radix} as the radix for printing the symbol values. It must be -@samp{d} for decimal, @samp{o} for octal, or @samp{x} for hexadecimal. - -@item --target=@var{bfdname} -@cindex object code format -Specify an object code format other than your system's default format. -@xref{Target Selection}, for more information. - -@item -u -@itemx --undefined-only -@cindex external symbols -@cindex undefined symbols -Display only undefined symbols (those external to each object file). - -@item --defined-only -@cindex external symbols -@cindex undefined symbols -Display only defined symbols for each object file. - -@item -V -@itemx --version -Show the version number of @code{nm} and exit. - -@item -X -This option is ignored for compatibility with the AIX version of -@code{nm}. It takes one parameter which must be the string -@code{32_64}. The default mode of AIX @code{nm} corresponds -to @code{-X 32}, which is not supported by @sc{gnu} @code{nm}. - -@item --help -Show a summary of the options to @code{nm} and exit. -@end table - -@node objcopy -@chapter objcopy - -@smallexample -objcopy [ -F @var{bfdname} | --target=@var{bfdname} ] - [ -I @var{bfdname} | --input-target=@var{bfdname} ] - [ -O @var{bfdname} | --output-target=@var{bfdname} ] - [ -S | --strip-all ] [ -g | --strip-debug ] - [ -K @var{symbolname} | --keep-symbol=@var{symbolname} ] - [ -N @var{symbolname} | --strip-symbol=@var{symbolname} ] - [ -G @var{symbolname} | --keep-global-symbol=@var{symbolname}] - [ -L @var{symbolname} | --localize-symbol=@var{symbolname} ] - [ -W @var{symbolname} | --weaken-symbol=@var{symbolname} ] - [ -x | --discard-all ] [ -X | --discard-locals ] - [ -b @var{byte} | --byte=@var{byte} ] - [ -i @var{interleave} | --interleave=@var{interleave} ] - [ -j @var{sectionname} | --only-section=@var{sectionname} ] - [ -R @var{sectionname} | --remove-section=@var{sectionname} ] - [ -p | --preserve-dates ] [ --debugging ] - [ --gap-fill=@var{val} ] [ --pad-to=@var{address} ] - [ --set-start=@var{val} ] [ --adjust-start=@var{incr} ] - [ --change-addresses=@var{incr} ] - [ --change-section-address @var{section}@{=,+,-@}@var{val} ] - [ --change-section-lma @var{section}@{=,+,-@}@var{val} ] - [ --change-section-vma @var{section}@{=,+,-@}@var{val} ] - [ --change-warnings ] [ --no-change-warnings ] - [ --set-section-flags @var{section}=@var{flags} ] - [ --add-section @var{sectionname}=@var{filename} ] - [ --change-leading-char ] [ --remove-leading-char ] - [ --srec-len=@var{ival} ] [ --srec-forceS3 ] - [ --redefine-sym @var{old}=@var{new} ] [ --weaken ] - [ --keep-symbols=@var{filename} ] - [ --strip-symbols=@var{filename} ] - [ --keep-global-symbols=@var{filename} ] - [ --localize-symbols=@var{filename} ] - [ --weaken-symbols=@var{filename} ] - [ -v | --verbose ] [ -V | --version ] [ --help ] - @var{infile} [@var{outfile}] -@end smallexample - -The @sc{gnu} @code{objcopy} utility copies the contents of an object -file to another. @code{objcopy} uses the @sc{gnu} @sc{bfd} Library to -read and write the object files. It can write the destination object -file in a format different from that of the source object file. The -exact behavior of @code{objcopy} is controlled by command-line options. -Note that @code{objcopy} should be able to copy a fully linked file -between any two formats. However, copying a relocatable object file -between any two formats may not work as expected. - -@code{objcopy} creates temporary files to do its translations and -deletes them afterward. @code{objcopy} uses @sc{bfd} to do all its -translation work; it has access to all the formats described in @sc{bfd} -and thus is able to recognize most formats without being told -explicitly. @xref{BFD,,BFD,ld.info,Using LD}. - -@code{objcopy} can be used to generate S-records by using an output -target of @samp{srec} (e.g., use @samp{-O srec}). - -@code{objcopy} can be used to generate a raw binary file by using an -output target of @samp{binary} (e.g., use @samp{-O binary}). When -@code{objcopy} generates a raw binary file, it will essentially produce -a memory dump of the contents of the input object file. All symbols and -relocation information will be discarded. The memory dump will start at -the load address of the lowest section copied into the output file. - -When generating an S-record or a raw binary file, it may be helpful to -use @samp{-S} to remove sections containing debugging information. In -some cases @samp{-R} will be useful to remove sections which contain -information that is not needed by the binary file. - -Note - @code{objcopy} is not able to change the endianness of its input -files. If the input format has an endianness, (some formats do not), -@code{objcopy} can only copy the inputs into file formats that have the -same endianness or which have no endianness (eg @samp{srec}). - -@table @code -@item @var{infile} -@itemx @var{outfile} -The input and output files, respectively. -If you do not specify @var{outfile}, @code{objcopy} creates a -temporary file and destructively renames the result with -the name of @var{infile}. - -@item -I @var{bfdname} -@itemx --input-target=@var{bfdname} -Consider the source file's object format to be @var{bfdname}, rather than -attempting to deduce it. @xref{Target Selection}, for more information. - -@item -O @var{bfdname} -@itemx --output-target=@var{bfdname} -Write the output file using the object format @var{bfdname}. -@xref{Target Selection}, for more information. - -@item -F @var{bfdname} -@itemx --target=@var{bfdname} -Use @var{bfdname} as the object format for both the input and the output -file; i.e., simply transfer data from source to destination with no -translation. @xref{Target Selection}, for more information. - -@item -j @var{sectionname} -@itemx --only-section=@var{sectionname} -Copy only the named section from the input file to the output file. -This option may be given more than once. Note that using this option -inappropriately may make the output file unusable. - -@item -R @var{sectionname} -@itemx --remove-section=@var{sectionname} -Remove any section named @var{sectionname} from the output file. This -option may be given more than once. Note that using this option -inappropriately may make the output file unusable. - -@item -S -@itemx --strip-all -Do not copy relocation and symbol information from the source file. - -@item -g -@itemx --strip-debug -Do not copy debugging symbols from the source file. - -@item --strip-unneeded -Strip all symbols that are not needed for relocation processing. - -@item -K @var{symbolname} -@itemx --keep-symbol=@var{symbolname} -Copy only symbol @var{symbolname} from the source file. This option may -be given more than once. - -@item -N @var{symbolname} -@itemx --strip-symbol=@var{symbolname} -Do not copy symbol @var{symbolname} from the source file. This option -may be given more than once. - -@item -G @var{symbolname} -@itemx --keep-global-symbol=@var{symbolname} -Keep only symbol @var{symbolname} global. Make all other symbols local -to the file, so that they are not visible externally. This option may -be given more than once. - -@item -L @var{symbolname} -@itemx --localize-symbol=@var{symbolname} -Make symbol @var{symbolname} local to the file, so that it is not -visible externally. This option may be given more than once. - -@item -W @var{symbolname} -@itemx --weaken-symbol=@var{symbolname} -Make symbol @var{symbolname} weak. This option may be given more than once. - -@item -x -@itemx --discard-all -Do not copy non-global symbols from the source file. -@c FIXME any reason to prefer "non-global" to "local" here? - -@item -X -@itemx --discard-locals -Do not copy compiler-generated local symbols. -(These usually start with @samp{L} or @samp{.}.) - -@item -b @var{byte} -@itemx --byte=@var{byte} -Keep only every @var{byte}th byte of the input file (header data is not -affected). @var{byte} can be in the range from 0 to @var{interleave}-1, -where @var{interleave} is given by the @samp{-i} or @samp{--interleave} -option, or the default of 4. This option is useful for creating files -to program @sc{rom}. It is typically used with an @code{srec} output -target. - -@item -i @var{interleave} -@itemx --interleave=@var{interleave} -Only copy one out of every @var{interleave} bytes. Select which byte to -copy with the @var{-b} or @samp{--byte} option. The default is 4. -@code{objcopy} ignores this option if you do not specify either @samp{-b} or -@samp{--byte}. - -@item -p -@itemx --preserve-dates -Set the access and modification dates of the output file to be the same -as those of the input file. - -@item --debugging -Convert debugging information, if possible. This is not the default -because only certain debugging formats are supported, and the -conversion process can be time consuming. - -@item --gap-fill @var{val} -Fill gaps between sections with @var{val}. This operation applies to -the @emph{load address} (LMA) of the sections. It is done by increasing -the size of the section with the lower address, and filling in the extra -space created with @var{val}. - -@item --pad-to @var{address} -Pad the output file up to the load address @var{address}. This is -done by increasing the size of the last section. The extra space is -filled in with the value specified by @samp{--gap-fill} (default zero). - -@item --set-start @var{val} -Set the start address of the new file to @var{val}. Not all object file -formats support setting the start address. - -@item --change-start @var{incr} -@itemx --adjust-start @var{incr} -@cindex changing start address -Change the start address by adding @var{incr}. Not all object file -formats support setting the start address. - -@item --change-addresses @var{incr} -@itemx --adjust-vma @var{incr} -@cindex changing object addresses -Change the VMA and LMA addresses of all sections, as well as the start -address, by adding @var{incr}. Some object file formats do not permit -section addresses to be changed arbitrarily. Note that this does not -relocate the sections; if the program expects sections to be loaded at a -certain address, and this option is used to change the sections such -that they are loaded at a different address, the program may fail. - -@item --change-section-address @var{section}@{=,+,-@}@var{val} -@itemx --adjust-section-vma @var{section}@{=,+,-@}@var{val} -@cindex changing section address -Set or change both the VMA address and the LMA address of the named -@var{section}. If @samp{=} is used, the section address is set to -@var{val}. Otherwise, @var{val} is added to or subtracted from the -section address. See the comments under @samp{--change-addresses}, -above. If @var{section} does not exist in the input file, a warning will -be issued, unless @samp{--no-change-warnings} is used. - -@item --change-section-lma @var{section}@{=,+,-@}@var{val} -@cindex changing section LMA -Set or change the LMA address of the named @var{section}. The LMA -address is the address where the section will be loaded into memory at -program load time. Normally this is the same as the VMA address, which -is the address of the section at program run time, but on some systems, -especially those where a program is held in ROM, the two can be -different. If @samp{=} is used, the section address is set to -@var{val}. Otherwise, @var{val} is added to or subtracted from the -section address. See the comments under @samp{--change-addresses}, -above. If @var{section} does not exist in the input file, a warning -will be issued, unless @samp{--no-change-warnings} is used. - -@item --change-section-vma @var{section}@{=,+,-@}@var{val} -@cindex changing section VMA -Set or change the VMA address of the named @var{section}. The VMA -address is the address where the section will be located once the -program has started executing. Normally this is the same as the LMA -address, which is the address where the section will be loaded into -memory, but on some systems, especially those where a program is held in -ROM, the two can be different. If @samp{=} is used, the section address -is set to @var{val}. Otherwise, @var{val} is added to or subtracted -from the section address. See the comments under -@samp{--change-addresses}, above. If @var{section} does not exist in -the input file, a warning will be issued, unless -@samp{--no-change-warnings} is used. - -@item --change-warnings -@itemx --adjust-warnings -If @samp{--change-section-address} or @samp{--change-section-lma} or -@samp{--change-section-vma} is used, and the named section does not -exist, issue a warning. This is the default. - -@item --no-change-warnings -@itemx --no-adjust-warnings -Do not issue a warning if @samp{--change-section-address} or -@samp{--adjust-section-lma} or @samp{--adjust-section-vma} is used, even -if the named section does not exist. - -@item --set-section-flags @var{section}=@var{flags} -Set the flags for the named section. The @var{flags} argument is a -comma separated string of flag names. The recognized names are -@samp{alloc}, @samp{contents}, @samp{load}, @samp{noload}, -@samp{readonly}, @samp{code}, @samp{data}, @samp{rom}, @samp{share}, and -@samp{debug}. You can set the @samp{contents} flag for a section which -does not have contents, but it is not meaningful to clear the -@samp{contents} flag of a section which does have contents--just remove -the section instead. Not all flags are meaningful for all object file -formats. - -@item --add-section @var{sectionname}=@var{filename} -Add a new section named @var{sectionname} while copying the file. The -contents of the new section are taken from the file @var{filename}. The -size of the section will be the size of the file. This option only -works on file formats which can support sections with arbitrary names. - -@item --change-leading-char -Some object file formats use special characters at the start of -symbols. The most common such character is underscore, which compilers -often add before every symbol. This option tells @code{objcopy} to -change the leading character of every symbol when it converts between -object file formats. If the object file formats use the same leading -character, this option has no effect. Otherwise, it will add a -character, or remove a character, or change a character, as -appropriate. - -@item --remove-leading-char -If the first character of a global symbol is a special symbol leading -character used by the object file format, remove the character. The -most common symbol leading character is underscore. This option will -remove a leading underscore from all global symbols. This can be useful -if you want to link together objects of different file formats with -different conventions for symbol names. This is different from -@code{--change-leading-char} because it always changes the symbol name -when appropriate, regardless of the object file format of the output -file. - -@item --srec-len=@var{ival} -Meaningful only for srec output. Set the maximum length of the Srecords -being produced to @var{ival}. This length covers both address, data and -crc fields. - -@item --srec-forceS3 -Meaningful only for srec output. Avoid generation of S1/S2 records, -creating S3-only record format. - -@item --redefine-sym @var{old}=@var{new} -Change the name of a symbol @var{old}, to @var{new}. This can be useful -when one is trying link two things together for which you have no -source, and there are name collisions. - -@item --weaken -Change all global symbols in the file to be weak. This can be useful -when building an object which will be linked against other objects using -the @code{-R} option to the linker. This option is only effective when -using an object file format which supports weak symbols. - -@item --keep-symbols=@var{filename} -Apply @samp{--keep-symbol} option to each symbol listed in the file -@var{filename}. @var{filename} is simply a flat file, with one symbol -name per line. Line comments may be introduced by the hash character. -This option may be given more than once. - -@item --strip-symbols=@var{filename} -Apply @samp{--strip-symbol} option to each symbol listed in the file -@var{filename}. @var{filename} is simply a flat file, with one symbol -name per line. Line comments may be introduced by the hash character. -This option may be given more than once. - -@item --keep-global-symbols=@var{filename} -Apply @samp{--keep-global-symbol} option to each symbol listed in the -file @var{filename}. @var{filename} is simply a flat file, with one -symbol name per line. Line comments may be introduced by the hash -character. This option may be given more than once. - -@item --localize-symbols=@var{filename} -Apply @samp{--localize-symbol} option to each symbol listed in the file -@var{filename}. @var{filename} is simply a flat file, with one symbol -name per line. Line comments may be introduced by the hash character. -This option may be given more than once. - -@item --weaken-symbols=@var{filename} -Apply @samp{--weaken-symbol} option to each symbol listed in the file -@var{filename}. @var{filename} is simply a flat file, with one symbol -name per line. Line comments may be introduced by the hash character. -This option may be given more than once. - -@item -V -@itemx --version -Show the version number of @code{objcopy}. - -@item -v -@itemx --verbose -Verbose output: list all object files modified. In the case of -archives, @samp{objcopy -V} lists all members of the archive. - -@item --help -Show a summary of the options to @code{objcopy}. -@end table - -@node objdump -@chapter objdump - -@cindex object file information -@kindex objdump - -@smallexample -objdump [ -a | --archive-headers ] - [ -b @var{bfdname} | --target=@var{bfdname} ] - [ -C | --demangle[=@var{style}] ] - [ -d | --disassemble ] - [ -D | --disassemble-all ] - [ -z | --disassemble-zeroes ] - [ -EB | -EL | --endian=@{big | little @} ] - [ -f | --file-headers ] - [ --file-start-context ] - [ -g | --debugging ] - [ -h | --section-headers | --headers ] - [ -i | --info ] - [ -j @var{section} | --section=@var{section} ] - [ -l | --line-numbers ] - [ -S | --source ] - [ -m @var{machine} | --architecture=@var{machine} ] - [ -M @var{options} | --disassembler-options=@var{options}] - [ -p | --private-headers ] - [ -r | --reloc ] - [ -R | --dynamic-reloc ] - [ -s | --full-contents ] - [ -G | --stabs ] - [ -t | --syms ] - [ -T | --dynamic-syms ] - [ -x | --all-headers ] - [ -w | --wide ] - [ --start-address=@var{address} ] - [ --stop-address=@var{address} ] - [ --prefix-addresses] - [ --[no-]show-raw-insn ] - [ --adjust-vma=@var{offset} ] - [ -V | --version ] - [ -H | --help ] - @var{objfile}@dots{} -@end smallexample - -@code{objdump} displays information about one or more object files. -The options control what particular information to display. This -information is mostly useful to programmers who are working on the -compilation tools, as opposed to programmers who just want their -program to compile and work. - -@var{objfile}@dots{} are the object files to be examined. When you -specify archives, @code{objdump} shows information on each of the member -object files. - -The long and short forms of options, shown here as alternatives, are -equivalent. At least one option from the list -@samp{-a,-d,-D,-f,-g,-G,-h,-H,-p,-r,-R,-S,-t,-T,-V,-x} must be given. - -@table @code -@item -a -@itemx --archive-header -@cindex archive headers -If any of the @var{objfile} files are archives, display the archive -header information (in a format similar to @samp{ls -l}). Besides the -information you could list with @samp{ar tv}, @samp{objdump -a} shows -the object file format of each archive member. - -@item --adjust-vma=@var{offset} -@cindex section addresses in objdump -@cindex VMA in objdump -When dumping information, first add @var{offset} to all the section -addresses. This is useful if the section addresses do not correspond to -the symbol table, which can happen when putting sections at particular -addresses when using a format which can not represent section addresses, -such as a.out. - -@item -b @var{bfdname} -@itemx --target=@var{bfdname} -@cindex object code format -Specify that the object-code format for the object files is -@var{bfdname}. This option may not be necessary; @var{objdump} can -automatically recognize many formats. - -For example, -@example -objdump -b oasys -m vax -h fu.o -@end example -@noindent -displays summary information from the section headers (@samp{-h}) of -@file{fu.o}, which is explicitly identified (@samp{-m}) as a VAX object -file in the format produced by Oasys compilers. You can list the -formats available with the @samp{-i} option. -@xref{Target Selection}, for more information. - -@item -C -@itemx --demangle[=@var{style}] -@cindex demangling in objdump -Decode (@dfn{demangle}) low-level symbol names into user-level names. -Besides removing any initial underscore prepended by the system, this -makes C++ function names readable. Different compilers have different -mangling styles. The optional demangling style argument can be used to -choose an appropriate demangling style for your compiler. @xref{c++filt}, -for more information on demangling. - -@item -G -@item --debugging -Display debugging information. This attempts to parse debugging -information stored in the file and print it out using a C like syntax. -Only certain types of debugging information have been implemented. - -@item -d -@itemx --disassemble -@cindex disassembling object code -@cindex machine instructions -Display the assembler mnemonics for the machine instructions from -@var{objfile}. This option only disassembles those sections which are -expected to contain instructions. - -@item -D -@itemx --disassemble-all -Like @samp{-d}, but disassemble the contents of all sections, not just -those expected to contain instructions. - -@item --prefix-addresses -When disassembling, print the complete address on each line. This is -the older disassembly format. - -@item --disassemble-zeroes -Normally the disassembly output will skip blocks of zeroes. This -option directs the disassembler to disassemble those blocks, just like -any other data. - -@item -EB -@itemx -EL -@itemx --endian=@{big|little@} -@cindex endianness -@cindex disassembly endianness -Specify the endianness of the object files. This only affects -disassembly. This can be useful when disassembling a file format which -does not describe endianness information, such as S-records. - -@item -f -@itemx --file-header -@cindex object file header -Display summary information from the overall header of -each of the @var{objfile} files. - -@item --file-start-context -@cindex source code context -Specify that when displaying interlisted source code/disassembly -(assumes '-S') from a file that has not yet been displayed, extend the -context to the start of the file. - -@item -h -@itemx --section-header -@itemx --header -@cindex section headers -Display summary information from the section headers of the -object file. - -File segments may be relocated to nonstandard addresses, for example by -using the @samp{-Ttext}, @samp{-Tdata}, or @samp{-Tbss} options to -@code{ld}. However, some object file formats, such as a.out, do not -store the starting address of the file segments. In those situations, -although @code{ld} relocates the sections correctly, using @samp{objdump --h} to list the file section headers cannot show the correct addresses. -Instead, it shows the usual addresses, which are implicit for the -target. - -@item --help -Print a summary of the options to @code{objdump} and exit. - -@item -i -@itemx --info -@cindex architectures available -@cindex object formats available -Display a list showing all architectures and object formats available -for specification with @samp{-b} or @samp{-m}. - -@item -j @var{name} -@itemx --section=@var{name} -@cindex section information -Display information only for section @var{name}. - -@item -l -@itemx --line-numbers -@cindex source filenames for object files -Label the display (using debugging information) with the filename and -source line numbers corresponding to the object code or relocs shown. -Only useful with @samp{-d}, @samp{-D}, or @samp{-r}. - -@item -m @var{machine} -@itemx --architecture=@var{machine} -@cindex architecture -@cindex disassembly architecture -Specify the architecture to use when disassembling object files. This -can be useful when disassembling object files which do not describe -architecture information, such as S-records. You can list the available -architectures with the @samp{-i} option. - -@item -M @var{options} -@itemx --disassembler-options=@var{options} -Pass target specific information to the disassembler. Only supported on -some targets. - -If the target is an ARM architecture then this switch can be used to -select which register name set is used during disassembler. Specifying -@samp{-M reg-name-std} (the default) will select the register names as -used in ARM's instruction set documentation, but with register 13 called -'sp', register 14 called 'lr' and register 15 called 'pc'. Specifying -@samp{-M reg-names-apcs} will select the name set used by the ARM -Procedure Call Standard, whilst specifying @samp{-M reg-names-raw} will -just use @samp{r} followed by the register number. - -There are also two variants on the APCS register naming scheme enabled -by @samp{-M reg-names-atpcs} and @samp{-M reg-names-special-atpcs} which -use the ARM/Thumb Procedure Call Standard naming conventions. (Either -with the normal register names or the special register names). - -This option can also be used for ARM architectures to force the -disassembler to interpret all instructions as Thumb instructions by -using the switch @samp{--disassembler-options=force-thumb}. This can be -useful when attempting to disassemble thumb code produced by other -compilers. - -@item -p -@itemx --private-headers -Print information that is specific to the object file format. The exact -information printed depends upon the object file format. For some -object file formats, no additional information is printed. - -@item -r -@itemx --reloc -@cindex relocation entries, in object file -Print the relocation entries of the file. If used with @samp{-d} or -@samp{-D}, the relocations are printed interspersed with the -disassembly. - -@item -R -@itemx --dynamic-reloc -@cindex dynamic relocation entries, in object file -Print the dynamic relocation entries of the file. This is only -meaningful for dynamic objects, such as certain types of shared -libraries. - -@item -s -@itemx --full-contents -@cindex sections, full contents -@cindex object file sections -Display the full contents of any sections requested. - -@item -S -@itemx --source -@cindex source disassembly -@cindex disassembly, with source -Display source code intermixed with disassembly, if possible. Implies -@samp{-d}. - -@item --show-raw-insn -When disassembling instructions, print the instruction in hex as well as -in symbolic form. This is the default except when -@code{--prefix-addresses} is used. - -@item --no-show-raw-insn -When disassembling instructions, do not print the instruction bytes. -This is the default when @code{--prefix-addresses} is used. - -@item -G -@item --stabs -@cindex stab -@cindex .stab -@cindex debug symbols -@cindex ELF object file format -Display the full contents of any sections requested. Display the -contents of the .stab and .stab.index and .stab.excl sections from an -ELF file. This is only useful on systems (such as Solaris 2.0) in which -@code{.stab} debugging symbol-table entries are carried in an ELF -section. In most other file formats, debugging symbol-table entries are -interleaved with linkage symbols, and are visible in the @samp{--syms} -output. For more information on stabs symbols, see @ref{Top,Stabs,Stabs -Overview,stabs.info, The ``stabs'' debug format}. - -@item --start-address=@var{address} -@cindex start-address -Start displaying data at the specified address. This affects the output -of the @code{-d}, @code{-r} and @code{-s} options. - -@item --stop-address=@var{address} -@cindex stop-address -Stop displaying data at the specified address. This affects the output -of the @code{-d}, @code{-r} and @code{-s} options. - -@item -t -@itemx --syms -@cindex symbol table entries, printing -Print the symbol table entries of the file. -This is similar to the information provided by the @samp{nm} program. - -@item -T -@itemx --dynamic-syms -@cindex dynamic symbol table entries, printing -Print the dynamic symbol table entries of the file. This is only -meaningful for dynamic objects, such as certain types of shared -libraries. This is similar to the information provided by the @samp{nm} -program when given the @samp{-D} (@samp{--dynamic}) option. - -@item --version -Print the version number of @code{objdump} and exit. - -@item -x -@itemx --all-header -@cindex all header information, object file -@cindex header information, all -Display all available header information, including the symbol table and -relocation entries. Using @samp{-x} is equivalent to specifying all of -@samp{-a -f -h -r -t}. - -@item -w -@itemx --wide -@cindex wide output, printing -Format some lines for output devices that have more than 80 columns. -@end table - -@node ranlib -@chapter ranlib - -@kindex ranlib -@cindex archive contents -@cindex symbol index - -@smallexample -ranlib [-vV] @var{archive} -@end smallexample - -@code{ranlib} generates an index to the contents of an archive and -stores it in the archive. The index lists each symbol defined by a -member of an archive that is a relocatable object file. - -You may use @samp{nm -s} or @samp{nm --print-armap} to list this index. - -An archive with such an index speeds up linking to the library and -allows routines in the library to call each other without regard to -their placement in the archive. - -The @sc{gnu} @code{ranlib} program is another form of @sc{gnu} @code{ar}; running -@code{ranlib} is completely equivalent to executing @samp{ar -s}. -@xref{ar}. - -@table @code -@item -v -@itemx -V -@itemx --version -Show the version number of @code{ranlib}. -@end table - -@node size -@chapter size - -@kindex size -@cindex section sizes - -@smallexample -size [ -A | -B | --format=@var{compatibility} ] - [ --help ] [ -d | -o | -x | --radix=@var{number} ] - [ --target=@var{bfdname} ] [ -V | --version ] - [ @var{objfile}@dots{} ] -@end smallexample - -The @sc{gnu} @code{size} utility lists the section sizes---and the total -size---for each of the object or archive files @var{objfile} in its -argument list. By default, one line of output is generated for each -object file or each module in an archive. - -@var{objfile}@dots{} are the object files to be examined. -If none are specified, the file @code{a.out} will be used. - -The command line options have the following meanings: - -@table @code -@item -A -@itemx -B -@itemx --format=@var{compatibility} -@cindex @code{size} display format -Using one of these options, you can choose whether the output from @sc{gnu} -@code{size} resembles output from System V @code{size} (using @samp{-A}, -or @samp{--format=sysv}), or Berkeley @code{size} (using @samp{-B}, or -@samp{--format=berkeley}). The default is the one-line format similar to -Berkeley's. -@c Bonus for doc-source readers: you can also say --format=strange (or -@c anything else that starts with 's') for sysv, and --format=boring (or -@c anything else that starts with 'b') for Berkeley. - -Here is an example of the Berkeley (default) format of output from -@code{size}: -@smallexample -$ size --format=Berkeley ranlib size -text data bss dec hex filename -294880 81920 11592 388392 5ed28 ranlib -294880 81920 11888 388688 5ee50 size -@end smallexample - -@noindent -This is the same data, but displayed closer to System V conventions: - -@smallexample -$ size --format=SysV ranlib size -ranlib : -section size addr -.text 294880 8192 -.data 81920 303104 -.bss 11592 385024 -Total 388392 - - -size : -section size addr -.text 294880 8192 -.data 81920 303104 -.bss 11888 385024 -Total 388688 -@end smallexample - -@item --help -Show a summary of acceptable arguments and options. - -@item -d -@itemx -o -@itemx -x -@itemx --radix=@var{number} -@cindex @code{size} number format -@cindex radix for section sizes -Using one of these options, you can control whether the size of each -section is given in decimal (@samp{-d}, or @samp{--radix=10}); octal -(@samp{-o}, or @samp{--radix=8}); or hexadecimal (@samp{-x}, or -@samp{--radix=16}). In @samp{--radix=@var{number}}, only the three -values (8, 10, 16) are supported. The total size is always given in two -radices; decimal and hexadecimal for @samp{-d} or @samp{-x} output, or -octal and hexadecimal if you're using @samp{-o}. - -@item --target=@var{bfdname} -@cindex object code format -Specify that the object-code format for @var{objfile} is -@var{bfdname}. This option may not be necessary; @code{size} can -automatically recognize many formats. -@xref{Target Selection}, for more information. - -@item -V -@itemx --version -Display the version number of @code{size}. -@end table - -@node strings -@chapter strings -@kindex strings -@cindex listings strings -@cindex printing strings -@cindex strings, printing - -@smallexample -strings [-afov] [-@var{min-len}] [-n @var{min-len}] [-t @var{radix}] [-] - [--all] [--print-file-name] [--bytes=@var{min-len}] - [--radix=@var{radix}] [--target=@var{bfdname}] - [--help] [--version] @var{file}@dots{} -@end smallexample - -For each @var{file} given, @sc{gnu} @code{strings} prints the printable -character sequences that are at least 4 characters long (or the number -given with the options below) and are followed by an unprintable -character. By default, it only prints the strings from the initialized -and loaded sections of object files; for other types of files, it prints -the strings from the whole file. - -@code{strings} is mainly useful for determining the contents of non-text -files. - -@table @code -@item -a -@itemx --all -@itemx - -Do not scan only the initialized and loaded sections of object files; -scan the whole files. - -@item -f -@itemx --print-file-name -Print the name of the file before each string. - -@item --help -Print a summary of the program usage on the standard output and exit. - -@item -@var{min-len} -@itemx -n @var{min-len} -@itemx --bytes=@var{min-len} -Print sequences of characters that are at least @var{min-len} characters -long, instead of the default 4. - -@item -o -Like @samp{-t o}. Some other versions of @code{strings} have @samp{-o} -act like @samp{-t d} instead. Since we can not be compatible with both -ways, we simply chose one. - -@item -t @var{radix} -@itemx --radix=@var{radix} -Print the offset within the file before each string. The single -character argument specifies the radix of the offset---@samp{o} for -octal, @samp{x} for hexadecimal, or @samp{d} for decimal. - -@item --target=@var{bfdname} -@cindex object code format -Specify an object code format other than your system's default format. -@xref{Target Selection}, for more information. - -@item -v -@itemx --version -Print the program version number on the standard output and exit. -@end table - -@node strip -@chapter strip - -@kindex strip -@cindex removing symbols -@cindex discarding symbols -@cindex symbols, discarding - -@smallexample -strip [ -F @var{bfdname} | --target=@var{bfdname} ] - [ -I @var{bfdname} | --input-target=@var{bfdname} ] - [ -O @var{bfdname} | --output-target=@var{bfdname} ] - [ -s | --strip-all ] [ -S | -g | --strip-debug ] - [ -K @var{symbolname} | --keep-symbol=@var{symbolname} ] - [ -N @var{symbolname} | --strip-symbol=@var{symbolname} ] - [ -x | --discard-all ] [ -X | --discard-locals ] - [ -R @var{sectionname} | --remove-section=@var{sectionname} ] - [ -o @var{file} ] [ -p | --preserve-dates ] - [ -v | --verbose ] [ -V | --version ] [ --help ] - @var{objfile}@dots{} -@end smallexample - -@sc{gnu} @code{strip} discards all symbols from object files -@var{objfile}. The list of object files may include archives. -At least one object file must be given. - -@code{strip} modifies the files named in its argument, -rather than writing modified copies under different names. - -@table @code -@item -F @var{bfdname} -@itemx --target=@var{bfdname} -Treat the original @var{objfile} as a file with the object -code format @var{bfdname}, and rewrite it in the same format. -@xref{Target Selection}, for more information. - -@item --help -Show a summary of the options to @code{strip} and exit. - -@item -I @var{bfdname} -@itemx --input-target=@var{bfdname} -Treat the original @var{objfile} as a file with the object -code format @var{bfdname}. -@xref{Target Selection}, for more information. - -@item -O @var{bfdname} -@itemx --output-target=@var{bfdname} -Replace @var{objfile} with a file in the output format @var{bfdname}. -@xref{Target Selection}, for more information. - -@item -R @var{sectionname} -@itemx --remove-section=@var{sectionname} -Remove any section named @var{sectionname} from the output file. This -option may be given more than once. Note that using this option -inappropriately may make the output file unusable. - -@item -s -@itemx --strip-all -Remove all symbols. - -@item -g -@itemx -S -@itemx --strip-debug -Remove debugging symbols only. - -@item --strip-unneeded -Remove all symbols that are not needed for relocation processing. - -@item -K @var{symbolname} -@itemx --keep-symbol=@var{symbolname} -Keep only symbol @var{symbolname} from the source file. This option may -be given more than once. - -@item -N @var{symbolname} -@itemx --strip-symbol=@var{symbolname} -Remove symbol @var{symbolname} from the source file. This option may be -given more than once, and may be combined with strip options other than -@code{-K}. - -@item -o @var{file} -Put the stripped output in @var{file}, rather than replacing the -existing file. When this argument is used, only one @var{objfile} -argument may be specified. - -@item -p -@itemx --preserve-dates -Preserve the access and modification dates of the file. - -@item -x -@itemx --discard-all -Remove non-global symbols. - -@item -X -@itemx --discard-locals -Remove compiler-generated local symbols. -(These usually start with @samp{L} or @samp{.}.) - -@item -V -@itemx --version -Show the version number for @code{strip}. - -@item -v -@itemx --verbose -Verbose output: list all object files modified. In the case of -archives, @samp{strip -v} lists all members of the archive. -@end table - -@node c++filt, addr2line, strip, Top -@chapter c++filt - -@kindex c++filt -@cindex demangling C++ symbols - -@smallexample -c++filt [ -_ | --strip-underscores ] - [ -j | --java ] - [ -n | --no-strip-underscores ] - [ -s @var{format} | --format=@var{format} ] - [ --help ] [ --version ] [ @var{symbol}@dots{} ] -@end smallexample - -@kindex cxxfilt -The C++ and Java languages provides function overloading, which means -that you can write many functions with the same name (providing each -takes parameters of different types). All C++ and Java function names -are encoded into a low-level assembly label (this process is known as -@dfn{mangling}). The @code{c++filt} -@footnote{MS-DOS does not allow @kbd{+} characters in file names, so on -MS-DOS this program is named @code{cxxfilt}.} -program does the inverse mapping: it decodes (@dfn{demangles}) low-level -names into user-level names so that the linker can keep these overloaded -functions from clashing. - -Every alphanumeric word (consisting of letters, digits, underscores, -dollars, or periods) seen in the input is a potential label. If the -label decodes into a C++ name, the C++ name replaces the low-level -name in the output. - -You can use @code{c++filt} to decipher individual symbols: - -@example -c++filt @var{symbol} -@end example - -If no @var{symbol} arguments are given, @code{c++filt} reads symbol -names from the standard input and writes the demangled names to the -standard output. All results are printed on the standard output. - -@table @code -@item -_ -@itemx --strip-underscores -On some systems, both the C and C++ compilers put an underscore in front -of every name. For example, the C name @code{foo} gets the low-level -name @code{_foo}. This option removes the initial underscore. Whether -@code{c++filt} removes the underscore by default is target dependent. - -@item -j -@itemx --java -Prints demangled names using Java syntax. The default is to use C++ -syntax. - -@item -n -@itemx --no-strip-underscores -Do not remove the initial underscore. - -@item -s @var{format} -@itemx --format=@var{format} -@sc{gnu} @code{nm} can decode three different methods of mangling, used by -different C++ compilers. The argument to this option selects which -method it uses: - -@table @code -@item gnu -the one used by the @sc{gnu} compiler (the default method) -@item lucid -the one used by the Lucid compiler -@item arm -the one specified by the C++ Annotated Reference Manual -@item hp -the one used by the HP compiler -@item edg -the one used by the EDG compiler -@item gnu-new-abi -the one used by the @sc{gnu} compiler with the new ABI. -@end table - -@item --help -Print a summary of the options to @code{c++filt} and exit. - -@item --version -Print the version number of @code{c++filt} and exit. -@end table - -@quotation -@emph{Warning:} @code{c++filt} is a new utility, and the details of its -user interface are subject to change in future releases. In particular, -a command-line option may be required in the the future to decode a name -passed as an argument on the command line; in other words, - -@example -c++filt @var{symbol} -@end example - -@noindent -may in a future release become - -@example -c++filt @var{option} @var{symbol} -@end example -@end quotation - -@node addr2line -@chapter addr2line - -@kindex addr2line -@cindex address to file name and line number - -@smallexample -addr2line [ -b @var{bfdname} | --target=@var{bfdname} ] - [ -C | --demangle[=@var{style} ] - [ -e @var{filename} | --exe=@var{filename} ] - [ -f | --functions ] [ -s | --basename ] - [ -H | --help ] [ -V | --version ] - [ addr addr ... ] -@end smallexample - -@code{addr2line} translates program addresses into file names and line -numbers. Given an address and an executable, it uses the debugging -information in the executable to figure out which file name and line -number are associated with a given address. - -The executable to use is specified with the @code{-e} option. The -default is the file @file{a.out}. - -@code{addr2line} has two modes of operation. - -In the first, hexadecimal addresses are specified on the command line, -and @code{addr2line} displays the file name and line number for each -address. - -In the second, @code{addr2line} reads hexadecimal addresses from -standard input, and prints the file name and line number for each -address on standard output. In this mode, @code{addr2line} may be used -in a pipe to convert dynamically chosen addresses. - -The format of the output is @samp{FILENAME:LINENO}. The file name and -line number for each address is printed on a separate line. If the -@code{-f} option is used, then each @samp{FILENAME:LINENO} line is -preceded by a @samp{FUNCTIONNAME} line which is the name of the function -containing the address. - -If the file name or function name can not be determined, -@code{addr2line} will print two question marks in their place. If the -line number can not be determined, @code{addr2line} will print 0. - -The long and short forms of options, shown here as alternatives, are -equivalent. - -@table @code -@item -b @var{bfdname} -@itemx --target=@var{bfdname} -@cindex object code format -Specify that the object-code format for the object files is -@var{bfdname}. - -@item -C -@itemx --demangle[=@var{style}] -@cindex demangling in objdump -Decode (@dfn{demangle}) low-level symbol names into user-level names. -Besides removing any initial underscore prepended by the system, this -makes C++ function names readable. Different compilers have different -mangling styles. The optional demangling style argument can be used to -choose an appropriate demangling style for your compiler. @xref{c++filt}, -for more information on demangling. - -@item -e @var{filename} -@itemx --exe=@var{filename} -Specify the name of the executable for which addresses should be -translated. The default file is @file{a.out}. - -@item -f -@itemx --functions -Display function names as well as file and line number information. - -@item -s -@itemx --basenames -Display only the base of each file name. -@end table - -@node nlmconv -@chapter nlmconv - -@code{nlmconv} converts a relocatable object file into a NetWare -Loadable Module. - -@ignore -@code{nlmconv} currently works with @samp{i386} object -files in @code{coff}, @sc{elf}, or @code{a.out} format, and @sc{SPARC} -object files in @sc{elf}, or @code{a.out} format@footnote{ -@code{nlmconv} should work with any @samp{i386} or @sc{sparc} object -format in the Binary File Descriptor library. It has only been tested -with the above formats.}. -@end ignore - -@quotation -@emph{Warning:} @code{nlmconv} is not always built as part of the binary -utilities, since it is only useful for NLM targets. -@end quotation - -@smallexample -nlmconv [ -I @var{bfdname} | --input-target=@var{bfdname} ] - [ -O @var{bfdname} | --output-target=@var{bfdname} ] - [ -T @var{headerfile} | --header-file=@var{headerfile} ] - [ -d | --debug] [ -l @var{linker} | --linker=@var{linker} ] - [ -h | --help ] [ -V | --version ] - @var{infile} @var{outfile} -@end smallexample - -@code{nlmconv} converts the relocatable @samp{i386} object file -@var{infile} into the NetWare Loadable Module @var{outfile}, optionally -reading @var{headerfile} for NLM header information. For instructions -on writing the NLM command file language used in header files, see the -@samp{linkers} section, @samp{NLMLINK} in particular, of the @cite{NLM -Development and Tools Overview}, which is part of the NLM Software -Developer's Kit (``NLM SDK''), available from Novell, Inc. -@code{nlmconv} uses the @sc{gnu} Binary File Descriptor library to read -@var{infile}; see @ref{BFD,,BFD,ld.info,Using LD}, for -more information. - -@code{nlmconv} can perform a link step. In other words, you can list -more than one object file for input if you list them in the definitions -file (rather than simply specifying one input file on the command line). -In this case, @code{nlmconv} calls the linker for you. - -@table @code -@item -I @var{bfdname} -@itemx --input-target=@var{bfdname} -Object format of the input file. @code{nlmconv} can usually determine -the format of a given file (so no default is necessary). -@xref{Target Selection}, for more information. - -@item -O @var{bfdname} -@itemx --output-target=@var{bfdname} -Object format of the output file. @code{nlmconv} infers the output -format based on the input format, e.g. for a @samp{i386} input file the -output format is @samp{nlm32-i386}. -@xref{Target Selection}, for more information. - -@item -T @var{headerfile} -@itemx --header-file=@var{headerfile} -Reads @var{headerfile} for NLM header information. For instructions on -writing the NLM command file language used in header files, see@ see the -@samp{linkers} section, of the @cite{NLM Development and Tools -Overview}, which is part of the NLM Software Developer's Kit, available -from Novell, Inc. - -@item -d -@itemx --debug -Displays (on standard error) the linker command line used by @code{nlmconv}. - -@item -l @var{linker} -@itemx --linker=@var{linker} -Use @var{linker} for any linking. @var{linker} can be an absolute or a -relative pathname. - -@item -h -@itemx --help -Prints a usage summary. - -@item -V -@itemx --version -Prints the version number for @code{nlmconv}. -@end table - -@node windres -@chapter windres - -@code{windres} may be used to manipulate Windows resources. - -@quotation -@emph{Warning:} @code{windres} is not always built as part of the binary -utilities, since it is only useful for Windows targets. -@end quotation - -@smallexample -windres [options] [input-file] [output-file] -@end smallexample - -@code{windres} reads resources from an input file and copies them into -an output file. Either file may be in one of three formats: - -@table @code -@item rc -A text format read by the Resource Compiler. - -@item res -A binary format generated by the Resource Compiler. - -@item coff -A COFF object or executable. -@end table - -The exact description of these different formats is available in -documentation from Microsoft. - -When @code{windres} converts from the @code{rc} format to the @code{res} -format, it is acting like the Windows Resource Compiler. When -@code{windres} converts from the @code{res} format to the @code{coff} -format, it is acting like the Windows @code{CVTRES} program. - -When @code{windres} generates an @code{rc} file, the output is similar -but not identical to the format expected for the input. When an input -@code{rc} file refers to an external filename, an output @code{rc} file -will instead include the file contents. - -If the input or output format is not specified, @code{windres} will -guess based on the file name, or, for the input file, the file contents. -A file with an extension of @file{.rc} will be treated as an @code{rc} -file, a file with an extension of @file{.res} will be treated as a -@code{res} file, and a file with an extension of @file{.o} or -@file{.exe} will be treated as a @code{coff} file. - -If no output file is specified, @code{windres} will print the resources -in @code{rc} format to standard output. - -The normal use is for you to write an @code{rc} file, use @code{windres} -to convert it to a COFF object file, and then link the COFF file into -your application. This will make the resources described in the -@code{rc} file available to Windows. - -@table @code -@item -i @var{filename} -@itemx --input @var{filename} -The name of the input file. If this option is not used, then -@code{windres} will use the first non-option argument as the input file -name. If there are no non-option arguments, then @code{windres} will -read from standard input. @code{windres} can not read a COFF file from -standard input. - -@item -o @var{filename} -@itemx --output @var{filename} -The name of the output file. If this option is not used, then -@code{windres} will use the first non-option argument, after any used -for the input file name, as the output file name. If there is no -non-option argument, then @code{windres} will write to standard output. -@code{windres} can not write a COFF file to standard output. - -@item -I @var{format} -@itemx --input-format @var{format} -The input format to read. @var{format} may be @samp{res}, @samp{rc}, or -@samp{coff}. If no input format is specified, @code{windres} will -guess, as described above. - -@item -O @var{format} -@itemx --output-format @var{format} -The output format to generate. @var{format} may be @samp{res}, -@samp{rc}, or @samp{coff}. If no output format is specified, -@code{windres} will guess, as described above. - -@item -F @var{target} -@itemx --target @var{target} -Specify the BFD format to use for a COFF file as input or output. This -is a BFD target name; you can use the @code{--help} option to see a list -of supported targets. Normally @code{windres} will use the default -format, which is the first one listed by the @code{--help} option. -@ref{Target Selection}. - -@item --preprocessor @var{program} -When @code{windres} reads an @code{rc} file, it runs it through the C -preprocessor first. This option may be used to specify the preprocessor -to use, including any leading arguments. The default preprocessor -argument is @code{gcc -E -xc-header -DRC_INVOKED}. - -@item --include-dir @var{directory} -Specify an include directory to use when reading an @code{rc} file. -@code{windres} will pass this to the preprocessor as an @code{-I} -option. @code{windres} will also search this directory when looking for -files named in the @code{rc} file. - -@item -D @var{target} -@itemx --define @var{sym}[=@var{val}] -Specify a @code{-D} option to pass to the preprocessor when reading an -@code{rc} file. - -@item -v -Enable verbose mode. This tells you what the preprocessor is if you -didn't specify one. - -@item --language @var{val} -Specify the default language to use when reading an @code{rc} file. -@var{val} should be a hexadecimal language code. The low eight bits are -the language, and the high eight bits are the sublanguage. - -@item --use-temp-file -Use a temporary file to instead of using popen to read the output of -the preprocessor. Use this option if the popen implementation is buggy -on the host (eg., certain non-English language versions of Windows 95 and -Windows 98 are known to have buggy popen where the output will instead -go the console). - -@item --no-use-temp-file -Use popen, not a temporary file, to read the output of the preprocessor. -This is the default behaviour. - -@item --help -Prints a usage summary. - -@item --version -Prints the version number for @code{windres}. - -@item --yydebug -If @code{windres} is compiled with @code{YYDEBUG} defined as @code{1}, -this will turn on parser debugging. -@end table - - -@node dlltool -@chapter Create files needed to build and use DLLs -@cindex DLL -@kindex dlltool - -@code{dlltool} may be used to create the files needed to build and use -dynamic link libraries (DLLs). - -@quotation -@emph{Warning:} @code{dlltool} is not always built as part of the binary -utilities, since it is only useful for those targets which support DLLs. -@end quotation - -@smallexample -dlltool [-d|--input-def @var{def-file-name}] - [-b|--base-file @var{base-file-name}] - [-e|--output-exp @var{exports-file-name}] - [-z|--output-def @var{def-file-name}] - [-l|--output-lib @var{library-file-name}] - [--export-all-symbols] [--no-export-all-symbols] - [--exclude-symbols @var{list}] - [--no-default-excludes] - [-S|--as @var{path-to-assembler}] [-f|--as-flags @var{options}] - [-D|--dllname @var{name}] [-m|--machine @var{machine}] - [-a|--add-indirect] [-U|--add-underscore] [-k|--kill-at] - [-A|--add-stdcall-alias] - [-x|--no-idata4] [-c|--no-idata5] [-i|--interwork] - [-n|--nodelete] [-v|--verbose] [-h|--help] [-V|--version] - [object-file @dots{}] -@end smallexample - -@code{dlltool} reads its inputs, which can come from the @samp{-d} and -@samp{-b} options as well as object files specified on the command -line. It then processes these inputs and if the @samp{-e} option has -been specified it creates a exports file. If the @samp{-l} option -has been specified it creates a library file and if the @samp{-z} option -has been specified it creates a def file. Any or all of the -e, -l -and -z options can be present in one invocation of dlltool. - -When creating a DLL, along with the source for the DLL, it is necessary -to have three other files. @code{dlltool} can help with the creation of -these files. - -The first file is a @samp{.def} file which specifies which functions are -exported from the DLL, which functions the DLL imports, and so on. This -is a text file and can be created by hand, or @code{dlltool} can be used -to create it using the @samp{-z} option. In this case @code{dlltool} -will scan the object files specified on its command line looking for -those functions which have been specially marked as being exported and -put entries for them in the .def file it creates. - -In order to mark a function as being exported from a DLL, it needs to -have an @samp{-export:<name_of_function>} entry in the @samp{.drectve} -section of the object file. This can be done in C by using the -asm() operator: - -@smallexample - asm (".section .drectve"); - asm (".ascii \"-export:my_func\""); - - int my_func (void) @{ @dots{} @} -@end smallexample - -The second file needed for DLL creation is an exports file. This file -is linked with the object files that make up the body of the DLL and it -handles the interface between the DLL and the outside world. This is a -binary file and it can be created by giving the @samp{-e} option to -@code{dlltool} when it is creating or reading in a .def file. - -The third file needed for DLL creation is the library file that programs -will link with in order to access the functions in the DLL. This file -can be created by giving the @samp{-l} option to dlltool when it -is creating or reading in a .def file. - -@code{dlltool} builds the library file by hand, but it builds the -exports file by creating temporary files containing assembler statements -and then assembling these. The @samp{-S} command line option can be -used to specify the path to the assembler that dlltool will use, -and the @samp{-f} option can be used to pass specific flags to that -assembler. The @samp{-n} can be used to prevent dlltool from deleting -these temporary assembler files when it is done, and if @samp{-n} is -specified twice then this will prevent dlltool from deleting the -temporary object files it used to build the library. - -Here is an example of creating a DLL from a source file @samp{dll.c} and -also creating a program (from an object file called @samp{program.o}) -that uses that DLL: - -@smallexample - gcc -c dll.c - dlltool -e exports.o -l dll.lib dll.o - gcc dll.o exports.o -o dll.dll - gcc program.o dll.lib -o program -@end smallexample - -The command line options have the following meanings: - -@table @code - -@item -d @var{filename} -@itemx --input-def @var{filename} -@cindex input .def file -Specifies the name of a .def file to be read in and processed. - -@item -b @var{filename} -@itemx --base-file @var{filename} -@cindex base files -Specifies the name of a base file to be read in and processed. The -contents of this file will be added to the relocation section in the -exports file generated by dlltool. - -@item -e @var{filename} -@itemx --output-exp @var{filename} -Specifies the name of the export file to be created by dlltool. - -@item -z @var{filename} -@itemx --output-def @var{filename} -Specifies the name of the .def file to be created by dlltool. - -@item -l @var{filename} -@itemx --output-lib @var{filename} -Specifies the name of the library file to be created by dlltool. - -@item --export-all-symbols -Treat all global and weak defined symbols found in the input object -files as symbols to be exported. There is a small list of symbols which -are not exported by default; see the @code{--no-default-excludes} -option. You may add to the list of symbols to not export by using the -@code{--exclude-symbols} option. - -@item --no-export-all-symbols -Only export symbols explicitly listed in an input .def file or in -@samp{.drectve} sections in the input object files. This is the default -behaviour. The @samp{.drectve} sections are created by @samp{dllexport} -attributes in the source code. - -@item --exclude-symbols @var{list} -Do not export the symbols in @var{list}. This is a list of symbol names -separated by comma or colon characters. The symbol names should not -contain a leading underscore. This is only meaningful when -@code{--export-all-symbols} is used. - -@item --no-default-excludes -When @code{--export-all-symbols} is used, it will by default avoid -exporting certain special symbols. The current list of symbols to avoid -exporting is @samp{DllMain@@12}, @samp{DllEntryPoint@@0}, -@samp{impure_ptr}. You may use the @code{--no-default-excludes} option -to go ahead and export these special symbols. This is only meaningful -when @code{--export-all-symbols} is used. - -@item -S @var{path} -@itemx --as @var{path} -Specifies the path, including the filename, of the assembler to be used -to create the exports file. - -@item -f @var{switches} -@itemx --as-flags @var{switches} -Specifies any specific command line switches to be passed to the -assembler when building the exports file. This option will work even if -the @samp{-S} option is not used. This option only takes one argument, -and if it occurs more than once on the command line, then later -occurrences will override earlier occurrences. So if it is necessary to -pass multiple switches to the assembler they should be enclosed in -double quotes. - -@item -D @var{name} -@itemx --dll-name @var{name} -Specifies the name to be stored in the .def file as the name of the DLL -when the @samp{-e} option is used. If this option is not present, then -the filename given to the @samp{-e} option will be used as the name of -the DLL. - -@item -m @var{machine} -@itemx -machine @var{machine} -Specifies the type of machine for which the library file should be -built. @code{dlltool} has a built in default type, depending upon how -it was created, but this option can be used to override that. This is -normally only useful when creating DLLs for an ARM processor, when the -contents of the DLL are actually encode using Thumb instructions. - -@item -a -@itemx --add-indirect -Specifies that when @code{dlltool} is creating the exports file it -should add a section which allows the exported functions to be -referenced without using the import library. Whatever the hell that -means! - -@item -U -@itemx --add-underscore -Specifies that when @code{dlltool} is creating the exports file it -should prepend an underscore to the names of the exported functions. - -@item -k -@itemx --kill-at -Specifies that when @code{dlltool} is creating the exports file it -should not append the string @samp{@@ <number>}. These numbers are -called ordinal numbers and they represent another way of accessing the -function in a DLL, other than by name. - -@item -A -@itemx --add-stdcall-alias -Specifies that when @code{dlltool} is creating the exports file it -should add aliases for stdcall symbols without @samp{@@ <number>} -in addition to the symbols with @samp{@@ <number>}. - -@item -x -@itemx --no-idata4 -Specifies that when @code{dlltool} is creating the exports and library -files it should omit the .idata4 section. This is for compatibility -with certain operating systems. - -@item -c -@itemx --no-idata5 -Specifies that when @code{dlltool} is creating the exports and library -files it should omit the .idata5 section. This is for compatibility -with certain operating systems. - -@item -i -@itemx --interwork -Specifies that @code{dlltool} should mark the objects in the library -file and exports file that it produces as supporting interworking -between ARM and Thumb code. - -@item -n -@itemx --nodelete -Makes @code{dlltool} preserve the temporary assembler files it used to -create the exports file. If this option is repeated then dlltool will -also preserve the temporary object files it uses to create the library -file. - -@item -v -@itemx --verbose -Make dlltool describe what it is doing. - -@item -h -@itemx --help -Displays a list of command line options and then exits. - -@item -V -@itemx --version -Displays dlltool's version number and then exits. - -@end table - -@node readelf -@chapter readelf - -@cindex ELF file information -@kindex readelf - -@smallexample -readelf [ -a | --all ] - [ -h | --file-header] - [ -l | --program-headers | --segments] - [ -S | --section-headers | --sections] - [ -e | --headers] - [ -s | --syms | --symbols] - [ -n | --notes] - [ -r | --relocs] - [ -d | --dynamic] - [ -V | --version-info] - [ -D | --use-dynamic] - [ -x <number> | --hex-dump=<number>] - [ -w[liaprf] | --debug-dump[=info,=line,=abbrev,=pubnames,=ranges,=frames]] - [ --histogram] - [ -v | --version] - [ -H | --help] - @var{elffile}@dots{} -@end smallexample - -@code{readelf} displays information about one or more ELF format object -files. The options control what particular information to display. - -@var{elffile}@dots{} are the object files to be examined. At the -moment, @code{readelf} does not support examining archives, nor does it -support examing 64 bit ELF files. - -The long and short forms of options, shown here as alternatives, are -equivalent. At least one option besides @samp{-v} or @samp{-H} must be -given. - -@table @code -@item -a -@itemx --all -Equivalent to specifiying @samp{--file-header}, -@samp{--program-headers}, @samp{--sections}, @samp{--symbols}, -@samp{--relocs}, @samp{--dynamic}, @samp{--notes} and -@samp{--version-info}. - -@item -h -@itemx --file-header -@cindex ELF file header information -Displays the information contained in the ELF header at the start of the -file. - -@item -l -@itemx --program-headers -@itemx --segments -@cindex ELF program header information -@cindex ELF segment information -Displays the information contained in the file's segment headers, if it -has any. - -@item -S -@itemx --sections -@itemx --section-headers -@cindex ELF section information -Displays the information contained in the file's section headers, if it -has any. - -@item -s -@itemx --symbols -@itemx --syms -@cindex ELF symbol table information -Displays the entries in symbol table section of the file, if it has one. - -@item -e -@itemx --headers -Display all the headers in the file. Equivalent to @samp{-h -l -S}. - -@item -n -@itemx --notes -@cindex ELF core notes -Displays the contents of the NOTE segment, if it exists. - -@item -r -@itemx --relocs -@cindex ELF reloc information -Displays the contents of the file's relocation section, if it ha one. - -@item -d -@itemx --dynamic -@cindex ELF dynamic section information -Displays the contents of the file's dynamic section, if it has one. - -@item -V -@itemx --version-info -@cindex ELF version sections informations -Displays the contents of the version sections in the file, it they -exist. - -@item -D -@itemx --use-dynamic -When displaying symbols, this option makes @code{readelf} use the -symbol table in the file's dynamic section, rather than the one in the -symbols section. - -@item -x <number> -@itemx --hex-dump=<number> -Displays the contents of the indicated section as a hexadecimal dump. - -@item -w[liaprf] -@itemx --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=frames] -Displays the contents of the debug sections in the file, if any are -present. If one of the optional letters or words follows the switch -then only data found in those specific sections will be dumped. - -@item --histogram -Display a histogram of bucket list lengths when displaying the contents -of the symbol tables. - -@item -v -@itemx --version -Display the version number of readelf. - -@item -H -@itemx --help -Display the command line options understood by @code{readelf}. - -@end table - - -@node Selecting The Target System -@chapter Selecting the target system - -You can specify three aspects of the target system to the @sc{gnu} -binary file utilities, each in several ways: - -@itemize @bullet -@item -the target - -@item -the architecture - -@item -the linker emulation (which applies to the linker only) -@end itemize - -In the following summaries, the lists of ways to specify values are in -order of decreasing precedence. The ways listed first override those -listed later. - -The commands to list valid values only list the values for which the -programs you are running were configured. If they were configured with -@samp{--enable-targets=all}, the commands list most of the available -values, but a few are left out; not all targets can be configured in at -once because some of them can only be configured @dfn{native} (on hosts -with the same type as the target system). - -@menu -* Target Selection:: -* Architecture Selection:: -* Linker Emulation Selection:: -@end menu - -@node Target Selection -@section Target Selection - -A @dfn{target} is an object file format. A given target may be -supported for multiple architectures (@pxref{Architecture Selection}). -A target selection may also have variations for different operating -systems or architectures. - -The command to list valid target values is @samp{objdump -i} -(the first column of output contains the relevant information). - -Some sample values are: @samp{a.out-hp300bsd}, @samp{ecoff-littlemips}, -@samp{a.out-sunos-big}. - -You can also specify a target using a configuration triplet. This is -the same sort of name that is passed to @file{configure} to specify a -target. When you use a configuration triplet as an argument, it must be -fully canonicalized. You can see the canonical version of a triplet by -running the shell script @file{config.sub} which is included with the -sources. - -Some sample configuration triplets are: @samp{m68k-hp-bsd}, -@samp{mips-dec-ultrix}, @samp{sparc-sun-sunos}. - -@subheading @code{objdump} Target - -Ways to specify: - -@enumerate -@item -command line option: @samp{-b} or @samp{--target} - -@item -environment variable @code{GNUTARGET} - -@item -deduced from the input file -@end enumerate - -@subheading @code{objcopy} and @code{strip} Input Target - -Ways to specify: - -@enumerate -@item -command line options: @samp{-I} or @samp{--input-target}, or @samp{-F} or @samp{--target} - -@item -environment variable @code{GNUTARGET} - -@item -deduced from the input file -@end enumerate - -@subheading @code{objcopy} and @code{strip} Output Target - -Ways to specify: - -@enumerate -@item -command line options: @samp{-O} or @samp{--output-target}, or @samp{-F} or @samp{--target} - -@item -the input target (see ``@code{objcopy} and @code{strip} Input Target'' above) - -@item -environment variable @code{GNUTARGET} - -@item -deduced from the input file -@end enumerate - -@subheading @code{nm}, @code{size}, and @code{strings} Target - -Ways to specify: - -@enumerate -@item -command line option: @samp{--target} - -@item -environment variable @code{GNUTARGET} - -@item -deduced from the input file -@end enumerate - -@subheading Linker Input Target - -Ways to specify: - -@enumerate -@item -command line option: @samp{-b} or @samp{--format} -(@pxref{Options,,Options,ld.info,Using LD}) - -@item -script command @code{TARGET} -(@pxref{Option Commands,,Option Commands,ld.info,Using LD}) - -@item -environment variable @code{GNUTARGET} -(@pxref{Environment,,Environment,ld.info,Using LD}) - -@item -the default target of the selected linker emulation -(@pxref{Linker Emulation Selection}) -@end enumerate - -@subheading Linker Output Target - -Ways to specify: - -@enumerate -@item -command line option: @samp{-oformat} -(@pxref{Options,,Options,ld.info,Using LD}) - -@item -script command @code{OUTPUT_FORMAT} -(@pxref{Option Commands,,Option Commands,ld.info,Using LD}) - -@item -the linker input target (see ``Linker Input Target'' above) -@end enumerate - -@node Architecture Selection -@section Architecture selection - -An @dfn{architecture} is a type of @sc{cpu} on which an object file is -to run. Its name may contain a colon, separating the name of the -processor family from the name of the particular @sc{cpu}. - -The command to list valid architecture values is @samp{objdump -i} (the -second column contains the relevant information). - -Sample values: @samp{m68k:68020}, @samp{mips:3000}, @samp{sparc}. - -@subheading @code{objdump} Architecture - -Ways to specify: - -@enumerate -@item -command line option: @samp{-m} or @samp{--architecture} - -@item -deduced from the input file -@end enumerate - -@subheading @code{objcopy}, @code{nm}, @code{size}, @code{strings} Architecture - -Ways to specify: - -@enumerate -@item -deduced from the input file -@end enumerate - -@subheading Linker Input Architecture - -Ways to specify: - -@enumerate -@item -deduced from the input file -@end enumerate - -@subheading Linker Output Architecture - -Ways to specify: - -@enumerate -@item -script command @code{OUTPUT_ARCH} -(@pxref{Option Commands,,Option Commands,ld.info,Using LD}) - -@item -the default architecture from the linker output target -(@pxref{Target Selection}) -@end enumerate - -@node Linker Emulation Selection -@section Linker emulation selection - -A linker @dfn{emulation} is a ``personality'' of the linker, which gives -the linker default values for the other aspects of the target system. -In particular, it consists of - -@itemize @bullet -@item -the linker script - -@item -the target - -@item -several ``hook'' functions that are run at certain stages of the linking -process to do special things that some targets require -@end itemize - -The command to list valid linker emulation values is @samp{ld -V}. - -Sample values: @samp{hp300bsd}, @samp{mipslit}, @samp{sun4}. - -Ways to specify: - -@enumerate -@item -command line option: @samp{-m} -(@pxref{Options,,Options,ld.info,Using LD}) - -@item -environment variable @code{LDEMULATION} - -@item -compiled-in @code{DEFAULT_EMULATION} from @file{Makefile}, -which comes from @code{EMUL} in @file{config/@var{target}.mt} -@end enumerate - -@node Reporting Bugs -@chapter Reporting Bugs -@cindex bugs -@cindex reporting bugs - -Your bug reports play an essential role in making the binary utilities -reliable. - -Reporting a bug may help you by bringing a solution to your problem, or -it may not. But in any case the principal function of a bug report is -to help the entire community by making the next version of the binary -utilities work better. Bug reports are your contribution to their -maintenance. - -In order for a bug report to serve its purpose, you must include the -information that enables us to fix the bug. - -@menu -* Bug Criteria:: Have you found a bug? -* Bug Reporting:: How to report bugs -@end menu - -@node Bug Criteria -@section Have you found a bug? -@cindex bug criteria - -If you are not sure whether you have found a bug, here are some guidelines: - -@itemize @bullet -@cindex fatal signal -@cindex crash -@item -If a binary utility gets a fatal signal, for any input whatever, that is -a bug. Reliable utilities never crash. - -@cindex error on valid input -@item -If a binary utility produces an error message for valid input, that is a -bug. - -@item -If you are an experienced user of binary utilities, your suggestions for -improvement are welcome in any case. -@end itemize - -@node Bug Reporting -@section How to report bugs -@cindex bug reports -@cindex bugs, reporting - -A number of companies and individuals offer support for @sc{gnu} -products. If you obtained the binary utilities from a support -organization, we recommend you contact that organization first. - -You can find contact information for many support companies and -individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs -distribution. - -In any event, we also recommend that you send bug reports for the binary -utilities to @samp{bug-binutils@@gnu.org}. - -The fundamental principle of reporting bugs usefully is this: -@strong{report all the facts}. If you are not sure whether to state a -fact or leave it out, state it! - -Often people omit facts because they think they know what causes the -problem and assume that some details do not matter. Thus, you might -assume that the name of a file you use in an example does not matter. -Well, probably it does not, but one cannot be sure. Perhaps the bug is -a stray memory reference which happens to fetch from the location where -that pathname is stored in memory; perhaps, if the pathname were -different, the contents of that location would fool the utility into -doing the right thing despite the bug. Play it safe and give a -specific, complete example. That is the easiest thing for you to do, -and the most helpful. - -Keep in mind that the purpose of a bug report is to enable us to fix the bug if -it is new to us. Therefore, always write your bug reports on the assumption -that the bug has not been reported previously. - -Sometimes people give a few sketchy facts and ask, ``Does this ring a -bell?'' Those bug reports are useless, and we urge everyone to -@emph{refuse to respond to them} except to chide the sender to report -bugs properly. - -To enable us to fix the bug, you should include all these things: - -@itemize @bullet -@item -The version of the utility. Each utility announces it if you start it -with the @samp{--version} argument. - -Without this, we will not know whether there is any point in looking for -the bug in the current version of the binary utilities. - -@item -Any patches you may have applied to the source, including any patches -made to the @code{BFD} library. - -@item -The type of machine you are using, and the operating system name and -version number. - -@item -What compiler (and its version) was used to compile the utilities---e.g. -``@code{gcc-2.7}''. - -@item -The command arguments you gave the utility to observe the bug. To -guarantee you will not omit something important, list them all. A copy -of the Makefile (or the output from make) is sufficient. - -If we were to try to guess the arguments, we would probably guess wrong -and then we might not encounter the bug. - -@item -A complete input file, or set of input files, that will reproduce the -bug. If the utility is reading an object file or files, then it is -generally most helpful to send the actual object files, uuencoded if -necessary to get them through the mail system. Note that -@samp{bug-binutils@@gnu.org} is a mailing list, so you should avoid -sending very large files to it. Making the files available for -anonymous FTP is OK. - -If the source files were produced exclusively using @sc{gnu} programs -(e.g., @code{gcc}, @code{gas}, and/or the @sc{gnu} @code{ld}), then it -may be OK to send the source files rather than the object files. In -this case, be sure to say exactly what version of @code{gcc}, or -whatever, was used to produce the object files. Also say how -@code{gcc}, or whatever, was configured. - -@item -A description of what behavior you observe that you believe is -incorrect. For example, ``It gets a fatal signal.'' - -Of course, if the bug is that the utility gets a fatal signal, then we -will certainly notice it. But if the bug is incorrect output, we might -not notice unless it is glaringly wrong. You might as well not give us -a chance to make a mistake. - -Even if the problem you experience is a fatal signal, you should still -say so explicitly. Suppose something strange is going on, such as your -copy of the utility is out of synch, or you have encountered a bug in -the C library on your system. (This has happened!) Your copy might -crash and ours would not. If you told us to expect a crash, then when -ours fails to crash, we would know that the bug was not happening for -us. If you had not told us to expect a crash, then we would not be able -to draw any conclusion from our observations. - -@item -If you wish to suggest changes to the source, send us context diffs, as -generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p} -option. Always send diffs from the old file to the new file. If you -wish to discuss something in the @code{ld} source, refer to it by -context, not by line number. - -The line numbers in our development sources will not match those in your -sources. Your line numbers would convey no useful information to us. -@end itemize - -Here are some things that are not necessary: - -@itemize @bullet -@item -A description of the envelope of the bug. - -Often people who encounter a bug spend a lot of time investigating -which changes to the input file will make the bug go away and which -changes will not affect it. - -This is often time consuming and not very useful, because the way we -will find the bug is by running a single example under the debugger -with breakpoints, not by pure deduction from a series of examples. -We recommend that you save your time for something else. - -Of course, if you can find a simpler example to report @emph{instead} -of the original one, that is a convenience for us. Errors in the -output will be easier to spot, running under the debugger will take -less time, and so on. - -However, simplification is not vital; if you do not want to do this, -report the bug anyway and send us the entire test case you used. - -@item -A patch for the bug. - -A patch for the bug does help us if it is a good one. But do not omit -the necessary information, such as the test case, on the assumption that -a patch is all we need. We might see problems with your patch and decide -to fix the problem another way, or we might not understand it at all. - -Sometimes with programs as complicated as the binary utilities it is -very hard to construct an example that will make the program follow a -certain path through the code. If you do not send us the example, we -will not be able to construct one, so we will not be able to verify that -the bug is fixed. - -And if we cannot understand what bug you are trying to fix, or why your -patch should be an improvement, we will not install it. A test case will -help us to understand. - -@item -A guess about what the bug is or what it depends on. - -Such guesses are usually wrong. Even we cannot guess right about such -things without first using the debugger to find the facts. -@end itemize - -@node GNU Free Documentation License -@chapter GNU Free Documentation License -@cindex 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/binutils/config.texi b/contrib/binutils/binutils/config.texi deleted file mode 100644 index 56bdd12e9e39..000000000000 --- a/contrib/binutils/binutils/config.texi +++ /dev/null @@ -1 +0,0 @@ -@set VERSION 2.11.2 diff --git a/contrib/binutils/binutils/cxxfilt.man b/contrib/binutils/binutils/cxxfilt.man deleted file mode 100644 index a4d5d45106b6..000000000000 --- a/contrib/binutils/binutils/cxxfilt.man +++ /dev/null @@ -1,114 +0,0 @@ -.\" Copyright (c) 1991 Free Software Foundation -.\" See section COPYING for conditions for redistribution -.TH @PROGRAM@ 1 "June 1993" "cygnus support" "GNU Development Tools" -.de BP -.sp -.ti \-.2i -\(** -.. - -.SH NAME -@PROGRAM@ \- demangle C++ symbols - -.SH SYNOPSIS -.hy 0 -.na -.TP -.B @PROGRAM@ -.RB "[\|" \-_ | \-\-strip-underscores "\|]" -.RB "[\|" "\-s {gnu,lucid,arm} " | " \-\-format={gnu,lucid,arm}" "\|]" -.RB "[\|" \-\-help "\|]" -.RB "[\|" \-\-version "\|]" -.RB "[\|" symbol "...\|]" -.SH DESCRIPTION -The C++ language provides function overloading, which means that you can -write many functions with the same name (providing each takes parameters -of different types). All C++ function names are encoded into a -low-level assembly label (this process is known as -.I mangling\c -). The -.B @PROGRAM@ -program does the inverse mapping: it decodes (\fIdemangles\fR) -low-level names into user-level names so that the linker can keep -these overloaded functions from clashing. -.PP -Every alphanumeric word (consisting of letters, digits, underscores, -dollars, or periods) seen in the input is a potential label. If the -label decodes into a C++ name, the C++ name replaces the low-level -name in the output. -.PP -You can use -.B @PROGRAM@ -to decipher individual symbols by specifying these symbols on the -command line. -.PP -If no -.B symbol -arguments are given, -.B @PROGRAM@ -reads symbol names from the standard input and writes the demangled -names to the standard output. All results are printed on the standard -output. -.SH OPTIONS -.TP -.B \-_ -.TP -.B \-\-strip\-underscores -On some systems, both the C and C++ compilers put an -underscore in front of every name. For example, the C name -.B foo -gets the low-level name -.BR _foo . -This option removes the leading underscore. - -.TP -.B "\-s {gnu,lucid,arm}" -.TP -.B \-\-format={gnu,lucid,arm} -GNU -.B nm -can decode three different methods of mangling, used by different C++ -compilers. This option selects which method it uses: the one used by -the GNU compiler, the one used by the Lucid compiler, or the one -specified by the C++ Annotated Reference Manual. The default is the -GNU style. - -.TP -.B \-\-help -Print a summary of the options to -.B @PROGRAM@ -and exit. - -.TP -.B \-\-version -Print the version number of -.B @PROGRAM@ -and exit. - -.SH "SEE ALSO" -.RB "`\|" binutils "\|'" -entry in -.B -info\c -\&; -.I -The GNU Binary Utilities\c -\&, Roland H. Pesch (June 1993). - -.SH COPYING -Copyright (c) 1993 Free Software Foundation, Inc. -.PP -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. -.PP -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the -entire resulting derived work is distributed under the terms of a -permission notice identical to this one. -.PP -Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be included in -translations approved by the Free Software Foundation instead of in -the original English. diff --git a/contrib/binutils/binutils/defparse.c b/contrib/binutils/binutils/defparse.c deleted file mode 100644 index f51ee33cd9e5..000000000000 --- a/contrib/binutils/binutils/defparse.c +++ /dev/null @@ -1,1411 +0,0 @@ -/* A Bison parser, made from defparse.y - by GNU bison 1.35. */ - -#define YYBISON 1 /* Identify Bison output. */ - -# define NAME 257 -# define LIBRARY 258 -# define DESCRIPTION 259 -# define STACKSIZE 260 -# define HEAPSIZE 261 -# define CODE 262 -# define DATA 263 -# define SECTIONS 264 -# define EXPORTS 265 -# define IMPORTS 266 -# define VERSIONK 267 -# define BASE 268 -# define CONSTANT 269 -# define READ 270 -# define WRITE 271 -# define EXECUTE 272 -# 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 - -#line 1 "defparse.y" - /* defparse.y - parser for .def files */ - -/* Copyright 1995, 1997, 1998, 1999 Free Software Foundation, Inc. - -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 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. */ - -#include "bfd.h" -#include "bucomm.h" -#include "dlltool.h" - -#line 26 "defparse.y" -#ifndef YYSTYPE -typedef union { - char *id; - int number; -} yystype; -# define YYSTYPE yystype -# define YYSTYPE_IS_TRIVIAL 1 -#endif -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - - - -#define YYFINAL 96 -#define YYFLAG -32768 -#define YYNTBASE 34 - -/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ -#define YYTRANSLATE(x) ((unsigned)(x) <= 283 ? yytranslate[x] : 55) - -/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ -static const char yytranslate[] = -{ - 0, 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, 2, 2, 2, 2, - 2, 2, 2, 2, 32, 2, 30, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 31, 2, 2, 33, 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, - 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, 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, - 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, 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, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 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 -}; - -#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 -}; -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 -}; - -#endif - -#if YYDEBUG -/* 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 -}; -#endif - - -#if (YYDEBUG) || defined YYERROR_VERBOSE - -/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */ -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 -}; -#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 -}; - -/* 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, - 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 -}; - -/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE - doesn't specify something else to do. Zero means the default is an - 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, - 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 -}; - -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 -}; - -static const short yypact[] = -{ - 32, -22, -22, -19, -13, 22, 30, 30, -6,-32768, - 26, 38, 21,-32768, 29, 46, 46,-32768, 36, 36, - -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 -}; - -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 -}; - - -#define YYLAST 101 - - -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, - 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 -}; - -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, - 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 -}; -/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/share/bison/bison.simple" - -/* Skeleton output parser for bison, - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software - Foundation, Inc. - - 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, 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. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* This is the parser code that is written into each bison parser when - the %semantic_parser declaration is not specified in the grammar. - It was written by Richard Stallman by simplifying the hairy parser - used when %semantic_parser is specified. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE) - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# if YYSTACK_USE_ALLOCA -# define YYSTACK_ALLOC alloca -# else -# ifndef YYSTACK_USE_ALLOCA -# if defined (alloca) || defined (_ALLOCA_H) -# define YYSTACK_ALLOC alloca -# else -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# else -# if defined (__STDC__) || defined (__cplusplus) -# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -# define YYSTACK_ALLOC malloc -# define YYSTACK_FREE free -# endif -#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */ - - -#if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - short yyss; - YYSTYPE yyvs; -# if YYLSP_NEEDED - YYLTYPE yyls; -# endif -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# if YYLSP_NEEDED -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ - + 2 * YYSTACK_GAP_MAX) -# else -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAX) -# endif - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - register YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (0) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - - -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) -# if defined (__STDC__) || defined (__cplusplus) -# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -#endif -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int -#endif - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY -2 -#define YYEOF 0 -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrlab1 -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ -#define YYFAIL goto yyerrlab -#define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yychar1 = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror ("syntax error: cannot back up"); \ - YYERROR; \ - } \ -while (0) - -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* YYLLOC_DEFAULT -- Compute the default location (before the actions - are run). - - When YYLLOC_DEFAULT is run, CURRENT is set the location of the - first token. By default, to implement support for ranges, extend - its range to the last symbol. */ - -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - Current.last_line = Rhs[N].last_line; \ - Current.last_column = Rhs[N].last_column; -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ - -#if YYPURE -# if YYLSP_NEEDED -# ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM) -# else -# define YYLEX yylex (&yylval, &yylloc) -# endif -# else /* !YYLSP_NEEDED */ -# ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, YYLEX_PARAM) -# else -# define YYLEX yylex (&yylval) -# endif -# endif /* !YYLSP_NEEDED */ -#else /* !YYPURE */ -# define YYLEX yylex () -#endif /* !YYPURE */ - - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -#endif /* !YYDEBUG */ - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#if YYMAXDEPTH == 0 -# undef YYMAXDEPTH -#endif - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - -#ifdef YYERROR_VERBOSE - -# ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - register const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# endif -# endif - -# ifndef yystpcpy -# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif -{ - register char *yyd = yydest; - register const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif -#endif - -#line 315 "/usr/share/bison/bison.simple" - - -/* The user can define YYPARSE_PARAM as the name of an argument to be passed - into yyparse. The argument should have type void *. - It should actually point to an object. - Grammar actions can access the variable by casting it - to the proper pointer type. */ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM -# define YYPARSE_PARAM_DECL -# else -# define YYPARSE_PARAM_ARG YYPARSE_PARAM -# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; -# endif -#else /* !YYPARSE_PARAM */ -# define YYPARSE_PARAM_ARG -# define YYPARSE_PARAM_DECL -#endif /* !YYPARSE_PARAM */ - -/* Prevent warning if -Wstrict-prototypes. */ -#ifdef __GNUC__ -# ifdef YYPARSE_PARAM -int yyparse (void *); -# else -int yyparse (void); -# endif -#endif - -/* YY_DECL_VARIABLES -- depending whether we use a pure parser, - variables are global, or local to YYPARSE. */ - -#define YY_DECL_NON_LSP_VARIABLES \ -/* The lookahead symbol. */ \ -int yychar; \ - \ -/* The semantic value of the lookahead symbol. */ \ -YYSTYPE yylval; \ - \ -/* Number of parse errors so far. */ \ -int yynerrs; - -#if YYLSP_NEEDED -# define YY_DECL_VARIABLES \ -YY_DECL_NON_LSP_VARIABLES \ - \ -/* Location data for the lookahead symbol. */ \ -YYLTYPE yylloc; -#else -# define YY_DECL_VARIABLES \ -YY_DECL_NON_LSP_VARIABLES -#endif - - -/* If nonreentrant, generate the variables here. */ - -#if !YYPURE -YY_DECL_VARIABLES -#endif /* !YYPURE */ - -int -yyparse (YYPARSE_PARAM_ARG) - YYPARSE_PARAM_DECL -{ - /* If reentrant, generate the variables here. */ -#if YYPURE - YY_DECL_VARIABLES -#endif /* !YYPURE */ - - register int yystate; - register int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Lookahead token as an internal (translated) token number. */ - int yychar1 = 0; - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - short yyssa[YYINITDEPTH]; - short *yyss = yyssa; - register short *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - register YYSTYPE *yyvsp; - -#if YYLSP_NEEDED - /* The location stack. */ - YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; -#endif - -#if YYLSP_NEEDED -# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) -#else -# define YYPOPSTACK (yyvsp--, yyssp--) -#endif - - YYSIZE_T yystacksize = YYINITDEPTH; - - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; -#if YYLSP_NEEDED - YYLTYPE yyloc; -#endif - - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ - int yylen; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss; - yyvsp = yyvs; -#if YYLSP_NEEDED - yylsp = yyls; -#endif - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. - */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyssp >= yyss + yystacksize - 1) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - short *yyss1 = yyss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. */ -# if YYLSP_NEEDED - YYLTYPE *yyls1 = yyls; - /* This used to be a conditional around just the two extra args, - but that might be undefined if yyoverflow is a macro. */ - yyoverflow ("parser stack overflow", - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yyls1, yysize * sizeof (*yylsp), - &yystacksize); - yyls = yyls1; -# else - yyoverflow ("parser stack overflow", - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); -# endif - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyoverflowlab; -# else - /* Extend the stack our own way. */ - if (yystacksize >= YYMAXDEPTH) - goto yyoverflowlab; - yystacksize *= 2; - if (yystacksize > YYMAXDEPTH) - yystacksize = YYMAXDEPTH; - - { - short *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyoverflowlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); -# if YYLSP_NEEDED - YYSTACK_RELOCATE (yyls); -# endif -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; -#if YYLSP_NEEDED - yylsp = yyls + yysize - 1; -#endif - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyssp >= yyss + yystacksize - 1) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - goto yybackup; - - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a lookahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to lookahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* yychar is either YYEMPTY or YYEOF - or a valid token in external form. */ - - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; - } - - /* Convert token to internal form (in yychar1) for indexing tables with */ - - if (yychar <= 0) /* This means end of input. */ - { - yychar1 = 0; - yychar = YYEOF; /* Don't call YYLEX any more */ - - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yychar1 = YYTRANSLATE (yychar); - -#if YYDEBUG - /* We have to keep this `#if YYDEBUG', since we use variables - which are defined only if `YYDEBUG' is set. */ - if (yydebug) - { - YYFPRINTF (stderr, "Next token is %d (%s", - yychar, yytname[yychar1]); - /* Give the individual parser a way to print the precise - meaning of a token, for further debugging info. */ -# ifdef YYPRINT - YYPRINT (stderr, yychar, yylval); -# endif - YYFPRINTF (stderr, ")\n"); - } -#endif - } - - yyn += yychar1; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) - goto yydefault; - - yyn = yytable[yyn]; - - /* yyn is what to do for this token type in this state. - Negative => reduce, -yyn is rule number. - Positive => shift, yyn is new state. - New state is final state => don't bother to shift, - just return success. - 0, or most negative number => error. */ - - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrlab; - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the lookahead token. */ - YYDPRINTF ((stderr, "Shifting token %d (%s), ", - yychar, yytname[yychar1])); - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; -#if YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - yystate = yyn; - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to the semantic value of - the lookahead token. This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - -#if YYLSP_NEEDED - /* Similarly for the default location. Let the user run additional - commands if for instance locations are ranges. */ - yyloc = yylsp[1-yylen]; - YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); -#endif - -#if YYDEBUG - /* We have to keep this `#if YYDEBUG', since we use variables which - are defined only if `YYDEBUG' is set. */ - if (yydebug) - { - int yyi; - - YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", - yyn, yyrline[yyn]); - - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++) - YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); - YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]); - } -#endif - - switch (yyn) { - -case 3: -#line 48 "defparse.y" -{ def_name (yyvsp[-1].id, yyvsp[0].number); } - break; -case 4: -#line 49 "defparse.y" -{ def_library (yyvsp[-2].id, yyvsp[-1].number); } - break; -case 6: -#line 51 "defparse.y" -{ def_description (yyvsp[0].id);} - break; -case 7: -#line 52 "defparse.y" -{ def_stacksize (yyvsp[-1].number, yyvsp[0].number);} - break; -case 8: -#line 53 "defparse.y" -{ def_heapsize (yyvsp[-1].number, yyvsp[0].number);} - break; -case 9: -#line 54 "defparse.y" -{ def_code (yyvsp[0].number);} - break; -case 10: -#line 55 "defparse.y" -{ def_data (yyvsp[0].number);} - break; -case 13: -#line 58 "defparse.y" -{ def_version (yyvsp[0].number,0);} - break; -case 14: -#line 59 "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);} - break; -case 20: -#line 78 "defparse.y" -{ def_import (yyvsp[-6].id,yyvsp[-4].id,yyvsp[-2].id,yyvsp[0].id, 0); } - break; -case 21: -#line 79 "defparse.y" -{ def_import (yyvsp[-6].id,yyvsp[-4].id,yyvsp[-2].id, 0,yyvsp[0].number); } - break; -case 22: -#line 80 "defparse.y" -{ def_import (yyvsp[-4].id,yyvsp[-2].id, 0,yyvsp[0].id, 0); } - break; -case 23: -#line 81 "defparse.y" -{ def_import (yyvsp[-4].id,yyvsp[-2].id, 0, 0,yyvsp[0].number); } - break; -case 24: -#line 82 "defparse.y" -{ def_import ( 0,yyvsp[-4].id,yyvsp[-2].id,yyvsp[0].id, 0); } - break; -case 25: -#line 83 "defparse.y" -{ def_import ( 0,yyvsp[-4].id,yyvsp[-2].id, 0,yyvsp[0].number); } - break; -case 26: -#line 84 "defparse.y" -{ def_import ( 0,yyvsp[-2].id, 0,yyvsp[0].id, 0); } - break; -case 27: -#line 85 "defparse.y" -{ def_import ( 0,yyvsp[-2].id, 0, 0,yyvsp[0].number); } - break; -case 30: -#line 94 "defparse.y" -{ def_section (yyvsp[-1].id,yyvsp[0].number);} - break; -case 35: -#line 106 "defparse.y" -{ yyval.number=yyvsp[0].number;} - break; -case 36: -#line 107 "defparse.y" -{ yyval.number=-1;} - break; -case 37: -#line 111 "defparse.y" -{ yyval.number = 1; } - break; -case 38: -#line 112 "defparse.y" -{ yyval.number = 2; } - break; -case 39: -#line 113 "defparse.y" -{ yyval.number = 4; } - break; -case 40: -#line 114 "defparse.y" -{ yyval.number = 8; } - break; -case 41: -#line 115 "defparse.y" -{ yyval.number = 0; } - break; -case 42: -#line 116 "defparse.y" -{ yyval.number = 0; } - break; -case 43: -#line 117 "defparse.y" -{ yyval.number = 0; } - break; -case 44: -#line 121 "defparse.y" -{yyval.number=1;} - break; -case 45: -#line 122 "defparse.y" -{yyval.number=0;} - break; -case 46: -#line 126 "defparse.y" -{yyval.number=1;} - break; -case 47: -#line 127 "defparse.y" -{yyval.number=0;} - break; -case 48: -#line 131 "defparse.y" -{ yyval.number = 1; } - break; -case 49: -#line 132 "defparse.y" -{ yyval.number = 0; } - break; -case 50: -#line 135 "defparse.y" -{ yyval.id =yyvsp[0].id; } - break; -case 51: -#line 137 "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" -{ yyval.id=""; } - break; -case 53: -#line 146 "defparse.y" -{ yyval.number=yyvsp[0].number;} - break; -case 54: -#line 147 "defparse.y" -{ yyval.number=-1;} - break; -case 55: -#line 151 "defparse.y" -{ yyval.id = yyvsp[0].id; } - break; -case 56: -#line 153 "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" -{ yyval.id = 0; } - break; -case 58: -#line 161 "defparse.y" -{ yyval.number= yyvsp[0].number;} - break; -case 59: -#line 162 "defparse.y" -{ yyval.number=-1;} - break; -} - -#line 705 "/usr/share/bison/bison.simple" - - - yyvsp -= yylen; - yyssp -= yylen; -#if YYLSP_NEEDED - yylsp -= yylen; -#endif - -#if YYDEBUG - if (yydebug) - { - short *yyssp1 = yyss - 1; - YYFPRINTF (stderr, "state stack now"); - while (yyssp1 != yyssp) - YYFPRINTF (stderr, " %d", *++yyssp1); - YYFPRINTF (stderr, "\n"); - } -#endif - - *++yyvsp = yyval; -#if YYLSP_NEEDED - *++yylsp = yyloc; -#endif - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTBASE] + *yyssp; - if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTBASE]; - - goto yynewstate; - - -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; - -#ifdef YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (yyn > YYFLAG && yyn < YYLAST) - { - YYSIZE_T yysize = 0; - char *yymsg; - int yyx, yycount; - - yycount = 0; - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - for (yyx = yyn < 0 ? -yyn : 0; - yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) - if (yycheck[yyx + yyn] == yyx) - yysize += yystrlen (yytname[yyx]) + 15, yycount++; - yysize += yystrlen ("parse error, unexpected ") + 1; - yysize += yystrlen (yytname[YYTRANSLATE (yychar)]); - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg != 0) - { - char *yyp = yystpcpy (yymsg, "parse error, unexpected "); - yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]); - - if (yycount < 5) - { - yycount = 0; - for (yyx = yyn < 0 ? -yyn : 0; - yyx < (int) (sizeof (yytname) / sizeof (char *)); - yyx++) - if (yycheck[yyx + yyn] == yyx) - { - const char *yyq = ! yycount ? ", expecting " : " or "; - yyp = yystpcpy (yyp, yyq); - yyp = yystpcpy (yyp, yytname[yyx]); - yycount++; - } - } - yyerror (yymsg); - YYSTACK_FREE (yymsg); - } - else - yyerror ("parse error; also virtual memory exhausted"); - } - else -#endif /* defined (YYERROR_VERBOSE) */ - yyerror ("parse error"); - } - goto yyerrlab1; - - -/*--------------------------------------------------. -| yyerrlab1 -- error raised explicitly by an action | -`--------------------------------------------------*/ -yyerrlab1: - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - /* return failure if at end of input */ - if (yychar == YYEOF) - YYABORT; - YYDPRINTF ((stderr, "Discarding token %d (%s).\n", - yychar, yytname[yychar1])); - yychar = YYEMPTY; - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - - yyerrstatus = 3; /* Each real token shifted decrements this */ - - goto yyerrhandle; - - -/*-------------------------------------------------------------------. -| yyerrdefault -- current state does not do anything special for the | -| error token. | -`-------------------------------------------------------------------*/ -yyerrdefault: -#if 0 - /* This is wrong; only states that explicitly want error tokens - should shift them. */ - - /* If its default is to accept any token, ok. Otherwise pop it. */ - yyn = yydefact[yystate]; - if (yyn) - goto yydefault; -#endif - - -/*---------------------------------------------------------------. -| yyerrpop -- pop the current state because it cannot handle the | -| error token | -`---------------------------------------------------------------*/ -yyerrpop: - if (yyssp == yyss) - YYABORT; - yyvsp--; - yystate = *--yyssp; -#if YYLSP_NEEDED - yylsp--; -#endif - -#if YYDEBUG - if (yydebug) - { - short *yyssp1 = yyss - 1; - YYFPRINTF (stderr, "Error: state stack now"); - while (yyssp1 != yyssp) - YYFPRINTF (stderr, " %d", *++yyssp1); - YYFPRINTF (stderr, "\n"); - } -#endif - -/*--------------. -| yyerrhandle. | -`--------------*/ -yyerrhandle: - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yyerrdefault; - - yyn += YYTERROR; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) - goto yyerrdefault; - - yyn = yytable[yyn]; - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrpop; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrpop; - - if (yyn == YYFINAL) - YYACCEPT; - - YYDPRINTF ((stderr, "Shifting error token, ")); - - *++yyvsp = yylval; -#if YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -/*---------------------------------------------. -| yyoverflowab -- parser overflow comes here. | -`---------------------------------------------*/ -yyoverflowlab: - yyerror ("parser stack overflow"); - yyresult = 2; - /* Fall through. */ - -yyreturn: -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif - return yyresult; -} -#line 176 "defparse.y" diff --git a/contrib/binutils/binutils/defparse.h b/contrib/binutils/binutils/defparse.h deleted file mode 100644 index ee1465291e44..000000000000 --- a/contrib/binutils/binutils/defparse.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef BISON_Y_TAB_H -# define BISON_Y_TAB_H - -#ifndef YYSTYPE -typedef union { - char *id; - int number; -} yystype; -# define YYSTYPE yystype -# define YYSTYPE_IS_TRIVIAL 1 -#endif -# define NAME 257 -# define LIBRARY 258 -# define DESCRIPTION 259 -# define STACKSIZE 260 -# define HEAPSIZE 261 -# define CODE 262 -# define DATA 263 -# define SECTIONS 264 -# define EXPORTS 265 -# define IMPORTS 266 -# define VERSIONK 267 -# define BASE 268 -# define CONSTANT 269 -# define READ 270 -# define WRITE 271 -# define EXECUTE 272 -# 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 - - -extern YYSTYPE yylval; - -#endif /* not BISON_Y_TAB_H */ diff --git a/contrib/binutils/binutils/defparse.y b/contrib/binutils/binutils/defparse.y deleted file mode 100644 index d0bccd95a706..000000000000 --- a/contrib/binutils/binutils/defparse.y +++ /dev/null @@ -1,175 +0,0 @@ -%{ /* defparse.y - parser for .def files */ - -/* Copyright 1995, 1997, 1998, 1999 Free Software Foundation, Inc. - -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 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. */ - -#include "bfd.h" -#include "bucomm.h" -#include "dlltool.h" -%} - -%union { - char *id; - int number; -}; - -%token NAME, LIBRARY, DESCRIPTION, STACKSIZE, HEAPSIZE, CODE, DATA -%token SECTIONS, EXPORTS, IMPORTS, VERSIONK, BASE, CONSTANT -%token READ WRITE EXECUTE SHARED NONSHARED NONAME -%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> attr attr_list opt_number -%type <id> opt_name opt_equal_name - -%% - -start: start command - | command - ; - -command: - NAME opt_name opt_base { def_name ($2, $3); } - | LIBRARY opt_name opt_base option_list { def_library ($2, $3); } - | EXPORTS explist - | DESCRIPTION ID { def_description ($2);} - | STACKSIZE NUMBER opt_number { def_stacksize ($2, $3);} - | HEAPSIZE NUMBER opt_number { def_heapsize ($2, $3);} - | CODE attr_list { def_code ($2);} - | DATA attr_list { def_data ($2);} - | SECTIONS seclist - | IMPORTS implist - | VERSIONK NUMBER { def_version ($2,0);} - | VERSIONK NUMBER '.' NUMBER { def_version ($2,$4);} - ; - - -explist: - /* EMPTY */ - | explist expline - ; - -expline: - ID opt_equal_name opt_ordinal opt_NONAME opt_CONSTANT opt_DATA - { def_exports ($1, $2, $3, $4, $5, $6);} - ; -implist: - implist impline - | impline - ; - -impline: - ID '=' ID '.' ID '.' ID { def_import ($1,$3,$5,$7, 0); } - | ID '=' ID '.' ID '.' NUMBER { def_import ($1,$3,$5, 0,$7); } - | ID '=' ID '.' ID { def_import ($1,$3, 0,$5, 0); } - | ID '=' ID '.' NUMBER { def_import ($1,$3, 0, 0,$5); } - | ID '.' ID '.' ID { def_import ( 0,$1,$3,$5, 0); } - | ID '.' ID '.' NUMBER { def_import ( 0,$1,$3, 0,$5); } - | ID '.' ID { def_import ( 0,$1, 0,$3, 0); } - | ID '.' NUMBER { def_import ( 0,$1, 0, 0,$3); } -; - -seclist: - seclist secline - | secline - ; - -secline: - ID attr_list { def_section ($1,$2);} - ; - -attr_list: - attr_list opt_comma attr - | attr - ; - -opt_comma: - ',' - | - ; -opt_number: ',' NUMBER { $$=$2;} - | { $$=-1;} - ; - -attr: - READ { $$ = 1; } - | WRITE { $$ = 2; } - | EXECUTE { $$ = 4; } - | SHARED { $$ = 8; } - | NONSHARED { $$ = 0; } - | SINGLE { $$ = 0; } - | MULTIPLE { $$ = 0; } - ; - -opt_CONSTANT: - CONSTANT {$$=1;} - | {$$=0;} - ; - -opt_NONAME: - NONAME {$$=1;} - | {$$=0;} - ; - -opt_DATA: - DATA { $$ = 1; } - | { $$ = 0; } - ; - -opt_name: ID { $$ =$1; } - | ID '.' ID - { - char *name = xmalloc (strlen ($1) + 1 + strlen ($3) + 1); - sprintf (name, "%s.%s", $1, $3); - $$ = name; - } - | { $$=""; } - ; - -opt_ordinal: - '@' NUMBER { $$=$2;} - | { $$=-1;} - ; - -opt_equal_name: - '=' ID { $$ = $2; } - | '=' ID '.' ID - { - char *name = xmalloc (strlen ($2) + 1 + strlen ($4) + 1); - sprintf (name, "%s.%s", $2, $4); - $$ = name; - } - | { $$ = 0; } - ; - -opt_base: BASE '=' NUMBER { $$= $3;} - | { $$=-1;} - ; - -option_list: - /* empty */ - | option_list opt_comma option - ; - -option: - INITINSTANCE - | INITGLOBAL - | TERMINSTANCE - | TERMGLOBAL - ; diff --git a/contrib/binutils/binutils/dyn-string.c b/contrib/binutils/binutils/dyn-string.c deleted file mode 100644 index a16401827657..000000000000 --- a/contrib/binutils/binutils/dyn-string.c +++ /dev/null @@ -1,107 +0,0 @@ -/* An abstract string datatype. - Copyright (C) 1998 Free Software Foundation, Inc. - Contributed by Mark Mitchell (mark@markmitchell.com). - - This file is part of GNU CC. - - GNU CC 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. - - GNU CC 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* This file lives in at least two places: binutils and gcc. - Don't change one without the other. */ - -#include "config.h" -#ifdef IN_GCC -#include "system.h" -#include "gansidecl.h" -#else -#include "ansidecl.h" -#endif -#include "dyn-string.h" - -extern char *xmalloc (); -extern char *xrealloc (); - -/* Create a new dynamic string capable of holding at least SPACE - characters, including the terminating NUL. If SPACE is 0, it - will be silently increased to 1. */ - -dyn_string_t -dyn_string_new (space) - int space; -{ - dyn_string_t result = (dyn_string_t) xmalloc (sizeof (struct dyn_string)); - - if (space == 0) - /* We need at least one byte in which to store the terminating - NUL. */ - space = 1; - - result->allocated = space; - result->s = (char*) xmalloc (space); - result->length = 0; - result->s[0] = '\0'; - - return result; -} - -/* Free the memory used by DS. */ - -void -dyn_string_delete (ds) - dyn_string_t ds; -{ - free (ds->s); - free (ds); -} - -/* Append the NUL-terminated string S to DS, resizing DS if - necessary. */ - -dyn_string_t -dyn_string_append (ds, s) - dyn_string_t ds; - char *s; -{ - int len = strlen (s); - dyn_string_resize (ds, ds->length + len + 1 /* '\0' */); - strcpy (ds->s + ds->length, s); - ds->length += len; - - return ds; -} - -/* Increase the capacity of DS so that it can hold at least SPACE - characters, including the terminating NUL. This function will not - (at present) reduce the capacity of DS. */ - -dyn_string_t -dyn_string_resize (ds, space) - dyn_string_t ds; - int space; -{ - int new_allocated = ds->allocated; - - while (space > new_allocated) - new_allocated *= 2; - - if (new_allocated != ds->allocated) - { - /* We actually need more space. */ - ds->allocated = new_allocated; - ds->s = (char*) xrealloc (ds->s, ds->allocated); - } - - return ds; -} diff --git a/contrib/binutils/binutils/dyn-string.h b/contrib/binutils/binutils/dyn-string.h deleted file mode 100644 index cbd25c347344..000000000000 --- a/contrib/binutils/binutils/dyn-string.h +++ /dev/null @@ -1,34 +0,0 @@ -/* An abstract string datatype. - Copyright (C) 1998 Free Software Foundation, Inc. - Contributed by Mark Mitchell (mark@markmitchell.com). - - This file is part of GNU CC. - - GNU CC 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. - - GNU CC 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* This file lives in at least two places: binutils and gcc. - Don't change one without the other. */ - -typedef struct dyn_string -{ - int allocated; /* The amount of space allocated for the string. */ - int length; /* The actual length of the string. */ - char *s; /* The string itself, NUL-terminated. */ -}* dyn_string_t; - -extern dyn_string_t dyn_string_new PARAMS((int)); -extern void dyn_string_delete PARAMS((dyn_string_t)); -extern dyn_string_t dyn_string_append PARAMS((dyn_string_t, char*)); -extern dyn_string_t dyn_string_resize PARAMS((dyn_string_t, int)); diff --git a/contrib/binutils/binutils/nm.1 b/contrib/binutils/binutils/nm.1 deleted file mode 100644 index d6f4eba7e52b..000000000000 --- a/contrib/binutils/binutils/nm.1 +++ /dev/null @@ -1,587 +0,0 @@ -.\" Copyright (c) 1991, 2000 Free Software Foundation -.\" See section COPYING for conditions for redistribution -.TH nm 1 "5 November 1991" "Free Software Foundation" "GNU Development Tools" -.de BP -.sp -.ti \-.2i -\(** -.. - -.SH NAME -nm \- list symbols from object files. - -.SH SYNOPSIS -.hy 0 -.na -.B nm -.RB "[\|" \-a | \-\-debug\-syms "\|]" -.RB "[\|" \-g | \-\-extern\-only "\|]" -.RB "[\|" \-B "\|]" -.RB "[\|" \-C | \-\-demangle "\|]" -.RB "[\|" \-D | \-\-dynamic "\|]" -.RB "[\|" \-s | \-\-print\-armap "\|]" -.RB "[\|" \-o | \-\-print\-file\-name "\|]" -.RB "[\|" \-n | \-\-numeric\-sort "\|]" -.RB "[\|" \-p | \-\-no\-sort "\|]" -.RB "[\|" \-r | \-\-reverse\-sort "\|]" -.RB "[\|" \-\-size\-sort "\|]" -.RB "[\|" \-u | \-\-undefined\-only "\|]" -.RB "[\|" \-l | \-\-line\-numbers "\|]" -.RB "[\|" \-\-help "\|]" -.RB "[\|" \-\-version "\|]" -.RB "[\|" "\-t \fIradix" | \-\-radix=\fIradix "\|]" -.RB "[\|" \-P | --portability "\|]" -.RB "[\|" "\-f \fIformat" | \-\-format=\fIformat "\|]" -.RB "[\|" "\-\-target=\fIbfdname" "\|]" -.RB "[\|" \c -.I objfile\c -\&.\|.\|.\|] -.ad b -.hy 1 -.SH DESCRIPTION -GNU \c -.B nm\c -\& lists the symbols from object files \c -.I objfile\c -\&. If no object files are given as arguments, \c -.B nm\c -\& assumes `\|\c -.B a.out\c -\|'. - -.SH OPTIONS -The long and short forms of options, shown here as alternatives, are -equivalent. - -.TP -.B \-A -.TP -.B \-o -.TP -.B \-\-print\-file\-name -Precede each symbol by the name of the input file where it was found, -rather than identifying the input file once only before all of its -symbols. - -.TP -.B \-a -.TP -.B \-\-debug\-syms -Display debugger-only symbols; normally these are not listed. - -.TP -.B \-B -The same as -.B \-\-format=bsd -(for compatibility with the MIPS \fBnm\fP). - -.TP -.B \-C -.TP -.B \-\-demangle -Decode (\fIdemangle\fP) low-level symbol names into user-level names. -Besides removing any initial underscore prepended by the system, this -makes C++ function names readable. - -.TP -.B \-D -.TP -.B \-\-dynamic -Display the dynamic symbols rather than the normal symbols. This is -only meaningful for dynamic objects, such as certain types of shared -libraries. - -.TP -.B "\-f \fIformat" -Use the output format \fIformat\fP, which can be ``bsd'', -``sysv'', or ``posix''. The default is ``bsd''. -Only the first character of \fIformat\fP is significant; it can be -either upper or lower case. - -.TP -.B \-g -.TP -.B \-\-extern\-only -Display only external symbols. - -.TP -.B \-n -.TP -.B \-v -.TP -.B \-\-numeric\-sort -Sort symbols numerically by their addresses, not alphabetically by their -names. - -.TP -.B \-p -.TP -.B \-\-no\-sort -Don't bother to sort the symbols in any order; just print them in the -order encountered. - -.TP -.B \-P -.TP -.B \-\-portability -Use the POSIX.2 standard output format instead of the default format. -Equivalent to ``\-f posix''. - -.TP -.B \-s -.TP -.B \-\-print\-armap -When listing symbols from archive members, include the index: a mapping -(stored in the archive by \c -.B ar\c -\& or \c -.B ranlib\c -\&) of what modules -contain definitions for what names. - -.TP -.B \-r -.TP -.B \-\-reverse\-sort -Reverse the sense of the sort (whether numeric or alphabetic); let the -last come first. - -.TP -.B \-\-size\-sort -Sort symbols by size. The size is computed as the difference between -the value of the symbol and the value of the symbol with the next higher -value. The size of the symbol is printed, rather than the value. - -.TP -.B "\-t \fIradix" -.TP -.B "\-\-radix=\fIradix" -Use \fIradix\fP as the radix for printing the symbol values. It must be -``d'' for decimal, ``o'' for octal, or ``x'' for hexadecimal. - -.TP -.BI "\-\-target=" "bfdname" -Specify an object code format other than your system's default format. -See -.BR objdump ( 1 ), -for information on listing available formats. - -.TP -.B \-u -.TP -.B \-\-undefined\-only -Display only undefined symbols (those external to each object file). - -.TP -.B \-l -.TP -.B \-\-line\-numbers -For each symbol, use debugging information to try to find a filename and -line number. For a defined symbol, look for the line number of the -address of the symbol. For an undefined symbol, look for the line -number of a relocation entry which refers to the symbol. If line number -information can be found, print it after the other symbol information. - -.TP -.B \-V -.TP -.B \-\-version -Show the version number of -.B nm -and exit. - -.TP -.B \-\-help -Show a summary of the options to -.B nm -and exit. - -.SH "SEE ALSO" -.RB "`\|" binutils "\|'" -entry in -.B -info\c -\&; -.I -The GNU Binary Utilities\c -\&, Roland H. Pesch (October 1991); -.BR ar "(" 1 ")," -.BR objdump ( 1 ), -.BR ranlib "(" 1 ")." - - -.SH COPYING -Copyright (c) 1991, 2000 Free Software Foundation, Inc. -.PP -This document is distributed under the terms of the GNU Free -Documentation License, version 1.1. That license is described in the -sources for this manual page, but it is not displayed here in order to -make this manual more consise. Copies of this license can also be -obtained from: http://www.gnu.org/copyleft/. - -\" .SH 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. -\" .PP -\" 0. PREAMBLE -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 1. APPLICABILITY AND DEFINITIONS -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 2. VERBATIM COPYING -\" .PP -\" 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. -\" .PP -\" You may also lend copies, under the same conditions stated above, and -\" you may publicly display copies. -\" .PP -\" 3. COPYING IN QUANTITY -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 4. MODIFICATIONS -\" .PP -\" 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: -\" .PP -\" 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. -\" .PP -\" 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). -\" .PP -\" C. State on the Title page the name of the publisher of the -\" Modified Version, as the publisher. -\" .PP -\" D. Preserve all the copyright notices of the Document. -\" .PP -\" E. Add an appropriate copyright notice for your modifications -\" adjacent to the other copyright notices. -\" .PP -\" 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. -\" Preserve in that license notice the full lists of Invariant Sections -\" and required Cover Texts given in the Document's license notice. -\" .PP -\" H. Include an unaltered copy of this License. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" M. Delete any section entitled "Endorsements". Such a section -\" may not be included in the Modified Version. -\" .PP -\" N. Do not retitle any existing section as "Endorsements" -\" or to conflict in title with any Invariant Section. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 5. COMBINING DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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." -\" .PP - -\" 6. COLLECTIONS OF DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 7. AGGREGATION WITH INDEPENDENT WORKS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 8. TRANSLATION -\" .PP -\" 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. -\" .PP - -\" 9. TERMINATION -\" .PP -\" 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. -\" .PP - -\" 10. FUTURE REVISIONS OF THIS LICENSE -\" .PP -\" 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/. -\" .PP -\" 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. -\" .PP - -\" ADDENDUM: How to use this License for your documents -\" .PP -\" 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: -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. diff --git a/contrib/binutils/binutils/objcopy.1 b/contrib/binutils/binutils/objcopy.1 deleted file mode 100644 index a6aa1815fa80..000000000000 --- a/contrib/binutils/binutils/objcopy.1 +++ /dev/null @@ -1,548 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:28 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "OBJCOPY.1 1" -.TH OBJCOPY.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -objcopy \- copy and translate object files -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -objcopy [ \-F \fIbfdname\fR | \-\-target=\fIbfdname\fR ] - [ \-I \fIbfdname\fR | \-\-input-target=\fIbfdname\fR ] - [ \-O \fIbfdname\fR | \-\-output-target=\fIbfdname\fR ] - [ \-B \fIbfdarch\fR | \-\-binary-architecture=\fIbfdarch\fR ] - [ \-S | \-\-strip-all ] [ \-g | \-\-strip-debug ] - [ \-K \fIsymbolname\fR | \-\-keep-symbol=\fIsymbolname\fR ] - [ \-N \fIsymbolname\fR | \-\-strip-symbol=\fIsymbolname\fR ] - [ \-G \fIsymbolname\fR | \-\-keep-global-symbol=\fIsymbolname\fR] - [ \-L \fIsymbolname\fR | \-\-localize-symbol=\fIsymbolname\fR ] - [ \-W \fIsymbolname\fR | \-\-weaken-symbol=\fIsymbolname\fR ] - [ \-x | \-\-discard-all ] [ \-X | \-\-discard-locals ] - [ \-b \fIbyte\fR | \-\-byte=\fIbyte\fR ] - [ \-i \fIinterleave\fR | \-\-interleave=\fIinterleave\fR ] - [ \-j \fIsectionname\fR | \-\-only-section=\fIsectionname\fR ] - [ \-R \fIsectionname\fR | \-\-remove-section=\fIsectionname\fR ] - [ \-p | \-\-preserve-dates ] [ \-\-debugging ] - [ \-\-gap-fill=\fIval\fR ] [ \-\-pad-to=\fIaddress\fR ] - [ \-\-set-start=\fIval\fR ] [ \-\-adjust-start=\fIincr\fR ] - [ \-\-change-addresses=\fIincr\fR ] - [ \-\-change-section-address \fIsection\fR{=,+,\-}\fIval\fR ] - [ \-\-change-section-lma \fIsection\fR{=,+,\-}\fIval\fR ] - [ \-\-change-section-vma \fIsection\fR{=,+,\-}\fIval\fR ] - [ \-\-change-warnings ] [ \-\-no-change-warnings ] - [ \-\-set-section-flags \fIsection\fR=\fIflags\fR ] - [ \-\-add-section \fIsectionname\fR=\fIfilename\fR ] - [ \-\-change-leading-char ] [ \-\-remove-leading-char ] - [ \-\-srec-len=\fIival\fR ] [ \-\-srec-forceS3 ] - [ \-\-redefine-sym \fIold\fR=\fInew\fR ] [ \-\-weaken ] - [ \-\-keep-symbols=\fIfilename\fR ] - [ \-\-strip-symbols=\fIfilename\fR ] - [ \-\-keep-global-symbols=\fIfilename\fR ] - [ \-\-localize-symbols=\fIfilename\fR ] - [ \-\-weaken-symbols=\fIfilename\fR ] - [ \-v | \-\-verbose ] [ \-V | \-\-version ] [ \-\-help ] - \fIinfile\fR [\fIoutfile\fR] -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -The \s-1GNU\s0 \f(CW\*(C`objcopy\*(C'\fR utility copies the contents of an object -file to another. \f(CW\*(C`objcopy\*(C'\fR uses the \s-1GNU\s0 \s-1BFD\s0 Library to -read and write the object files. It can write the destination object -file in a format different from that of the source object file. The -exact behavior of \f(CW\*(C`objcopy\*(C'\fR is controlled by command-line options. -Note that \f(CW\*(C`objcopy\*(C'\fR should be able to copy a fully linked file -between any two formats. However, copying a relocatable object file -between any two formats may not work as expected. -.PP -\&\f(CW\*(C`objcopy\*(C'\fR creates temporary files to do its translations and -deletes them afterward. \f(CW\*(C`objcopy\*(C'\fR uses \s-1BFD\s0 to do all its -translation work; it has access to all the formats described in \s-1BFD\s0 -and thus is able to recognize most formats without being told -explicitly. -.PP -\&\f(CW\*(C`objcopy\*(C'\fR can be used to generate S-records by using an output -target of \fBsrec\fR (e.g., use \fB\-O srec\fR). -.PP -\&\f(CW\*(C`objcopy\*(C'\fR can be used to generate a raw binary file by using an -output target of \fBbinary\fR (e.g., use \fB\-O binary\fR). When -\&\f(CW\*(C`objcopy\*(C'\fR generates a raw binary file, it will essentially produce -a memory dump of the contents of the input object file. All symbols and -relocation information will be discarded. The memory dump will start at -the load address of the lowest section copied into the output file. -.PP -When generating an S-record or a raw binary file, it may be helpful to -use \fB\-S\fR to remove sections containing debugging information. In -some cases \fB\-R\fR will be useful to remove sections which contain -information that is not needed by the binary file. -.PP -Note \- \f(CW\*(C`objcopy\*(C'\fR is not able to change the endianness of its input -files. If the input format has an endianness, (some formats do not), -\&\f(CW\*(C`objcopy\*(C'\fR can only copy the inputs into file formats that have the -same endianness or which have no endianness (eg \fBsrec\fR). -.SH "OPTIONS" -.IX Header "OPTIONS" -.Ip "\f(CW\*(C`\f(CIinfile\f(CW\*(C'\fR" 4 -.IX Item "infile" -.Ip "\f(CW\*(C`\f(CIoutfile\f(CW\*(C'\fR" 4 -.IX Item "outfile" -The input and output files, respectively. -If you do not specify \fIoutfile\fR, \f(CW\*(C`objcopy\*(C'\fR creates a -temporary file and destructively renames the result with -the name of \fIinfile\fR. -.Ip "\f(CW\*(C`\-I \f(CIbfdname\f(CW \*(C'\fR" 4 -.IX Item "-I bfdname " -.Ip "\f(CW\*(C`\-\-input\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--input-target=bfdname" -Consider the source file's object format to be \fIbfdname\fR, rather than -attempting to deduce it. -.Ip "\f(CW\*(C`\-O \f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "-O bfdname" -.Ip "\f(CW\*(C`\-\-output\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--output-target=bfdname" -Write the output file using the object format \fIbfdname\fR. -.Ip "\f(CW\*(C`\-F \f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "-F bfdname" -.Ip "\f(CW\*(C`\-\-target=\f(CIbfdname\f(CW\*(C'\fR" 4 -.IX Item "--target=bfdname" -Use \fIbfdname\fR as the object format for both the input and the output -file; i.e., simply transfer data from source to destination with no -translation. -.Ip "\f(CW\*(C`\-B \f(CIbfdarch\f(CW\*(C'\fR" 4 -.IX Item "-B bfdarch" -.Ip "\f(CW\*(C`\-\-binary\-architecture=\f(CIbfdarch\f(CW\*(C'\fR" 4 -.IX Item "--binary-architecture=bfdarch" -Useful when transforming a raw binary input file into an object file. -In this case the output architecture can be set to \fIbfdarch\fR. This -option will be ignored if the input file has a known \fIbfdarch\fR. You -can access this binary data inside a program by referencing the special -symbols that are created by the conversion process. These symbols are -called _binary_\fIobjfile\fR_start, _binary_\fIobjfile\fR_end and -_binary_\fIobjfile\fR_size. e.g. you can transform a picture file into -an object file and then access it in your code using these symbols. -.Ip "\f(CW\*(C`\-j \f(CIsectionname\f(CW\*(C'\fR" 4 -.IX Item "-j sectionname" -.Ip "\f(CW\*(C`\-\-only\-section=\f(CIsectionname\f(CW\*(C'\fR" 4 -.IX Item "--only-section=sectionname" -Copy only the named section from the input file to the output file. -This option may be given more than once. Note that using this option -inappropriately may make the output file unusable. -.Ip "\f(CW\*(C`\-R \f(CIsectionname\f(CW\*(C'\fR" 4 -.IX Item "-R sectionname" -.Ip "\f(CW\*(C`\-\-remove\-section=\f(CIsectionname\f(CW\*(C'\fR" 4 -.IX Item "--remove-section=sectionname" -Remove any section named \fIsectionname\fR from the output file. This -option may be given more than once. Note that using this option -inappropriately may make the output file unusable. -.Ip "\f(CW\*(C`\-S\*(C'\fR" 4 -.IX Item "-S" -.Ip "\f(CW\*(C`\-\-strip\-all\*(C'\fR" 4 -.IX Item "--strip-all" -Do not copy relocation and symbol information from the source file. -.Ip "\f(CW\*(C`\-g\*(C'\fR" 4 -.IX Item "-g" -.Ip "\f(CW\*(C`\-\-strip\-debug\*(C'\fR" 4 -.IX Item "--strip-debug" -Do not copy debugging symbols from the source file. -.Ip "\f(CW\*(C`\-\-strip\-unneeded\*(C'\fR" 4 -.IX Item "--strip-unneeded" -Strip all symbols that are not needed for relocation processing. -.Ip "\f(CW\*(C`\-K \f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "-K symbolname" -.Ip "\f(CW\*(C`\-\-keep\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "--keep-symbol=symbolname" -Copy only symbol \fIsymbolname\fR from the source file. This option may -be given more than once. -.Ip "\f(CW\*(C`\-N \f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "-N symbolname" -.Ip "\f(CW\*(C`\-\-strip\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "--strip-symbol=symbolname" -Do not copy symbol \fIsymbolname\fR from the source file. This option -may be given more than once. -.Ip "\f(CW\*(C`\-G \f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "-G symbolname" -.Ip "\f(CW\*(C`\-\-keep\-global\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "--keep-global-symbol=symbolname" -Keep only symbol \fIsymbolname\fR global. Make all other symbols local -to the file, so that they are not visible externally. This option may -be given more than once. -.Ip "\f(CW\*(C`\-L \f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "-L symbolname" -.Ip "\f(CW\*(C`\-\-localize\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "--localize-symbol=symbolname" -Make symbol \fIsymbolname\fR local to the file, so that it is not -visible externally. This option may be given more than once. -.Ip "\f(CW\*(C`\-W \f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "-W symbolname" -.Ip "\f(CW\*(C`\-\-weaken\-symbol=\f(CIsymbolname\f(CW\*(C'\fR" 4 -.IX Item "--weaken-symbol=symbolname" -Make symbol \fIsymbolname\fR weak. This option may be given more than once. -.Ip "\f(CW\*(C`\-x\*(C'\fR" 4 -.IX Item "-x" -.Ip "\f(CW\*(C`\-\-discard\-all\*(C'\fR" 4 -.IX Item "--discard-all" -Do not copy non-global symbols from the source file. -.Ip "\f(CW\*(C`\-X\*(C'\fR" 4 -.IX Item "-X" -.Ip "\f(CW\*(C`\-\-discard\-locals\*(C'\fR" 4 -.IX Item "--discard-locals" -Do not copy compiler-generated local symbols. -(These usually start with \fBL\fR or \fB.\fR.) -.Ip "\f(CW\*(C`\-b \f(CIbyte\f(CW\*(C'\fR" 4 -.IX Item "-b byte" -.Ip "\f(CW\*(C`\-\-byte=\f(CIbyte\f(CW\*(C'\fR" 4 -.IX Item "--byte=byte" -Keep only every \fIbyte\fRth byte of the input file (header data is not -affected). \fIbyte\fR can be in the range from 0 to \fIinterleave\fR\-1, -where \fIinterleave\fR is given by the \fB\-i\fR or \fB\*(--interleave\fR -option, or the default of 4. This option is useful for creating files -to program \s-1ROM\s0. It is typically used with an \f(CW\*(C`srec\*(C'\fR output -target. -.Ip "\f(CW\*(C`\-i \f(CIinterleave\f(CW\*(C'\fR" 4 -.IX Item "-i interleave" -.Ip "\f(CW\*(C`\-\-interleave=\f(CIinterleave\f(CW\*(C'\fR" 4 -.IX Item "--interleave=interleave" -Only copy one out of every \fIinterleave\fR bytes. Select which byte to -copy with the \fI\-b\fR or \fB\*(--byte\fR option. The default is 4. -\&\f(CW\*(C`objcopy\*(C'\fR ignores this option if you do not specify either \fB\-b\fR or -\&\fB\*(--byte\fR. -.Ip "\f(CW\*(C`\-p\*(C'\fR" 4 -.IX Item "-p" -.Ip "\f(CW\*(C`\-\-preserve\-dates\*(C'\fR" 4 -.IX Item "--preserve-dates" -Set the access and modification dates of the output file to be the same -as those of the input file. -.Ip "\f(CW\*(C`\-\-debugging\*(C'\fR" 4 -.IX Item "--debugging" -Convert debugging information, if possible. This is not the default -because only certain debugging formats are supported, and the -conversion process can be time consuming. -.Ip "\f(CW\*(C`\-\-gap\-fill \f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--gap-fill val" -Fill gaps between sections with \fIval\fR. This operation applies to -the \fIload address\fR (\s-1LMA\s0) of the sections. It is done by increasing -the size of the section with the lower address, and filling in the extra -space created with \fIval\fR. -.Ip "\f(CW\*(C`\-\-pad\-to \f(CIaddress\f(CW\*(C'\fR" 4 -.IX Item "--pad-to address" -Pad the output file up to the load address \fIaddress\fR. This is -done by increasing the size of the last section. The extra space is -filled in with the value specified by \fB\*(--gap-fill\fR (default zero). -.Ip "\f(CW\*(C`\-\-set\-start \f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--set-start val" -Set the start address of the new file to \fIval\fR. Not all object file -formats support setting the start address. -.Ip "\f(CW\*(C`\-\-change\-start \f(CIincr\f(CW\*(C'\fR" 4 -.IX Item "--change-start incr" -.Ip "\f(CW\*(C`\-\-adjust\-start \f(CIincr\f(CW\*(C'\fR" 4 -.IX Item "--adjust-start incr" -Change the start address by adding \fIincr\fR. Not all object file -formats support setting the start address. -.Ip "\f(CW\*(C`\-\-change\-addresses \f(CIincr\f(CW\*(C'\fR" 4 -.IX Item "--change-addresses incr" -.Ip "\f(CW\*(C`\-\-adjust\-vma \f(CIincr\f(CW\*(C'\fR" 4 -.IX Item "--adjust-vma incr" -Change the \s-1VMA\s0 and \s-1LMA\s0 addresses of all sections, as well as the start -address, by adding \fIincr\fR. Some object file formats do not permit -section addresses to be changed arbitrarily. Note that this does not -relocate the sections; if the program expects sections to be loaded at a -certain address, and this option is used to change the sections such -that they are loaded at a different address, the program may fail. -.Ip "\f(CW\*(C`\-\-change\-section\-address \f(CIsection\f(CW{=,+,\-}\f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--change-section-address section{=,+,-}val" -.Ip "\f(CW\*(C`\-\-adjust\-section\-vma \f(CIsection\f(CW{=,+,\-}\f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--adjust-section-vma section{=,+,-}val" -Set or change both the \s-1VMA\s0 address and the \s-1LMA\s0 address of the named -\&\fIsection\fR. If \fB=\fR is used, the section address is set to -\&\fIval\fR. Otherwise, \fIval\fR is added to or subtracted from the -section address. See the comments under \fB\*(--change-addresses\fR, -above. If \fIsection\fR does not exist in the input file, a warning will -be issued, unless \fB\*(--no-change-warnings\fR is used. -.Ip "\f(CW\*(C`\-\-change\-section\-lma \f(CIsection\f(CW{=,+,\-}\f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--change-section-lma section{=,+,-}val" -Set or change the \s-1LMA\s0 address of the named \fIsection\fR. The \s-1LMA\s0 -address is the address where the section will be loaded into memory at -program load time. Normally this is the same as the \s-1VMA\s0 address, which -is the address of the section at program run time, but on some systems, -especially those where a program is held in \s-1ROM\s0, the two can be -different. If \fB=\fR is used, the section address is set to -\&\fIval\fR. Otherwise, \fIval\fR is added to or subtracted from the -section address. See the comments under \fB\*(--change-addresses\fR, -above. If \fIsection\fR does not exist in the input file, a warning -will be issued, unless \fB\*(--no-change-warnings\fR is used. -.Ip "\f(CW\*(C`\-\-change\-section\-vma \f(CIsection\f(CW{=,+,\-}\f(CIval\f(CW\*(C'\fR" 4 -.IX Item "--change-section-vma section{=,+,-}val" -Set or change the \s-1VMA\s0 address of the named \fIsection\fR. The \s-1VMA\s0 -address is the address where the section will be located once the -program has started executing. Normally this is the same as the \s-1LMA\s0 -address, which is the address where the section will be loaded into -memory, but on some systems, especially those where a program is held in -\&\s-1ROM\s0, the two can be different. If \fB=\fR is used, the section address -is set to \fIval\fR. Otherwise, \fIval\fR is added to or subtracted -from the section address. See the comments under -\&\fB\*(--change-addresses\fR, above. If \fIsection\fR does not exist in -the input file, a warning will be issued, unless -\&\fB\*(--no-change-warnings\fR is used. -.Ip "\f(CW\*(C`\-\-change\-warnings\*(C'\fR" 4 -.IX Item "--change-warnings" -.Ip "\f(CW\*(C`\-\-adjust\-warnings\*(C'\fR" 4 -.IX Item "--adjust-warnings" -If \fB\*(--change-section-address\fR or \fB\*(--change-section-lma\fR or -\&\fB\*(--change-section-vma\fR is used, and the named section does not -exist, issue a warning. This is the default. -.Ip "\f(CW\*(C`\-\-no\-change\-warnings\*(C'\fR" 4 -.IX Item "--no-change-warnings" -.Ip "\f(CW\*(C`\-\-no\-adjust\-warnings\*(C'\fR" 4 -.IX Item "--no-adjust-warnings" -Do not issue a warning if \fB\*(--change-section-address\fR or -\&\fB\*(--adjust-section-lma\fR or \fB\*(--adjust-section-vma\fR is used, even -if the named section does not exist. -.Ip "\f(CW\*(C`\-\-set\-section\-flags \f(CIsection\f(CW=\f(CIflags\f(CW\*(C'\fR" 4 -.IX Item "--set-section-flags section=flags" -Set the flags for the named section. The \fIflags\fR argument is a -comma separated string of flag names. The recognized names are -\&\fBalloc\fR, \fBcontents\fR, \fBload\fR, \fBnoload\fR, -\&\fBreadonly\fR, \fBcode\fR, \fBdata\fR, \fBrom\fR, \fBshare\fR, and -\&\fBdebug\fR. You can set the \fBcontents\fR flag for a section which -does not have contents, but it is not meaningful to clear the -\&\fBcontents\fR flag of a section which does have contents\*(--just remove -the section instead. Not all flags are meaningful for all object file -formats. -.Ip "\f(CW\*(C`\-\-add\-section \f(CIsectionname\f(CW=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--add-section sectionname=filename" -Add a new section named \fIsectionname\fR while copying the file. The -contents of the new section are taken from the file \fIfilename\fR. The -size of the section will be the size of the file. This option only -works on file formats which can support sections with arbitrary names. -.Ip "\f(CW\*(C`\-\-change\-leading\-char\*(C'\fR" 4 -.IX Item "--change-leading-char" -Some object file formats use special characters at the start of -symbols. The most common such character is underscore, which compilers -often add before every symbol. This option tells \f(CW\*(C`objcopy\*(C'\fR to -change the leading character of every symbol when it converts between -object file formats. If the object file formats use the same leading -character, this option has no effect. Otherwise, it will add a -character, or remove a character, or change a character, as -appropriate. -.Ip "\f(CW\*(C`\-\-remove\-leading\-char\*(C'\fR" 4 -.IX Item "--remove-leading-char" -If the first character of a global symbol is a special symbol leading -character used by the object file format, remove the character. The -most common symbol leading character is underscore. This option will -remove a leading underscore from all global symbols. This can be useful -if you want to link together objects of different file formats with -different conventions for symbol names. This is different from -\&\f(CW\*(C`\-\-change\-leading\-char\*(C'\fR because it always changes the symbol name -when appropriate, regardless of the object file format of the output -file. -.Ip "\f(CW\*(C`\-\-srec\-len=\f(CIival\f(CW\*(C'\fR" 4 -.IX Item "--srec-len=ival" -Meaningful only for srec output. Set the maximum length of the Srecords -being produced to \fIival\fR. This length covers both address, data and -crc fields. -.Ip "\f(CW\*(C`\-\-srec\-forceS3\*(C'\fR" 4 -.IX Item "--srec-forceS3" -Meaningful only for srec output. Avoid generation of S1/S2 records, -creating S3\-only record format. -.Ip "\f(CW\*(C`\-\-redefine\-sym \f(CIold\f(CW=\f(CInew\f(CW\*(C'\fR" 4 -.IX Item "--redefine-sym old=new" -Change the name of a symbol \fIold\fR, to \fInew\fR. This can be useful -when one is trying link two things together for which you have no -source, and there are name collisions. -.Ip "\f(CW\*(C`\-\-weaken\*(C'\fR" 4 -.IX Item "--weaken" -Change all global symbols in the file to be weak. This can be useful -when building an object which will be linked against other objects using -the \f(CW\*(C`\-R\*(C'\fR option to the linker. This option is only effective when -using an object file format which supports weak symbols. -.Ip "\f(CW\*(C`\-\-keep\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--keep-symbols=filename" -Apply \fB\*(--keep-symbol\fR option to each symbol listed in the file -\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol -name per line. Line comments may be introduced by the hash character. -This option may be given more than once. -.Ip "\f(CW\*(C`\-\-strip\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--strip-symbols=filename" -Apply \fB\*(--strip-symbol\fR option to each symbol listed in the file -\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol -name per line. Line comments may be introduced by the hash character. -This option may be given more than once. -.Ip "\f(CW\*(C`\-\-keep\-global\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--keep-global-symbols=filename" -Apply \fB\*(--keep-global-symbol\fR option to each symbol listed in the -file \fIfilename\fR. \fIfilename\fR is simply a flat file, with one -symbol name per line. Line comments may be introduced by the hash -character. This option may be given more than once. -.Ip "\f(CW\*(C`\-\-localize\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--localize-symbols=filename" -Apply \fB\*(--localize-symbol\fR option to each symbol listed in the file -\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol -name per line. Line comments may be introduced by the hash character. -This option may be given more than once. -.Ip "\f(CW\*(C`\-\-weaken\-symbols=\f(CIfilename\f(CW\*(C'\fR" 4 -.IX Item "--weaken-symbols=filename" -Apply \fB\*(--weaken-symbol\fR option to each symbol listed in the file -\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol -name per line. Line comments may be introduced by the hash character. -This option may be given more than once. -.Ip "\f(CW\*(C`\-V\*(C'\fR" 4 -.IX Item "-V" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Show the version number of \f(CW\*(C`objcopy\*(C'\fR. -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -.Ip "\f(CW\*(C`\-\-verbose\*(C'\fR" 4 -.IX Item "--verbose" -Verbose output: list all object files modified. In the case of -archives, \fBobjcopy \-V\fR lists all members of the archive. -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Show a summary of the options to \f(CW\*(C`objcopy\*(C'\fR. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fIld\fR\|(1), \fIobjdump\fR\|(1), and the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 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 \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/contrib/binutils/binutils/objdump.1 b/contrib/binutils/binutils/objdump.1 deleted file mode 100644 index 591a0f44bbde..000000000000 --- a/contrib/binutils/binutils/objdump.1 +++ /dev/null @@ -1,770 +0,0 @@ -.\" Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 1998, 2000 Free Software Foundation -.\" See section COPYING for conditions for redistribution -.TH objdump 1 "5 November 1991" "Free Software Foundation" "GNU Development Tools" -.de BP -.sp -.ti \-.2i -\(** -.. - -.SH NAME -objdump \- display information from object files. - -.SH SYNOPSIS -.hy 0 -.na -.B objdump -.RB "[\|" \-a | \-\-archive\-headers "\|]" -.RB "[\|" "\-b\ "\c -.I bfdname\c -.RB " | " "\-\-target="\c -.I bfdname\c -\&\|] -.RB "[\|" \-C | \-\-demangle "\|]" -.RB "[\|" \-\-debugging "\|]" -.RB "[\|" \-d | \-\-disassemble "\|]" -.RB "[\|" \-D | \-\-disassemble-all "\|]" -.RB "[\|" \-\-disassemble\-zeroes "\|]" -.RB "[\|" \-EB | \-EL | \-\-endian=\c -.I {big|little}\c -\&\|] -.RB "[\|" \-f | \-\-file\-headers "\|]" -.RB "[\|" \-h | \-\-section\-headers -.RB "| " \-\-headers "\|]" -.RB "[\|" \-i | \-\-info "\|]" -.RB "[\|" "\-j\ "\c -.I section\c -.RB " | " "\-\-section="\c -.I section\c -\&\|] -.RB "[\|" \-l | \-\-line\-numbers "\|]" -.RB "[\|" "\-m\ "\c -.I machine\c -.RB " | " "\-\-architecture="\c -.I machine\c -\&\|] -.RB "[\|" \-p | \-\-private\-headers "\|]" -.RB "[\|" \-\-prefix\-addresses "\|]" -.RB "[\|" \-r | \-\-reloc "\|]" -.RB "[\|" \-R | \-\-dynamic\-reloc "\|]" -.RB "[\|" \-s | \-\-full\-contents "\|]" -.RB "[\|" \-S | \-\-source "\|]" -.RB "[\|" \-\-[no\-]show\-raw\-insn "\|]" -.RB "[\|" \-\-stabs "\|]" -.RB "[\|" \-t | \-\-syms "\|]" -.RB "[\|" \-T | \-\-dynamic\-syms "\|]" -.RB "[\|" \-x | \-\-all\-headers "\|]" -.RB "[\|" "\-\-start\-address="\c -.I address\c -\&\|] -.RB "[\|" "\-\-stop\-address="\c -.I address\c -\&\|] -.RB "[\|" "\-\-adjust\-vma="\c -.I offset\c -\&\|] -.RB "[\|" \-\-version "\|]" -.RB "[\|" \-\-help "\|]" -.I objfile\c -\&.\|.\|. -.ad b -.hy 1 -.SH DESCRIPTION -\c -.B objdump\c -\& displays information about one or more object files. -The options control what particular information to display. This -information is mostly useful to programmers who are working on the -compilation tools, as opposed to programmers who just want their -program to compile and work. -.PP -.IR "objfile" .\|.\|. -are the object files to be examined. When you specify archives, -\c -.B objdump\c -\& shows information on each of the member object files. - -.SH OPTIONS -Where long and short forms of an option are shown together, they are -equivalent. At least one option besides -.B \-l -(\fB\-\-line\-numbers\fP) must be given. - -.TP -.B \-a -.TP -.B \-\-archive\-headers -If any files from \c -.I objfile\c -\& are archives, display the archive -header information (in a format similar to `\|\c -.B ls \-l\c -\|'). Besides the -information you could list with `\|\c -.B ar tv\c -\|', `\|\c -.B objdump \-a\c -\|' shows -the object file format of each archive member. - -.TP -.BI "\-\-adjust\-vma=" "offset" -When dumping information, first add -.I offset -to all the section addresses. This is useful if the section addresses -do not correspond to the symbol table, which can happen when putting -sections at particular addresses when using a format which can not -represent section addresses, such as a.out. - -.TP -.BI "\-b " "bfdname"\c -.TP -.BI "\-\-target=" "bfdname" -Specify the object-code format for the object files to be -\c -.I bfdname\c -\&. This may not be necessary; \c -.I objdump\c -\& can -automatically recognize many formats. For example, -.sp -.br -objdump\ \-b\ oasys\ \-m\ vax\ \-h\ fu.o -.br -.sp -display summary information from the section headers (`\|\c -.B \-h\c -\|') of -`\|\c -.B fu.o\c -\|', which is explicitly identified (`\|\c -.B \-m\c -\|') as a Vax object -file in the format produced by Oasys compilers. You can list the -formats available with the `\|\c -.B \-i\c -\|' option. - -.TP -.B \-C -.TP -.B \-\-demangle -Decode (\fIdemangle\fP) low-level symbol names into user-level names. -Besides removing any initial underscore prepended by the system, this -makes C++ function names readable. - -.TP -.B \-\-debugging -Display debugging information. This attempts to parse debugging -information stored in the file and print it out using a C like syntax. -Only certain types of debugging information have been implemented. - -.TP -.B \-d -.TP -.B \-\-disassemble -Display the assembler mnemonics for the machine -instructions from \c -.I objfile\c -\&. -This option only disassembles those sections which are -expected to contain instructions. - -.TP -.B \-D -.TP -.B \-\-disassemble-all -Like \fB\-d\fP, but disassemble the contents of all sections, not just -those expected to contain instructions. - -.TP -.B \-\-prefix\-addresses -When disassembling, print the complete address on each line. This is -the older disassembly format. - -.TP -.B \-\-disassemble\-zeroes -Normally the disassembly output will skip blocks of zeroes. This -option directs the disassembler to disassemble those blocks, just like -any other data. - -.TP -.B \-EB -.TP -.B \-EL -.TP -.BI "\-\-endian=" "{big|little}" -Specify the endianness of the object files. This only affects -disassembly. This can be useful when disassembling a file format which -does not describe endianness information, such as S-records. - -.TP -.B \-f -.TP -.B \-\-file\-headers -Display summary information from the overall header of -each file in \c -.I objfile\c -\&. - -.TP -.B \-h -.TP -.B \-\-section\-headers -.TP -.B \-\-headers -Display summary information from the section headers of the -object file. - -.TP -.B \-\-help -Print a summary of the options to -.B objdump -and exit. - -.TP -.B \-i -.TP -.B \-\-info -Display a list showing all architectures and object formats available -for specification with \c -.B \-b\c -\& or \c -.B \-m\c -\&. - -.TP -.BI "\-j " "name"\c -.TP -.BI "\-\-section=" "name" -Display information only for section \c -.I name\c -\&. - -.TP -.B \-l -.TP -.B \-\-line\-numbers -Label the display (using debugging information) with the filename -and source line numbers corresponding to the object code shown. -Only useful with \fB\-d\fP, \fB\-D\fP, or \fB\-r\fP. - -.TP -.BI "\-m " "machine"\c -.TP -.BI "\-\-architecture=" "machine" -Specify the architecture to use when disassembling object files. This -can be useful when disassembling object files which do not describe -architecture information, such as S-records. You can list the available -architectures with the \fB\-i\fP option. - -.TP -.B \-p -.TP -.B \-\-private\-headers -Print information that is specific to the object file format. The -exact information printed depends upon the object file format. For -some object file formats, no additional information is printed. - -.TP -.B \-r -.TP -.B \-\-reloc -Print the relocation entries of the file. If used with \fB\-d\fP or -\fB\-D\fP, the relocations are printed interspersed with the -disassembly. - -.TP -.B \-R -.TP -.B \-\-dynamic\-reloc -Print the dynamic relocation entries of the file. This is only -meaningful for dynamic objects, such as certain types of shared -libraries. - -.TP -.B \-s -.TP -.B \-\-full\-contents -Display the full contents of any sections requested. - -.TP -.B \-S -.TP -.B \-\-source -Display source code intermixed with disassembly, if possible. Implies -\fB-d\fP. - -.TP -.B \-\-show\-raw\-insn -When disassembling instructions, print the instruction in hex as well as -in symbolic form. This is the default except when -.B \-\-prefix\-addresses -is used. - -.TP -.B \-\-no\-show\-raw\-insn -When disassembling instructions, do not print the instruction bytes. -This is the default when -.B \-\-prefix\-addresses -is used. - -.TP -.B \-\-stabs -Display the contents of the .stab, .stab.index, and .stab.excl -sections from an ELF file. This is only useful on systems (such as -Solaris 2.0) in which .stab debugging symbol-table entries are carried -in an ELF section. In most other file formats, debugging symbol-table -entries are interleaved with linkage symbols, and are visible in the -.B \-\-syms -output. - -.TP -.BI "\-\-start\-address=" "address" -Start displaying data at the specified address. This affects the output -of the -.B \-d\c -, -.B \-r -and -.B \-s -options. - -.TP -.BI "\-\-stop\-address=" "address" -Stop displaying data at the specified address. This affects the output -of the -.B \-d\c -, -.B \-r -and -.B \-s -options. - -.TP -.B \-t -.TP -.B \-\-syms -Symbol Table. Print the symbol table entries of the file. -This is similar to the information provided by the `\|\c -.B nm\c -\|' program. - -.TP -.B \-T -.TP -.B \-\-dynamic\-syms -Dynamic Symbol Table. Print the dynamic symbol table entries of the -file. This is only meaningful for dynamic objects, such as certain -types of shared libraries. This is similar to the information -provided by the `\|\c -.B nm\c -\|' program when given the -.B \-D (\-\-dynamic) -option. - -.TP -.B \-\-version -Print the version number of -.B objdump -and exit. - -.TP -.B \-x -.TP -.B \-\-all\-headers -Display all available header information, including the symbol table and -relocation entries. Using `\|\c -.B \-x\c -\|' is equivalent to specifying all of -`\|\c -.B \-a \-f \-h \-r \-t\c -\|'. - -.SH "SEE ALSO" -.RB "`\|" binutils "\|'" -entry in -.B -info\c -\&; -.I -The GNU Binary Utilities\c -\&, Roland H. Pesch (October 1991); -.BR nm "(" 1 ")." - -.SH COPYING -Copyright (c) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. -.PP -.PP -This document is distributed under the terms of the GNU Free -Documentation License, version 1.1. That license is described in the -sources for this manual page, but it is not displayed here in order to -make this manual more consise. Copies of this license can also be -obtained from: http://www.gnu.org/copyleft/. - -\" .SH 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. -\" .PP -\" 0. PREAMBLE -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 1. APPLICABILITY AND DEFINITIONS -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 2. VERBATIM COPYING -\" .PP -\" 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. -\" .PP -\" You may also lend copies, under the same conditions stated above, and -\" you may publicly display copies. -\" .PP -\" 3. COPYING IN QUANTITY -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 4. MODIFICATIONS -\" .PP -\" 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: -\" .PP -\" 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. -\" .PP -\" 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). -\" .PP -\" C. State on the Title page the name of the publisher of the -\" Modified Version, as the publisher. -\" .PP -\" D. Preserve all the copyright notices of the Document. -\" .PP -\" E. Add an appropriate copyright notice for your modifications -\" adjacent to the other copyright notices. -\" .PP -\" 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. -\" Preserve in that license notice the full lists of Invariant Sections -\" and required Cover Texts given in the Document's license notice. -\" .PP -\" H. Include an unaltered copy of this License. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" M. Delete any section entitled "Endorsements". Such a section -\" may not be included in the Modified Version. -\" .PP -\" N. Do not retitle any existing section as "Endorsements" -\" or to conflict in title with any Invariant Section. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 5. COMBINING DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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." -\" .PP - -\" 6. COLLECTIONS OF DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 7. AGGREGATION WITH INDEPENDENT WORKS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 8. TRANSLATION -\" .PP -\" 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. -\" .PP - -\" 9. TERMINATION -\" .PP -\" 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. -\" .PP - -\" 10. FUTURE REVISIONS OF THIS LICENSE -\" .PP -\" 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/. -\" .PP -\" 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. -\" .PP - -\" ADDENDUM: How to use this License for your documents -\" .PP -\" 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: -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. diff --git a/contrib/binutils/binutils/ranlib.1 b/contrib/binutils/binutils/ranlib.1 deleted file mode 100644 index 9e973c699d9b..000000000000 --- a/contrib/binutils/binutils/ranlib.1 +++ /dev/null @@ -1,441 +0,0 @@ -.\" Copyright (c) 1991, 2000 Free Software Foundation -.\" See section COPYING for conditions for redistribution -.TH ranlib 1 "5 November 1991" "Free Software Foundation" "GNU Development Tools" -.de BP -.sp -.ti \-.2i -\(** -.. - -.SH NAME -ranlib \- generate index to archive. - -.SH SYNOPSIS -.hy 0 -.na -.B ranlib \c -.RB "[\|" \-v | \-V "\|]" -.I archive\c -\& -.ad b -.hy 1 -.SH DESCRIPTION -.B ranlib -generates an index to the contents of an archive, and -stores it in the archive. The index lists each symbol defined by a -member of an archive that is a relocatable object file. -.PP -You may use -.RB ` "nm \-s" ' -or -.RB ` "nm \-\-print-armap" ' -to list this index. -.PP -An archive with such an index speeds up linking to the library, and -allows routines in the library to call each other without regard to -their placement in the archive. -.PP -The GNU -.B ranlib -program is another form of GNU -.BR ar ; -running -.B ranlib -is completely equivalent to executing -.RB ` "ar \-s" '. - -.SH OPTIONS -.TP -.B \-v -Print the version number of -.B ranlib -and exit. - -.SH "SEE ALSO" -.RB "`\|" binutils "\|'" -entry in -.B -info\c -\&; -.I -The GNU Binary Utilities\c -\&, Roland H. Pesch (October 1991); -.BR ar "(" 1 ")," -.BR nm "(" 1 ")." - - -.SH COPYING -Copyright (c) 1991, 2000 Free Software Foundation, Inc. -.PP -This document is distributed under the terms of the GNU Free -Documentation License, version 1.1. That license is described in the -sources for this manual page, but it is not displayed here in order to -make this manual more consise. Copies of this license can also be -obtained from: http://www.gnu.org/copyleft/. - -\" .SH 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. -\" .PP -\" 0. PREAMBLE -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 1. APPLICABILITY AND DEFINITIONS -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 2. VERBATIM COPYING -\" .PP -\" 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. -\" .PP -\" You may also lend copies, under the same conditions stated above, and -\" you may publicly display copies. -\" .PP -\" 3. COPYING IN QUANTITY -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 4. MODIFICATIONS -\" .PP -\" 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: -\" .PP -\" 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. -\" .PP -\" 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). -\" .PP -\" C. State on the Title page the name of the publisher of the -\" Modified Version, as the publisher. -\" .PP -\" D. Preserve all the copyright notices of the Document. -\" .PP -\" E. Add an appropriate copyright notice for your modifications -\" adjacent to the other copyright notices. -\" .PP -\" 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. -\" Preserve in that license notice the full lists of Invariant Sections -\" and required Cover Texts given in the Document's license notice. -\" .PP -\" H. Include an unaltered copy of this License. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" M. Delete any section entitled "Endorsements". Such a section -\" may not be included in the Modified Version. -\" .PP -\" N. Do not retitle any existing section as "Endorsements" -\" or to conflict in title with any Invariant Section. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 5. COMBINING DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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." -\" .PP - -\" 6. COLLECTIONS OF DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 7. AGGREGATION WITH INDEPENDENT WORKS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 8. TRANSLATION -\" .PP -\" 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. -\" .PP - -\" 9. TERMINATION -\" .PP -\" 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. -\" .PP - -\" 10. FUTURE REVISIONS OF THIS LICENSE -\" .PP -\" 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/. -\" .PP -\" 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. -\" .PP - -\" ADDENDUM: How to use this License for your documents -\" .PP -\" 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: -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. diff --git a/contrib/binutils/binutils/rcparse.c b/contrib/binutils/binutils/rcparse.c deleted file mode 100644 index 9add78f384b8..000000000000 --- a/contrib/binutils/binutils/rcparse.c +++ /dev/null @@ -1,3447 +0,0 @@ -/* A Bison parser, made from rcparse.y - by GNU bison 1.35. */ - -#define YYBISON 1 /* Identify Bison output. */ - -# define BEG 257 -# define END 258 -# define ACCELERATORS 259 -# define VIRTKEY 260 -# define ASCII 261 -# define NOINVERT 262 -# define SHIFT 263 -# define CONTROL 264 -# define ALT 265 -# define BITMAP 266 -# define CURSOR 267 -# define DIALOG 268 -# define DIALOGEX 269 -# define EXSTYLE 270 -# define CAPTION 271 -# define CLASS 272 -# define STYLE 273 -# define AUTO3STATE 274 -# define AUTOCHECKBOX 275 -# define AUTORADIOBUTTON 276 -# define CHECKBOX 277 -# define COMBOBOX 278 -# define CTEXT 279 -# define DEFPUSHBUTTON 280 -# define EDITTEXT 281 -# define GROUPBOX 282 -# define LISTBOX 283 -# define LTEXT 284 -# define PUSHBOX 285 -# define PUSHBUTTON 286 -# define RADIOBUTTON 287 -# define RTEXT 288 -# define SCROLLBAR 289 -# define STATE3 290 -# define USERBUTTON 291 -# define BEDIT 292 -# define HEDIT 293 -# define IEDIT 294 -# define FONT 295 -# define ICON 296 -# define LANGUAGE 297 -# define CHARACTERISTICS 298 -# define VERSIONK 299 -# define MENU 300 -# define MENUEX 301 -# define MENUITEM 302 -# define SEPARATOR 303 -# define POPUP 304 -# define CHECKED 305 -# define GRAYED 306 -# define HELP 307 -# define INACTIVE 308 -# define MENUBARBREAK 309 -# define MENUBREAK 310 -# define MESSAGETABLE 311 -# define RCDATA 312 -# define STRINGTABLE 313 -# define VERSIONINFO 314 -# define FILEVERSION 315 -# define PRODUCTVERSION 316 -# define FILEFLAGSMASK 317 -# define FILEFLAGS 318 -# define FILEOS 319 -# define FILETYPE 320 -# define FILESUBTYPE 321 -# define BLOCKSTRINGFILEINFO 322 -# define BLOCKVARFILEINFO 323 -# define VALUE 324 -# define BLOCK 325 -# define MOVEABLE 326 -# define FIXED 327 -# define PURE 328 -# define IMPURE 329 -# define PRELOAD 330 -# define LOADONCALL 331 -# define DISCARDABLE 332 -# define NOT 333 -# define QUOTEDSTRING 334 -# define STRING 335 -# define NUMBER 336 -# define SIZEDSTRING 337 -# define IGNORED_TOKEN 338 -# define NEG 339 - -#line 1 "rcparse.y" - /* rcparse.y -- parser for Windows rc files - Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. - Written by Ian Lance Taylor, Cygnus Support. - - 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 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 is a parser for Windows rc files. It is based on the parser - by Gunther Ebert <gunther.ebert@ixos-leipzig.de>. */ - -#include "bfd.h" -#include "bucomm.h" -#include "libiberty.h" -#include "windres.h" -#include "safe-ctype.h" - -/* The current language. */ - -static unsigned short language; - -/* The resource information during a sub statement. */ - -static struct res_res_info sub_res_info; - -/* Dialog information. This is built by the nonterminals styles and - controls. */ - -static struct dialog dialog; - -/* This is used when building a style. It is modified by the - nonterminal styleexpr. */ - -static unsigned long style; - -/* These are used when building a control. They are set before using - control_params. */ - -static unsigned long base_style; -static unsigned long default_style; -static unsigned long class; - - -#line 58 "rcparse.y" -#ifndef YYSTYPE -typedef union -{ - struct accelerator acc; - struct accelerator *pacc; - struct dialog_control *dialog_control; - struct menuitem *menuitem; - struct - { - struct rcdata_item *first; - struct rcdata_item *last; - } rcdata; - struct rcdata_item *rcdata_item; - struct stringtable_data *stringtable; - struct fixed_versioninfo *fixver; - struct ver_info *verinfo; - struct ver_stringinfo *verstring; - struct ver_varinfo *vervar; - struct res_id id; - struct res_res_info res_info; - struct - { - unsigned short on; - unsigned short off; - } memflags; - struct - { - unsigned long val; - /* Nonzero if this number was explicitly specified as long. */ - int dword; - } i; - unsigned long il; - unsigned short is; - const char *s; - struct - { - unsigned long length; - const char *s; - } ss; -} yystype; -# define YYSTYPE yystype -# define YYSTYPE_IS_TRIVIAL 1 -#endif -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - - - -#define YYFINAL 483 -#define YYFLAG -32768 -#define YYNTBASE 99 - -/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ -#define YYTRANSLATE(x) ((unsigned)(x) <= 339 ? yytranslate[x] : 189) - -/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ -static const char yytranslate[] = -{ - 0, 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, 2, 92, 87, 2, - 97, 98, 90, 88, 95, 89, 2, 91, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 96, 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, 86, 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, 85, 2, 93, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 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, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 94 -}; - -#if YYDEBUG -static const short yyprhs[] = -{ - 0, 0, 1, 4, 7, 10, 13, 16, 19, 22, - 25, 28, 31, 34, 37, 40, 43, 46, 53, 54, - 57, 60, 65, 67, 69, 71, 75, 78, 80, 82, - 84, 86, 88, 90, 95, 100, 101, 115, 116, 130, - 131, 146, 147, 151, 152, 156, 160, 164, 168, 172, - 178, 185, 193, 202, 206, 210, 215, 219, 220, 223, - 224, 228, 229, 233, 234, 238, 239, 243, 244, 248, - 249, 253, 265, 278, 291, 305, 306, 310, 311, 315, - 316, 320, 321, 325, 326, 330, 337, 346, 357, 369, - 370, 374, 375, 379, 380, 384, 385, 389, 390, 394, - 395, 399, 400, 404, 405, 409, 410, 414, 415, 432, - 440, 450, 461, 462, 464, 467, 468, 472, 473, 477, - 478, 482, 483, 487, 492, 497, 501, 508, 509, 512, - 517, 520, 527, 528, 532, 535, 537, 539, 541, 543, - 545, 547, 554, 555, 558, 561, 565, 571, 574, 580, - 587, 595, 605, 610, 617, 618, 621, 622, 624, 626, - 628, 632, 636, 637, 644, 645, 649, 654, 661, 666, - 673, 674, 681, 688, 692, 696, 700, 704, 708, 709, - 718, 726, 727, 733, 734, 738, 740, 742, 744, 747, - 750, 753, 755, 756, 759, 763, 768, 772, 773, 776, - 777, 780, 782, 784, 786, 788, 790, 792, 794, 796, - 798, 800, 803, 807, 812, 814, 818, 819, 821, 824, - 826, 828, 832, 835, 838, 842, 846, 850, 854, 858, - 862, 866, 870, 873, 875, 877, 881, 884, 888, 892, - 896, 900, 904, 908, 912 -}; -static const short yyrhs[] = -{ - -1, 99, 100, 0, 99, 106, 0, 99, 107, 0, - 99, 108, 0, 99, 146, 0, 99, 147, 0, 99, - 148, 0, 99, 149, 0, 99, 154, 0, 99, 157, - 0, 99, 158, 0, 99, 163, 0, 99, 166, 0, - 99, 167, 0, 99, 84, 0, 172, 5, 175, 3, - 101, 4, 0, 0, 101, 102, 0, 103, 186, 0, - 103, 186, 95, 104, 0, 80, 0, 187, 0, 105, - 0, 104, 95, 105, 0, 104, 105, 0, 6, 0, - 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, - 172, 12, 177, 179, 0, 172, 13, 176, 179, 0, - 0, 172, 14, 177, 112, 187, 183, 183, 183, 109, - 113, 3, 114, 4, 0, 0, 172, 15, 177, 112, - 187, 183, 183, 183, 110, 113, 3, 114, 4, 0, - 0, 172, 15, 177, 112, 187, 183, 183, 183, 183, - 111, 113, 3, 114, 4, 0, 0, 16, 96, 184, - 0, 0, 113, 17, 80, 0, 113, 18, 172, 0, - 113, 19, 180, 0, 113, 16, 184, 0, 113, 18, - 80, 0, 113, 41, 184, 95, 80, 0, 113, 41, - 184, 95, 80, 183, 0, 113, 41, 184, 95, 80, - 183, 183, 0, 113, 41, 184, 95, 80, 183, 183, - 183, 0, 113, 46, 172, 0, 113, 44, 184, 0, - 113, 43, 184, 183, 0, 113, 45, 184, 0, 0, - 114, 115, 0, 0, 20, 116, 137, 0, 0, 21, - 117, 137, 0, 0, 22, 118, 137, 0, 0, 38, - 119, 137, 0, 0, 23, 120, 137, 0, 0, 24, - 121, 137, 0, 10, 138, 184, 183, 140, 183, 183, - 183, 183, 182, 139, 0, 10, 138, 184, 183, 140, - 183, 183, 183, 183, 183, 183, 139, 0, 10, 138, - 184, 95, 80, 140, 183, 183, 183, 183, 182, 139, - 0, 10, 138, 184, 95, 80, 140, 183, 183, 183, - 183, 183, 183, 139, 0, 0, 25, 122, 137, 0, - 0, 26, 123, 137, 0, 0, 27, 124, 137, 0, - 0, 28, 125, 137, 0, 0, 39, 126, 137, 0, - 42, 174, 184, 183, 183, 139, 0, 42, 174, 184, - 183, 183, 183, 183, 139, 0, 42, 174, 184, 183, - 183, 183, 183, 142, 182, 139, 0, 42, 174, 184, - 183, 183, 183, 183, 142, 183, 183, 139, 0, 0, - 40, 127, 137, 0, 0, 29, 128, 137, 0, 0, - 30, 129, 137, 0, 0, 31, 130, 137, 0, 0, - 32, 131, 137, 0, 0, 33, 132, 137, 0, 0, - 34, 133, 137, 0, 0, 35, 134, 137, 0, 0, - 36, 135, 137, 0, 0, 37, 80, 95, 184, 95, - 184, 95, 184, 95, 184, 95, 184, 95, 136, 180, - 182, 0, 138, 184, 183, 183, 183, 183, 139, 0, - 138, 184, 183, 183, 183, 183, 144, 182, 139, 0, - 138, 184, 183, 183, 183, 183, 144, 183, 183, 139, - 0, 0, 80, 0, 80, 95, 0, 0, 3, 159, - 4, 0, 0, 95, 141, 180, 0, 0, 95, 143, - 180, 0, 0, 95, 145, 180, 0, 172, 41, 176, - 179, 0, 172, 42, 176, 179, 0, 43, 184, 183, - 0, 172, 46, 175, 3, 150, 4, 0, 0, 150, - 151, 0, 48, 80, 183, 152, 0, 48, 49, 0, - 50, 80, 152, 3, 150, 4, 0, 0, 152, 95, - 153, 0, 152, 153, 0, 51, 0, 52, 0, 53, - 0, 54, 0, 55, 0, 56, 0, 172, 47, 175, - 3, 155, 4, 0, 0, 155, 156, 0, 48, 80, - 0, 48, 80, 183, 0, 48, 80, 183, 183, 182, - 0, 48, 49, 0, 50, 80, 3, 155, 4, 0, - 50, 80, 183, 3, 155, 4, 0, 50, 80, 183, - 183, 3, 155, 4, 0, 50, 80, 183, 183, 183, - 182, 3, 155, 4, 0, 172, 57, 177, 179, 0, - 172, 58, 175, 3, 159, 4, 0, 0, 160, 161, - 0, 0, 162, 0, 83, 0, 185, 0, 162, 95, - 83, 0, 162, 95, 185, 0, 0, 59, 175, 3, - 164, 165, 4, 0, 0, 165, 184, 80, 0, 165, - 184, 95, 80, 0, 172, 172, 175, 3, 159, 4, - 0, 172, 172, 175, 179, 0, 172, 60, 168, 3, - 169, 4, 0, 0, 168, 61, 184, 183, 183, 183, - 0, 168, 62, 184, 183, 183, 183, 0, 168, 63, - 184, 0, 168, 64, 184, 0, 168, 65, 184, 0, - 168, 66, 184, 0, 168, 67, 184, 0, 0, 169, - 68, 3, 71, 3, 170, 4, 4, 0, 169, 69, - 3, 70, 80, 171, 4, 0, 0, 170, 70, 80, - 95, 80, 0, 0, 171, 183, 183, 0, 187, 0, - 81, 0, 80, 0, 80, 95, 0, 81, 95, 0, - 187, 95, 0, 173, 0, 0, 175, 178, 0, 175, - 44, 184, 0, 175, 43, 184, 183, 0, 175, 45, - 184, 0, 0, 176, 178, 0, 0, 177, 178, 0, - 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, - 77, 0, 78, 0, 80, 0, 81, 0, 181, 0, - 79, 181, 0, 180, 85, 181, 0, 180, 85, 79, - 181, 0, 82, 0, 97, 184, 98, 0, 0, 183, - 0, 95, 184, 0, 185, 0, 82, 0, 97, 185, - 98, 0, 93, 185, 0, 89, 185, 0, 185, 90, - 185, 0, 185, 91, 185, 0, 185, 92, 185, 0, - 185, 88, 185, 0, 185, 89, 185, 0, 185, 87, - 185, 0, 185, 86, 185, 0, 185, 85, 185, 0, - 95, 187, 0, 188, 0, 82, 0, 97, 185, 98, - 0, 93, 185, 0, 188, 90, 185, 0, 188, 91, - 185, 0, 188, 92, 185, 0, 188, 88, 185, 0, - 188, 89, 185, 0, 188, 87, 185, 0, 188, 86, - 185, 0, 188, 85, 185, 0 -}; - -#endif - -#if YYDEBUG -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const short yyrline[] = -{ - 0, 154, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 175, 185, 190, - 210, 216, 227, 249, 258, 263, 268, 274, 279, 284, - 288, 292, 296, 304, 316, 328, 328, 354, 354, 381, - 381, 411, 416, 422, 424, 430, 434, 439, 443, 447, - 460, 475, 490, 505, 509, 513, 517, 523, 525, 535, - 535, 546, 546, 556, 556, 566, 566, 579, 579, 589, - 589, 599, 610, 619, 632, 643, 643, 653, 653, 663, - 663, 673, 673, 683, 683, 696, 701, 707, 713, 719, - 719, 732, 732, 742, 742, 752, 752, 762, 762, 772, - 772, 782, 782, 792, 792, 802, 802, 812, 812, 829, - 842, 853, 864, 869, 873, 879, 884, 892, 892, 898, - 898, 904, 904, 912, 924, 937, 946, 956, 961, 977, - 982, 986, 992, 997, 1001, 1007, 1012, 1016, 1020, 1024, - 1028, 1036, 1046, 1051, 1067, 1072, 1076, 1080, 1084, 1088, - 1092, 1096, 1105, 1117, 1130, 1130, 1141, 1147, 1153, 1162, - 1170, 1179, 1192, 1192, 1198, 1200, 1207, 1219, 1227, 1238, - 1248, 1255, 1261, 1267, 1272, 1277, 1282, 1287, 1300, 1305, - 1309, 1315, 1320, 1326, 1331, 1339, 1345, 1360, 1365, 1369, - 1376, 1382, 1398, 1406, 1412, 1417, 1422, 1431, 1438, 1448, - 1455, 1466, 1472, 1477, 1482, 1487, 1492, 1497, 1506, 1511, - 1527, 1532, 1536, 1540, 1546, 1551, 1559, 1564, 1572, 1581, - 1590, 1595, 1599, 1604, 1609, 1614, 1619, 1624, 1629, 1634, - 1639, 1644, 1654, 1663, 1674, 1679, 1683, 1688, 1693, 1698, - 1703, 1708, 1713, 1718, 1723 -}; -#endif - - -#if (YYDEBUG) || defined YYERROR_VERBOSE - -/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */ -static const char *const yytname[] = -{ - "$", "error", "$undefined.", "BEG", "END", "ACCELERATORS", "VIRTKEY", - "ASCII", "NOINVERT", "SHIFT", "CONTROL", "ALT", "BITMAP", "CURSOR", - "DIALOG", "DIALOGEX", "EXSTYLE", "CAPTION", "CLASS", "STYLE", - "AUTO3STATE", "AUTOCHECKBOX", "AUTORADIOBUTTON", "CHECKBOX", "COMBOBOX", - "CTEXT", "DEFPUSHBUTTON", "EDITTEXT", "GROUPBOX", "LISTBOX", "LTEXT", - "PUSHBOX", "PUSHBUTTON", "RADIOBUTTON", "RTEXT", "SCROLLBAR", "STATE3", - "USERBUTTON", "BEDIT", "HEDIT", "IEDIT", "FONT", "ICON", "LANGUAGE", - "CHARACTERISTICS", "VERSIONK", "MENU", "MENUEX", "MENUITEM", - "SEPARATOR", "POPUP", "CHECKED", "GRAYED", "HELP", "INACTIVE", - "MENUBARBREAK", "MENUBREAK", "MESSAGETABLE", "RCDATA", "STRINGTABLE", - "VERSIONINFO", "FILEVERSION", "PRODUCTVERSION", "FILEFLAGSMASK", - "FILEFLAGS", "FILEOS", "FILETYPE", "FILESUBTYPE", "BLOCKSTRINGFILEINFO", - "BLOCKVARFILEINFO", "VALUE", "BLOCK", "MOVEABLE", "FIXED", "PURE", - "IMPURE", "PRELOAD", "LOADONCALL", "DISCARDABLE", "NOT", "QUOTEDSTRING", - "STRING", "NUMBER", "SIZEDSTRING", "IGNORED_TOKEN", "'|'", "'^'", "'&'", - "'+'", "'-'", "'*'", "'/'", "'%'", "'~'", "NEG", "','", "'='", "'('", - "')'", "input", "accelerator", "acc_entries", "acc_entry", "acc_event", - "acc_options", "acc_option", "bitmap", "cursor", "dialog", "@1", "@2", - "@3", "exstyle", "styles", "controls", "control", "@4", "@5", "@6", - "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", - "@17", "@18", "@19", "@20", "@21", "@22", "@23", "@24", - "control_params", "optstringc", "opt_control_data", "control_styleexpr", - "@25", "icon_styleexpr", "@26", "control_params_styleexpr", "@27", - "font", "icon", "language", "menu", "menuitems", "menuitem", - "menuitem_flags", "menuitem_flag", "menuex", "menuexitems", - "menuexitem", "messagetable", "rcdata", "optrcdata_data", "@28", - "optrcdata_data_int", "rcdata_data", "stringtable", "@29", - "string_data", "user", "versioninfo", "fixedverinfo", "verblocks", - "vervals", "vertrans", "id", "resname", "resref", "suboptions", - "memflags_move_discard", "memflags_move", "memflag", "file_name", - "styleexpr", "parennumber", "optcnumexpr", "cnumexpr", "numexpr", - "sizednumexpr", "cposnumexpr", "posnumexpr", "sizedposnumexpr", 0 -}; -#endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const short yyr1[] = -{ - 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 100, 101, 101, - 102, 102, 103, 103, 104, 104, 104, 105, 105, 105, - 105, 105, 105, 106, 107, 109, 108, 110, 108, 111, - 108, 112, 112, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 114, 114, 116, - 115, 117, 115, 118, 115, 119, 115, 120, 115, 121, - 115, 115, 115, 115, 115, 122, 115, 123, 115, 124, - 115, 125, 115, 126, 115, 115, 115, 115, 115, 127, - 115, 128, 115, 129, 115, 130, 115, 131, 115, 132, - 115, 133, 115, 134, 115, 135, 115, 136, 115, 137, - 137, 137, 138, 138, 138, 139, 139, 141, 140, 143, - 142, 145, 144, 146, 147, 148, 149, 150, 150, 151, - 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, - 153, 154, 155, 155, 156, 156, 156, 156, 156, 156, - 156, 156, 157, 158, 160, 159, 161, 161, 162, 162, - 162, 162, 164, 163, 165, 165, 165, 166, 166, 167, - 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, - 169, 170, 170, 171, 171, 172, 172, 173, 173, 173, - 174, 174, 175, 175, 175, 175, 175, 176, 176, 177, - 177, 178, 178, 178, 178, 178, 178, 178, 179, 179, - 180, 180, 180, 180, 181, 181, 182, 182, 183, 184, - 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, - 185, 185, 186, 187, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const short yyr2[] = -{ - 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 6, 0, 2, - 2, 4, 1, 1, 1, 3, 2, 1, 1, 1, - 1, 1, 1, 4, 4, 0, 13, 0, 13, 0, - 14, 0, 3, 0, 3, 3, 3, 3, 3, 5, - 6, 7, 8, 3, 3, 4, 3, 0, 2, 0, - 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, - 3, 11, 12, 12, 13, 0, 3, 0, 3, 0, - 3, 0, 3, 0, 3, 6, 8, 10, 11, 0, - 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, - 3, 0, 3, 0, 3, 0, 3, 0, 16, 7, - 9, 10, 0, 1, 2, 0, 3, 0, 3, 0, - 3, 0, 3, 4, 4, 3, 6, 0, 2, 4, - 2, 6, 0, 3, 2, 1, 1, 1, 1, 1, - 1, 6, 0, 2, 2, 3, 5, 2, 5, 6, - 7, 9, 4, 6, 0, 2, 0, 1, 1, 1, - 3, 3, 0, 6, 0, 3, 4, 6, 4, 6, - 0, 6, 6, 3, 3, 3, 3, 3, 0, 8, - 7, 0, 5, 0, 3, 1, 1, 1, 2, 2, - 2, 1, 0, 2, 3, 4, 3, 0, 2, 0, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 3, 4, 1, 3, 0, 1, 2, 1, - 1, 3, 2, 2, 3, 3, 3, 3, 3, 3, - 3, 3, 2, 1, 1, 3, 2, 3, 3, 3, - 3, 3, 3, 3, 3 -}; - -/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE - doesn't specify something else to do. Zero means the default is an - error. */ -static const short yydefact[] = -{ - 1, 0, 0, 192, 186, 234, 16, 0, 0, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 0, 185, 233, 220, 0, 0, 0, - 0, 219, 0, 236, 0, 192, 199, 197, 199, 199, - 197, 197, 192, 192, 199, 192, 170, 192, 0, 0, - 0, 0, 0, 0, 0, 0, 223, 222, 0, 0, - 125, 0, 0, 0, 0, 0, 0, 0, 0, 162, - 0, 0, 0, 201, 202, 203, 204, 205, 206, 207, - 193, 235, 0, 0, 0, 41, 41, 0, 0, 0, - 0, 0, 0, 0, 0, 244, 243, 242, 240, 241, - 237, 238, 239, 221, 218, 231, 230, 229, 227, 228, - 224, 225, 226, 164, 0, 194, 196, 18, 208, 209, - 200, 33, 198, 34, 0, 0, 0, 123, 124, 127, - 142, 152, 154, 178, 0, 0, 0, 0, 0, 0, - 0, 154, 168, 0, 195, 0, 0, 0, 0, 0, - 0, 0, 156, 0, 0, 0, 173, 174, 175, 176, - 177, 0, 163, 0, 17, 22, 19, 0, 23, 42, - 0, 0, 126, 0, 0, 128, 141, 0, 0, 143, - 153, 158, 155, 157, 159, 169, 0, 0, 0, 0, - 167, 165, 0, 0, 20, 0, 0, 130, 0, 132, - 147, 144, 0, 0, 0, 0, 0, 0, 166, 232, - 0, 35, 37, 132, 0, 145, 142, 0, 160, 161, - 0, 0, 171, 172, 27, 28, 29, 30, 31, 32, - 21, 24, 43, 43, 39, 129, 127, 135, 136, 137, - 138, 139, 140, 0, 134, 216, 0, 142, 0, 181, - 183, 0, 26, 0, 0, 43, 0, 133, 146, 217, - 148, 0, 142, 216, 0, 0, 25, 57, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 57, 0, 131, - 149, 0, 0, 0, 0, 180, 0, 0, 47, 44, - 48, 45, 0, 214, 0, 46, 210, 0, 0, 54, - 56, 53, 0, 57, 150, 142, 179, 0, 184, 36, - 112, 59, 61, 63, 67, 69, 75, 77, 79, 81, - 91, 93, 95, 97, 99, 101, 103, 105, 0, 65, - 83, 89, 0, 58, 211, 0, 0, 0, 55, 38, - 0, 0, 0, 113, 0, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 0, 112, 112, 112, 187, 0, 191, 0, - 0, 215, 0, 212, 49, 40, 151, 182, 114, 0, - 60, 0, 62, 64, 68, 70, 76, 78, 80, 82, - 92, 94, 96, 98, 100, 102, 104, 106, 0, 66, - 84, 90, 188, 189, 0, 190, 213, 50, 0, 0, - 0, 0, 0, 51, 0, 117, 0, 0, 0, 115, - 52, 0, 0, 0, 0, 0, 154, 85, 0, 0, - 118, 0, 0, 0, 0, 115, 0, 0, 115, 0, - 116, 119, 86, 216, 0, 216, 121, 109, 216, 0, - 0, 115, 217, 216, 115, 217, 0, 115, 217, 0, - 120, 87, 115, 115, 217, 71, 115, 122, 110, 115, - 0, 88, 73, 115, 72, 111, 0, 74, 107, 0, - 216, 108, 0, 0 -}; - -static const short yydefgoto[] = -{ - 1, 9, 145, 166, 167, 230, 231, 10, 11, 12, - 232, 233, 255, 125, 253, 287, 333, 345, 346, 347, - 363, 348, 349, 350, 351, 352, 353, 364, 365, 354, - 355, 356, 357, 358, 359, 360, 361, 479, 380, 381, - 427, 416, 422, 443, 450, 448, 456, 13, 14, 15, - 16, 149, 175, 214, 244, 17, 150, 179, 18, 19, - 151, 152, 182, 183, 20, 113, 143, 21, 22, 93, - 153, 264, 265, 23, 368, 369, 32, 84, 83, 80, - 121, 295, 296, 258, 259, 104, 31, 194, 24, 25 -}; - -static const short yypact[] = -{ - -32768, 13, 412,-32768,-32768,-32768,-32768, 412, 412,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768, 111,-32768, 511,-32768, 412, 412, 412, - -79, 600, 244,-32768, 562,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 412, 412, - 412, 412, 412, 412, 412, 412,-32768,-32768, 576, 412, - -32768, 412, 412, 412, 412, 412, 412, 412, 412,-32768, - 412, 412, 412,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768, 256, 603, 603, 297, 297, 603, 603, 280, - 337, 603, 345, 100, 231, 607, 613, 567, 172, 172, - -32768,-32768,-32768,-32768,-32768, 607, 613, 567, 172, 172, - -32768,-32768,-32768,-32768, -79,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768, -60, 63, 63,-32768,-32768,-32768, - -32768,-32768,-32768,-32768, 412, 412, 412, 412, 412, 412, - 412,-32768,-32768, 7,-32768, 5, 412, -79, -79, 33, - 34, 35, 254, 51, -79, -79,-32768,-32768,-32768,-32768, - -32768, 36,-32768, 60,-32768,-32768,-32768, -38,-32768,-32768, - -79, -79,-32768, -39, 11,-32768,-32768, 59, 25,-32768, - -32768,-32768,-32768, 27, 600,-32768, 127, 144, -79, -79, - -32768,-32768, 74, 63, 87, -79, -79,-32768, -79,-32768, - -32768, -79, 12, 294, 118, 128, -79, -79,-32768,-32768, - 700,-32768, -79,-32768, 22, -79,-32768, 14,-32768, 600, - 194, 121,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 23,-32768,-32768,-32768,-32768, 309,-32768,-32768,-32768,-32768, - -32768,-32768,-32768, 661,-32768, -79, 38,-32768, 16,-32768, - -32768, 700,-32768, 383, 472,-32768, 42,-32768,-32768,-32768, - -32768, 124,-32768, -79, 10, 4,-32768,-32768, 412, 126, - 187, 99, 412, 412, 412, 412, 200,-32768, 480,-32768, - -32768, 125, 204, 207, 135,-32768, -79, 510,-32768,-32768, - -32768,-32768, 49,-32768, 412, 136,-32768, 133, -79,-32768, - -32768,-32768, 547,-32768,-32768,-32768,-32768, 134,-32768,-32768, - 152,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 153,-32768, - -32768,-32768, 374,-32768,-32768, 140, 112, 157,-32768,-32768, - 584, 138, 160, 148, 412, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 158, 152, 152, 152, 161, 163,-32768, 412, - 165,-32768, 49,-32768, -79,-32768,-32768,-32768,-32768, 170, - -32768, 412,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 412,-32768, - -32768,-32768,-32768,-32768, -79,-32768,-32768, -79, 123, 183, - -79, 184, -79, -79, 183,-32768, -79, -79, 412, 17, - -32768, -79, 99, -79, -79, 190,-32768,-32768, -79, -79, - 136, -79, -79, 412, 248, 18, -79, -79, 19, 195, - -32768,-32768,-32768, -79, -79, -79,-32768,-32768, -79, 412, - 99, 245, -79, -79, 245, -79, 99, 245, -79, 196, - 136,-32768, 245, 245, -79,-32768, 245, 136,-32768, 245, - 412,-32768,-32768, 245,-32768,-32768, 201,-32768,-32768, 99, - 64,-32768, 295,-32768 -}; - -static const short yypgoto[] = -{ - -32768,-32768,-32768,-32768,-32768,-32768, -206,-32768,-32768,-32768, - -32768,-32768,-32768, 212, -85, -259,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 281, -8, - -212, -104,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768, 78,-32768, 113, 92,-32768, -204,-32768,-32768,-32768, - -140,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - -32768,-32768,-32768, -21,-32768,-32768, 350, 139, 175, 475, - 416, -329, -257, -258, 29, -2, -1,-32768, -122,-32768 -}; - - -#define YYLAST 717 - - -static const short yytable[] = -{ - 30, 161, 47, 147, 148, 282, 33, 34, 285, 164, - 197, 162, 246, 482, 283, 216, 59, 247, 302, 262, - 426, 426, 426, 168, 252, 236, 56, 57, 58, 224, - 225, 226, 227, 228, 229, 334, 146, 172, 176, 180, - 190, 198, 260, 261, 340, 266, 279, 95, 96, 97, - 98, 99, 100, 101, 102, 185, 2, 193, 281, 60, - 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, - 116, 209, 3, 237, 238, 239, 240, 241, 242, 373, - 284, 173, 177, 174, 178, 165, 177, 5, 178, 26, - 173, 199, 174, 430, 4, 5, 27, 6, 7, 59, - 28, 341, 8, 133, 29, 202, 7, 59, 200, 59, - 8, 59, 59, 441, 446, 406, 35, 243, 251, 186, - 187, 460, 203, 36, 37, 38, 39, 467, 280, 304, - 204, 293, 154, 155, 156, 157, 158, 159, 160, 201, - 191, 163, 376, 144, 169, 5, 294, 205, 254, 336, - 480, 184, 40, 41, 208, 192, 7, 42, 43, 59, - 8, 134, 135, 136, 137, 138, 139, 140, 44, 45, - 278, 46, 177, 177, 178, 178, 170, 171, 292, 87, - 88, 293, 210, 188, 189, 451, 177, 454, 178, 220, - 457, 372, 4, 5, 293, 463, 294, 249, 221, 195, - 196, 250, 219, 414, 7, 26, 289, 305, 8, 294, - 370, 306, 27, 85, 86, 307, 28, 206, 207, 91, - 29, 336, 481, 442, 211, 212, 447, 213, 337, 342, - 215, 217, 343, 362, 141, 222, 223, 374, 371, 461, - 377, 234, 465, 378, 245, 468, 248, 69, 426, 291, - 471, 472, 440, 398, 474, 301, 402, 475, 403, 117, - 405, 477, 66, 67, 68, 408, 288, 290, 4, 5, - 297, 298, 299, 300, 70, 71, 72, 263, 415, 418, - 7, 4, 5, 129, 8, 433, 434, 70, 71, 72, - 449, 470, 335, 7, 286, 483, 478, 8, 126, 70, - 71, 72, 344, 73, 74, 75, 76, 77, 78, 79, - 421, 118, 119, 124, 256, 308, 73, 74, 75, 76, - 77, 78, 79, 70, 71, 72, 235, 338, 73, 74, - 75, 76, 77, 78, 79, 257, 26, 181, 0, 0, - 130, 0, 379, 27, 0, 0, 0, 28, 132, 0, - 0, 29, 73, 74, 75, 76, 77, 78, 79, 0, - 237, 238, 239, 240, 241, 242, 0, 404, 0, 73, - 74, 75, 76, 77, 78, 79, 26, 218, 0, 410, - 70, 71, 72, 27, 0, 82, 267, 28, 70, 71, - 72, 29, 89, 90, 0, 92, 411, 94, 0, 268, - 269, 270, 271, 407, 243, 0, 0, 0, 409, 73, - 74, 75, 76, 77, 78, 79, 425, 73, 74, 75, - 76, 77, 78, 79, 272, 0, 273, 274, 275, 276, - 0, 439, 0, 412, 0, 0, 413, 0, 0, 417, - 0, 419, 420, 0, 0, 423, 424, 459, 428, 0, - 429, 0, 431, 432, 366, 367, 5, 435, 436, 0, - 437, 438, 0, 0, 0, 444, 445, 7, 476, 0, - 0, 8, 452, 453, 455, 277, 0, 458, 0, 0, - 0, 462, 464, 303, 466, 0, 0, 469, 268, 269, - 270, 271, 0, 473, 26, 0, 268, 269, 270, 271, - 123, 27, 0, 127, 128, 28, 0, 131, 0, 29, - 142, 0, 0, 272, 309, 273, 274, 275, 276, 0, - 310, 272, 0, 273, 274, 275, 276, 0, 0, 0, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 339, 332, 0, 0, 0, 0, 310, 120, 122, - 120, 120, 122, 122, 0, 0, 120, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 375, 332, - 0, 0, 0, 0, 310, 0, 48, 49, 50, 51, - 52, 53, 54, 55, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 0, 332, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 0, 399, 400, 401, 61, 62, 63, - 64, 65, 66, 67, 68, 64, 65, 66, 67, 68, - 81, 61, 62, 63, 64, 65, 66, 67, 68, 0, - 0, 0, 0, 0, 103, 73, 74, 75, 76, 77, - 78, 79, 0, 118, 119, 61, 62, 63, 64, 65, - 66, 67, 68, 62, 63, 64, 65, 66, 67, 68, - 63, 64, 65, 66, 67, 68, 224, 225, 226, 227, - 228, 229, 237, 238, 239, 240, 241, 242 -}; - -static const short yycheck[] = -{ - 2, 141, 23, 125, 126, 263, 7, 8, 4, 4, - 49, 4, 216, 0, 4, 3, 95, 3, 277, 3, - 3, 3, 3, 145, 230, 3, 27, 28, 29, 6, - 7, 8, 9, 10, 11, 292, 96, 4, 4, 4, - 4, 80, 4, 247, 303, 251, 4, 48, 49, 50, - 51, 52, 53, 54, 55, 4, 43, 95, 262, 30, - 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, - 72, 193, 59, 51, 52, 53, 54, 55, 56, 336, - 70, 48, 48, 50, 50, 80, 48, 82, 50, 82, - 48, 80, 50, 422, 81, 82, 89, 84, 93, 95, - 93, 305, 97, 3, 97, 80, 93, 95, 49, 95, - 97, 95, 95, 95, 95, 372, 5, 95, 95, 68, - 69, 450, 95, 12, 13, 14, 15, 456, 4, 4, - 3, 82, 134, 135, 136, 137, 138, 139, 140, 80, - 80, 143, 4, 114, 146, 82, 97, 3, 233, 85, - 479, 152, 41, 42, 80, 95, 93, 46, 47, 95, - 97, 61, 62, 63, 64, 65, 66, 67, 57, 58, - 255, 60, 48, 48, 50, 50, 147, 148, 79, 40, - 41, 82, 95, 154, 155, 443, 48, 445, 50, 71, - 448, 79, 81, 82, 82, 453, 97, 3, 70, 170, - 171, 80, 203, 80, 93, 82, 80, 3, 97, 97, - 332, 4, 89, 38, 39, 80, 93, 188, 189, 44, - 97, 85, 480, 435, 195, 196, 438, 198, 95, 95, - 201, 202, 80, 80, 3, 206, 207, 80, 98, 451, - 80, 212, 454, 95, 215, 457, 217, 3, 3, 270, - 462, 463, 4, 95, 466, 276, 95, 469, 95, 3, - 95, 473, 90, 91, 92, 95, 268, 80, 81, 82, - 272, 273, 274, 275, 43, 44, 45, 248, 95, 95, - 93, 81, 82, 3, 97, 95, 426, 43, 44, 45, - 95, 95, 294, 93, 265, 0, 95, 97, 86, 43, - 44, 45, 310, 72, 73, 74, 75, 76, 77, 78, - 414, 80, 81, 16, 236, 286, 72, 73, 74, 75, - 76, 77, 78, 43, 44, 45, 213, 298, 72, 73, - 74, 75, 76, 77, 78, 243, 82, 83, -1, -1, - 3, -1, 344, 89, -1, -1, -1, 93, 3, -1, - -1, 97, 72, 73, 74, 75, 76, 77, 78, -1, - 51, 52, 53, 54, 55, 56, -1, 369, -1, 72, - 73, 74, 75, 76, 77, 78, 82, 83, -1, 381, - 43, 44, 45, 89, -1, 35, 3, 93, 43, 44, - 45, 97, 42, 43, -1, 45, 398, 47, -1, 16, - 17, 18, 19, 374, 95, -1, -1, -1, 379, 72, - 73, 74, 75, 76, 77, 78, 418, 72, 73, 74, - 75, 76, 77, 78, 41, -1, 43, 44, 45, 46, - -1, 433, -1, 404, -1, -1, 407, -1, -1, 410, - -1, 412, 413, -1, -1, 416, 417, 449, 419, -1, - 421, -1, 423, 424, 80, 81, 82, 428, 429, -1, - 431, 432, -1, -1, -1, 436, 437, 93, 470, -1, - -1, 97, 443, 444, 445, 3, -1, 448, -1, -1, - -1, 452, 453, 3, 455, -1, -1, 458, 16, 17, - 18, 19, -1, 464, 82, -1, 16, 17, 18, 19, - 84, 89, -1, 87, 88, 93, -1, 91, -1, 97, - 94, -1, -1, 41, 4, 43, 44, 45, 46, -1, - 10, 41, -1, 43, 44, 45, 46, -1, -1, -1, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 4, 42, -1, -1, -1, -1, 10, 83, 84, - 85, 86, 87, 88, -1, -1, 91, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 4, 42, - -1, -1, -1, -1, 10, -1, 85, 86, 87, 88, - 89, 90, 91, 92, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, -1, 42, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, -1, 363, 364, 365, 85, 86, 87, - 88, 89, 90, 91, 92, 88, 89, 90, 91, 92, - 98, 85, 86, 87, 88, 89, 90, 91, 92, -1, - -1, -1, -1, -1, 98, 72, 73, 74, 75, 76, - 77, 78, -1, 80, 81, 85, 86, 87, 88, 89, - 90, 91, 92, 86, 87, 88, 89, 90, 91, 92, - 87, 88, 89, 90, 91, 92, 6, 7, 8, 9, - 10, 11, 51, 52, 53, 54, 55, 56 -}; -/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/share/bison/bison.simple" - -/* Skeleton output parser for bison, - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software - Foundation, Inc. - - 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, 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. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* This is the parser code that is written into each bison parser when - the %semantic_parser declaration is not specified in the grammar. - It was written by Richard Stallman by simplifying the hairy parser - used when %semantic_parser is specified. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE) - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# if YYSTACK_USE_ALLOCA -# define YYSTACK_ALLOC alloca -# else -# ifndef YYSTACK_USE_ALLOCA -# if defined (alloca) || defined (_ALLOCA_H) -# define YYSTACK_ALLOC alloca -# else -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# else -# if defined (__STDC__) || defined (__cplusplus) -# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -# define YYSTACK_ALLOC malloc -# define YYSTACK_FREE free -# endif -#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */ - - -#if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - short yyss; - YYSTYPE yyvs; -# if YYLSP_NEEDED - YYLTYPE yyls; -# endif -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# if YYLSP_NEEDED -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ - + 2 * YYSTACK_GAP_MAX) -# else -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAX) -# endif - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - register YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (0) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - - -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) -# if defined (__STDC__) || defined (__cplusplus) -# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -#endif -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int -#endif - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY -2 -#define YYEOF 0 -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrlab1 -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ -#define YYFAIL goto yyerrlab -#define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yychar1 = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror ("syntax error: cannot back up"); \ - YYERROR; \ - } \ -while (0) - -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* YYLLOC_DEFAULT -- Compute the default location (before the actions - are run). - - When YYLLOC_DEFAULT is run, CURRENT is set the location of the - first token. By default, to implement support for ranges, extend - its range to the last symbol. */ - -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - Current.last_line = Rhs[N].last_line; \ - Current.last_column = Rhs[N].last_column; -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ - -#if YYPURE -# if YYLSP_NEEDED -# ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM) -# else -# define YYLEX yylex (&yylval, &yylloc) -# endif -# else /* !YYLSP_NEEDED */ -# ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, YYLEX_PARAM) -# else -# define YYLEX yylex (&yylval) -# endif -# endif /* !YYLSP_NEEDED */ -#else /* !YYPURE */ -# define YYLEX yylex () -#endif /* !YYPURE */ - - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -#endif /* !YYDEBUG */ - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#if YYMAXDEPTH == 0 -# undef YYMAXDEPTH -#endif - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - -#ifdef YYERROR_VERBOSE - -# ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - register const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# endif -# endif - -# ifndef yystpcpy -# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif -{ - register char *yyd = yydest; - register const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif -#endif - -#line 315 "/usr/share/bison/bison.simple" - - -/* The user can define YYPARSE_PARAM as the name of an argument to be passed - into yyparse. The argument should have type void *. - It should actually point to an object. - Grammar actions can access the variable by casting it - to the proper pointer type. */ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM -# define YYPARSE_PARAM_DECL -# else -# define YYPARSE_PARAM_ARG YYPARSE_PARAM -# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; -# endif -#else /* !YYPARSE_PARAM */ -# define YYPARSE_PARAM_ARG -# define YYPARSE_PARAM_DECL -#endif /* !YYPARSE_PARAM */ - -/* Prevent warning if -Wstrict-prototypes. */ -#ifdef __GNUC__ -# ifdef YYPARSE_PARAM -int yyparse (void *); -# else -int yyparse (void); -# endif -#endif - -/* YY_DECL_VARIABLES -- depending whether we use a pure parser, - variables are global, or local to YYPARSE. */ - -#define YY_DECL_NON_LSP_VARIABLES \ -/* The lookahead symbol. */ \ -int yychar; \ - \ -/* The semantic value of the lookahead symbol. */ \ -YYSTYPE yylval; \ - \ -/* Number of parse errors so far. */ \ -int yynerrs; - -#if YYLSP_NEEDED -# define YY_DECL_VARIABLES \ -YY_DECL_NON_LSP_VARIABLES \ - \ -/* Location data for the lookahead symbol. */ \ -YYLTYPE yylloc; -#else -# define YY_DECL_VARIABLES \ -YY_DECL_NON_LSP_VARIABLES -#endif - - -/* If nonreentrant, generate the variables here. */ - -#if !YYPURE -YY_DECL_VARIABLES -#endif /* !YYPURE */ - -int -yyparse (YYPARSE_PARAM_ARG) - YYPARSE_PARAM_DECL -{ - /* If reentrant, generate the variables here. */ -#if YYPURE - YY_DECL_VARIABLES -#endif /* !YYPURE */ - - register int yystate; - register int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Lookahead token as an internal (translated) token number. */ - int yychar1 = 0; - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - short yyssa[YYINITDEPTH]; - short *yyss = yyssa; - register short *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - register YYSTYPE *yyvsp; - -#if YYLSP_NEEDED - /* The location stack. */ - YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; -#endif - -#if YYLSP_NEEDED -# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) -#else -# define YYPOPSTACK (yyvsp--, yyssp--) -#endif - - YYSIZE_T yystacksize = YYINITDEPTH; - - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; -#if YYLSP_NEEDED - YYLTYPE yyloc; -#endif - - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ - int yylen; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss; - yyvsp = yyvs; -#if YYLSP_NEEDED - yylsp = yyls; -#endif - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. - */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyssp >= yyss + yystacksize - 1) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - short *yyss1 = yyss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. */ -# if YYLSP_NEEDED - YYLTYPE *yyls1 = yyls; - /* This used to be a conditional around just the two extra args, - but that might be undefined if yyoverflow is a macro. */ - yyoverflow ("parser stack overflow", - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yyls1, yysize * sizeof (*yylsp), - &yystacksize); - yyls = yyls1; -# else - yyoverflow ("parser stack overflow", - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); -# endif - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyoverflowlab; -# else - /* Extend the stack our own way. */ - if (yystacksize >= YYMAXDEPTH) - goto yyoverflowlab; - yystacksize *= 2; - if (yystacksize > YYMAXDEPTH) - yystacksize = YYMAXDEPTH; - - { - short *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyoverflowlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); -# if YYLSP_NEEDED - YYSTACK_RELOCATE (yyls); -# endif -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; -#if YYLSP_NEEDED - yylsp = yyls + yysize - 1; -#endif - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyssp >= yyss + yystacksize - 1) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - goto yybackup; - - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a lookahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to lookahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* yychar is either YYEMPTY or YYEOF - or a valid token in external form. */ - - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; - } - - /* Convert token to internal form (in yychar1) for indexing tables with */ - - if (yychar <= 0) /* This means end of input. */ - { - yychar1 = 0; - yychar = YYEOF; /* Don't call YYLEX any more */ - - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yychar1 = YYTRANSLATE (yychar); - -#if YYDEBUG - /* We have to keep this `#if YYDEBUG', since we use variables - which are defined only if `YYDEBUG' is set. */ - if (yydebug) - { - YYFPRINTF (stderr, "Next token is %d (%s", - yychar, yytname[yychar1]); - /* Give the individual parser a way to print the precise - meaning of a token, for further debugging info. */ -# ifdef YYPRINT - YYPRINT (stderr, yychar, yylval); -# endif - YYFPRINTF (stderr, ")\n"); - } -#endif - } - - yyn += yychar1; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) - goto yydefault; - - yyn = yytable[yyn]; - - /* yyn is what to do for this token type in this state. - Negative => reduce, -yyn is rule number. - Positive => shift, yyn is new state. - New state is final state => don't bother to shift, - just return success. - 0, or most negative number => error. */ - - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrlab; - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the lookahead token. */ - YYDPRINTF ((stderr, "Shifting token %d (%s), ", - yychar, yytname[yychar1])); - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; -#if YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - yystate = yyn; - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to the semantic value of - the lookahead token. This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - -#if YYLSP_NEEDED - /* Similarly for the default location. Let the user run additional - commands if for instance locations are ranges. */ - yyloc = yylsp[1-yylen]; - YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); -#endif - -#if YYDEBUG - /* We have to keep this `#if YYDEBUG', since we use variables which - are defined only if `YYDEBUG' is set. */ - if (yydebug) - { - int yyi; - - YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", - yyn, yyrline[yyn]); - - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++) - YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); - YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]); - } -#endif - - switch (yyn) { - -case 17: -#line 177 "rcparse.y" -{ - define_accelerator (yyvsp[-5].id, &yyvsp[-3].res_info, yyvsp[-1].pacc); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 18: -#line 187 "rcparse.y" -{ - yyval.pacc = NULL; - } - break; -case 19: -#line 191 "rcparse.y" -{ - struct accelerator *a; - - a = (struct accelerator *) res_alloc (sizeof *a); - *a = yyvsp[0].acc; - if (yyvsp[-1].pacc == NULL) - yyval.pacc = a; - else - { - struct accelerator **pp; - - for (pp = &yyvsp[-1].pacc->next; *pp != NULL; pp = &(*pp)->next) - ; - *pp = a; - yyval.pacc = yyvsp[-1].pacc; - } - } - break; -case 20: -#line 212 "rcparse.y" -{ - yyval.acc = yyvsp[-1].acc; - yyval.acc.id = yyvsp[0].il; - } - break; -case 21: -#line 217 "rcparse.y" -{ - yyval.acc = yyvsp[-3].acc; - yyval.acc.id = yyvsp[-2].il; - yyval.acc.flags |= yyvsp[0].is; - if ((yyval.acc.flags & ACC_VIRTKEY) == 0 - && (yyval.acc.flags & (ACC_SHIFT | ACC_CONTROL | ACC_ALT)) != 0) - rcparse_warning (_("inappropriate modifiers for non-VIRTKEY")); - } - break; -case 22: -#line 229 "rcparse.y" -{ - const char *s = yyvsp[0].s; - char ch; - - yyval.acc.next = NULL; - yyval.acc.id = 0; - ch = *s; - if (ch != '^') - yyval.acc.flags = 0; - else - { - yyval.acc.flags = ACC_CONTROL | ACC_VIRTKEY; - ++s; - ch = *s; - ch = TOUPPER (ch); - } - yyval.acc.key = ch; - if (s[1] != '\0') - rcparse_warning (_("accelerator should only be one character")); - } - break; -case 23: -#line 250 "rcparse.y" -{ - yyval.acc.next = NULL; - yyval.acc.flags = 0; - yyval.acc.id = 0; - yyval.acc.key = yyvsp[0].il; - } - break; -case 24: -#line 260 "rcparse.y" -{ - yyval.is = yyvsp[0].is; - } - break; -case 25: -#line 264 "rcparse.y" -{ - yyval.is = yyvsp[-2].is | yyvsp[0].is; - } - break; -case 26: -#line 269 "rcparse.y" -{ - yyval.is = yyvsp[-1].is | yyvsp[0].is; - } - break; -case 27: -#line 276 "rcparse.y" -{ - yyval.is = ACC_VIRTKEY; - } - break; -case 28: -#line 280 "rcparse.y" -{ - /* This is just the absence of VIRTKEY. */ - yyval.is = 0; - } - break; -case 29: -#line 285 "rcparse.y" -{ - yyval.is = ACC_NOINVERT; - } - break; -case 30: -#line 289 "rcparse.y" -{ - yyval.is = ACC_SHIFT; - } - break; -case 31: -#line 293 "rcparse.y" -{ - yyval.is = ACC_CONTROL; - } - break; -case 32: -#line 297 "rcparse.y" -{ - yyval.is = ACC_ALT; - } - break; -case 33: -#line 306 "rcparse.y" -{ - define_bitmap (yyvsp[-3].id, &yyvsp[-1].res_info, yyvsp[0].s); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 34: -#line 318 "rcparse.y" -{ - define_cursor (yyvsp[-3].id, &yyvsp[-1].res_info, yyvsp[0].s); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 35: -#line 331 "rcparse.y" -{ - memset (&dialog, 0, sizeof dialog); - dialog.x = yyvsp[-3].il; - dialog.y = yyvsp[-2].il; - dialog.width = yyvsp[-1].il; - dialog.height = yyvsp[0].il; - dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU; - dialog.exstyle = yyvsp[-4].il; - dialog.menu.named = 1; - dialog.class.named = 1; - dialog.font = NULL; - dialog.ex = NULL; - dialog.controls = NULL; - sub_res_info = yyvsp[-5].res_info; - style = 0; - } - break; -case 36: -#line 348 "rcparse.y" -{ - define_dialog (yyvsp[-12].id, &sub_res_info, &dialog); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 37: -#line 356 "rcparse.y" -{ - memset (&dialog, 0, sizeof dialog); - dialog.x = yyvsp[-3].il; - dialog.y = yyvsp[-2].il; - dialog.width = yyvsp[-1].il; - dialog.height = yyvsp[0].il; - dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU; - dialog.exstyle = yyvsp[-4].il; - dialog.menu.named = 1; - dialog.class.named = 1; - dialog.font = NULL; - dialog.ex = ((struct dialog_ex *) - res_alloc (sizeof (struct dialog_ex))); - memset (dialog.ex, 0, sizeof (struct dialog_ex)); - dialog.controls = NULL; - sub_res_info = yyvsp[-5].res_info; - style = 0; - } - break; -case 38: -#line 375 "rcparse.y" -{ - define_dialog (yyvsp[-12].id, &sub_res_info, &dialog); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 39: -#line 383 "rcparse.y" -{ - memset (&dialog, 0, sizeof dialog); - dialog.x = yyvsp[-4].il; - dialog.y = yyvsp[-3].il; - dialog.width = yyvsp[-2].il; - dialog.height = yyvsp[-1].il; - dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU; - dialog.exstyle = yyvsp[-5].il; - dialog.menu.named = 1; - dialog.class.named = 1; - dialog.font = NULL; - dialog.ex = ((struct dialog_ex *) - res_alloc (sizeof (struct dialog_ex))); - memset (dialog.ex, 0, sizeof (struct dialog_ex)); - dialog.ex->help = yyvsp[0].il; - dialog.controls = NULL; - sub_res_info = yyvsp[-6].res_info; - style = 0; - } - break; -case 40: -#line 403 "rcparse.y" -{ - define_dialog (yyvsp[-13].id, &sub_res_info, &dialog); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 41: -#line 413 "rcparse.y" -{ - yyval.il = 0; - } - break; -case 42: -#line 417 "rcparse.y" -{ - yyval.il = yyvsp[0].il; - } - break; -case 44: -#line 425 "rcparse.y" -{ - dialog.style |= WS_CAPTION; - style |= WS_CAPTION; - unicode_from_ascii ((int *) NULL, &dialog.caption, yyvsp[0].s); - } - break; -case 45: -#line 431 "rcparse.y" -{ - dialog.class = yyvsp[0].id; - } - break; -case 46: -#line 436 "rcparse.y" -{ - dialog.style = style; - } - break; -case 47: -#line 440 "rcparse.y" -{ - dialog.exstyle = yyvsp[0].il; - } - break; -case 48: -#line 444 "rcparse.y" -{ - res_string_to_id (& dialog.class, yyvsp[0].s); - } - break; -case 49: -#line 448 "rcparse.y" -{ - dialog.style |= DS_SETFONT; - style |= DS_SETFONT; - dialog.pointsize = yyvsp[-2].il; - unicode_from_ascii ((int *) NULL, &dialog.font, yyvsp[0].s); - if (dialog.ex != NULL) - { - dialog.ex->weight = 0; - dialog.ex->italic = 0; - dialog.ex->charset = 1; - } - } - break; -case 50: -#line 461 "rcparse.y" -{ - dialog.style |= DS_SETFONT; - style |= DS_SETFONT; - dialog.pointsize = yyvsp[-3].il; - unicode_from_ascii ((int *) NULL, &dialog.font, yyvsp[-1].s); - if (dialog.ex == NULL) - rcparse_warning (_("extended FONT requires DIALOGEX")); - else - { - dialog.ex->weight = yyvsp[0].il; - dialog.ex->italic = 0; - dialog.ex->charset = 1; - } - } - break; -case 51: -#line 476 "rcparse.y" -{ - dialog.style |= DS_SETFONT; - style |= DS_SETFONT; - dialog.pointsize = yyvsp[-4].il; - unicode_from_ascii ((int *) NULL, &dialog.font, yyvsp[-2].s); - if (dialog.ex == NULL) - rcparse_warning (_("extended FONT requires DIALOGEX")); - else - { - dialog.ex->weight = yyvsp[-1].il; - dialog.ex->italic = yyvsp[0].il; - dialog.ex->charset = 1; - } - } - break; -case 52: -#line 491 "rcparse.y" -{ - dialog.style |= DS_SETFONT; - style |= DS_SETFONT; - dialog.pointsize = yyvsp[-5].il; - unicode_from_ascii ((int *) NULL, &dialog.font, yyvsp[-3].s); - if (dialog.ex == NULL) - rcparse_warning (_("extended FONT requires DIALOGEX")); - else - { - dialog.ex->weight = yyvsp[-2].il; - dialog.ex->italic = yyvsp[-1].il; - dialog.ex->charset = yyvsp[0].il; - } - } - break; -case 53: -#line 506 "rcparse.y" -{ - dialog.menu = yyvsp[0].id; - } - break; -case 54: -#line 510 "rcparse.y" -{ - sub_res_info.characteristics = yyvsp[0].il; - } - break; -case 55: -#line 514 "rcparse.y" -{ - sub_res_info.language = yyvsp[-1].il | (yyvsp[0].il << SUBLANG_SHIFT); - } - break; -case 56: -#line 518 "rcparse.y" -{ - sub_res_info.version = yyvsp[0].il; - } - break; -case 58: -#line 526 "rcparse.y" -{ - struct dialog_control **pp; - - for (pp = &dialog.controls; *pp != NULL; pp = &(*pp)->next) - ; - *pp = yyvsp[0].dialog_control; - } - break; -case 59: -#line 537 "rcparse.y" -{ - default_style = BS_AUTO3STATE | WS_TABSTOP; - base_style = BS_AUTO3STATE; - class = CTL_BUTTON; - } - break; -case 60: -#line 543 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 61: -#line 547 "rcparse.y" -{ - default_style = BS_AUTOCHECKBOX | WS_TABSTOP; - base_style = BS_AUTOCHECKBOX; - class = CTL_BUTTON; - } - break; -case 62: -#line 553 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 63: -#line 557 "rcparse.y" -{ - default_style = BS_AUTORADIOBUTTON | WS_TABSTOP; - base_style = BS_AUTORADIOBUTTON; - class = CTL_BUTTON; - } - break; -case 64: -#line 563 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 65: -#line 567 "rcparse.y" -{ - default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - class = CTL_EDIT; - } - break; -case 66: -#line 573 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - if (dialog.ex == NULL) - rcparse_warning (_("BEDIT requires DIALOGEX")); - res_string_to_id (&yyval.dialog_control->class, "BEDIT"); - } - break; -case 67: -#line 580 "rcparse.y" -{ - default_style = BS_CHECKBOX | WS_TABSTOP; - base_style = BS_CHECKBOX | WS_TABSTOP; - class = CTL_BUTTON; - } - break; -case 68: -#line 586 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 69: -#line 590 "rcparse.y" -{ - default_style = CBS_SIMPLE | WS_TABSTOP; - base_style = 0; - class = CTL_COMBOBOX; - } - break; -case 70: -#line 596 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 71: -#line 601 "rcparse.y" -{ - yyval.dialog_control = define_control (yyvsp[-9].s, yyvsp[-8].il, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, yyvsp[-2].il, yyvsp[-7].il, style, yyvsp[-1].il); - if (yyvsp[0].rcdata_item != NULL) - { - if (dialog.ex == NULL) - rcparse_warning (_("control data requires DIALOGEX")); - yyval.dialog_control->data = yyvsp[0].rcdata_item; - } - } - break; -case 72: -#line 612 "rcparse.y" -{ - yyval.dialog_control = define_control (yyvsp[-10].s, yyvsp[-9].il, yyvsp[-6].il, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, yyvsp[-8].il, style, yyvsp[-2].il); - if (dialog.ex == NULL) - rcparse_warning (_("help ID requires DIALOGEX")); - yyval.dialog_control->help = yyvsp[-1].il; - yyval.dialog_control->data = yyvsp[0].rcdata_item; - } - break; -case 73: -#line 621 "rcparse.y" -{ - yyval.dialog_control = define_control (yyvsp[-10].s, yyvsp[-9].il, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, yyvsp[-2].il, 0, style, yyvsp[-1].il); - if (yyvsp[0].rcdata_item != NULL) - { - if (dialog.ex == NULL) - rcparse_warning ("control data requires DIALOGEX"); - yyval.dialog_control->data = yyvsp[0].rcdata_item; - } - yyval.dialog_control->class.named = 1; - unicode_from_ascii (&yyval.dialog_control->class.u.n.length, &yyval.dialog_control->class.u.n.name, yyvsp[-7].s); - } - break; -case 74: -#line 634 "rcparse.y" -{ - yyval.dialog_control = define_control (yyvsp[-11].s, yyvsp[-10].il, yyvsp[-6].il, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, 0, style, yyvsp[-2].il); - if (dialog.ex == NULL) - rcparse_warning ("help ID requires DIALOGEX"); - yyval.dialog_control->help = yyvsp[-1].il; - yyval.dialog_control->data = yyvsp[0].rcdata_item; - yyval.dialog_control->class.named = 1; - unicode_from_ascii (&yyval.dialog_control->class.u.n.length, &yyval.dialog_control->class.u.n.name, yyvsp[-8].s); - } - break; -case 75: -#line 644 "rcparse.y" -{ - default_style = SS_CENTER | WS_GROUP; - base_style = SS_CENTER; - class = CTL_STATIC; - } - break; -case 76: -#line 650 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 77: -#line 654 "rcparse.y" -{ - default_style = BS_DEFPUSHBUTTON | WS_TABSTOP; - base_style = BS_DEFPUSHBUTTON | WS_TABSTOP; - class = CTL_BUTTON; - } - break; -case 78: -#line 660 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 79: -#line 664 "rcparse.y" -{ - default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - class = CTL_EDIT; - } - break; -case 80: -#line 670 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 81: -#line 674 "rcparse.y" -{ - default_style = BS_GROUPBOX; - base_style = BS_GROUPBOX; - class = CTL_BUTTON; - } - break; -case 82: -#line 680 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 83: -#line 684 "rcparse.y" -{ - default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - class = CTL_EDIT; - } - break; -case 84: -#line 690 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - if (dialog.ex == NULL) - rcparse_warning (_("IEDIT requires DIALOGEX")); - res_string_to_id (&yyval.dialog_control->class, "HEDIT"); - } - break; -case 85: -#line 697 "rcparse.y" -{ - yyval.dialog_control = define_icon_control (yyvsp[-4].id, yyvsp[-3].il, yyvsp[-2].il, yyvsp[-1].il, 0, 0, 0, yyvsp[0].rcdata_item, - dialog.ex); - } - break; -case 86: -#line 703 "rcparse.y" -{ - yyval.dialog_control = define_icon_control (yyvsp[-6].id, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, 0, 0, 0, yyvsp[0].rcdata_item, - dialog.ex); - } - break; -case 87: -#line 709 "rcparse.y" -{ - yyval.dialog_control = define_icon_control (yyvsp[-8].id, yyvsp[-7].il, yyvsp[-6].il, yyvsp[-5].il, style, yyvsp[-1].il, 0, yyvsp[0].rcdata_item, - dialog.ex); - } - break; -case 88: -#line 715 "rcparse.y" -{ - yyval.dialog_control = define_icon_control (yyvsp[-9].id, yyvsp[-8].il, yyvsp[-7].il, yyvsp[-6].il, style, yyvsp[-2].il, yyvsp[-1].il, yyvsp[0].rcdata_item, - dialog.ex); - } - break; -case 89: -#line 720 "rcparse.y" -{ - default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - class = CTL_EDIT; - } - break; -case 90: -#line 726 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - if (dialog.ex == NULL) - rcparse_warning (_("IEDIT requires DIALOGEX")); - res_string_to_id (&yyval.dialog_control->class, "IEDIT"); - } - break; -case 91: -#line 733 "rcparse.y" -{ - default_style = LBS_NOTIFY | WS_BORDER; - base_style = LBS_NOTIFY | WS_BORDER; - class = CTL_LISTBOX; - } - break; -case 92: -#line 739 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 93: -#line 743 "rcparse.y" -{ - default_style = SS_LEFT | WS_GROUP; - base_style = SS_LEFT; - class = CTL_STATIC; - } - break; -case 94: -#line 749 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 95: -#line 753 "rcparse.y" -{ - default_style = BS_PUSHBOX | WS_TABSTOP; - base_style = BS_PUSHBOX; - class = CTL_BUTTON; - } - break; -case 96: -#line 759 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 97: -#line 763 "rcparse.y" -{ - default_style = BS_PUSHBUTTON | WS_TABSTOP; - base_style = BS_PUSHBUTTON | WS_TABSTOP; - class = CTL_BUTTON; - } - break; -case 98: -#line 769 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 99: -#line 773 "rcparse.y" -{ - default_style = BS_RADIOBUTTON | WS_TABSTOP; - base_style = BS_RADIOBUTTON; - class = CTL_BUTTON; - } - break; -case 100: -#line 779 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 101: -#line 783 "rcparse.y" -{ - default_style = SS_RIGHT | WS_GROUP; - base_style = SS_RIGHT; - class = CTL_STATIC; - } - break; -case 102: -#line 789 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 103: -#line 793 "rcparse.y" -{ - default_style = SBS_HORZ; - base_style = 0; - class = CTL_SCROLLBAR; - } - break; -case 104: -#line 799 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 105: -#line 803 "rcparse.y" -{ - default_style = BS_3STATE | WS_TABSTOP; - base_style = BS_3STATE; - class = CTL_BUTTON; - } - break; -case 106: -#line 809 "rcparse.y" -{ - yyval.dialog_control = yyvsp[0].dialog_control; - } - break; -case 107: -#line 814 "rcparse.y" -{ style = WS_CHILD | WS_VISIBLE; } - break; -case 108: -#line 816 "rcparse.y" -{ - yyval.dialog_control = define_control (yyvsp[-14].s, yyvsp[-12].il, yyvsp[-10].il, yyvsp[-8].il, yyvsp[-6].il, yyvsp[-4].il, CTL_BUTTON, - style, yyvsp[0].il); - } - break; -case 109: -#line 832 "rcparse.y" -{ - yyval.dialog_control = define_control (yyvsp[-6].s, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, yyvsp[-2].il, yyvsp[-1].il, class, - default_style | WS_CHILD | WS_VISIBLE, 0); - if (yyvsp[0].rcdata_item != NULL) - { - if (dialog.ex == NULL) - rcparse_warning (_("control data requires DIALOGEX")); - yyval.dialog_control->data = yyvsp[0].rcdata_item; - } - } - break; -case 110: -#line 844 "rcparse.y" -{ - yyval.dialog_control = define_control (yyvsp[-8].s, yyvsp[-7].il, yyvsp[-6].il, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, class, style, yyvsp[-1].il); - if (yyvsp[0].rcdata_item != NULL) - { - if (dialog.ex == NULL) - rcparse_warning (_("control data requires DIALOGEX")); - yyval.dialog_control->data = yyvsp[0].rcdata_item; - } - } - break; -case 111: -#line 855 "rcparse.y" -{ - yyval.dialog_control = define_control (yyvsp[-9].s, yyvsp[-8].il, yyvsp[-7].il, yyvsp[-6].il, yyvsp[-5].il, yyvsp[-4].il, class, style, yyvsp[-2].il); - if (dialog.ex == NULL) - rcparse_warning (_("help ID requires DIALOGEX")); - yyval.dialog_control->help = yyvsp[-1].il; - yyval.dialog_control->data = yyvsp[0].rcdata_item; - } - break; -case 112: -#line 866 "rcparse.y" -{ - yyval.s = NULL; - } - break; -case 113: -#line 870 "rcparse.y" -{ - yyval.s = yyvsp[0].s; - } - break; -case 114: -#line 874 "rcparse.y" -{ - yyval.s = yyvsp[-1].s; - } - break; -case 115: -#line 881 "rcparse.y" -{ - yyval.rcdata_item = NULL; - } - break; -case 116: -#line 885 "rcparse.y" -{ - yyval.rcdata_item = yyvsp[-1].rcdata.first; - } - break; -case 117: -#line 894 "rcparse.y" -{ style = WS_CHILD | WS_VISIBLE; } - break; -case 119: -#line 900 "rcparse.y" -{ style = SS_ICON | WS_CHILD | WS_VISIBLE; } - break; -case 121: -#line 906 "rcparse.y" -{ style = base_style | WS_CHILD | WS_VISIBLE; } - break; -case 123: -#line 914 "rcparse.y" -{ - define_font (yyvsp[-3].id, &yyvsp[-1].res_info, yyvsp[0].s); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 124: -#line 926 "rcparse.y" -{ - define_icon (yyvsp[-3].id, &yyvsp[-1].res_info, yyvsp[0].s); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 125: -#line 939 "rcparse.y" -{ - language = yyvsp[-1].il | (yyvsp[0].il << SUBLANG_SHIFT); - } - break; -case 126: -#line 948 "rcparse.y" -{ - define_menu (yyvsp[-5].id, &yyvsp[-3].res_info, yyvsp[-1].menuitem); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 127: -#line 958 "rcparse.y" -{ - yyval.menuitem = NULL; - } - break; -case 128: -#line 962 "rcparse.y" -{ - if (yyvsp[-1].menuitem == NULL) - yyval.menuitem = yyvsp[0].menuitem; - else - { - struct menuitem **pp; - - for (pp = &yyvsp[-1].menuitem->next; *pp != NULL; pp = &(*pp)->next) - ; - *pp = yyvsp[0].menuitem; - yyval.menuitem = yyvsp[-1].menuitem; - } - } - break; -case 129: -#line 979 "rcparse.y" -{ - yyval.menuitem = define_menuitem (yyvsp[-2].s, yyvsp[-1].il, yyvsp[0].is, 0, 0, NULL); - } - break; -case 130: -#line 983 "rcparse.y" -{ - yyval.menuitem = define_menuitem (NULL, 0, 0, 0, 0, NULL); - } - break; -case 131: -#line 987 "rcparse.y" -{ - yyval.menuitem = define_menuitem (yyvsp[-4].s, 0, yyvsp[-3].is, 0, 0, yyvsp[-1].menuitem); - } - break; -case 132: -#line 994 "rcparse.y" -{ - yyval.is = 0; - } - break; -case 133: -#line 998 "rcparse.y" -{ - yyval.is = yyvsp[-2].is | yyvsp[0].is; - } - break; -case 134: -#line 1002 "rcparse.y" -{ - yyval.is = yyvsp[-1].is | yyvsp[0].is; - } - break; -case 135: -#line 1009 "rcparse.y" -{ - yyval.is = MENUITEM_CHECKED; - } - break; -case 136: -#line 1013 "rcparse.y" -{ - yyval.is = MENUITEM_GRAYED; - } - break; -case 137: -#line 1017 "rcparse.y" -{ - yyval.is = MENUITEM_HELP; - } - break; -case 138: -#line 1021 "rcparse.y" -{ - yyval.is = MENUITEM_INACTIVE; - } - break; -case 139: -#line 1025 "rcparse.y" -{ - yyval.is = MENUITEM_MENUBARBREAK; - } - break; -case 140: -#line 1029 "rcparse.y" -{ - yyval.is = MENUITEM_MENUBREAK; - } - break; -case 141: -#line 1038 "rcparse.y" -{ - define_menu (yyvsp[-5].id, &yyvsp[-3].res_info, yyvsp[-1].menuitem); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 142: -#line 1048 "rcparse.y" -{ - yyval.menuitem = NULL; - } - break; -case 143: -#line 1052 "rcparse.y" -{ - if (yyvsp[-1].menuitem == NULL) - yyval.menuitem = yyvsp[0].menuitem; - else - { - struct menuitem **pp; - - for (pp = &yyvsp[-1].menuitem->next; *pp != NULL; pp = &(*pp)->next) - ; - *pp = yyvsp[0].menuitem; - yyval.menuitem = yyvsp[-1].menuitem; - } - } - break; -case 144: -#line 1069 "rcparse.y" -{ - yyval.menuitem = define_menuitem (yyvsp[0].s, 0, 0, 0, 0, NULL); - } - break; -case 145: -#line 1073 "rcparse.y" -{ - yyval.menuitem = define_menuitem (yyvsp[-1].s, yyvsp[0].il, 0, 0, 0, NULL); - } - break; -case 146: -#line 1077 "rcparse.y" -{ - yyval.menuitem = define_menuitem (yyvsp[-3].s, yyvsp[-2].il, yyvsp[-1].il, yyvsp[0].il, 0, NULL); - } - break; -case 147: -#line 1081 "rcparse.y" -{ - yyval.menuitem = define_menuitem (NULL, 0, 0, 0, 0, NULL); - } - break; -case 148: -#line 1085 "rcparse.y" -{ - yyval.menuitem = define_menuitem (yyvsp[-3].s, 0, 0, 0, 0, yyvsp[-1].menuitem); - } - break; -case 149: -#line 1089 "rcparse.y" -{ - yyval.menuitem = define_menuitem (yyvsp[-4].s, yyvsp[-3].il, 0, 0, 0, yyvsp[-1].menuitem); - } - break; -case 150: -#line 1093 "rcparse.y" -{ - yyval.menuitem = define_menuitem (yyvsp[-5].s, yyvsp[-4].il, yyvsp[-3].il, 0, 0, yyvsp[-1].menuitem); - } - break; -case 151: -#line 1098 "rcparse.y" -{ - yyval.menuitem = define_menuitem (yyvsp[-7].s, yyvsp[-6].il, yyvsp[-5].il, yyvsp[-4].il, yyvsp[-3].il, yyvsp[-1].menuitem); - } - break; -case 152: -#line 1107 "rcparse.y" -{ - define_messagetable (yyvsp[-3].id, &yyvsp[-1].res_info, yyvsp[0].s); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 153: -#line 1119 "rcparse.y" -{ - define_rcdata (yyvsp[-5].id, &yyvsp[-3].res_info, yyvsp[-1].rcdata.first); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 154: -#line 1131 "rcparse.y" -{ - rcparse_rcdata (); - } - break; -case 155: -#line 1135 "rcparse.y" -{ - rcparse_normal (); - yyval.rcdata = yyvsp[0].rcdata; - } - break; -case 156: -#line 1143 "rcparse.y" -{ - yyval.rcdata.first = NULL; - yyval.rcdata.last = NULL; - } - break; -case 157: -#line 1148 "rcparse.y" -{ - yyval.rcdata = yyvsp[0].rcdata; - } - break; -case 158: -#line 1155 "rcparse.y" -{ - struct rcdata_item *ri; - - ri = define_rcdata_string (yyvsp[0].ss.s, yyvsp[0].ss.length); - yyval.rcdata.first = ri; - yyval.rcdata.last = ri; - } - break; -case 159: -#line 1163 "rcparse.y" -{ - struct rcdata_item *ri; - - ri = define_rcdata_number (yyvsp[0].i.val, yyvsp[0].i.dword); - yyval.rcdata.first = ri; - yyval.rcdata.last = ri; - } - break; -case 160: -#line 1171 "rcparse.y" -{ - struct rcdata_item *ri; - - ri = define_rcdata_string (yyvsp[0].ss.s, yyvsp[0].ss.length); - yyval.rcdata.first = yyvsp[-2].rcdata.first; - yyvsp[-2].rcdata.last->next = ri; - yyval.rcdata.last = ri; - } - break; -case 161: -#line 1180 "rcparse.y" -{ - struct rcdata_item *ri; - - ri = define_rcdata_number (yyvsp[0].i.val, yyvsp[0].i.dword); - yyval.rcdata.first = yyvsp[-2].rcdata.first; - yyvsp[-2].rcdata.last->next = ri; - yyval.rcdata.last = ri; - } - break; -case 162: -#line 1194 "rcparse.y" -{ sub_res_info = yyvsp[-1].res_info; } - break; -case 165: -#line 1201 "rcparse.y" -{ - define_stringtable (&sub_res_info, yyvsp[-1].il, yyvsp[0].s); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 166: -#line 1208 "rcparse.y" -{ - define_stringtable (&sub_res_info, yyvsp[-2].il, yyvsp[0].s); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 167: -#line 1221 "rcparse.y" -{ - define_user_data (yyvsp[-5].id, yyvsp[-4].id, &yyvsp[-3].res_info, yyvsp[-1].rcdata.first); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 168: -#line 1228 "rcparse.y" -{ - define_user_file (yyvsp[-3].id, yyvsp[-2].id, &yyvsp[-1].res_info, yyvsp[0].s); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 169: -#line 1240 "rcparse.y" -{ - define_versioninfo (yyvsp[-5].id, language, yyvsp[-3].fixver, yyvsp[-1].verinfo); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - break; -case 170: -#line 1250 "rcparse.y" -{ - yyval.fixver = ((struct fixed_versioninfo *) - res_alloc (sizeof (struct fixed_versioninfo))); - memset (yyval.fixver, 0, sizeof (struct fixed_versioninfo)); - } - break; -case 171: -#line 1256 "rcparse.y" -{ - yyvsp[-5].fixver->file_version_ms = (yyvsp[-3].il << 16) | yyvsp[-2].il; - yyvsp[-5].fixver->file_version_ls = (yyvsp[-1].il << 16) | yyvsp[0].il; - yyval.fixver = yyvsp[-5].fixver; - } - break; -case 172: -#line 1262 "rcparse.y" -{ - yyvsp[-5].fixver->product_version_ms = (yyvsp[-3].il << 16) | yyvsp[-2].il; - yyvsp[-5].fixver->product_version_ls = (yyvsp[-1].il << 16) | yyvsp[0].il; - yyval.fixver = yyvsp[-5].fixver; - } - break; -case 173: -#line 1268 "rcparse.y" -{ - yyvsp[-2].fixver->file_flags_mask = yyvsp[0].il; - yyval.fixver = yyvsp[-2].fixver; - } - break; -case 174: -#line 1273 "rcparse.y" -{ - yyvsp[-2].fixver->file_flags = yyvsp[0].il; - yyval.fixver = yyvsp[-2].fixver; - } - break; -case 175: -#line 1278 "rcparse.y" -{ - yyvsp[-2].fixver->file_os = yyvsp[0].il; - yyval.fixver = yyvsp[-2].fixver; - } - break; -case 176: -#line 1283 "rcparse.y" -{ - yyvsp[-2].fixver->file_type = yyvsp[0].il; - yyval.fixver = yyvsp[-2].fixver; - } - break; -case 177: -#line 1288 "rcparse.y" -{ - yyvsp[-2].fixver->file_subtype = yyvsp[0].il; - yyval.fixver = yyvsp[-2].fixver; - } - break; -case 178: -#line 1302 "rcparse.y" -{ - yyval.verinfo = NULL; - } - break; -case 179: -#line 1306 "rcparse.y" -{ - yyval.verinfo = append_ver_stringfileinfo (yyvsp[-7].verinfo, yyvsp[-4].s, yyvsp[-2].verstring); - } - break; -case 180: -#line 1310 "rcparse.y" -{ - yyval.verinfo = append_ver_varfileinfo (yyvsp[-6].verinfo, yyvsp[-2].s, yyvsp[-1].vervar); - } - break; -case 181: -#line 1317 "rcparse.y" -{ - yyval.verstring = NULL; - } - break; -case 182: -#line 1321 "rcparse.y" -{ - yyval.verstring = append_verval (yyvsp[-4].verstring, yyvsp[-2].s, yyvsp[0].s); - } - break; -case 183: -#line 1328 "rcparse.y" -{ - yyval.vervar = NULL; - } - break; -case 184: -#line 1332 "rcparse.y" -{ - yyval.vervar = append_vertrans (yyvsp[-2].vervar, yyvsp[-1].il, yyvsp[0].il); - } - break; -case 185: -#line 1341 "rcparse.y" -{ - yyval.id.named = 0; - yyval.id.u.id = yyvsp[0].il; - } - break; -case 186: -#line 1346 "rcparse.y" -{ - char *copy, *s; - - /* It seems that resource ID's are forced to upper case. */ - copy = xstrdup (yyvsp[0].s); - for (s = copy; *s != '\0'; s++) - *s = TOUPPER (*s); - res_string_to_id (&yyval.id, copy); - free (copy); - } - break; -case 187: -#line 1362 "rcparse.y" -{ - yyval.s = yyvsp[0].s; - } - break; -case 188: -#line 1366 "rcparse.y" -{ - yyval.s = yyvsp[-1].s; - } - break; -case 189: -#line 1370 "rcparse.y" -{ - yyval.s = yyvsp[-1].s; - } - break; -case 190: -#line 1378 "rcparse.y" -{ - yyval.id.named = 0; - yyval.id.u.id = yyvsp[-1].il; - } - break; -case 191: -#line 1383 "rcparse.y" -{ - char *copy, *s; - - /* It seems that resource ID's are forced to upper case. */ - copy = xstrdup (yyvsp[0].s); - for (s = copy; *s != '\0'; s++) - *s = TOUPPER (*s); - res_string_to_id (&yyval.id, copy); - free (copy); - } - break; -case 192: -#line 1400 "rcparse.y" -{ - memset (&yyval.res_info, 0, sizeof (struct res_res_info)); - yyval.res_info.language = language; - /* FIXME: Is this the right default? */ - yyval.res_info.memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE; - } - break; -case 193: -#line 1407 "rcparse.y" -{ - yyval.res_info = yyvsp[-1].res_info; - yyval.res_info.memflags |= yyvsp[0].memflags.on; - yyval.res_info.memflags &=~ yyvsp[0].memflags.off; - } - break; -case 194: -#line 1413 "rcparse.y" -{ - yyval.res_info = yyvsp[-2].res_info; - yyval.res_info.characteristics = yyvsp[0].il; - } - break; -case 195: -#line 1418 "rcparse.y" -{ - yyval.res_info = yyvsp[-3].res_info; - yyval.res_info.language = yyvsp[-1].il | (yyvsp[0].il << SUBLANG_SHIFT); - } - break; -case 196: -#line 1423 "rcparse.y" -{ - yyval.res_info = yyvsp[-2].res_info; - yyval.res_info.version = yyvsp[0].il; - } - break; -case 197: -#line 1433 "rcparse.y" -{ - memset (&yyval.res_info, 0, sizeof (struct res_res_info)); - yyval.res_info.language = language; - yyval.res_info.memflags = MEMFLAG_MOVEABLE | MEMFLAG_DISCARDABLE; - } - break; -case 198: -#line 1439 "rcparse.y" -{ - yyval.res_info = yyvsp[-1].res_info; - yyval.res_info.memflags |= yyvsp[0].memflags.on; - yyval.res_info.memflags &=~ yyvsp[0].memflags.off; - } - break; -case 199: -#line 1450 "rcparse.y" -{ - memset (&yyval.res_info, 0, sizeof (struct res_res_info)); - yyval.res_info.language = language; - yyval.res_info.memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE; - } - break; -case 200: -#line 1456 "rcparse.y" -{ - yyval.res_info = yyvsp[-1].res_info; - yyval.res_info.memflags |= yyvsp[0].memflags.on; - yyval.res_info.memflags &=~ yyvsp[0].memflags.off; - } - break; -case 201: -#line 1468 "rcparse.y" -{ - yyval.memflags.on = MEMFLAG_MOVEABLE; - yyval.memflags.off = 0; - } - break; -case 202: -#line 1473 "rcparse.y" -{ - yyval.memflags.on = 0; - yyval.memflags.off = MEMFLAG_MOVEABLE; - } - break; -case 203: -#line 1478 "rcparse.y" -{ - yyval.memflags.on = MEMFLAG_PURE; - yyval.memflags.off = 0; - } - break; -case 204: -#line 1483 "rcparse.y" -{ - yyval.memflags.on = 0; - yyval.memflags.off = MEMFLAG_PURE; - } - break; -case 205: -#line 1488 "rcparse.y" -{ - yyval.memflags.on = MEMFLAG_PRELOAD; - yyval.memflags.off = 0; - } - break; -case 206: -#line 1493 "rcparse.y" -{ - yyval.memflags.on = 0; - yyval.memflags.off = MEMFLAG_PRELOAD; - } - break; -case 207: -#line 1498 "rcparse.y" -{ - yyval.memflags.on = MEMFLAG_DISCARDABLE; - yyval.memflags.off = 0; - } - break; -case 208: -#line 1508 "rcparse.y" -{ - yyval.s = yyvsp[0].s; - } - break; -case 209: -#line 1512 "rcparse.y" -{ - yyval.s = yyvsp[0].s; - } - break; -case 210: -#line 1529 "rcparse.y" -{ - style |= yyvsp[0].il; - } - break; -case 211: -#line 1533 "rcparse.y" -{ - style &=~ yyvsp[0].il; - } - break; -case 212: -#line 1537 "rcparse.y" -{ - style |= yyvsp[0].il; - } - break; -case 213: -#line 1541 "rcparse.y" -{ - style &=~ yyvsp[0].il; - } - break; -case 214: -#line 1548 "rcparse.y" -{ - yyval.il = yyvsp[0].i.val; - } - break; -case 215: -#line 1552 "rcparse.y" -{ - yyval.il = yyvsp[-1].il; - } - break; -case 216: -#line 1561 "rcparse.y" -{ - yyval.il = 0; - } - break; -case 217: -#line 1565 "rcparse.y" -{ - yyval.il = yyvsp[0].il; - } - break; -case 218: -#line 1574 "rcparse.y" -{ - yyval.il = yyvsp[0].il; - } - break; -case 219: -#line 1583 "rcparse.y" -{ - yyval.il = yyvsp[0].i.val; - } - break; -case 220: -#line 1592 "rcparse.y" -{ - yyval.i = yyvsp[0].i; - } - break; -case 221: -#line 1596 "rcparse.y" -{ - yyval.i = yyvsp[-1].i; - } - break; -case 222: -#line 1600 "rcparse.y" -{ - yyval.i.val = ~ yyvsp[0].i.val; - yyval.i.dword = yyvsp[0].i.dword; - } - break; -case 223: -#line 1605 "rcparse.y" -{ - yyval.i.val = - yyvsp[0].i.val; - yyval.i.dword = yyvsp[0].i.dword; - } - break; -case 224: -#line 1610 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val * yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 225: -#line 1615 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val / yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 226: -#line 1620 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val % yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 227: -#line 1625 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val + yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 228: -#line 1630 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val - yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 229: -#line 1635 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val & yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 230: -#line 1640 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val ^ yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 231: -#line 1645 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val | yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 232: -#line 1656 "rcparse.y" -{ - yyval.il = yyvsp[0].il; - } - break; -case 233: -#line 1665 "rcparse.y" -{ - yyval.il = yyvsp[0].i.val; - } - break; -case 234: -#line 1676 "rcparse.y" -{ - yyval.i = yyvsp[0].i; - } - break; -case 235: -#line 1680 "rcparse.y" -{ - yyval.i = yyvsp[-1].i; - } - break; -case 236: -#line 1684 "rcparse.y" -{ - yyval.i.val = ~ yyvsp[0].i.val; - yyval.i.dword = yyvsp[0].i.dword; - } - break; -case 237: -#line 1689 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val * yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 238: -#line 1694 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val / yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 239: -#line 1699 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val % yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 240: -#line 1704 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val + yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 241: -#line 1709 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val - yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 242: -#line 1714 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val & yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 243: -#line 1719 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val ^ yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -case 244: -#line 1724 "rcparse.y" -{ - yyval.i.val = yyvsp[-2].i.val | yyvsp[0].i.val; - yyval.i.dword = yyvsp[-2].i.dword || yyvsp[0].i.dword; - } - break; -} - -#line 705 "/usr/share/bison/bison.simple" - - - yyvsp -= yylen; - yyssp -= yylen; -#if YYLSP_NEEDED - yylsp -= yylen; -#endif - -#if YYDEBUG - if (yydebug) - { - short *yyssp1 = yyss - 1; - YYFPRINTF (stderr, "state stack now"); - while (yyssp1 != yyssp) - YYFPRINTF (stderr, " %d", *++yyssp1); - YYFPRINTF (stderr, "\n"); - } -#endif - - *++yyvsp = yyval; -#if YYLSP_NEEDED - *++yylsp = yyloc; -#endif - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTBASE] + *yyssp; - if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTBASE]; - - goto yynewstate; - - -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; - -#ifdef YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (yyn > YYFLAG && yyn < YYLAST) - { - YYSIZE_T yysize = 0; - char *yymsg; - int yyx, yycount; - - yycount = 0; - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - for (yyx = yyn < 0 ? -yyn : 0; - yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) - if (yycheck[yyx + yyn] == yyx) - yysize += yystrlen (yytname[yyx]) + 15, yycount++; - yysize += yystrlen ("parse error, unexpected ") + 1; - yysize += yystrlen (yytname[YYTRANSLATE (yychar)]); - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg != 0) - { - char *yyp = yystpcpy (yymsg, "parse error, unexpected "); - yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]); - - if (yycount < 5) - { - yycount = 0; - for (yyx = yyn < 0 ? -yyn : 0; - yyx < (int) (sizeof (yytname) / sizeof (char *)); - yyx++) - if (yycheck[yyx + yyn] == yyx) - { - const char *yyq = ! yycount ? ", expecting " : " or "; - yyp = yystpcpy (yyp, yyq); - yyp = yystpcpy (yyp, yytname[yyx]); - yycount++; - } - } - yyerror (yymsg); - YYSTACK_FREE (yymsg); - } - else - yyerror ("parse error; also virtual memory exhausted"); - } - else -#endif /* defined (YYERROR_VERBOSE) */ - yyerror ("parse error"); - } - goto yyerrlab1; - - -/*--------------------------------------------------. -| yyerrlab1 -- error raised explicitly by an action | -`--------------------------------------------------*/ -yyerrlab1: - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - /* return failure if at end of input */ - if (yychar == YYEOF) - YYABORT; - YYDPRINTF ((stderr, "Discarding token %d (%s).\n", - yychar, yytname[yychar1])); - yychar = YYEMPTY; - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - - yyerrstatus = 3; /* Each real token shifted decrements this */ - - goto yyerrhandle; - - -/*-------------------------------------------------------------------. -| yyerrdefault -- current state does not do anything special for the | -| error token. | -`-------------------------------------------------------------------*/ -yyerrdefault: -#if 0 - /* This is wrong; only states that explicitly want error tokens - should shift them. */ - - /* If its default is to accept any token, ok. Otherwise pop it. */ - yyn = yydefact[yystate]; - if (yyn) - goto yydefault; -#endif - - -/*---------------------------------------------------------------. -| yyerrpop -- pop the current state because it cannot handle the | -| error token | -`---------------------------------------------------------------*/ -yyerrpop: - if (yyssp == yyss) - YYABORT; - yyvsp--; - yystate = *--yyssp; -#if YYLSP_NEEDED - yylsp--; -#endif - -#if YYDEBUG - if (yydebug) - { - short *yyssp1 = yyss - 1; - YYFPRINTF (stderr, "Error: state stack now"); - while (yyssp1 != yyssp) - YYFPRINTF (stderr, " %d", *++yyssp1); - YYFPRINTF (stderr, "\n"); - } -#endif - -/*--------------. -| yyerrhandle. | -`--------------*/ -yyerrhandle: - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yyerrdefault; - - yyn += YYTERROR; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) - goto yyerrdefault; - - yyn = yytable[yyn]; - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrpop; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrpop; - - if (yyn == YYFINAL) - YYACCEPT; - - YYDPRINTF ((stderr, "Shifting error token, ")); - - *++yyvsp = yylval; -#if YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -/*---------------------------------------------. -| yyoverflowab -- parser overflow comes here. | -`---------------------------------------------*/ -yyoverflowlab: - yyerror ("parser stack overflow"); - yyresult = 2; - /* Fall through. */ - -yyreturn: -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif - return yyresult; -} -#line 1730 "rcparse.y" - - -/* Set the language from the command line. */ - -void -rcparse_set_language (lang) - int lang; -{ - language = lang; -} diff --git a/contrib/binutils/binutils/rcparse.h b/contrib/binutils/binutils/rcparse.h deleted file mode 100644 index 3ad5fd3e0b96..000000000000 --- a/contrib/binutils/binutils/rcparse.h +++ /dev/null @@ -1,134 +0,0 @@ -#ifndef BISON_Y_TAB_H -# define BISON_Y_TAB_H - -#ifndef YYSTYPE -typedef union -{ - struct accelerator acc; - struct accelerator *pacc; - struct dialog_control *dialog_control; - struct menuitem *menuitem; - struct - { - struct rcdata_item *first; - struct rcdata_item *last; - } rcdata; - struct rcdata_item *rcdata_item; - struct stringtable_data *stringtable; - struct fixed_versioninfo *fixver; - struct ver_info *verinfo; - struct ver_stringinfo *verstring; - struct ver_varinfo *vervar; - struct res_id id; - struct res_res_info res_info; - struct - { - unsigned short on; - unsigned short off; - } memflags; - struct - { - unsigned long val; - /* Nonzero if this number was explicitly specified as long. */ - int dword; - } i; - unsigned long il; - unsigned short is; - const char *s; - struct - { - unsigned long length; - const char *s; - } ss; -} yystype; -# define YYSTYPE yystype -# define YYSTYPE_IS_TRIVIAL 1 -#endif -# define BEG 257 -# define END 258 -# define ACCELERATORS 259 -# define VIRTKEY 260 -# define ASCII 261 -# define NOINVERT 262 -# define SHIFT 263 -# define CONTROL 264 -# define ALT 265 -# define BITMAP 266 -# define CURSOR 267 -# define DIALOG 268 -# define DIALOGEX 269 -# define EXSTYLE 270 -# define CAPTION 271 -# define CLASS 272 -# define STYLE 273 -# define AUTO3STATE 274 -# define AUTOCHECKBOX 275 -# define AUTORADIOBUTTON 276 -# define CHECKBOX 277 -# define COMBOBOX 278 -# define CTEXT 279 -# define DEFPUSHBUTTON 280 -# define EDITTEXT 281 -# define GROUPBOX 282 -# define LISTBOX 283 -# define LTEXT 284 -# define PUSHBOX 285 -# define PUSHBUTTON 286 -# define RADIOBUTTON 287 -# define RTEXT 288 -# define SCROLLBAR 289 -# define STATE3 290 -# define USERBUTTON 291 -# define BEDIT 292 -# define HEDIT 293 -# define IEDIT 294 -# define FONT 295 -# define ICON 296 -# define LANGUAGE 297 -# define CHARACTERISTICS 298 -# define VERSIONK 299 -# define MENU 300 -# define MENUEX 301 -# define MENUITEM 302 -# define SEPARATOR 303 -# define POPUP 304 -# define CHECKED 305 -# define GRAYED 306 -# define HELP 307 -# define INACTIVE 308 -# define MENUBARBREAK 309 -# define MENUBREAK 310 -# define MESSAGETABLE 311 -# define RCDATA 312 -# define STRINGTABLE 313 -# define VERSIONINFO 314 -# define FILEVERSION 315 -# define PRODUCTVERSION 316 -# define FILEFLAGSMASK 317 -# define FILEFLAGS 318 -# define FILEOS 319 -# define FILETYPE 320 -# define FILESUBTYPE 321 -# define BLOCKSTRINGFILEINFO 322 -# define BLOCKVARFILEINFO 323 -# define VALUE 324 -# define BLOCK 325 -# define MOVEABLE 326 -# define FIXED 327 -# define PURE 328 -# define IMPURE 329 -# define PRELOAD 330 -# define LOADONCALL 331 -# define DISCARDABLE 332 -# define NOT 333 -# define QUOTEDSTRING 334 -# define STRING 335 -# define NUMBER 336 -# define SIZEDSTRING 337 -# define IGNORED_TOKEN 338 -# define NEG 339 - - -extern YYSTYPE yylval; - -#endif /* not BISON_Y_TAB_H */ diff --git a/contrib/binutils/binutils/rcparse.y b/contrib/binutils/binutils/rcparse.y deleted file mode 100644 index 1f10da7eaf3e..000000000000 --- a/contrib/binutils/binutils/rcparse.y +++ /dev/null @@ -1,1739 +0,0 @@ -%{ /* rcparse.y -- parser for Windows rc files - Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. - Written by Ian Lance Taylor, Cygnus Support. - - 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 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 is a parser for Windows rc files. It is based on the parser - by Gunther Ebert <gunther.ebert@ixos-leipzig.de>. */ - -#include "bfd.h" -#include "bucomm.h" -#include "libiberty.h" -#include "windres.h" -#include "safe-ctype.h" - -/* The current language. */ - -static unsigned short language; - -/* The resource information during a sub statement. */ - -static struct res_res_info sub_res_info; - -/* Dialog information. This is built by the nonterminals styles and - controls. */ - -static struct dialog dialog; - -/* This is used when building a style. It is modified by the - nonterminal styleexpr. */ - -static unsigned long style; - -/* These are used when building a control. They are set before using - control_params. */ - -static unsigned long base_style; -static unsigned long default_style; -static unsigned long class; - -%} - -%union -{ - struct accelerator acc; - struct accelerator *pacc; - struct dialog_control *dialog_control; - struct menuitem *menuitem; - struct - { - struct rcdata_item *first; - struct rcdata_item *last; - } rcdata; - struct rcdata_item *rcdata_item; - struct stringtable_data *stringtable; - struct fixed_versioninfo *fixver; - struct ver_info *verinfo; - struct ver_stringinfo *verstring; - struct ver_varinfo *vervar; - struct res_id id; - struct res_res_info res_info; - struct - { - unsigned short on; - unsigned short off; - } memflags; - struct - { - unsigned long val; - /* Nonzero if this number was explicitly specified as long. */ - int dword; - } i; - unsigned long il; - unsigned short is; - const char *s; - struct - { - unsigned long length; - const char *s; - } ss; -}; - -%token BEG END -%token ACCELERATORS VIRTKEY ASCII NOINVERT SHIFT CONTROL ALT -%token BITMAP -%token CURSOR -%token DIALOG DIALOGEX EXSTYLE CAPTION CLASS STYLE -%token AUTO3STATE AUTOCHECKBOX AUTORADIOBUTTON CHECKBOX COMBOBOX CTEXT -%token DEFPUSHBUTTON EDITTEXT GROUPBOX LISTBOX LTEXT PUSHBOX PUSHBUTTON -%token RADIOBUTTON RTEXT SCROLLBAR STATE3 USERBUTTON -%token BEDIT HEDIT IEDIT -%token FONT -%token ICON -%token LANGUAGE CHARACTERISTICS VERSIONK -%token MENU MENUEX MENUITEM SEPARATOR POPUP CHECKED GRAYED HELP INACTIVE -%token MENUBARBREAK MENUBREAK -%token MESSAGETABLE -%token RCDATA -%token STRINGTABLE -%token VERSIONINFO FILEVERSION PRODUCTVERSION FILEFLAGSMASK FILEFLAGS -%token FILEOS FILETYPE FILESUBTYPE BLOCKSTRINGFILEINFO BLOCKVARFILEINFO -%token VALUE -%token <s> BLOCK -%token MOVEABLE FIXED PURE IMPURE PRELOAD LOADONCALL DISCARDABLE -%token NOT -%token <s> QUOTEDSTRING STRING -%token <i> NUMBER -%token <ss> SIZEDSTRING -%token IGNORED_TOKEN - -%type <pacc> acc_entries -%type <acc> acc_entry acc_event -%type <dialog_control> control control_params -%type <menuitem> menuitems menuitem menuexitems menuexitem -%type <rcdata> optrcdata_data optrcdata_data_int rcdata_data -%type <rcdata_item> opt_control_data -%type <fixver> fixedverinfo -%type <verinfo> verblocks -%type <verstring> vervals -%type <vervar> vertrans -%type <res_info> suboptions memflags_move_discard memflags_move -%type <memflags> memflag -%type <id> id 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 <i> sizednumexpr sizedposnumexpr - -%left '|' -%left '^' -%left '&' -%left '+' '-' -%left '*' '/' '%' -%right '~' NEG - -%% - -input: - /* empty */ - | input accelerator - | input bitmap - | input cursor - | input dialog - | input font - | input icon - | input language - | input menu - | input menuex - | input messagetable - | input rcdata - | input stringtable - | input user - | input versioninfo - | input IGNORED_TOKEN - ; - -/* Accelerator resources. */ - -accelerator: - id ACCELERATORS suboptions BEG acc_entries END - { - define_accelerator ($1, &$3, $5); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -acc_entries: - /* empty */ - { - $$ = NULL; - } - | acc_entries acc_entry - { - struct accelerator *a; - - a = (struct accelerator *) res_alloc (sizeof *a); - *a = $2; - if ($1 == NULL) - $$ = a; - else - { - struct accelerator **pp; - - for (pp = &$1->next; *pp != NULL; pp = &(*pp)->next) - ; - *pp = a; - $$ = $1; - } - } - ; - -acc_entry: - acc_event cposnumexpr - { - $$ = $1; - $$.id = $2; - } - | acc_event cposnumexpr ',' acc_options - { - $$ = $1; - $$.id = $2; - $$.flags |= $4; - if (($$.flags & ACC_VIRTKEY) == 0 - && ($$.flags & (ACC_SHIFT | ACC_CONTROL)) != 0) - rcparse_warning (_("inappropriate modifiers for non-VIRTKEY")); - } - ; - -acc_event: - QUOTEDSTRING - { - const char *s = $1; - char ch; - - $$.next = NULL; - $$.id = 0; - ch = *s; - if (ch != '^') - $$.flags = 0; - else - { - $$.flags = ACC_CONTROL | ACC_VIRTKEY; - ++s; - ch = *s; - ch = TOUPPER (ch); - } - $$.key = ch; - if (s[1] != '\0') - rcparse_warning (_("accelerator should only be one character")); - } - | posnumexpr - { - $$.next = NULL; - $$.flags = 0; - $$.id = 0; - $$.key = $1; - } - ; - -acc_options: - acc_option - { - $$ = $1; - } - | acc_options ',' acc_option - { - $$ = $1 | $3; - } - /* I've had one report that the comma is optional. */ - | acc_options acc_option - { - $$ = $1 | $2; - } - ; - -acc_option: - VIRTKEY - { - $$ = ACC_VIRTKEY; - } - | ASCII - { - /* This is just the absence of VIRTKEY. */ - $$ = 0; - } - | NOINVERT - { - $$ = ACC_NOINVERT; - } - | SHIFT - { - $$ = ACC_SHIFT; - } - | CONTROL - { - $$ = ACC_CONTROL; - } - | ALT - { - $$ = ACC_ALT; - } - ; - -/* Bitmap resources. */ - -bitmap: - id BITMAP memflags_move file_name - { - define_bitmap ($1, &$3, $4); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -/* Cursor resources. */ - -cursor: - id CURSOR memflags_move_discard file_name - { - define_cursor ($1, &$3, $4); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -/* Dialog resources. */ - -dialog: - id DIALOG memflags_move exstyle posnumexpr cnumexpr cnumexpr - cnumexpr - { - memset (&dialog, 0, sizeof dialog); - dialog.x = $5; - dialog.y = $6; - dialog.width = $7; - dialog.height = $8; - dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU; - dialog.exstyle = $4; - dialog.menu.named = 1; - dialog.class.named = 1; - dialog.font = NULL; - dialog.ex = NULL; - dialog.controls = NULL; - sub_res_info = $3; - style = 0; - } - styles BEG controls END - { - define_dialog ($1, &sub_res_info, &dialog); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - | id DIALOGEX memflags_move exstyle posnumexpr cnumexpr cnumexpr - cnumexpr - { - memset (&dialog, 0, sizeof dialog); - dialog.x = $5; - dialog.y = $6; - dialog.width = $7; - dialog.height = $8; - dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU; - dialog.exstyle = $4; - dialog.menu.named = 1; - dialog.class.named = 1; - dialog.font = NULL; - dialog.ex = ((struct dialog_ex *) - res_alloc (sizeof (struct dialog_ex))); - memset (dialog.ex, 0, sizeof (struct dialog_ex)); - dialog.controls = NULL; - sub_res_info = $3; - style = 0; - } - styles BEG controls END - { - define_dialog ($1, &sub_res_info, &dialog); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - | id DIALOGEX memflags_move exstyle posnumexpr cnumexpr cnumexpr - cnumexpr cnumexpr - { - memset (&dialog, 0, sizeof dialog); - dialog.x = $5; - dialog.y = $6; - dialog.width = $7; - dialog.height = $8; - dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU; - dialog.exstyle = $4; - dialog.menu.named = 1; - dialog.class.named = 1; - dialog.font = NULL; - dialog.ex = ((struct dialog_ex *) - res_alloc (sizeof (struct dialog_ex))); - memset (dialog.ex, 0, sizeof (struct dialog_ex)); - dialog.ex->help = $9; - dialog.controls = NULL; - sub_res_info = $3; - style = 0; - } - styles BEG controls END - { - define_dialog ($1, &sub_res_info, &dialog); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -exstyle: - /* empty */ - { - $$ = 0; - } - | EXSTYLE '=' numexpr - { - $$ = $3; - } - ; - -styles: - /* empty */ - | styles CAPTION QUOTEDSTRING - { - dialog.style |= WS_CAPTION; - style |= WS_CAPTION; - unicode_from_ascii ((int *) NULL, &dialog.caption, $3); - } - | styles CLASS id - { - dialog.class = $3; - } - | styles STYLE - styleexpr - { - dialog.style = style; - } - | styles EXSTYLE numexpr - { - dialog.exstyle = $3; - } - | styles CLASS QUOTEDSTRING - { - res_string_to_id (& dialog.class, $3); - } - | styles FONT numexpr ',' QUOTEDSTRING - { - dialog.style |= DS_SETFONT; - style |= DS_SETFONT; - dialog.pointsize = $3; - unicode_from_ascii ((int *) NULL, &dialog.font, $5); - if (dialog.ex != NULL) - { - dialog.ex->weight = 0; - dialog.ex->italic = 0; - dialog.ex->charset = 1; - } - } - | styles FONT numexpr ',' QUOTEDSTRING cnumexpr - { - dialog.style |= DS_SETFONT; - style |= DS_SETFONT; - dialog.pointsize = $3; - unicode_from_ascii ((int *) NULL, &dialog.font, $5); - if (dialog.ex == NULL) - rcparse_warning (_("extended FONT requires DIALOGEX")); - else - { - dialog.ex->weight = $6; - dialog.ex->italic = 0; - dialog.ex->charset = 1; - } - } - | styles FONT numexpr ',' QUOTEDSTRING cnumexpr cnumexpr - { - dialog.style |= DS_SETFONT; - style |= DS_SETFONT; - dialog.pointsize = $3; - unicode_from_ascii ((int *) NULL, &dialog.font, $5); - if (dialog.ex == NULL) - rcparse_warning (_("extended FONT requires DIALOGEX")); - else - { - dialog.ex->weight = $6; - dialog.ex->italic = $7; - dialog.ex->charset = 1; - } - } - | styles FONT numexpr ',' QUOTEDSTRING cnumexpr cnumexpr cnumexpr - { - dialog.style |= DS_SETFONT; - style |= DS_SETFONT; - dialog.pointsize = $3; - unicode_from_ascii ((int *) NULL, &dialog.font, $5); - if (dialog.ex == NULL) - rcparse_warning (_("extended FONT requires DIALOGEX")); - else - { - dialog.ex->weight = $6; - dialog.ex->italic = $7; - dialog.ex->charset = $8; - } - } - | styles MENU id - { - dialog.menu = $3; - } - | styles CHARACTERISTICS numexpr - { - sub_res_info.characteristics = $3; - } - | styles LANGUAGE numexpr cnumexpr - { - sub_res_info.language = $3 | ($4 << SUBLANG_SHIFT); - } - | styles VERSIONK numexpr - { - sub_res_info.version = $3; - } - ; - -controls: - /* empty */ - | controls control - { - struct dialog_control **pp; - - for (pp = &dialog.controls; *pp != NULL; pp = &(*pp)->next) - ; - *pp = $2; - } - ; - -control: - AUTO3STATE - { - default_style = BS_AUTO3STATE | WS_TABSTOP; - base_style = BS_AUTO3STATE; - class = CTL_BUTTON; - } - control_params - { - $$ = $3; - } - | AUTOCHECKBOX - { - default_style = BS_AUTOCHECKBOX | WS_TABSTOP; - base_style = BS_AUTOCHECKBOX; - class = CTL_BUTTON; - } - control_params - { - $$ = $3; - } - | AUTORADIOBUTTON - { - default_style = BS_AUTORADIOBUTTON | WS_TABSTOP; - base_style = BS_AUTORADIOBUTTON; - class = CTL_BUTTON; - } - control_params - { - $$ = $3; - } - | BEDIT - { - default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - class = CTL_EDIT; - } - control_params - { - $$ = $3; - if (dialog.ex == NULL) - rcparse_warning (_("BEDIT requires DIALOGEX")); - res_string_to_id (&$$->class, "BEDIT"); - } - | CHECKBOX - { - default_style = BS_CHECKBOX | WS_TABSTOP; - base_style = BS_CHECKBOX | WS_TABSTOP; - class = CTL_BUTTON; - } - control_params - { - $$ = $3; - } - | COMBOBOX - { - default_style = CBS_SIMPLE | WS_TABSTOP; - base_style = 0; - class = CTL_COMBOBOX; - } - control_params - { - $$ = $3; - } - | CONTROL optstringc numexpr cnumexpr control_styleexpr cnumexpr - cnumexpr cnumexpr cnumexpr optcnumexpr opt_control_data - { - $$ = define_control ($2, $3, $6, $7, $8, $9, $4, style, $10); - if ($11 != NULL) - { - if (dialog.ex == NULL) - rcparse_warning (_("control data requires DIALOGEX")); - $$->data = $11; - } - } - | CONTROL optstringc numexpr cnumexpr control_styleexpr cnumexpr - cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr opt_control_data - { - $$ = define_control ($2, $3, $6, $7, $8, $9, $4, style, $10); - if (dialog.ex == NULL) - rcparse_warning (_("help ID requires DIALOGEX")); - $$->help = $11; - $$->data = $12; - } - | CONTROL optstringc numexpr ',' QUOTEDSTRING control_styleexpr - cnumexpr cnumexpr cnumexpr cnumexpr optcnumexpr opt_control_data - { - $$ = define_control ($2, $3, $7, $8, $9, $10, 0, style, $11); - if ($12 != NULL) - { - if (dialog.ex == NULL) - rcparse_warning ("control data requires DIALOGEX"); - $$->data = $12; - } - $$->class.named = 1; - unicode_from_ascii (&$$->class.u.n.length, &$$->class.u.n.name, $5); - } - | CONTROL optstringc numexpr ',' QUOTEDSTRING control_styleexpr - cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr opt_control_data - { - $$ = define_control ($2, $3, $7, $8, $9, $10, 0, style, $11); - if (dialog.ex == NULL) - rcparse_warning ("help ID requires DIALOGEX"); - $$->help = $12; - $$->data = $13; - $$->class.named = 1; - unicode_from_ascii (&$$->class.u.n.length, &$$->class.u.n.name, $5); - } - | CTEXT - { - default_style = SS_CENTER | WS_GROUP; - base_style = SS_CENTER; - class = CTL_STATIC; - } - control_params - { - $$ = $3; - } - | DEFPUSHBUTTON - { - default_style = BS_DEFPUSHBUTTON | WS_TABSTOP; - base_style = BS_DEFPUSHBUTTON | WS_TABSTOP; - class = CTL_BUTTON; - } - control_params - { - $$ = $3; - } - | EDITTEXT - { - default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - class = CTL_EDIT; - } - control_params - { - $$ = $3; - } - | GROUPBOX - { - default_style = BS_GROUPBOX; - base_style = BS_GROUPBOX; - class = CTL_BUTTON; - } - control_params - { - $$ = $3; - } - | HEDIT - { - default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - class = CTL_EDIT; - } - control_params - { - $$ = $3; - if (dialog.ex == NULL) - rcparse_warning (_("IEDIT requires DIALOGEX")); - res_string_to_id (&$$->class, "HEDIT"); - } - | ICON resref numexpr cnumexpr cnumexpr opt_control_data - { - $$ = define_icon_control ($2, $3, $4, $5, 0, 0, 0, $6, - dialog.ex); - } - | ICON resref numexpr cnumexpr cnumexpr cnumexpr cnumexpr - opt_control_data - { - $$ = define_icon_control ($2, $3, $4, $5, 0, 0, 0, $8, - dialog.ex); - } - | ICON resref numexpr cnumexpr cnumexpr cnumexpr cnumexpr - icon_styleexpr optcnumexpr opt_control_data - { - $$ = define_icon_control ($2, $3, $4, $5, style, $9, 0, $10, - dialog.ex); - } - | ICON resref numexpr cnumexpr cnumexpr cnumexpr cnumexpr - icon_styleexpr cnumexpr cnumexpr opt_control_data - { - $$ = define_icon_control ($2, $3, $4, $5, style, $9, $10, $11, - dialog.ex); - } - | IEDIT - { - default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; - class = CTL_EDIT; - } - control_params - { - $$ = $3; - if (dialog.ex == NULL) - rcparse_warning (_("IEDIT requires DIALOGEX")); - res_string_to_id (&$$->class, "IEDIT"); - } - | LISTBOX - { - default_style = LBS_NOTIFY | WS_BORDER; - base_style = LBS_NOTIFY | WS_BORDER; - class = CTL_LISTBOX; - } - control_params - { - $$ = $3; - } - | LTEXT - { - default_style = SS_LEFT | WS_GROUP; - base_style = SS_LEFT; - class = CTL_STATIC; - } - control_params - { - $$ = $3; - } - | PUSHBOX - { - default_style = BS_PUSHBOX | WS_TABSTOP; - base_style = BS_PUSHBOX; - class = CTL_BUTTON; - } - control_params - { - $$ = $3; - } - | PUSHBUTTON - { - default_style = BS_PUSHBUTTON | WS_TABSTOP; - base_style = BS_PUSHBUTTON | WS_TABSTOP; - class = CTL_BUTTON; - } - control_params - { - $$ = $3; - } - | RADIOBUTTON - { - default_style = BS_RADIOBUTTON | WS_TABSTOP; - base_style = BS_RADIOBUTTON; - class = CTL_BUTTON; - } - control_params - { - $$ = $3; - } - | RTEXT - { - default_style = SS_RIGHT | WS_GROUP; - base_style = SS_RIGHT; - class = CTL_STATIC; - } - control_params - { - $$ = $3; - } - | SCROLLBAR - { - default_style = SBS_HORZ; - base_style = 0; - class = CTL_SCROLLBAR; - } - control_params - { - $$ = $3; - } - | STATE3 - { - default_style = BS_3STATE | WS_TABSTOP; - base_style = BS_3STATE; - class = CTL_BUTTON; - } - control_params - { - $$ = $3; - } - | USERBUTTON QUOTEDSTRING ',' numexpr ',' numexpr ',' numexpr ',' - numexpr ',' numexpr ',' - { style = WS_CHILD | WS_VISIBLE; } - styleexpr optcnumexpr - { - $$ = define_control ($2, $4, $6, $8, $10, $12, CTL_BUTTON, - style, $16); - } - ; - -/* Parameters for a control. The static variables DEFAULT_STYLE, - BASE_STYLE, and CLASS must be initialized before this nonterminal - is used. DEFAULT_STYLE is the style to use if no style expression - is specified. BASE_STYLE is the base style to use if a style - expression is specified; the style expression modifies the base - style. CLASS is the class of the control. */ - -control_params: - optstringc numexpr cnumexpr cnumexpr cnumexpr cnumexpr - opt_control_data - { - $$ = define_control ($1, $2, $3, $4, $5, $6, class, - default_style | WS_CHILD | WS_VISIBLE, 0); - if ($7 != NULL) - { - if (dialog.ex == NULL) - rcparse_warning (_("control data requires DIALOGEX")); - $$->data = $7; - } - } - | optstringc 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) - { - if (dialog.ex == NULL) - rcparse_warning (_("control data requires DIALOGEX")); - $$->data = $9; - } - } - | optstringc numexpr cnumexpr cnumexpr cnumexpr cnumexpr - control_params_styleexpr cnumexpr cnumexpr opt_control_data - { - $$ = define_control ($1, $2, $3, $4, $5, $6, class, style, $8); - if (dialog.ex == NULL) - rcparse_warning (_("help ID requires DIALOGEX")); - $$->help = $9; - $$->data = $10; - } - ; - -optstringc: - /* empty */ - { - $$ = NULL; - } - | QUOTEDSTRING - { - $$ = $1; - } - | QUOTEDSTRING ',' - { - $$ = $1; - } - ; - -opt_control_data: - /* empty */ - { - $$ = NULL; - } - | BEG optrcdata_data END - { - $$ = $2.first; - } - ; - -/* These only exist to parse a reduction out of a common case. */ - -control_styleexpr: - ',' - { style = WS_CHILD | WS_VISIBLE; } - styleexpr - ; - -icon_styleexpr: - ',' - { style = SS_ICON | WS_CHILD | WS_VISIBLE; } - styleexpr - ; - -control_params_styleexpr: - ',' - { style = base_style | WS_CHILD | WS_VISIBLE; } - styleexpr - ; - -/* Font resources. */ - -font: - id FONT memflags_move_discard file_name - { - define_font ($1, &$3, $4); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -/* Icon resources. */ - -icon: - id ICON memflags_move_discard file_name - { - define_icon ($1, &$3, $4); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -/* Language command. This changes the static variable language, which - affects all subsequent resources. */ - -language: - LANGUAGE numexpr cnumexpr - { - language = $2 | ($3 << SUBLANG_SHIFT); - } - ; - -/* Menu resources. */ - -menu: - id MENU suboptions BEG menuitems END - { - define_menu ($1, &$3, $5); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -menuitems: - /* empty */ - { - $$ = NULL; - } - | menuitems menuitem - { - if ($1 == NULL) - $$ = $2; - else - { - struct menuitem **pp; - - for (pp = &$1->next; *pp != NULL; pp = &(*pp)->next) - ; - *pp = $2; - $$ = $1; - } - } - ; - -menuitem: - MENUITEM QUOTEDSTRING cnumexpr menuitem_flags - { - $$ = define_menuitem ($2, $3, $4, 0, 0, NULL); - } - | MENUITEM SEPARATOR - { - $$ = define_menuitem (NULL, 0, 0, 0, 0, NULL); - } - | POPUP QUOTEDSTRING menuitem_flags BEG menuitems END - { - $$ = define_menuitem ($2, 0, $3, 0, 0, $5); - } - ; - -menuitem_flags: - /* empty */ - { - $$ = 0; - } - | menuitem_flags ',' menuitem_flag - { - $$ = $1 | $3; - } - | menuitem_flags menuitem_flag - { - $$ = $1 | $2; - } - ; - -menuitem_flag: - CHECKED - { - $$ = MENUITEM_CHECKED; - } - | GRAYED - { - $$ = MENUITEM_GRAYED; - } - | HELP - { - $$ = MENUITEM_HELP; - } - | INACTIVE - { - $$ = MENUITEM_INACTIVE; - } - | MENUBARBREAK - { - $$ = MENUITEM_MENUBARBREAK; - } - | MENUBREAK - { - $$ = MENUITEM_MENUBREAK; - } - ; - -/* Menuex resources. */ - -menuex: - id MENUEX suboptions BEG menuexitems END - { - define_menu ($1, &$3, $5); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -menuexitems: - /* empty */ - { - $$ = NULL; - } - | menuexitems menuexitem - { - if ($1 == NULL) - $$ = $2; - else - { - struct menuitem **pp; - - for (pp = &$1->next; *pp != NULL; pp = &(*pp)->next) - ; - *pp = $2; - $$ = $1; - } - } - ; - -menuexitem: - MENUITEM QUOTEDSTRING - { - $$ = define_menuitem ($2, 0, 0, 0, 0, NULL); - } - | MENUITEM QUOTEDSTRING cnumexpr - { - $$ = define_menuitem ($2, $3, 0, 0, 0, NULL); - } - | MENUITEM QUOTEDSTRING cnumexpr cnumexpr optcnumexpr - { - $$ = define_menuitem ($2, $3, $4, $5, 0, NULL); - } - | MENUITEM SEPARATOR - { - $$ = define_menuitem (NULL, 0, 0, 0, 0, NULL); - } - | POPUP QUOTEDSTRING BEG menuexitems END - { - $$ = define_menuitem ($2, 0, 0, 0, 0, $4); - } - | POPUP QUOTEDSTRING cnumexpr BEG menuexitems END - { - $$ = define_menuitem ($2, $3, 0, 0, 0, $5); - } - | POPUP QUOTEDSTRING cnumexpr cnumexpr BEG menuexitems END - { - $$ = define_menuitem ($2, $3, $4, 0, 0, $6); - } - | POPUP QUOTEDSTRING cnumexpr cnumexpr cnumexpr optcnumexpr - BEG menuexitems END - { - $$ = define_menuitem ($2, $3, $4, $5, $6, $8); - } - ; - -/* Messagetable resources. */ - -messagetable: - id MESSAGETABLE memflags_move file_name - { - define_messagetable ($1, &$3, $4); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -/* Rcdata resources. */ - -rcdata: - id RCDATA suboptions BEG optrcdata_data END - { - define_rcdata ($1, &$3, $5.first); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -/* We use a different lexing algorithm, because rcdata strings may - contain embedded null bytes, and we need to know the length to use. */ - -optrcdata_data: - { - rcparse_rcdata (); - } - optrcdata_data_int - { - rcparse_normal (); - $$ = $2; - } - ; - -optrcdata_data_int: - /* empty */ - { - $$.first = NULL; - $$.last = NULL; - } - | rcdata_data - { - $$ = $1; - } - ; - -rcdata_data: - SIZEDSTRING - { - struct rcdata_item *ri; - - ri = define_rcdata_string ($1.s, $1.length); - $$.first = ri; - $$.last = ri; - } - | sizednumexpr - { - struct rcdata_item *ri; - - ri = define_rcdata_number ($1.val, $1.dword); - $$.first = ri; - $$.last = ri; - } - | rcdata_data ',' SIZEDSTRING - { - struct rcdata_item *ri; - - ri = define_rcdata_string ($3.s, $3.length); - $$.first = $1.first; - $1.last->next = ri; - $$.last = ri; - } - | rcdata_data ',' sizednumexpr - { - struct rcdata_item *ri; - - ri = define_rcdata_number ($3.val, $3.dword); - $$.first = $1.first; - $1.last->next = ri; - $$.last = ri; - } - ; - -/* Stringtable resources. */ - -stringtable: - STRINGTABLE suboptions BEG - { sub_res_info = $2; } - string_data END - ; - -string_data: - /* empty */ - | string_data numexpr QUOTEDSTRING - { - define_stringtable (&sub_res_info, $2, $3); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - | string_data numexpr ',' QUOTEDSTRING - { - define_stringtable (&sub_res_info, $2, $4); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -/* User defined resources. We accept general suboptions in the - file_name case to keep the parser happy. */ - -user: - id id suboptions BEG optrcdata_data END - { - define_user_data ($1, $2, &$3, $5.first); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - | id id suboptions file_name - { - define_user_file ($1, $2, &$3, $4); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -/* Versioninfo resources. */ - -versioninfo: - id VERSIONINFO fixedverinfo BEG verblocks END - { - define_versioninfo ($1, language, $3, $5); - if (yychar != YYEMPTY) - YYERROR; - rcparse_discard_strings (); - } - ; - -fixedverinfo: - /* empty */ - { - $$ = ((struct fixed_versioninfo *) - res_alloc (sizeof (struct fixed_versioninfo))); - memset ($$, 0, sizeof (struct fixed_versioninfo)); - } - | fixedverinfo FILEVERSION numexpr cnumexpr cnumexpr cnumexpr - { - $1->file_version_ms = ($3 << 16) | $4; - $1->file_version_ls = ($5 << 16) | $6; - $$ = $1; - } - | fixedverinfo PRODUCTVERSION numexpr cnumexpr cnumexpr cnumexpr - { - $1->product_version_ms = ($3 << 16) | $4; - $1->product_version_ls = ($5 << 16) | $6; - $$ = $1; - } - | fixedverinfo FILEFLAGSMASK numexpr - { - $1->file_flags_mask = $3; - $$ = $1; - } - | fixedverinfo FILEFLAGS numexpr - { - $1->file_flags = $3; - $$ = $1; - } - | fixedverinfo FILEOS numexpr - { - $1->file_os = $3; - $$ = $1; - } - | fixedverinfo FILETYPE numexpr - { - $1->file_type = $3; - $$ = $1; - } - | fixedverinfo FILESUBTYPE numexpr - { - $1->file_subtype = $3; - $$ = $1; - } - ; - -/* To handle verblocks successfully, the lexer handles BLOCK - specially. A BLOCK "StringFileInfo" is returned as - BLOCKSTRINGFILEINFO. A BLOCK "VarFileInfo" is returned as - BLOCKVARFILEINFO. A BLOCK with some other string returns BLOCK - with the string as the value. */ - -verblocks: - /* empty */ - { - $$ = NULL; - } - | verblocks BLOCKSTRINGFILEINFO BEG BLOCK BEG vervals END END - { - $$ = append_ver_stringfileinfo ($1, $4, $6); - } - | verblocks BLOCKVARFILEINFO BEG VALUE QUOTEDSTRING vertrans END - { - $$ = append_ver_varfileinfo ($1, $5, $6); - } - ; - -vervals: - /* empty */ - { - $$ = NULL; - } - | vervals VALUE QUOTEDSTRING ',' QUOTEDSTRING - { - $$ = append_verval ($1, $3, $5); - } - ; - -vertrans: - /* empty */ - { - $$ = NULL; - } - | vertrans cnumexpr cnumexpr - { - $$ = append_vertrans ($1, $2, $3); - } - ; - -/* A resource ID. */ - -id: - posnumexpr - { - $$.named = 0; - $$.u.id = $1; - } - | STRING - { - char *copy, *s; - - /* It seems that resource ID's are forced to upper case. */ - copy = xstrdup ($1); - for (s = copy; *s != '\0'; s++) - *s = TOUPPER (*s); - res_string_to_id (&$$, copy); - free (copy); - } - ; - -/* A resource reference. */ - -resname: - QUOTEDSTRING - { - $$ = $1; - } - | QUOTEDSTRING ',' - { - $$ = $1; - } - | STRING ',' - { - $$ = $1; - } - ; - - -resref: - posnumexpr ',' - { - $$.named = 0; - $$.u.id = $1; - } - | resname - { - char *copy, *s; - - /* It seems that resource ID's are forced to upper case. */ - copy = xstrdup ($1); - for (s = copy; *s != '\0'; s++) - *s = TOUPPER (*s); - res_string_to_id (&$$, copy); - free (copy); - } - ; - -/* Generic suboptions. These may appear before the BEGIN in any - multiline statement. */ - -suboptions: - /* empty */ - { - memset (&$$, 0, sizeof (struct res_res_info)); - $$.language = language; - /* FIXME: Is this the right default? */ - $$.memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE; - } - | suboptions memflag - { - $$ = $1; - $$.memflags |= $2.on; - $$.memflags &=~ $2.off; - } - | suboptions CHARACTERISTICS numexpr - { - $$ = $1; - $$.characteristics = $3; - } - | suboptions LANGUAGE numexpr cnumexpr - { - $$ = $1; - $$.language = $3 | ($4 << SUBLANG_SHIFT); - } - | suboptions VERSIONK numexpr - { - $$ = $1; - $$.version = $3; - } - ; - -/* Memory flags which default to MOVEABLE and DISCARDABLE. */ - -memflags_move_discard: - /* empty */ - { - memset (&$$, 0, sizeof (struct res_res_info)); - $$.language = language; - $$.memflags = MEMFLAG_MOVEABLE | MEMFLAG_DISCARDABLE; - } - | memflags_move_discard memflag - { - $$ = $1; - $$.memflags |= $2.on; - $$.memflags &=~ $2.off; - } - ; - -/* Memory flags which default to MOVEABLE. */ - -memflags_move: - /* empty */ - { - memset (&$$, 0, sizeof (struct res_res_info)); - $$.language = language; - $$.memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE; - } - | memflags_move memflag - { - $$ = $1; - $$.memflags |= $2.on; - $$.memflags &=~ $2.off; - } - ; - -/* Memory flags. This returns a struct with two integers, because we - sometimes want to set bits and we sometimes want to clear them. */ - -memflag: - MOVEABLE - { - $$.on = MEMFLAG_MOVEABLE; - $$.off = 0; - } - | FIXED - { - $$.on = 0; - $$.off = MEMFLAG_MOVEABLE; - } - | PURE - { - $$.on = MEMFLAG_PURE; - $$.off = 0; - } - | IMPURE - { - $$.on = 0; - $$.off = MEMFLAG_PURE; - } - | PRELOAD - { - $$.on = MEMFLAG_PRELOAD; - $$.off = 0; - } - | LOADONCALL - { - $$.on = 0; - $$.off = MEMFLAG_PRELOAD; - } - | DISCARDABLE - { - $$.on = MEMFLAG_DISCARDABLE; - $$.off = 0; - } - ; - -/* A file name. */ - -file_name: - QUOTEDSTRING - { - $$ = $1; - } - | STRING - { - $$ = $1; - } - ; - -/* A style expression. This changes the static variable STYLE. We do - it this way because rc appears to permit a style to be set to - something like - WS_GROUP | NOT WS_TABSTOP - to mean that a default of WS_TABSTOP should be removed. Anything - which wants to accept a style must first set STYLE to the default - value. The styleexpr nonterminal will change STYLE as specified by - the user. Note that we do not accept arbitrary expressions here, - just numbers separated by '|'. */ - -styleexpr: - parennumber - { - style |= $1; - } - | NOT parennumber - { - style &=~ $2; - } - | styleexpr '|' parennumber - { - style |= $3; - } - | styleexpr '|' NOT parennumber - { - style &=~ $4; - } - ; - -parennumber: - NUMBER - { - $$ = $1.val; - } - | '(' numexpr ')' - { - $$ = $2; - } - ; - -/* An optional expression with a leading comma. */ - -optcnumexpr: - /* empty */ - { - $$ = 0; - } - | cnumexpr - { - $$ = $1; - } - ; - -/* An expression with a leading comma. */ - -cnumexpr: - ',' numexpr - { - $$ = $2; - } - ; - -/* A possibly negated numeric expression. */ - -numexpr: - sizednumexpr - { - $$ = $1.val; - } - ; - -/* A possibly negated expression with a size. */ - -sizednumexpr: - NUMBER - { - $$ = $1; - } - | '(' sizednumexpr ')' - { - $$ = $2; - } - | '~' sizednumexpr %prec '~' - { - $$.val = ~ $2.val; - $$.dword = $2.dword; - } - | '-' sizednumexpr %prec NEG - { - $$.val = - $2.val; - $$.dword = $2.dword; - } - | sizednumexpr '*' sizednumexpr - { - $$.val = $1.val * $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizednumexpr '/' sizednumexpr - { - $$.val = $1.val / $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizednumexpr '%' sizednumexpr - { - $$.val = $1.val % $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizednumexpr '+' sizednumexpr - { - $$.val = $1.val + $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizednumexpr '-' sizednumexpr - { - $$.val = $1.val - $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizednumexpr '&' sizednumexpr - { - $$.val = $1.val & $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizednumexpr '^' sizednumexpr - { - $$.val = $1.val ^ $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizednumexpr '|' sizednumexpr - { - $$.val = $1.val | $3.val; - $$.dword = $1.dword || $3.dword; - } - ; - -/* An expression with a leading comma which does not use unary - negation. */ - -cposnumexpr: - ',' posnumexpr - { - $$ = $2; - } - ; - -/* An expression which does not use unary negation. */ - -posnumexpr: - sizedposnumexpr - { - $$ = $1.val; - } - ; - -/* An expression which does not use unary negation. We separate unary - negation to avoid parsing conflicts when two numeric expressions - appear consecutively. */ - -sizedposnumexpr: - NUMBER - { - $$ = $1; - } - | '(' sizednumexpr ')' - { - $$ = $2; - } - | '~' sizednumexpr %prec '~' - { - $$.val = ~ $2.val; - $$.dword = $2.dword; - } - | sizedposnumexpr '*' sizednumexpr - { - $$.val = $1.val * $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizedposnumexpr '/' sizednumexpr - { - $$.val = $1.val / $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizedposnumexpr '%' sizednumexpr - { - $$.val = $1.val % $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizedposnumexpr '+' sizednumexpr - { - $$.val = $1.val + $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizedposnumexpr '-' sizednumexpr - { - $$.val = $1.val - $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizedposnumexpr '&' sizednumexpr - { - $$.val = $1.val & $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizedposnumexpr '^' sizednumexpr - { - $$.val = $1.val ^ $3.val; - $$.dword = $1.dword || $3.dword; - } - | sizedposnumexpr '|' sizednumexpr - { - $$.val = $1.val | $3.val; - $$.dword = $1.dword || $3.dword; - } - ; - -%% - -/* Set the language from the command line. */ - -void -rcparse_set_language (lang) - int lang; -{ - language = lang; -} diff --git a/contrib/binutils/binutils/readelf.1 b/contrib/binutils/binutils/readelf.1 deleted file mode 100644 index bcef9862babb..000000000000 --- a/contrib/binutils/binutils/readelf.1 +++ /dev/null @@ -1,291 +0,0 @@ -.\" Automatically generated by Pod::Man version 1.02 -.\" Wed May 30 12:24:29 2001 -.\" -.\" Standard preamble: -.\" ====================================================================== -.de Sh \" Subsection heading -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp \" Vertical space (when we can't use .PP) -.if t .sp .5v -.if n .sp -.. -.de Ip \" List item -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb \" Begin verbatim text -.ft CW -.nf -.ne \\$1 -.. -.de Ve \" End verbatim text -.ft R - -.fi -.. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used -.\" to do unbreakable dashes and therefore won't be available. \*(C` and -.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> -.tr \(*W-|\(bv\*(Tr -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" -. ds C` ` -. ds C' ' -'br\} -.el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' -'br\} -.\" -.\" If the F register is turned on, we'll generate index entries on stderr -.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and -.\" index entries marked with X<> in POD. Of course, you'll have to process -.\" the output yourself in some meaningful fashion. -.if \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" -. . -. nr % 0 -. rr F -.\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it -.\" makes way too many mistakes in technical documents. -.hy 0 -.\" -.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). -.\" Fear. Run. Save yourself. No user-serviceable parts. -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds / -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -.\} -.rm #[ #] #H #V #F C -.\" ====================================================================== -.\" -.IX Title "READELF.1 1" -.TH READELF.1 1 "binutils-2.11.90" "2001-05-30" "GNU" -.UC -.SH "NAME" -readelf \- Displays information about \s-1ELF\s0 files. -.SH "SYNOPSIS" -.IX Header "SYNOPSIS" -readelf [ \-a | \-\-all ] - [ \-h | \-\-file-header] - [ \-l | \-\-program-headers | \-\-segments] - [ \-S | \-\-section-headers | \-\-sections] - [ \-e | \-\-headers] - [ \-s | \-\-syms | \-\-symbols] - [ \-n | \-\-notes] - [ \-r | \-\-relocs] - [ \-u | \-\-unwind] - [ \-d | \-\-dynamic] - [ \-V | \-\-version-info] - [ \-D | \-\-use-dynamic] - [ \-x <number> | \-\-hex-dump=<number>] - [ \-w[liaprf] | \-\-debug-dump[=info,=line,=abbrev,=pubnames,=ranges,=frames]] - [ \-\-histogram] - [ \-v | \-\-version] - [ \-H | \-\-help] - \fIelffile\fR... -.SH "DESCRIPTION" -.IX Header "DESCRIPTION" -\&\f(CW\*(C`readelf\*(C'\fR displays information about one or more \s-1ELF\s0 format object -files. The options control what particular information to display. -.PP -\&\fIelffile\fR... are the object files to be examined. At the -moment, \f(CW\*(C`readelf\*(C'\fR does not support examining archives, nor does it -support examing 64 bit \s-1ELF\s0 files. -.SH "OPTIONS" -.IX Header "OPTIONS" -The long and short forms of options, shown here as alternatives, are -equivalent. At least one option besides \fB\-v\fR or \fB\-H\fR must be -given. -.Ip "\f(CW\*(C`\-a\*(C'\fR" 4 -.IX Item "-a" -.Ip "\f(CW\*(C`\-\-all\*(C'\fR" 4 -.IX Item "--all" -Equivalent to specifiying \fB\*(--file-header\fR, -\&\fB\*(--program-headers\fR, \fB\*(--sections\fR, \fB\*(--symbols\fR, -\&\fB\*(--relocs\fR, \fB\*(--dynamic\fR, \fB\*(--notes\fR and -\&\fB\*(--version-info\fR. -.Ip "\f(CW\*(C`\-h\*(C'\fR" 4 -.IX Item "-h" -.Ip "\f(CW\*(C`\-\-file\-header\*(C'\fR" 4 -.IX Item "--file-header" -Displays the information contained in the \s-1ELF\s0 header at the start of the -file. -.Ip "\f(CW\*(C`\-l\*(C'\fR" 4 -.IX Item "-l" -.Ip "\f(CW\*(C`\-\-program\-headers\*(C'\fR" 4 -.IX Item "--program-headers" -.Ip "\f(CW\*(C`\-\-segments\*(C'\fR" 4 -.IX Item "--segments" -Displays the information contained in the file's segment headers, if it -has any. -.Ip "\f(CW\*(C`\-S\*(C'\fR" 4 -.IX Item "-S" -.Ip "\f(CW\*(C`\-\-sections\*(C'\fR" 4 -.IX Item "--sections" -.Ip "\f(CW\*(C`\-\-section\-headers\*(C'\fR" 4 -.IX Item "--section-headers" -Displays the information contained in the file's section headers, if it -has any. -.Ip "\f(CW\*(C`\-s\*(C'\fR" 4 -.IX Item "-s" -.Ip "\f(CW\*(C`\-\-symbols\*(C'\fR" 4 -.IX Item "--symbols" -.Ip "\f(CW\*(C`\-\-syms\*(C'\fR" 4 -.IX Item "--syms" -Displays the entries in symbol table section of the file, if it has one. -.Ip "\f(CW\*(C`\-e\*(C'\fR" 4 -.IX Item "-e" -.Ip "\f(CW\*(C`\-\-headers\*(C'\fR" 4 -.IX Item "--headers" -Display all the headers in the file. Equivalent to \fB\-h \-l \-S\fR. -.Ip "\f(CW\*(C`\-n\*(C'\fR" 4 -.IX Item "-n" -.Ip "\f(CW\*(C`\-\-notes\*(C'\fR" 4 -.IX Item "--notes" -Displays the contents of the \s-1NOTE\s0 segment, if it exists. -.Ip "\f(CW\*(C`\-r\*(C'\fR" 4 -.IX Item "-r" -.Ip "\f(CW\*(C`\-\-relocs\*(C'\fR" 4 -.IX Item "--relocs" -Displays the contents of the file's relocation section, if it has one. -.Ip "\f(CW\*(C`\-u\*(C'\fR" 4 -.IX Item "-u" -.Ip "\f(CW\*(C`\-\-unwind\*(C'\fR" 4 -.IX Item "--unwind" -Displays the contents of the file's unwind section, if it has one. Only -the unwind sections for \s-1IA64\s0 \s-1ELF\s0 files are currently supported. -.Ip "\f(CW\*(C`\-d\*(C'\fR" 4 -.IX Item "-d" -.Ip "\f(CW\*(C`\-\-dynamic\*(C'\fR" 4 -.IX Item "--dynamic" -Displays the contents of the file's dynamic section, if it has one. -.Ip "\f(CW\*(C`\-V\*(C'\fR" 4 -.IX Item "-V" -.Ip "\f(CW\*(C`\-\-version\-info\*(C'\fR" 4 -.IX Item "--version-info" -Displays the contents of the version sections in the file, it they -exist. -.Ip "\f(CW\*(C`\-D\*(C'\fR" 4 -.IX Item "-D" -.Ip "\f(CW\*(C`\-\-use\-dynamic\*(C'\fR" 4 -.IX Item "--use-dynamic" -When displaying symbols, this option makes \f(CW\*(C`readelf\*(C'\fR use the -symbol table in the file's dynamic section, rather than the one in the -symbols section. -.Ip "\f(CW\*(C`\-x <number>\*(C'\fR" 4 -.IX Item "-x <number>" -.Ip "\f(CW\*(C`\-\-hex\-dump=<number>\*(C'\fR" 4 -.IX Item "--hex-dump=<number>" -Displays the contents of the indicated section as a hexadecimal dump. -.Ip "\f(CW\*(C`\-w[liaprf]\*(C'\fR" 4 -.IX Item "-w[liaprf]" -.Ip "\f(CW\*(C`\-\-debug\-dump[=line,=info,=abbrev,=pubnames,=ranges,=frames]\*(C'\fR" 4 -.IX Item "--debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=frames]" -Displays the contents of the debug sections in the file, if any are -present. If one of the optional letters or words follows the switch -then only data found in those specific sections will be dumped. -.Ip "\f(CW\*(C`\-\-histogram\*(C'\fR" 4 -.IX Item "--histogram" -Display a histogram of bucket list lengths when displaying the contents -of the symbol tables. -.Ip "\f(CW\*(C`\-v\*(C'\fR" 4 -.IX Item "-v" -.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4 -.IX Item "--version" -Display the version number of readelf. -.Ip "\f(CW\*(C`\-H\*(C'\fR" 4 -.IX Item "-H" -.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4 -.IX Item "--help" -Display the command line options understood by \f(CW\*(C`readelf\*(C'\fR. -.SH "SEE ALSO" -.IX Header "SEE ALSO" -\&\fIobjdump\fR\|(1), and the Info entries for \fIbinutils\fR. -.SH "COPYRIGHT" -.IX Header "COPYRIGHT" -Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. -.PP -Permission is granted to copy, distribute and/or modify this document -under the terms of the \s-1GNU\s0 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 \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/contrib/binutils/binutils/size.1 b/contrib/binutils/binutils/size.1 deleted file mode 100644 index 7f8f9ef4e63b..000000000000 --- a/contrib/binutils/binutils/size.1 +++ /dev/null @@ -1,518 +0,0 @@ -.\" Copyright (c) 1991, 2000 Free Software Foundation -.\" See section COPYING for conditions for redistribution -.TH size 1 "5 November 1991" "Free Software Foundation" "GNU Development Tools" -.de BP -.sp -.ti \-.2i -\(** -.. - -.SH NAME -size \- list section sizes and total size. - -.SH SYNOPSIS -.hy 0 -.na -.B size -.RB "[\|" \-A \||\| \-B \||\| \c -.BI "\-\-format=" compatibility\c -\&\|] -.RB "[\|" \-\-help "\|]" -.RB "[\|" \-d \||\| \-o \||\| \-x\c -\||\|\c -.BI "\-\-radix=" number\c -\&\|] -.RB "[\|" \c -.BI "\-\-target=" bfdname\c -\&\|] -.RB "[\|" \-V \||\| \-\-version "\|]" -.I objfile\c -\&.\|.\|. -.ad b -.hy 1 -.SH DESCRIPTION -The GNU \c -.B size\c -\& utility lists the section sizes\(em\&and the total -size\(em\&for each of the object files -.I objfile -in its argument list. -By default, one line of output is generated for each object file or each -module in an archive. - -.SH OPTIONS -.TP -.B \-A -.TP -.B \-B -.TP -.BI "\-\-format " "compatibility" -Using one of these options, you can choose whether the output from GNU -\c -.B size\c -\& resembles output from System V \c -.B size\c -\& (using `\|\c -.B \-A\c -\|', -or `\|\c -.B \-\-format=sysv\c -\|'), or Berkeley \c -.B size\c -\& (using `\|\c -.B \-B\c -\|', or -`\|\c -.B \-\-format=berkeley\c -\|'). The default is the one-line format similar to -Berkeley's. - -.TP -.B \-\-help -Show a summary of acceptable arguments and options. - -.TP -.B \-d -.TP -.B \-o -.TP -.B \-x -.TP -.BI "\-\-radix " "number" -Using one of these options, you can control whether the size of each -section is given in decimal (`\|\c -.B \-d\c -\|', or `\|\c -.B \-\-radix 10\c -\|'); octal -(`\|\c -.B \-o\c -\|', or `\|\c -.B \-\-radix 8\c -\|'); or hexadecimal (`\|\c -.B \-x\c -\|', or -`\|\c -.B \-\-radix 16\c -\|'). In `\|\c -.B \-\-radix \c -.I number\c -\&\c -\|', only the three -values (8, 10, 16) are supported. The total size is always given in two -radices; decimal and hexadecimal for `\|\c -.B \-d\c -\|' or `\|\c -.B \-x\c -\|' output, or -octal and hexadecimal if you're using `\|\c -.B \-o\c -\|'. - -.TP -.BI "\-\-target " "bfdname" -You can specify a particular object-code format for \c -.I objfile\c -\& as -\c -.I bfdname\c -\&. This may not be necessary; \c -.I size\c -\& can -automatically recognize many formats. See -.BR objdump ( 1 ) -for information -on listing available formats. - -.TP -.B \-V -.TP -.B \-\-version -Display version number information on \c -.B size\c -\& itself. - -.SH "SEE ALSO" -.RB "`\|" binutils "\|'" -entry in -.BR info ; -.IR "The GNU Binary Utilities" , - Roland H. Pesch (October 1991); -.BR ar "(" 1 ")," -.BR objdump ( 1 ). - -.SH COPYING -Copyright (c) 1991, 2000 Free Software Foundation, Inc. -.PP -This document is distributed under the terms of the GNU Free -Documentation License, version 1.1. That license is described in the -sources for this manual page, but it is not displayed here in order to -make this manual more consise. Copies of this license can also be -obtained from: http://www.gnu.org/copyleft/. - -\" .SH 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. -\" .PP -\" 0. PREAMBLE -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 1. APPLICABILITY AND DEFINITIONS -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 2. VERBATIM COPYING -\" .PP -\" 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. -\" .PP -\" You may also lend copies, under the same conditions stated above, and -\" you may publicly display copies. -\" .PP -\" 3. COPYING IN QUANTITY -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 4. MODIFICATIONS -\" .PP -\" 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: -\" .PP -\" 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. -\" .PP -\" 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). -\" .PP -\" C. State on the Title page the name of the publisher of the -\" Modified Version, as the publisher. -\" .PP -\" D. Preserve all the copyright notices of the Document. -\" .PP -\" E. Add an appropriate copyright notice for your modifications -\" adjacent to the other copyright notices. -\" .PP -\" 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. -\" Preserve in that license notice the full lists of Invariant Sections -\" and required Cover Texts given in the Document's license notice. -\" .PP -\" H. Include an unaltered copy of this License. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" M. Delete any section entitled "Endorsements". Such a section -\" may not be included in the Modified Version. -\" .PP -\" N. Do not retitle any existing section as "Endorsements" -\" or to conflict in title with any Invariant Section. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 5. COMBINING DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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." -\" .PP - -\" 6. COLLECTIONS OF DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 7. AGGREGATION WITH INDEPENDENT WORKS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 8. TRANSLATION -\" .PP -\" 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. -\" .PP - -\" 9. TERMINATION -\" .PP -\" 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. -\" .PP - -\" 10. FUTURE REVISIONS OF THIS LICENSE -\" .PP -\" 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/. -\" .PP -\" 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. -\" .PP - -\" ADDENDUM: How to use this License for your documents -\" .PP -\" 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: -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. diff --git a/contrib/binutils/binutils/strings.1 b/contrib/binutils/binutils/strings.1 deleted file mode 100644 index 6cbf041a4cd1..000000000000 --- a/contrib/binutils/binutils/strings.1 +++ /dev/null @@ -1,508 +0,0 @@ -.\" Copyright (c) 1993, 94, 95, 2000 Free Software Foundation -.\" See section COPYING for conditions for redistribution -.TH strings 1 "09 March 2000" "Free Software Foundation" "GNU Development Tools" -.de BP -.sp -.ti \-.2i -\(** -.. - -.SH NAME -strings \- print the strings of printable characters in files - -.SH SYNOPSIS -.hy 0 -.na -.B strings -.RB "[\|" \-a | \-\c -.RB | \-\-all "\|]" -.RB "[\|" \-f | \-\-print\-file\-name "\|]" -.RB "[\|" \-o "\|]" -.RB "[\|" \-\-help "\|]" -.RB "[\|" \-v | \-\-version "\|]" -.RB "[\|" \-n -.I min\-len\c -.RI | \-min\-len\c -.RB | "\-\-bytes="\c -.I min\-len\c -\&\|] -.RB "[\|" \-t -.I {o,x,d}\c -.RB "[\|" "\-\-target=\fIbfdname" "\|]" -.RB | "\-\-radix="\c -.I {o,x,d}\c -\&\|] -.I file\c -.ad b -.hy 1 -.SH DESCRIPTION -For each -.I file -given, GNU \c -.B strings -prints the printable character sequences that are at least 4 -characters long (or the number given with the options below) and are -followed by an unprintable character. By default, it only prints the -strings from the initialized and loaded sections of object files; for -other types of files, it prints the strings from the whole file. - -.PP -.B strings -is mainly useful for determining the contents of non-text files. - -.SH OPTIONS -The long and short forms of options, shown here as alternatives, are -equivalent. - -.TP -.B \-a -.TP -.B \-\-all -.TP -.B \- -Do not scan only the initialized and loaded sections of object files; -scan the whole files. - -.TP -.B \-f -.TP -.B \-\-print\-file\-name -Print the name of the file before each string. - -.TP -.B \-\-help -Print a summary of the options to -.B strings -on the standard output and exit. - -.TP -.B \-v -.TP -.B \-\-version -Print the version number -of -.B strings -on the standard output and exit. - -.TP -.B "\-n \fImin\-len\fP" -.TP -.B "\-\fImin\-len\fP" -.TP -.B "\-\-bytes=\fImin\-len\fP" -Print sequences of characters that are at least -.I min\-len -characters long, instead of the default 4. - -.TP -.BR "\-t " {o,x,d} -.TP -.BR "\-\-radix=" {o,x,d} -Print the offset within the file before each string. The single -character argument specifies the radix of the offset\(emoctal, -hexadecimal, or decimal. - -.TP -.BI "\-\-target=" "bfdname" -Specify an object code format other than your system's default format. -See -.BR objdump ( 1 ), -for information on listing available formats. - -.TP -.B \-o -Like -.BR "\-t o" . - -.PP - -.SH "SEE ALSO" -.RB "`\|" binutils "\|'" -entry in -.B -info\c -\&; -.I -The GNU Binary Utilities\c -\&, Roland H. Pesch (October 1991); -.BR ar ( 1 ), -.BR nm ( 1 ), -.BR objdump ( 1 ), -.BR ranlib ( 1 ). - - -.SH COPYING -Copyright (c) 1993, 2000 Free Software Foundation, Inc. -.PP -This document is distributed under the terms of the GNU Free -Documentation License, version 1.1. That license is described in the -sources for this manual page, but it is not displayed here in order to -make this manual more consise. Copies of this license can also be -obtained from: http://www.gnu.org/copyleft/. - -\" .SH 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. -\" .PP -\" 0. PREAMBLE -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 1. APPLICABILITY AND DEFINITIONS -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 2. VERBATIM COPYING -\" .PP -\" 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. -\" .PP -\" You may also lend copies, under the same conditions stated above, and -\" you may publicly display copies. -\" .PP -\" 3. COPYING IN QUANTITY -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 4. MODIFICATIONS -\" .PP -\" 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: -\" .PP -\" 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. -\" .PP -\" 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). -\" .PP -\" C. State on the Title page the name of the publisher of the -\" Modified Version, as the publisher. -\" .PP -\" D. Preserve all the copyright notices of the Document. -\" .PP -\" E. Add an appropriate copyright notice for your modifications -\" adjacent to the other copyright notices. -\" .PP -\" 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. -\" Preserve in that license notice the full lists of Invariant Sections -\" and required Cover Texts given in the Document's license notice. -\" .PP -\" H. Include an unaltered copy of this License. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" M. Delete any section entitled "Endorsements". Such a section -\" may not be included in the Modified Version. -\" .PP -\" N. Do not retitle any existing section as "Endorsements" -\" or to conflict in title with any Invariant Section. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 5. COMBINING DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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." -\" .PP - -\" 6. COLLECTIONS OF DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 7. AGGREGATION WITH INDEPENDENT WORKS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 8. TRANSLATION -\" .PP -\" 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. -\" .PP - -\" 9. TERMINATION -\" .PP -\" 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. -\" .PP - -\" 10. FUTURE REVISIONS OF THIS LICENSE -\" .PP -\" 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/. -\" .PP -\" 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. -\" .PP - -\" ADDENDUM: How to use this License for your documents -\" .PP -\" 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: -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. diff --git a/contrib/binutils/binutils/strip.1 b/contrib/binutils/binutils/strip.1 deleted file mode 100644 index 83c3fe603056..000000000000 --- a/contrib/binutils/binutils/strip.1 +++ /dev/null @@ -1,542 +0,0 @@ -.\" Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 1998, 2000 Free Software Foundation -.\" See section COPYING for conditions for redistribution -.TH strip 1 "5 November 1991" "Free Software Foundation" "GNU Development Tools" -.de BP -.sp -.ti \-.2i -\(** -.. - -.SH NAME -strip \- Discard symbols from object files. - -.SH SYNOPSIS -.hy 0 -.na -.B strip -.RB "[\|" \-F\ \fIbfdname\fR\ |\ \fB\-\-target=\fIbfdname\fP "\|]" -.RB "[\|" \-I\ \fIbfdname\fR\ |\ \fB\-\-input\-target=\fIbfdname\fP "\|]" -.RB "[\|" \-O\ \fIbfdname\fR\ |\ \fB\-\-output\-target=\fIbfdname\fP "\|]" -.RB "[\|" \-R\ \fIsectionname\fR\ |\ \fB\-\-remove\-section=\fIsectionname\fP "\|]" -.RB "[\|" \-s\fR\ |\ \fB\-\-strip\-all "\|]" -.RB "[\|" \-S\fR\ |\ \fB\-g\fR\ |\ \fB\-\-strip\-debug "\|]" -.RB "[\|" \-\-strip\-unneeded\fR "\|]" -.RB "[\|" \-x\fR\ |\ \fB\-\-discard\-all "\|]" -.RB "[\|" \-X\fR\ |\ \fB\-\-discard\-locals "\|]" -.RB "[\|" \-K\ \fIsymbolname\fR\ |\ \fB\-\-keep\-symbol=\fIsymbolname\fR "\|]" -.RB "[\|" \-N\ \fIsymbolname\fR\ |\ \fB\-\-strip\-symbol=\fIsymbolname\fR "\|]" -.RB "[\|" \-o\ \fIfile\fR "\|]" -.RB "[\|" \-p\fR\ |\ \fB\-\-preserve\-dates "\|]" -.RB "[\|" \-v\fR\ |\ \fB\-\-verbose "\|]" -.RB "[\|" \-V\fR\ |\ \fB\-\-version "\|]" -.RB "[\|" \-V\fR\ |\ \fB\-\-help "\|]" -.I objfile\c -\&.\|.\|. - -.SH DESCRIPTION -GNU -.B strip -discards all symbols from the object files -.IR objfile . -The list of object files may include archives. -At least one object file must be given. - -.P -.B strip -modifies the files named in its argument, -rather than writing modified copies under different names. - -.SH OPTIONS -.TP -.B "\-F \fIbfdname" -.TP -.B "\-\-target=\fIbfdname" -Treat the original \fIobjfile\fP as a file with the object -code format \fIbfdname\fP, and rewrite it in the same format. - -.TP -.B \-\-help -Show a summary of the options to -.B strip -and exit. - -.TP -.B "\-I \fIbfdname -.TP -.B "\-\-input\-target=\fIbfdname" -Treat the original \fIobjfile\fP as a file with the object -code format \fIbfdname\fP. - -.TP -.B "\-O \fIbfdname\fP" -.TP -.B "\-\-output\-target=\fIbfdname" -Replace \fIobjfile\fP with a file in the output format \fIbfdname\fP. - -.TP -.B "\-R \fIsectionname\fP" -.TP -.B "\-\-remove\-section=\fIsectionname" -Remove the named section from the file. This option may be given more -than once. Note that using this option inappropriately may make the -object file unusable. - -.TP -.B \-s -.TP -.B \-\-strip\-all -Remove all symbols. - -.TP -.B \-S -.TP -.B \-g -.TP -.B \-\-strip\-debug -Remove debugging symbols only. - -.TP -.B \-\-strip\-unneeded -Strip all symbols that are not needed for relocation processing. - -.TP -.B \-N \fIsymbolname\fR -.TP -.B \-\-strip\-symbol=\fIsymbolname -Remove symbol \fIsymbolname\fP from the source file. This option -may be given more than once, and may be combined with other strip -options. - -.TP -.B \-o \fIfile\fR -Put the stripped output in \fIfile\fR, rather than replacing the -existing file. When this argument is used, only one \fIobjfile\fR -argument may be specified. - -.TP -.B \-p -.TP -.B \-\-preserve-dates -Preserve the access and modification dates of the file. - -.TP -.B \-x -.TP -.B \-\-discard\-all -Remove non-global symbols. - -.TP -.B \-X -.TP -.B \-\-discard\-locals -Remove compiler-generated local symbols. -(These usually start with ``L'' or ``.''.) - -.TP -.B \-K \fIsymbolname\fR, \fB\-\-keep\-symbol=\fIsymbolname -Copy only symbol \fIsymbolname\fP from the source file. This option -may be given more than once. - -.TP -.B \-N \fIsymbolname\fR, \fB\-\-strip\-symbol=\fIsymbolname -Do not copy symbol \fIsymbolname\fP from the source file. This option -may be given more than once, and may be combined with strip options -other than \fB\-K\fR. - -.TP -.B \-v -.TP -.B \-\-verbose -Verbose output: list all object files modified. In the case of -archives, -.B "strip \-v" -lists all members of the archive. - -.TP -.B \-V -.TP -.B \-\-version -Show the version number for \fBstrip\fP and exit. - -.SH "SEE ALSO" -.RB "`\|" binutils "\|'" -entry in -.BR info ; -.IR "The GNU Binary Utilities" , -Roland H. Pesch (October 1991). - -.SH COPYING -Copyright (c) 1991, 2000 Free Software Foundation, Inc. -.PP -This document is distributed under the terms of the GNU Free -Documentation License, version 1.1. That license is described in the -sources for this manual page, but it is not displayed here in order to -make this manual more consise. Copies of this license can also be -obtained from: http://www.gnu.org/copyleft/. - -\" .SH 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. -\" .PP -\" 0. PREAMBLE -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 1. APPLICABILITY AND DEFINITIONS -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 2. VERBATIM COPYING -\" .PP -\" 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. -\" .PP -\" You may also lend copies, under the same conditions stated above, and -\" you may publicly display copies. -\" .PP -\" 3. COPYING IN QUANTITY -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 4. MODIFICATIONS -\" .PP -\" 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: -\" .PP -\" 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. -\" .PP -\" 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). -\" .PP -\" C. State on the Title page the name of the publisher of the -\" Modified Version, as the publisher. -\" .PP -\" D. Preserve all the copyright notices of the Document. -\" .PP -\" E. Add an appropriate copyright notice for your modifications -\" adjacent to the other copyright notices. -\" .PP -\" 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. -\" Preserve in that license notice the full lists of Invariant Sections -\" and required Cover Texts given in the Document's license notice. -\" .PP -\" H. Include an unaltered copy of this License. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" M. Delete any section entitled "Endorsements". Such a section -\" may not be included in the Modified Version. -\" .PP -\" N. Do not retitle any existing section as "Endorsements" -\" or to conflict in title with any Invariant Section. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 5. COMBINING DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP -\" 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." -\" .PP - -\" 6. COLLECTIONS OF DOCUMENTS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 7. AGGREGATION WITH INDEPENDENT WORKS -\" .PP -\" 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. -\" .PP -\" 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. -\" .PP - -\" 8. TRANSLATION -\" .PP -\" 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. -\" .PP - -\" 9. TERMINATION -\" .PP -\" 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. -\" .PP - -\" 10. FUTURE REVISIONS OF THIS LICENSE -\" .PP -\" 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/. -\" .PP -\" 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. -\" .PP - -\" ADDENDUM: How to use this License for your documents -\" .PP -\" 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: -\" .PP -\" 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". -\" .PP -\" 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. -\" .PP -\" 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. diff --git a/contrib/binutils/binutils/sysinfo.y b/contrib/binutils/binutils/sysinfo.y deleted file mode 100644 index 4aa46073bbbe..000000000000 --- a/contrib/binutils/binutils/sysinfo.y +++ /dev/null @@ -1,442 +0,0 @@ -/* Copyright 2001 Free Software Foundation, Inc. - Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com). - -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 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. */ - -%{ -#include <stdio.h> -#include <stdlib.h> - -extern char *word; -extern char writecode; -extern int number; -extern int unit; -char nice_name[1000]; -char *it; -int sofar; -int width; -int code; -char * repeat; -char *oldrepeat; -char *name; -int rdepth; -char *loop [] = {"","n","m","/*BAD*/"}; -char *names[] = {" ","[n]","[n][m]"}; -char *pnames[]= {"","*","**"}; -%} - - -%union { - int i; - char *s; -} -%token COND -%token REPEAT -%token '(' ')' -%token <s> TYPE -%token <s> NAME -%token <i> NUMBER UNIT -%type <i> attr_size -%type <s> attr_desc attr_id attr_type -%% - -top: { - switch (writecode) - { - case 'i': - printf("#ifdef SYSROFF_SWAP_IN\n"); - break; - case 'p': - printf("#ifdef SYSROFF_p\n"); - break; - case 'd': - break; - case 'g': - printf("#ifdef SYSROFF_SWAP_OUT\n"); - break; - case 'c': - printf("#ifdef SYSROFF_PRINT\n"); - printf("#include <stdio.h>\n"); - printf("#include <stdlib.h>\n"); - printf("#include <ansidecl.h>\n"); - break; - } - } -it_list { - switch (writecode) { - case 'i': - case 'p': - case 'g': - case 'c': - printf("#endif\n"); - break; - case 'd': - break; - } -} - - ; - - -it_list: it it_list - | - ; - -it: - '(' NAME NUMBER - { - it = $2; code = $3; - switch (writecode) - { - case 'd': - printf("\n\n\n#define IT_%s_CODE 0x%x\n", it,code); - printf("struct IT_%s;\n", it); - printf("extern void sysroff_swap_%s_in PARAMS ((struct IT_%s *));\n", - $2, it); - printf("extern void sysroff_swap_%s_out PARAMS ((FILE *, struct IT_%s *));\n", - $2, it); - printf("extern void sysroff_print_%s_out PARAMS ((struct IT_%s *));\n", - $2, it); - printf("struct IT_%s { \n", it); - break; - case 'i': - printf("void sysroff_swap_%s_in(ptr)\n",$2); - printf("struct IT_%s *ptr;\n", it); - printf("{\n"); - printf("char raw[255];\n"); - printf("\tint idx = 0 ;\n"); - printf("\tint size;\n"); - printf("memset(raw,0,255);\n"); - printf("memset(ptr,0,sizeof(*ptr));\n"); - printf("size = fillup(raw);\n"); - break; - case 'g': - printf("void sysroff_swap_%s_out(file,ptr)\n",$2); - printf("FILE * file;\n"); - printf("struct IT_%s *ptr;\n", it); - printf("{\n"); - printf("\tchar raw[255];\n"); - printf("\tint idx = 16 ;\n"); - printf("\tmemset (raw, 0, 255);\n"); - printf("\tcode = IT_%s_CODE;\n", it); - break; - case 'o': - printf("void sysroff_swap_%s_out(abfd,ptr)\n",$2); - printf("bfd * abfd;\n"); - printf("struct IT_%s *ptr;\n",it); - printf("{\n"); - printf("int idx = 0 ;\n"); - break; - case 'c': - printf("void sysroff_print_%s_out(ptr)\n",$2); - printf("struct IT_%s *ptr;\n", it); - printf("{\n"); - printf("itheader(\"%s\", IT_%s_CODE);\n",$2,$2); - break; - - case 't': - break; - } - - } - it_field_list -')' -{ - switch (writecode) { - case 'd': - printf("};\n"); - break; - case 'g': - printf("\tchecksum(file,raw, idx, IT_%s_CODE);\n", it); - - case 'i': - - case 'o': - case 'c': - printf("}\n"); - } -} -; - - - -it_field_list: - it_field it_field_list - | cond_it_field it_field_list - | repeat_it_field it_field_list - | - ; - -repeat_it_field: '(' REPEAT NAME - { - rdepth++; - switch (writecode) - { - case 'c': - if (rdepth==1) - printf("\tprintf(\"repeat %%d\\n\", %s);\n",$3); - if (rdepth==2) - printf("\tprintf(\"repeat %%d\\n\", %s[n]);\n",$3); - case 'i': - case 'g': - case 'o': - - if (rdepth==1) - { - printf("\t{ int n; for (n = 0; n < %s; n++) {\n", $3); - } - if (rdepth == 2) { - printf("\t{ int m; for (m = 0; m < %s[n]; m++) {\n", $3); - } - - break; - } - - oldrepeat = repeat; - repeat = $3; - } - - it_field_list ')' - - { - repeat = oldrepeat; - oldrepeat =0; - rdepth--; - switch (writecode) - { - case 'i': - case 'g': - case 'o': - case 'c': - printf("\t}}\n"); - } - } - ; - - -cond_it_field: '(' COND NAME - { - switch (writecode) - { - case 'i': - case 'g': - case 'o': - case 'c': - printf("\tif (%s) {\n", $3); - break; - } - } - - it_field_list ')' - { - switch (writecode) - { - case 'i': - case 'g': - case 'o': - case 'c': - printf("\t}\n"); - } - } - ; - -it_field: - '(' attr_desc '(' attr_type attr_size ')' attr_id - {name = $7; } - enums ')' - { - char *desc = $2; - char *type = $4; - int size = $5; - char *id = $7; -char *p = names[rdepth]; -char *ptr = pnames[rdepth]; - switch (writecode) - { - case 'g': - if (size % 8) - { - - printf("\twriteBITS(ptr->%s%s,raw,&idx,%d);\n", - id, - names[rdepth], size); - - } - else { - printf("\twrite%s(ptr->%s%s,raw,&idx,%d,file);\n", - type, - id, - names[rdepth],size/8); - } - break; - case 'i': - { - - if (rdepth >= 1) - - { - printf("if (!ptr->%s) ptr->%s = (%s*)xcalloc(%s, sizeof(ptr->%s[0]));\n", - id, - id, - type, - repeat, - id); - } - - if (rdepth == 2) - { - printf("if (!ptr->%s[n]) ptr->%s[n] = (%s**)xcalloc(%s[n], sizeof(ptr->%s[n][0]));\n", - id, - id, - type, - repeat, - id); - } - - } - - if (size % 8) - { - printf("\tptr->%s%s = getBITS(raw,&idx, %d,size);\n", - id, - names[rdepth], - size); - } - else { - printf("\tptr->%s%s = get%s(raw,&idx, %d,size);\n", - id, - names[rdepth], - type, - size/8); - } - break; - case 'o': - printf("\tput%s(raw,%d,%d,&idx,ptr->%s%s);\n", type,size/8,size%8,id,names[rdepth]); - break; - case 'd': - if (repeat) - printf("\t/* repeat %s */\n", repeat); - - if (type[0] == 'I') { - printf("\tint %s%s; \t/* %s */\n",ptr,id, desc); - } - else if (type[0] =='C') { - printf("\tchar %s*%s;\t /* %s */\n",ptr,id, desc); - } - else { - printf("\tbarray %s%s;\t /* %s */\n",ptr,id, desc); - } - break; - case 'c': - printf("tabout();\n"); - printf("\tprintf(\"/*%-30s*/ ptr->%s = \");\n", desc, id); - - if (type[0] == 'I') - printf("\tprintf(\"%%d\\n\",ptr->%s%s);\n", id,p); - else if (type[0] == 'C') - printf("\tprintf(\"%%s\\n\",ptr->%s%s);\n", id,p); - - else if (type[0] == 'B') - { - printf("\tpbarray(&ptr->%s%s);\n", id,p); - } - else abort(); - break; - } - } - - ; - - -attr_type: - TYPE { $$ = $1; } - | { $$ = "INT";} - ; - -attr_desc: - '(' NAME ')' - { $$ = $2; } - ; - -attr_size: - NUMBER UNIT - { $$ = $1 * $2; } - ; - - -attr_id: - '(' NAME ')' { $$ = $2; } - | { $$ = "dummy";} - ; - -enums: - | '(' enum_list ')' ; - -enum_list: - | - enum_list '(' NAME NAME ')' { - switch (writecode) - { - case 'd': - printf("#define %s %s\n", $3,$4); - break; - case 'c': - printf("if (ptr->%s%s == %s) { tabout(); printf(\"%s\\n\");}\n", name, names[rdepth],$4,$3); - } - } - - ; - - - -%% -/* four modes - - -d write structure defintions 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 */ - -int yydebug; -char writecode; - -int -main(ac,av) -int ac; -char **av; -{ - yydebug=0; - if (ac > 1) - writecode = av[1][1]; -if (writecode == 'd') - { - printf("typedef struct { unsigned char *data; int len; } barray; \n"); - printf("typedef int INT;\n"); - printf("typedef char * CHARS;\n"); - - } - yyparse(); -return 0; -} - -int -yyerror(s) - char *s; -{ - fprintf(stderr, "%s\n" , s); - return 0; -} diff --git a/contrib/binutils/binutils/syslex.l b/contrib/binutils/binutils/syslex.l deleted file mode 100644 index 553cbdc8ddd1..000000000000 --- a/contrib/binutils/binutils/syslex.l +++ /dev/null @@ -1,70 +0,0 @@ -%{ -/* Copyright 2001 Free Software Foundation, Inc. - -This file is part of GLD, the Gnu Linker. - -GLD 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. - -GLD 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 GLD; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ - -#include "sysinfo.h" -char *word; -int number; -int unit; - -#ifndef yywrap -static int yywrap () { return 1; } -#endif -%} -%% -"(" { return '(';} -")" { return ')';} -"[" { return '[';} -"]" { return ']';} -" " { ; } -";".* { ; } -"\t" { ; } -"\n" { ; } -"\""[^\"]*"\"" { -yylval.s = malloc(strlen (yytext)); -strcpy(yylval.s, yytext+1); -yylval.s[strlen(yylval.s)-1] = 0; - return NAME; - } - -0x[0-9a-f]+ { - yylval.i = strtol(yytext,0,16); - return NUMBER; - } - -[0-9]+ { - yylval.i = atoi(yytext); - return NUMBER; - } - - -"bits" { yylval.i =1 ;return UNIT;} -"bit" { yylval.i = 1; return UNIT;} -"bytes" { yylval.i= 8; return UNIT;} -"byte" { yylval.i = 8; return UNIT;} - -"int" { yylval.s = "INT"; return TYPE;} -"barray" { yylval.s = "BARRAY"; return TYPE;} -"chars" { yylval.s = "CHARS"; return TYPE;} -"variable" { yylval.i = 0; return NUMBER;} -"counted" { yylval.i = -4; return NUMBER;} -"addrsize" { yylval.i = -2; return NUMBER; } -"segsize" { yylval.i = -1; return NUMBER; } -"cond" { return COND;} -"repeat" { return REPEAT;} diff --git a/contrib/binutils/config/ChangeLog b/contrib/binutils/config/ChangeLog deleted file mode 100644 index 129ce6168f3c..000000000000 --- a/contrib/binutils/config/ChangeLog +++ /dev/null @@ -1,526 +0,0 @@ -2002-05-16 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE> - - * acinclude.m4: Allow for PWDCMD to override hardcoded pwd. - -2002-05-13 Nathanael Nerode <neroden@twcny.rr.com> - - * mh-apollo68: remove unused HDEFINES setting. - * mh-dgux: remove unused HDEFINES setting. - * mh-dgux386: remove unused HDEFINES setting, duplicate RANLIB=true. - -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. - -2002-04-19 Nathanael Nerode <neroden@twcny.rr.com> - - * mh-a68bsd: clean out dead code - * mh-apollo68: clean out dead code - * mh-cxux: clean out dead code - * mh-decstation: clean out dead code - * mh-dgux: clean out dead code - * mh-dgux386: clean out dead code - * mh-hp300: clean out dead code - * mh-hpux: clean out dead code - * mh-hpux8: clean out dead code - * mh-interix: clean out dead code - * mh-irix4: clean out dead code - * mh-lynxrs6k: clean out dead code - * mh-mingw32: clean out dead code - * mh-ncr3000: clean out dead code - * mh-ncrsvr43: clean out dead code - * mh-necv4: clean out dead code - * mh-openedition: clean out dead code - * mh-riscos: clean out dead code - * mh-sco: clean out dead code - * mh-sysv4: clean out dead code - * mh-lynxos: removed, contained only dead code - * mh-vaxult2: removed, contained only dead code - * mh-sun3: removed, contained only dead code - -2002-04-15 Keith Seitz <keiths@redhat.com> - - * acinclude.m4 (CYG_AC_PATH_TCLCONFIG): Search the win/ directory, - too. - (CYG_AC_PATH_TKCONFIG): Likewise. - -2001-10-07 Joseph S. Myers <jsm28@cam.ac.uk> - - * acinclude.m4: Fix spelling error of "separate" as "seperate". - -2001-05-22 Jason Merrill <jason_merrill@redhat.com> - - * mt-linux (CXXFLAGS_FOR_TARGET): Lose -fvtable-thunks. - -2001-01-27 Richard Henderson <rth@redhat.com> - - * mt-alphaieee: New file. - -2001-01-02 Laurynas Biveinis <lauras@softhome.net> - - * mh-djgpp: do not set CFLAGS. - -2000-08-04 Mark Elbrecht <snowball3@bigfoot.com> - - * mh-djgpp: Conditionally set 'target_alias' to djgpp. Conditionally - modify 'gcc_version'. - -2000-07-21 Andrew Haley <aph@cygnus.com> - - * mh-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-07-14 Mark P Mitchell <mark@codesourcery.com> - - * mh-irix6 (CC): Don't set it. - -2000-06-21 Branko Cibej <branko.cibej@hermes.si> - - * mh-sparcpic: Use single instead of double quotes. - * mt-sparcpic: Likewise. - -2000-06-19 Syd Polk <spolk@redhat.com> - - * acinclude.m4: Updated for Incr Tcl 3.0. - -2000-02-23 Linas Vepstas <linas@linas.org> - - * mh-i370pic: New file. - * mt-i370pic: New file. - -2000-02-22 Nick Clifton <nickc@cygnus.com> - - * config/mt-wince: new file: Makefile fragment for WinCE targets. - -2000-01-06 Geoff Keating <geoffk@cygnus.com> - - * mh-aix43: Delete, move to mt-aix43. - * mt-aix43: New file. - -Tue Sep 7 23:31:01 1999 Linas Vepstas <linas@linas.org> - - * mh-openedition: New file. - -1999-04-07 Michael Meissner <meissner@cygnus.com> - - * mt-d30v: New file, pass -g -Os -Wa,-C as default options. - -1999-02-08 Syd Polk <spolk@cygnus.com> - - * acinclude.m4: Added macros to find itcl files. - Export TCL_CFLAGS from tclConfig.sh. - Export TCL_LIB_FULL_PATH, TK_LIB_FULL_PATH, ITCL_LIB_FULL_PATH, - ITK_LIB_FULL_PATH, and TIX_LIB_FULL_PATH - Replace TIX macros with better ones from snavigator. - -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. - -Mon Jan 18 19:41:08 1999 Christopher Faylor <cgf@cygnus.com> - - * cygwin.mh: Activate commented out dependencies for - gdb: libtermcap. - -Wed Nov 18 20:29:46 1998 Christopher Faylor <cgf@cygnus.com> - - * cygwin.mh: Add extra libtermcap target information. - Add commented out dependency for gdb to libtermcap for - future readline requirement. - -Mon Nov 2 15:15:33 1998 Geoffrey Noer <noer@cygnus.com> - - * mh-cygwin32: delete - * mh-cygwin: was mh-cygwin32 - -1998-10-26 Syd Polk <spolk@cygnus.com> - - * acinclude.m4: TCLHDIR and TKHDIR need to be run through - cygpath for Microsoft builds. - -1998-10-20 Syd Polk <spolk@cygnus.com> - - * acinclude.m4: Re-exported TCL_LIBS and TCL_LD_SEARCH_FLAGS - because itcl needs them. - -Mon Aug 31 17:50:53 1998 David Edelsohn <edelsohn@mhpcc.edu> - - * mh-aix43 (NM_FOR_TARGET): Add -X32_64 as well. - -Sat Aug 29 14:32:55 1998 David Edelsohn <edelsohn@mhpcc.edu> - - * mh-aix43: New file. - -Mon Aug 10 00:15:47 1998 HJ Lu (hjl@gnu.org) - - * mt-linux (CXXFLAGS_FOR_TARGET): Add -D_GNU_SOURCE. - -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 - the libraries. - -Wed Apr 22 10:53:14 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> - - * mt-linux (CXXFLAGS_FOR_TARGET): Set this instead of CXXFLAGS. - -Sat Apr 11 22:43:17 1998 J. Kean Johnston <jkj@sco.com> - - * mh-svsv5: New file - support for SCO UnixWare 7 / SVR5. - -Thu Mar 26 01:54:25 1998 Geoffrey Noer <noer@cygnus.com> - - * mh-cygwin32: stop configuring and building dosrel. - -Thu Sep 11 16:43:27 1997 Jim Wilson <wilson@cygnus.com> - - * mh-elfalphapic, mt-elfalphapic: New 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. - -Mon Jun 16 19:06:41 1997 Geoff Keating <geoffk@ozemail.com.au> - - * mh-ppcpic: New file. - * mt-ppcpic: New file. - -Thu Mar 27 15:52:40 1997 Geoffrey Noer <noer@cygnus.com> - - * mh-cygwin32: override CXXFLAGS, setting to -O2 only - (no debug) - -Tue Mar 25 18:16:43 1997 Geoffrey Noer <noer@cygnus.com> - - * mh-cygwin32: override LIBGCC2_DEBUG_CFLAGS so debug info - isn't included in cygwin32-hosted libgcc2.a by default - -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 - -Tue Dec 31 16:04:26 1996 Ian Lance Taylor <ian@cygnus.com> - - * mh-linux: Remove. - -Mon Nov 11 10:29:51 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * mt-ppc: Delete file, options moved to newlib configure. - -Fri Oct 4 12:21:03 1996 Angela Marie Thomas (angela@cygnus.com) - - * mh-dgux386: New file. x86 dgux specific flags - -Mon Sep 30 15:10:07 1996 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-mh-mpw (EXTRALIBS_PPC_XCOFF): New, was EXTRALIBS_PPC. - (EXTRALIBS_PPC): Use shared libraries instead of xcoff. - -Sat Aug 17 04:56:25 1996 Geoffrey Noer <noer@skaro.cygnus.com> - - * mh-cygwin32: don't -D_WIN32 here anymore - -Thu Aug 15 19:46:44 1996 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-mh-mpw (SEGFLAG_68K, SEGFLAG_PPC): Remove. - (EXTRALIBS_PPC): Add libgcc.xcoff. - -Thu Aug 8 14:51:47 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * mt-ppc: New file, add -mrelocatable-lib and -mno-eabi to all - target builds for PowerPC eabi targets. - -Fri Jul 12 12:06:01 1996 Stan Shebs <shebs@andros.cygnus.com> - - * mpw: New subdir, Mac MPW configuration support bits. - -Mon Jul 8 17:30:52 1996 Jim Wilson <wilson@cygnus.com> - - * mh-irix6: New file. - -Mon Jul 8 15:15:37 1996 Jason Merrill <jason@yorick.cygnus.com> - - * mt-sparcpic (PICFLAG_FOR_TARGET): Use -fPIC. - -Fri Jul 5 11:49:02 1996 Ian Lance Taylor <ian@cygnus.com> - - * mh-irix4 (RANLIB): Don't define; Irix 4 does have ranlib. - -Sun Jun 23 22:59:25 1996 Geoffrey Noer <noer@cygnus.com> - - * mh-cygwin32: new file. Like mh-go32 without the CFLAGS entry. - -Tue Mar 26 14:10:41 1996 Ian Lance Taylor <ian@cygnus.com> - - * mh-go32 (CFLAGS): Define. - -Thu Mar 14 19:20:54 1996 Ian Lance Taylor <ian@cygnus.com> - - * mh-necv4: New file. - -Thu Feb 15 13:07:43 1996 Ian Lance Taylor <ian@cygnus.com> - - * mh-cxux (CC): New variable. - (CFLAGS, LDFLAGS): Remove. - * mh-ncrsvr43 (CC): New variable. - (CFLAGS): Remove. - * mh-solaris (CFLAGS): Remove. - - * mh-go32: Remove most variable settings, since they presumed a - Canadian Cross, which is now handled correctly by the configure - script. - - * mh-sparcpic (PICFLAG): Set to -fPIC, not -fpic. - -Mon Feb 12 14:53:39 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> - - * mh-m68kpic, mt-m68kpic: New files. - -Thu Feb 1 14:15:42 1996 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-mh-mpw (CC_MWC68K): Add options similar to those used - in CC_MWCPPC, and -mc68020 -model far. - (AR_MWLINK68K): Add -xm library. - (AR_AR): Define. - (CC_LD_MWLINK68K): Remove -d. - (EXTRALIBS_MWC68K): Define. - -Thu Jan 25 16:05:33 1996 Ian Lance Taylor <ian@cygnus.com> - - * mh-ncrsvr43 (CFLAGS): Remove -Hnocopyr. - -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. - - * mh-decstation (X11_EXTRA_CFLAGS): Define. - - * mh-sco, mh-solaris, mh-sysv4 (X11_EXTRA_LIBS): Define. - - * 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> - - * mpw-mh-mpw: Add definitions for various 68K and PowerMac - compilers, add definitions for library and link steps for - PowerMacs. - -Thu Sep 14 08:20:04 1995 Fred Fish <fnf@cygnus.com> - - * mh-hp300 (CC): Add "CC = cc -Wp,-H256000" to avoid - "too much defining" errors from the HPUX compiler. - -Thu Aug 17 17:28:56 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com> - - * mh-hp300 (RANLIB): Use "ar ts", in case GNU ar was used and - didn't build a symbol table. - -Thu Jun 22 17:47:24 1995 Stan Shebs <shebs@andros.cygnus.com> - - * mpw-mh-mpw (CC): Define ANSI_PROTOTYPES. - -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. - - * mpw-mh-mpw (CC): Define ALMOST_STDC. - (CFLAGS): Remove ALMOST_STDC, -mc68881. - (LDFLAGS): add -w. - - * mpw-mh-mpw (CFLAGS): Add -b option to put strings at the ends of - functions. - - * mpw-mh-mpw: New file, host makefile definitions for MPW. - -Fri Mar 31 11:35:17 1995 Jason Molenda (crash@phydeaux.cygnus.com) - - * mt-netware: New file. - -Mon Mar 13 12:31:29 1995 Ian Lance Taylor <ian@cygnus.com> - - * mh-hpux8: New file. - * mh-hpux: Use X11R5 rather than X11R4. - -Thu Feb 9 11:04:13 1995 Ian Lance Taylor <ian@cygnus.com> - - * mh-linux (SYSV): Don't define. - (RANLIB): Don't define. - -Wed Jan 11 16:29:34 1995 Jason Merrill <jason@phydeaux.cygnus.com> - - * m?-*pic (LIBCXXFLAGS): Add -fno-implicit-templates. - -Thu Nov 3 17:27:19 1994 Ken Raeburn <raeburn@cujo.cygnus.com> - - * mh-irix4 (CC): Increase maximum string length. - - * mh-sco (CC): Define away const, it doesn't work right; elements - of arrays of ptr-to-const are considered const themselves. - -Sat Jul 16 12:17:49 1994 Stan Shebs (shebs@andros.cygnus.com) - - * mh-cxux: New file, from Bob Rusk (rrusk@mail.csd.harris.com). - -Sat Jun 4 17:22:12 1994 Per Bothner (bothner@kalessin.cygnus.com) - - * mh-ncrsvr43: New file from Tom McConnell - <tmcconne@sedona.intel.com>. - -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. - -Wed May 4 20:14:47 1994 D. V. Henkel-Wallace (gumby@cygnus.com) - - * mh-lynxrs6k: set SHELL to /bin/bash - -Tue Apr 12 12:38:17 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mh-irix4 (CC): Change -XNh1500 to -XNh2000. - -Sat Dec 25 20:03:45 1993 Jeffrey A. Law (law@snake.cs.utah.edu) - - * mt-hppa: Delete. - -Tue Nov 16 22:54:39 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * mh-a68bsd: Define CC to gcc. - -Mon Nov 15 16:56:51 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * mh-linux: Don't put -static in LDFLAGS. Add comments. - -Mon Nov 15 13:37:58 1993 david d `zoo' zuhn (zoo@cirdan.cygnus.com) - - * mh-sysv4 (AR_FLAGS): change from cq to cr - -Fri Nov 5 08:12:32 1993 D. V. Henkel-Wallace (gumby@blues.cygnus.com) - - * mh-unixware: remove. It's the same as sysv4, and config.guess - can't tell the difference. So don't allow skew. - -Wed Oct 20 20:35:14 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * mh-hp300: Revert yesterday's change, but add comment explaining. - -Tue Oct 19 18:58:21 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * mh-hp300: Don't define CFLAGS to empty. Why should hp300 be - different from anything else? ("gdb doesn't understand the native - debug format" isn't a good enough answer because we might be using - gcc). - -Tue Oct 5 12:17:40 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * mh-alphaosf: Remove, no longer necessary now that gdb knows - how to handle OSF/1 shared libraries. - -Tue Jul 6 11:27:33 1993 Steve Chamberlain (sac@phydeaux.cygnus.com) - - * mh-alphaosf: New file. - -Thu Jul 1 15:49:33 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * mh-riscos: New file. - -Mon Jun 14 12:03:18 1993 david d `zoo' zuhn (zoo at rtl.cygnus.com) - - * mh-aix, mh-aix386, mh-decstation, mh-delta88, mh-hpux, mh-irix4, - mh-ncr3000, mh-solaris, mh-sysv, mh-sysv4: remove INSTALL=cp line, - now that we're using install.sh globally - -Fri Jun 4 16:09:34 1993 Ian Lance Taylor (ian@cygnus.com) - - * mh-sysv4 (INSTALL): Use cp, not /usr/ucb/install. - -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. - -Mon Mar 8 15:05:25 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * mh-aix386: New file; old mh-aix, plus no-op RANLIB. - -Thu Oct 1 13:50:48 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * mh-solaris: INSTALL is NOT /usr/ucb/install - -Mon Aug 24 14:25:35 1992 Ian Lance Taylor (ian@cygnus.com) - - * mt-ose68000, mt-ose68k: renamed from mt-OSE*. - -Tue Jul 21 02:11:01 1992 D. V. Henkel-Wallace (gumby@cygnus.com) - - * mt-OSE68k, mt-680000: new configs. - -Thu Jul 16 17:12:09 1992 K. Richard Pixley (rich@rtl.cygnus.com) - - * mh-irix4: merged changes from progressive. - -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. - -Sun May 31 14:45:23 1992 Mark Eichin (eichin at cygnus.com) - - * mh-solaris2: Add new configuration for Solaris 2 (sysv, no ranlib) - -Fri Apr 10 23:10:08 1992 Fred Fish (fnf@cygnus.com) - - * mh-ncr3000: Add new configuration for NCR 3000. - -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 deleted file mode 100755 index 00887e0dd305..000000000000 --- a/contrib/binutils/config/acinclude.m4 +++ /dev/null @@ -1,2023 +0,0 @@ -dnl This file is included into all any other acinclude file that needs -dnl to use these macros. - -dnl This is copied from autoconf 2.12, but does calls our own AC_PROG_CC_WORKS, -dnl and doesn't call AC_PROG_CXX_GNU, cause we test for that in AC_PROG_CC_WORKS. -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_BEFORE([$0], [AC_PROG_CXXCPP]) -AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++, gcc) - -CYG_AC_PROG_GXX_WORKS - -if test $ac_cv_prog_gxx = yes; then - GXX=yes -dnl Check whether -g works, even if CXXFLAGS is set, in case the package -dnl plays around with CXXFLAGS (such as to build both debugging and -dnl normal versions of a library), tasteless as that idea is. - ac_test_CXXFLAGS="${CXXFLAGS+set}" - ac_save_CXXFLAGS="$CXXFLAGS" - CXXFLAGS= - AC_PROG_CXX_G - if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS="$ac_save_CXXFLAGS" - elif test $ac_cv_prog_cxx_g = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-O2" - fi -else - GXX= - test "${CXXFLAGS+set}" = set || CXXFLAGS="-g" -fi -]) - -dnl See if the G++ compiler we found 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 -dnl Try a test case. We only compile, because it's close to impossible -dnl to get a correct fully linked executable with a cross compiler. For -dnl most cross compilers, this test is bogus. For G++, we can use various -dnl other compile line options to get a decent idea that the cross compiler -dnl actually does work, even though we can't produce an executable without -dnl more info about the target it's being compiled for. This only works -dnl for the GNU C++ compiler. - -dnl Transform the name of the compiler to it's cross variant, unless -dnl CXX is set. This is also what CXX gets set to in the generated -dnl Makefile. -if test x"${CXX}" = xc++ ; then - CXX=`echo gcc | sed -e "${program_transform_name}"` -fi - -dnl Get G++'s full path to libgcc.a -libgccpath=`${CXX} --print-libgcc` - -dnl If we don't have a path with libgcc.a on the end, this isn't G++. -if test `echo $libgccpath | sed -e 's:/.*/::'` = libgcc.a ; then - ac_cv_prog_gxx=yes -else - ac_cv_prog_gxx=no -fi - -dnl If we are using G++, look for the files that need to exist if this -dnl compiler works. -if test x"${ac_cv_prog_gxx}" = xyes ; then - gccfiles=`echo $libgccpath | sed -e 's:/libgcc.a::'` - if test -f ${gccfiles}/specs -a -f ${gccfiles}/cpp -a -f ${gccfiles}/cc1plus; then - gccfiles=yes - else - gccfiles=no - fi - gcclibs=`echo $libgccpath | sed -e 's:lib/gcc-lib/::' -e 's:/libgcc.a::' -e 's,\(.*\)/.*,\1,g'`/lib - if test -d ${gcclibs}/ldscripts -a -f ${gcclibs}/libc.a -a -f ${gcclibs}/libstdc++.a ; then - gcclibs=yes - else - gcclibs=no - fi -fi - -dnl If everything is OK, then we can safely assume the compiler works. -if test x"${gccfiles}" = xno -o x"${gcclibs}" = xno; then - ac_cv_prog_cxx_works=no - AC_MSG_ERROR(${CXX} is a non-working cross compiler) -else - ac_cv_prog_cxx_works=yes -fi - -AC_LANG_RESTORE -AC_MSG_RESULT($ac_cv_prog_cxx_works) -if test x"$ac_cv_prog_cxx_works" = xno; then - AC_MSG_ERROR([installation or configuration problem: C++ compiler cannot create executables.]) -fi -AC_MSG_CHECKING([whether the G++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler]) -AC_MSG_RESULT($ac_cv_prog_cxx_cross) -cross_compiling=$ac_cv_prog_cxx_cross -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_BEFORE([$0], [AC_PROG_CCPP]) -AC_CHECK_PROGS(CC, cc, gcc) - -CYG_AC_PROG_GCC_WORKS - -if test $ac_cv_prog_gcc = yes; then - GCC=yes -dnl Check whether -g works, even if CFLAGS is set, in case the package -dnl plays around with CFLAGS (such as to build both debugging and -dnl normal versions of a library), tasteless as that idea is. - ac_test_CFLAGS="${CFLAGS+set}" - ac_save_CFLAGS="$CFLAGS" - CFLAGS= - AC_PROG_CC_G - if test "$ac_test_CFLAGS" = set; then - CFLAGS="$ac_save_CFLAGS" - elif test $ac_cv_prog_cc_g = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-O2" - fi -else - GXX= - test "${CFLAGS+set}" = set || CFLAGS="-g" -fi -]) - -dnl See if the GCC compiler we found 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 -dnl Try a test case. We only compile, because it's close to impossible -dnl to get a correct fully linked executable with a cross -dnl compiler. For most cross compilers, this test is bogus. For G++, -dnl we can use various other compile line options to get a decent idea -dnl that the cross compiler actually does work, even though we can't -dnl produce an executable without more info about the target it's -dnl being compiled for. This only works for the GNU C++ compiler. - -dnl Transform the name of the compiler to it's cross variant, unless -dnl CXX is set. This is also what CC gets set to in the generated Makefile. -if test x"${CC}" = xcc ; then - CC=`echo gcc | sed -e "${program_transform_name}"` -fi - -dnl Get Gcc's full path to libgcc.a -libgccpath=`${CC} --print-libgcc` - -dnl If we don't have a path with libgcc.a on the end, this isn't G++. -if test `echo $libgccpath | sed -e 's:/.*/::'` = libgcc.a ; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi - -dnl If we are using Gcc, look for the files that need to exist if this -dnl compiler works. -if test x"${ac_cv_prog_gcc}" = xyes ; then - gccfiles=`echo $libgccpath | sed -e 's:/libgcc.a::'` - if test -f ${gccfiles}/specs -a -f ${gccfiles}/cpp -a -f ${gccfiles}/cc1plus; then - gccfiles=yes - else - gccfiles=no - fi - gcclibs=`echo $libgccpath | sed -e 's:lib/gcc-lib/::' -e 's:/libgcc.a::' -e 's,\(.*\)/.*,\1,g'`/lib - if test -d ${gcclibs}/ldscripts -a -f ${gcclibs}/libc.a -a -f ${gcclibs}/libstdc++.a ; then - gcclibs=yes - else - gcclibs=no - fi -fi - -dnl If everything is OK, then we can safely assume the compiler works. -if test x"${gccfiles}" = xno -o x"${gcclibs}" = xno; then - ac_cv_prog_cc_works=no - AC_MSG_ERROR(${CC} is a non-working cross compiler) -else - ac_cv_prog_cc_works=yes -fi - -AC_LANG_RESTORE -AC_MSG_RESULT($ac_cv_prog_cc_works) -if test x"$ac_cv_prog_cc_works" = xno; then - AC_MSG_ERROR([installation or configuration problem: C++ compiler cannot create executables.]) -fi -AC_MSG_CHECKING([whether the Gcc compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler]) -AC_MSG_RESULT($ac_cv_prog_cc_cross) -cross_compiling=$ac_cv_prog_cc_cross -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_MSG_CHECKING(for the bfd header in the build tree) -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -dnl Look for the header file -AC_CACHE_VAL(ac_cv_c_bfdh,[ -for i in $dirlist; do - if test -f "$i/bfd/bfd.h" ; then - ac_cv_c_bfdh=`(cd $i/bfd; ${PWDCMD-pwd})` - break - fi -done -]) -if test x"${ac_cv_c_bfdh}" != x; then - BFDHDIR="-I${ac_cv_c_bfdh}" - AC_MSG_RESULT(${ac_cv_c_bfdh}) -else - AC_MSG_RESULT(none) -fi -AC_SUBST(BFDHDIR) - -dnl Look for the library -AC_MSG_CHECKING(for the bfd library in the build tree) -AC_CACHE_VAL(ac_cv_c_bfdlib,[ -for i in $dirlist; do - if test -f "$i/bfd/Makefile" ; then - ac_cv_c_bfdlib=`(cd $i/bfd; ${PWDCMD-pwd})` - fi -done -]) -dnl We list two directories cause bfd now uses libtool -if test x"${ac_cv_c_bfdlib}" != x; then - BFDLIB="-L${ac_cv_c_bfdlib} -L${ac_cv_c_bfdlib}/.libs" - AC_MSG_RESULT(${ac_cv_c_bfdlib}) -else - AC_MSG_RESULT(none) -fi -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_MSG_CHECKING(for the liberty library in the build tree) -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -AC_CACHE_VAL(ac_cv_c_liberty,[ -for i in $dirlist; do - if test -f "$i/libiberty/Makefile" ; then - ac_cv_c_liberty=`(cd $i/libiberty; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_liberty}" != x; then - LIBERTY="-L${ac_cv_c_liberty}" - AC_MSG_RESULT(${ac_cv_c_liberty}) -else - AC_MSG_RESULT(none) -fi -AC_SUBST(LIBERTY) -]) - -dnl ==================================================================== -dnl Find the opcodes library. This is used to do dissasemblies. -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,[ -for i in $dirlist; do - if test -f "$i/opcodes/Makefile" ; then - ac_cv_c_opc=`(cd $i/opcodes; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_opc}" != x; then - OPCODESLIB="-L${ac_cv_c_opc}" - AC_MSG_RESULT(${ac_cv_c_opc}) -else - AC_MSG_RESULT(none) -fi -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_MSG_CHECKING(for the testing support files in the source tree) -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -AC_CACHE_VAL(ac_cv_c_dejagnu,[ -for i in $dirlist; do - if test -f "$srcdir/$i/ecc/ecc/infra/testlib/current/include/dejagnu.h" ; then - ac_cv_c_dejagnu=`(cd $srcdir/$i/ecc/ecc/infra/testlib/current/include; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_dejagnu}" != x; then - DEJAGNUHDIR="-I${ac_cv_c_dejagnu}" - AC_MSG_RESULT(${ac_cv_c_dejagnu}) -else - AC_MSG_RESULT(none) -fi -AC_CACHE_VAL(ac_cv_c_dejagnulib,[ -for i in $dirlist; do - if test -f "$srcdir/$i/infra/testlib/current/lib/hostutil.exp" ; then - ac_cv_c_dejagnulib=`(cd $srcdir/$i/infra/testlib/current/lib; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_dejagnulib}" != x; then - DEJAGNULIB="${ac_cv_c_dejagnulib}" -else - DEJAGNULIB="" -fi -AC_MSG_CHECKING(for runtest in the source tree) -AC_CACHE_VAL(ac_cv_c_runtest,[ -for i in $dirlist; do - if test -f "$srcdir/$i/dejagnu/runtest" ; then - ac_cv_c_runtest=`(cd $srcdir/$i/dejagnu; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_runtest}" != x; then - RUNTESTDIR="${ac_cv_c_runtest}" - AC_MSG_RESULT(${ac_cv_c_runtest}) -else - RUNTESTDIR="" - AC_MSG_RESULT(none) -fi -AC_SUBST(RUNTESTDIR) -AC_SUBST(DEJAGNULIB) -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_MSG_CHECKING(for the intl header in the build tree) -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -dnl Look for the header file -AC_CACHE_VAL(ac_cv_c_intlh,[ -for i in $dirlist; do - if test -f "$i/intl/libintl.h" ; then - ac_cv_c_intlh=`(cd $i/intl; ${PWDCMD-pwd})` - break - fi -done -]) -if test x"${ac_cv_c_intlh}" != x; then - INTLHDIR="-I${ac_cv_c_intlh}" - AC_MSG_RESULT(${ac_cv_c_intlh}) -else - AC_MSG_RESULT(none) -fi -AC_SUBST(INTLHDIR) - -dnl Look for the library -AC_MSG_CHECKING(for the libintl library in the build tree) -AC_CACHE_VAL(ac_cv_c_intllib,[ -for i in $dirlist; do - if test -f "$i/intl/Makefile" ; then - ac_cv_c_intllib=`(cd $i/intl; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_intllib}" != x; then - INTLLIB="-L${ac_cv_c_intllib} -lintl" - AC_MSG_RESULT(${ac_cv_c_intllib}) -else - AC_MSG_RESULT(none) -fi -AC_SUBST(INTLLIB) -]) - -dnl ==================================================================== -dnl Find the simulator library. -AC_DEFUN(CYG_AC_PATH_SIM, [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.. ../../../../../../../../../.." -case "$target_cpu" in - powerpc) target_dir=ppc ;; - sparc*) target_dir=erc32 ;; - mips*) target_dir=mips ;; - *) target_dir=$target_cpu ;; -esac -dnl First look for the header file -AC_MSG_CHECKING(for the simulator header file) -AC_CACHE_VAL(ac_cv_c_simh,[ -for i in $dirlist; do - if test -f "${srcdir}/$i/include/remote-sim.h" ; then - ac_cv_c_simh=`(cd ${srcdir}/$i/include; ${PWDCMD-pwd})` - break - fi -done -]) -if test x"${ac_cv_c_simh}" != x; then - SIMHDIR="-I${ac_cv_c_simh}" - AC_MSG_RESULT(${ac_cv_c_simh}) -else - AC_MSG_RESULT(none) -fi -AC_SUBST(SIMHDIR) - -dnl See whether it's a devo or Foundry branch simulator -AC_MSG_CHECKING(Whether this is a devo simulator ) -AC_CACHE_VAL(ac_cv_c_simdevo,[ - CPPFLAGS="$CPPFLAGS $SIMHDIR" - AC_EGREP_HEADER([SIM_DESC sim_open.*struct _bfd], remote-sim.h, - ac_cv_c_simdevo=yes, - ac_cv_c_simdevo=no) -]) -if test x"$ac_cv_c_simdevo" = x"yes" ; then - AC_DEFINE(HAVE_DEVO_SIM) -fi -AC_MSG_RESULT(${ac_cv_c_simdevo}) -AC_SUBST(HAVE_DEVO_SIM) - -dnl Next look for the library -AC_MSG_CHECKING(for the simulator library) -AC_CACHE_VAL(ac_cv_c_simlib,[ -for i in $dirlist; do - if test -f "$i/sim/$target_dir/Makefile" ; then - ac_cv_c_simlib=`(cd $i/sim/$target_dir; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_simlib}" != x; then - SIMLIB="-L${ac_cv_c_simlib}" -else - AC_MSG_RESULT(none) - dnl FIXME: this is kinda bogus, cause umtimately the TM will build - dnl all the libraries for several architectures. But for now, this - dnl will work till then. -dnl AC_MSG_CHECKING(for the simulator installed with the compiler libraries) - dnl Transform the name of the compiler to it's cross variant, unless - dnl CXX is set. This is also what CXX gets set to in the generated - dnl Makefile. - CROSS_GCC=`echo gcc | sed -e "s/^/$target/"` - - dnl Get G++'s full path to libgcc.a -changequote(,) - gccpath=`${CROSS_GCC} --print-libgcc | sed -e 's:[a-z0-9A-Z\.\-]*/libgcc.a::' -e 's:lib/gcc-lib/::'`lib -changequote([,]) - if test -f $gccpath/libsim.a -o -f $gccpath/libsim.so ; then - ac_cv_c_simlib="$gccpath/" - SIMLIB="-L${ac_cv_c_simlib}" - AC_MSG_RESULT(${ac_cv_c_simlib}) - else - AM_CONDITIONAL(PSIM, test x$psim = xno) - SIMLIB="" - AC_MSG_RESULT(none) -dnl ac_cv_c_simlib=none - fi -fi -AC_SUBST(SIMLIB) -]) - -dnl ==================================================================== -dnl Find the libiberty library. -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,[ -for i in $dirlist; do - if test -f "$i/libiberty/Makefile" ; then - ac_cv_c_libib=`(cd $i/libiberty/; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_libib}" != x; then - LIBIBERTY="-L${ac_cv_c_libib}" - AC_MSG_RESULT(${ac_cv_c_libib}) -else - AC_MSG_RESULT(none) -fi -AC_SUBST(LIBIBERTY) -]) - -dnl ==================================================================== -AC_DEFUN(CYG_AC_PATH_DEVO, [ -AC_MSG_CHECKING(for devo headers in the source tree) -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -AC_CACHE_VAL(ac_cv_c_devoh,[ -for i in $dirlist; do - if test -f "${srcdir}/$i/include/remote-sim.h" ; then - ac_cv_c_devoh=`(cd ${srcdir}/$i/include; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_devoh}" != x; then - DEVOHDIR="-I${ac_cv_c_devoh}" - AC_MSG_RESULT(${ac_cv_c_devoh}) -else - AC_MSG_RESULT(none) -fi -AC_SUBST(DEVOHDIR) -]) - -dnl ==================================================================== -dnl find the IDE library and headers. -AC_DEFUN(CYG_AC_PATH_IDE, [ -AC_MSG_CHECKING(for IDE headers in the source tree) -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -IDEHDIR= -IDELIB= -AC_CACHE_VAL(ac_cv_c_ideh,[ -for i in $dirlist; do - if test -f "${srcdir}/$i/libide/src/event.h" ; then - ac_cv_c_ideh=`(cd ${srcdir}/$i/libide/src; ${PWDCMD-pwd})`; - fi -done -]) -if test x"${ac_cv_c_ideh}" != x; then - IDEHDIR="-I${ac_cv_c_ideh}" - AC_MSG_RESULT(${ac_cv_c_ideh}) -else - AC_MSG_RESULT(none) -fi - -AC_MSG_CHECKING(for LIBIDE TCL headers in the source tree) -AC_CACHE_VAL(ac_cv_c_idetclh,[ -for i in $dirlist; do - if test -f "${srcdir}/$i/libidetcl/src/idetcl.h" ; then - ac_cv_c_idetclh=`(cd ${srcdir}/$i/libidetcl/src; ${PWDCMD-pwd})`; - fi -done -]) -if test x"${ac_cv_c_idetclh}" != x; then - IDEHDIR="${IDEHDIR} -I${ac_cv_c_idetclh}" - AC_MSG_RESULT(${ac_cv_c_idetclh}) -else - AC_MSG_RESULT(none) -fi - -AC_MSG_CHECKING(for IDE headers in the build tree) -AC_CACHE_VAL(ac_cv_c_ideh2,[ -for i in $dirlist; do - if test -f "$i/libide/src/Makefile" ; then - ac_cv_c_ideh2=`(cd $i/libide/src; ${PWDCMD-pwd})`; - fi -done -]) -if test x"${ac_cv_c_ideh2}" != x; then - IDEHDIR="${IDEHDIR} -I${ac_cv_c_ideh2}" - AC_MSG_RESULT(${ac_cv_c_ideh2}) -else - AC_MSG_RESULT(none) -fi - -dnl look for the library -AC_MSG_CHECKING(for IDE library) -AC_CACHE_VAL(ac_cv_c_idelib,[ -if test x"${ac_cv_c_idelib}" = x ; then - for i in $dirlist; do - if test -f "$i/libide/src/Makefile" ; then - ac_cv_c_idelib=`(cd $i/libide/src; ${PWDCMD-pwd})` - break - fi - done -fi]) -if test x"${ac_cv_c_idelib}" != x ; then - IDELIB="-L${ac_cv_c_idelib}" - AC_MSG_RESULT(${ac_cv_c_idelib}) -else - AC_MSG_RESULT(none) -fi - -dnl find libiddetcl.a if it exists -AC_MSG_CHECKING(for IDE TCL library) -AC_CACHE_VAL(ac_cv_c_idetcllib,[ -if test x"${ac_cv_c_idetcllib}" = x ; then - for i in $dirlist; do - if test -f "$i/libidetcl/src/Makefile" ; then - ac_cv_c_idetcllib=`(cd $i/libidetcl/src; ${PWDCMD-pwd})` - break - fi - done -fi -]) -if test x"${ac_cv_c_idetcllib}" != x ; then - IDELIB="${IDELIB} -L${ac_cv_c_idetcllib}" - IDETCLLIB="-lidetcl" - AC_MSG_RESULT(${ac_cv_c_idetcllib}) -else - AC_MSG_RESULT(none) -fi -AC_SUBST(IDEHDIR) -AC_SUBST(IDELIB) -AC_SUBST(IDETCLLIB) -]) - -dnl ==================================================================== -dnl Find all the ILU headers and libraries -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,[ -for i in $dirlist; do - if test -f "${srcdir}/$i/ilu/runtime/kernel/method.h" ; then - ac_cv_c_iluh=`(cd ${srcdir}/$i/ilu/runtime/kernel; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_iluh}" != x; then - ILUHDIR="-I${ac_cv_c_iluh}" - AC_MSG_RESULT(${ac_cv_c_iluh}) -else - AC_MSG_RESULT(none) -fi - -AC_MSG_CHECKING(for ILU kernel headers in the build tree) -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -AC_CACHE_VAL(ac_cv_c_iluh5,[ -for i in $dirlist; do - if test -f "$i/ilu/runtime/kernel/iluconf.h" ; then - ac_cv_c_iluh5=`(cd $i/ilu/runtime/kernel; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_iluh5}" != x; then - ILUHDIR="${ILUHDIR} -I${ac_cv_c_iluh5}" - AC_MSG_RESULT(${ac_cv_c_iluh5}) -else - AC_MSG_RESULT(none) -fi - -AC_MSG_CHECKING(for ILU C++ headers in the source tree) -AC_CACHE_VAL(ac_cv_c_iluh2,[ -for i in $dirlist; do - if test -f "${srcdir}/$i/ilu/stubbers/cpp/resource.h" ; then - ac_cv_c_iluh2=`(cd ${srcdir}/$i/ilu/stubbers/cpp; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_iluh2}" != x; then - ILUHDIR="${ILUHDIR} -I${ac_cv_c_iluh2}" - AC_MSG_RESULT(${ac_cv_c_iluh2}) -else - AC_MSG_RESULT(none) -fi - -AC_MSG_CHECKING(for ILU C headers) -AC_CACHE_VAL(ac_cv_c_iluh3,[ -for i in $dirlist; do - if test -f "${srcdir}/$i/ilu/stubbers/c/resource.h" ; then - ac_cv_c_iluh3=`(cd ${srcdir}/$i/ilu/stubbers/c ; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_iluh3}" != x; then - ILUHDIR="${ILUHDIR} -I${ac_cv_c_iluh3}" - AC_MSG_RESULT(${ac_cv_c_iluh3}) -else - AC_MSG_RESULT(none) -fi - -AC_MSG_CHECKING(for ILU C runtime headers) -AC_CACHE_VAL(ac_cv_c_iluh4,[ -for i in $dirlist; do - if test -f "${srcdir}/$i/ilu/runtime/c/ilucstub.h" ; then - ac_cv_c_iluh4=`(cd ${srcdir}/$i/ilu/runtime/c ; ${PWDCMD-pwd})` - fi -done -]) -if test x"${ac_cv_c_iluh4}" != x; then - ILUHDIR="${ILUHDIR} -I${ac_cv_c_iluh4}" - AC_MSG_RESULT(${ac_cv_c_iluh4}) -else - AC_MSG_RESULT(none) -fi - -AC_CACHE_VAL(ac_cv_c_ilupath,[ -for i in $dirlist; do - if test -f "$i/ilu/Makefile" ; then - ac_cv_c_ilupath=`(cd $i/ilu; ${PWDCMD-pwd})` - break - fi -done -]) -ILUTOP=${ac_cv_c_ilupath} - -AC_MSG_CHECKING(for the ILU library in the build tree) -AC_CACHE_VAL(ac_cv_c_ilulib,[ -if test -f "$ac_cv_c_ilupath/runtime/kernel/Makefile" ; then - ac_cv_c_ilulib=`(cd $ac_cv_c_ilupath/runtime/kernel; ${PWDCMD-pwd})` - AC_MSG_RESULT(found ${ac_cv_c_ilulib}/libilu.a) -else - AC_MSG_RESULT(no) -fi]) - -AC_MSG_CHECKING(for the ILU C++ bindings library in the build tree) -AC_CACHE_VAL(ac_cv_c_ilulib2,[ -if test -f "$ac_cv_c_ilupath/runtime/cpp/Makefile" ; then - ac_cv_c_ilulib2=`(cd $ac_cv_c_ilupath/runtime/cpp; ${PWDCMD-pwd})` - AC_MSG_RESULT(found ${ac_cv_c_ilulib2}/libilu-c++.a) -else - AC_MSG_RESULT(no) -fi]) - -AC_MSG_CHECKING(for the ILU C bindings library in the build tree) -AC_CACHE_VAL(ac_cv_c_ilulib3,[ -if test -f "$ac_cv_c_ilupath/runtime/c/Makefile" ; then - ac_cv_c_ilulib3=`(cd $ac_cv_c_ilupath/runtime/c; ${PWDCMD-pwd})` - AC_MSG_RESULT(found ${ac_cv_c_ilulib3}/libilu-c.a) -else - AC_MSG_RESULT(no) -fi]) - -AC_MSG_CHECKING(for the ILU Tk bindings library in the build tree) -AC_CACHE_VAL(ac_cv_c_ilulib4,[ -if test -f "$ac_cv_c_ilupath/runtime/mainloop/Makefile" ; then - ac_cv_c_ilulib4=`(cd $ac_cv_c_ilupath/runtime/mainloop; ${PWDCMD-pwd})` - AC_MSG_RESULT(found ${ac_cv_c_ilulib4}/libilu-tk.a) -else - AC_MSG_RESULT(no) -fi]) - -if test x"${ac_cv_c_ilulib}" = x -a x"${ac_cv_c_ilulib2}" = x; then - ILUHDIR="" -fi - -if test x"${ac_cv_c_ilulib}" != x -a x"${ac_cv_c_ilulib2}" != x; then - ILULIB="-L${ac_cv_c_ilulib} -L${ac_cv_c_ilulib2} -L${ac_cv_c_ilulib3} -L${ac_cv_c_ilulib4}" -else - ILULIB="" -fi - -if test x"${ILULIB}" = x; then - AC_MSG_CHECKING(for ILU libraries installed with the compiler) - AC_CACHE_VAL(ac_cv_c_ilulib5,[ - NATIVE_GCC=`echo gcc | sed -e "${program_transform_name}"` - - dnl Get G++'s full path to it's libraries - ac_cv_c_ilulib5=`${NATIVE_GCC} --print-libgcc | sed -e 's:lib/gcc-lib/.*::'`lib - if test -f $ac_cv_c_ilulib5/libilu-c.a -o -f $ac_cv_c_ilulib5/libilu-c.so ; then - if test x"${ILUHDIR}" = x; then - ILUHDIR="-I${ac_cv_c_ilulib5}/../include" - fi - ILULIB="-L${ac_cv_c_ilulib5}" - AC_MSG_RESULT(${ac_cv_c_ilulib5}) - else - ac_cv_c_ilulib=none - AC_MSG_RESULT(none) - fi -fi]) -AC_SUBST(ILUHDIR) -AC_SUBST(ILULIB) -AC_SUBST(ILUTOP) -]) - -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_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 -# See if sys/param.h defines the BYTE_ORDER macro. -AC_TRY_COMPILE([#include <sys/types.h> -#include <sys/param.h>], [ -#if !BYTE_ORDER || !_BIG_ENDIAN || !_LITTLE_ENDIAN - bogus endian macros -#endif], [# It does; now see whether it defined to _LITTLE_ENDIAN or not. -AC_TRY_COMPILE([#include <sys/types.h> -#include <sys/param.h>], [ -#if BYTE_ORDER != _LITTLE_ENDIAN - not big endian -#endif], ac_cv_c_little_endian=yes, ac_cv_c_little_endian=no) -]) -if test ${ac_cv_c_little_endian} = unknown; then -old_cflags=$CFLAGS -CFLAGS=-g -AC_TRY_RUN([ -main () { - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long l; - char c[sizeof (long)]; - } u; - u.l = 1; - exit (u.c[0] == 1); -}], -ac_cv_c_little_endian=no, -ac_cv_c_little_endian=yes,[ -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 ;; - sparc*-*-*) ac_cv_c_little_endian=no ;; -changequote([,]) - *) AC_MSG_WARN(Can't cross compile this test) ;; -esac]) -CFLAGS=$old_cflags -fi]) - -if test x"${ac_cv_c_little_endian}" = xyes; then - AC_DEFINE(LITTLE_ENDIAN_HOST) - ENDIAN="CYG_LSBFIRST"; -else - ENDIAN="CYG_MSBFIRST"; -fi -AC_MSG_RESULT(${ac_cv_c_little_endian}) -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_MSG_CHECKING([Looking for the path to libgcc.a]) -AC_LANG_SAVE -AC_LANG_C - -dnl Get Gcc's full path to libgcc.a -libgccpath=`${CC} --print-libgcc` - -dnl If we don't have a path with libgcc.a on the end, this isn't G++. -if test `echo $libgccpath | sed -e 's:/.*/::'` = libgcc.a ; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi - -dnl -if test x"${ac_cv_prog_gcc}" = xyes ; then - gccpath=`echo $libgccpath | sed -e 's:/libgcc.a::'` - LIBGCC="-L${gccpath}" - AC_MSG_RESULT(${gccpath}) -else - LIBGCC="" - AC_MSG_ERROR(Not using gcc) -fi - -AC_LANG_RESTORE -AC_SUBST(LIBGCC) -]) - -dnl ==================================================================== -dnl Ok, lets find the tcl source trees so we can use the headers -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, [ - CYG_AC_PATH_TCLH - CYG_AC_PATH_TCLCONFIG - CYG_AC_LOAD_TCLCONFIG -]) -AC_DEFUN(CYG_AC_PATH_TCLH, [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -no_tcl=true -AC_MSG_CHECKING(for Tcl headers in the source tree) -AC_ARG_WITH(tclinclude, [ --with-tclinclude directory where tcl headers are], with_tclinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_tclh,[ -dnl first check to see if --with-tclinclude was specified -if test x"${with_tclinclude}" != x ; then - if test -f ${with_tclinclude}/tcl.h ; then - ac_cv_c_tclh=`(cd ${with_tclinclude}; ${PWDCMD-pwd})` - elif test -f ${with_tclinclude}/generic/tcl.h ; then - ac_cv_c_tclh=`(cd ${with_tclinclude}/generic; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_tclinclude} directory doesn't contain headers]) - fi -fi - -dnl next check if it came with Tcl configuration file -if test x"${ac_cv_c_tclconfig}" != x ; then - for i in $dirlist; do - if test -f $ac_cv_c_tclconfig/$i/generic/tcl.h ; then - ac_cv_c_tclh=`(cd $ac_cv_c_tclconfig/$i/generic; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_tclh}" = x ; then - dnl find the top level Tcl source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/tcl* 2>/dev/null`" ; then - tclpath=$srcdir/$i - break - fi - done - - dnl find the exact Tcl source dir. We do it this way, cause there - dnl might be multiple version of Tcl, and we want the most recent one. - for i in `ls -dr $tclpath/tcl* 2>/dev/null ` ; do - if test -f $i/generic/tcl.h ; then - ac_cv_c_tclh=`(cd $i/generic; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl check if its installed with the compiler -if test x"${ac_cv_c_tclh}" = x ; then - dnl Get the path to the compiler - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/include - if test -f $ccpath/tcl.h; then - ac_cv_c_tclh=$ccpath - fi -fi - -dnl see if one is installed -if test x"${ac_cv_c_tclh}" = x ; then - AC_MSG_RESULT(none) - AC_CHECK_HEADER(tcl.h, ac_cv_c_tclh=installed, ac_cv_c_tclh="") -else - AC_MSG_RESULT(${ac_cv_c_tclh}) -fi -]) - TCLHDIR="" -if test x"${ac_cv_c_tclh}" = x ; then - AC_MSG_ERROR([Can't find any Tcl headers]) -fi -if test x"${ac_cv_c_tclh}" != x ; then - no_tcl="" - if test x"${ac_cv_c_tclh}" != x"installed" ; then - if test x"${CC}" = xcl ; then - tmp="`cygpath --windows ${ac_cv_c_tclh}`" - ac_cv_c_tclh="`echo $tmp | sed -e s#\\\\\\\\#/#g`" - fi - AC_MSG_RESULT(${ac_cv_c_tclh}) - TCLHDIR="-I${ac_cv_c_tclh}" - fi -fi - -AC_SUBST(TCLHDIR) -]) - -dnl ==================================================================== -dnl Ok, lets find the tcl configuration -AC_DEFUN(CYG_AC_PATH_TCLCONFIG, [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -dnl First, look for one uninstalled. -dnl the alternative search directory is invoked by --with-tclconfig -if test x"${no_tcl}" = x ; then - dnl we reset no_tcl in case something fails here - no_tcl=true - AC_ARG_WITH(tclconfig, [ --with-tclconfig directory containing tcl configuration (tclConfig.sh)], - with_tclconfig=${withval}) - AC_MSG_CHECKING([for Tcl configuration script]) - AC_CACHE_VAL(ac_cv_c_tclconfig,[ - - dnl First check to see if --with-tclconfig was specified. - if test x"${with_tclconfig}" != x ; then - if test -f "${with_tclconfig}/tclConfig.sh" ; then - ac_cv_c_tclconfig=`(cd ${with_tclconfig}; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) - fi - fi - - dnl next check if it came with Tcl configuration file in the source tree - if test x"${ac_cv_c_tclconfig}" = x ; then - for i in $dirlist; do - dnl need to test both unix and win directories, since - dnl cygwin's tkConfig.sh could be in either directory depending - dnl on the cygwin port of tcl. - if test -f $srcdir/$i/unix/tclConfig.sh ; then - ac_cv_c_tclconfig=`(cd $srcdir/$i/unix; ${PWDCMD-pwd})` - break - fi - if test -f $srcdir/$i/win/tclConfig.sh ; then - ac_cv_c_tclconfig=`(cd $srcdir/$i/win; ${PWDCMD-pwd})` - break - fi - done - fi - dnl check in a few other locations - if test x"${ac_cv_c_tclconfig}" = x ; then - dnl find the top level Tcl source directory - for i in $dirlist; do - if test -n "`ls -dr $i/tcl* 2>/dev/null`" ; then - tclconfpath=$i - break - fi - done - - dnl find the exact Tcl dir. We do it this way, cause there - dnl might be multiple version of Tcl, and we want the most recent one. - for i in `ls -dr $tclconfpath/tcl* 2>/dev/null ` ; do - dnl need to test both unix and win directories, since - dnl cygwin's tclConfig.sh could be in either directory depending - dnl on the cygwin port of tcl. - if test -f $i/unix/tclConfig.sh ; then - ac_cv_c_tclconfig=`(cd $i/unix; ${PWDCMD-pwd})` - break - fi - if test -f $i/win/tclConfig.sh ; then - ac_cv_c_tclconfig=`(cd $i/win; ${PWDCMD-pwd})` - break - fi - done - fi - - dnl Check to see if it's installed. We have to look in the $CC path - dnl to find it, cause our $prefix may not match the compilers. - if test x"${ac_cv_c_tclconfig}" = x ; then - dnl Get the path to the compiler - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/lib - if test -f $ccpath/tclConfig.sh; then - ac_cv_c_tclconfig=$ccpath - fi - fi - ]) dnl end of cache_val - - if test x"${ac_cv_c_tclconfig}" = x ; then - TCLCONFIG="" - AC_MSG_WARN(Can't find Tcl configuration definitions) - else - no_tcl="" - TCLCONFIG=${ac_cv_c_tclconfig}/tclConfig.sh - AC_MSG_RESULT(${TCLCONFIG}) - fi -fi -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, [ - . $TCLCONFIG - -dnl AC_SUBST(TCL_VERSION) -dnl AC_SUBST(TCL_MAJOR_VERSION) -dnl AC_SUBST(TCL_MINOR_VERSION) -dnl AC_SUBST(TCL_CC) - AC_SUBST(TCL_DEFS) - -dnl not used, don't export to save symbols - AC_SUBST(TCL_LIB_FILE) - AC_SUBST(TCL_LIB_FULL_PATH) - AC_SUBST(TCL_LIBS) -dnl not used, don't export to save symbols -dnl AC_SUBST(TCL_PREFIX) - - AC_SUBST(TCL_CFLAGS) - -dnl not used, don't export to save symbols -dnl AC_SUBST(TCL_EXEC_PREFIX) - - AC_SUBST(TCL_SHLIB_CFLAGS) - AC_SUBST(TCL_SHLIB_LD) -dnl don't export, not used outside of configure -dnl AC_SUBST(TCL_SHLIB_LD_LIBS) -dnl AC_SUBST(TCL_SHLIB_SUFFIX) -dnl not used, don't export to save symbols -dnl AC_SUBST(TCL_DL_LIBS) - AC_SUBST(TCL_LD_FLAGS) - AC_SUBST(TCL_LD_SEARCH_FLAGS) -dnl don't export, not used outside of configure -dnl AC_SUBST(TCL_COMPAT_OBJS) - AC_SUBST(TCL_RANLIB) - AC_SUBST(TCL_BUILD_LIB_SPEC) - AC_SUBST(TCL_LIB_SPEC) - AC_SUBST(TCL_BIN_DIR) -dnl AC_SUBST(TCL_LIB_VERSIONS_OK) - -dnl not used, don't export to save symbols -dnl AC_SUBST(TCL_SHARED_LIB_SUFFIX) - -dnl not used, don't export to save symbols -dnl AC_SUBST(TCL_UNSHARED_LIB_SUFFIX) -]) - -dnl ==================================================================== -AC_DEFUN(CYG_AC_PATH_TK, [ - CYG_AC_PATH_TKH - CYG_AC_PATH_TKCONFIG - CYG_AC_LOAD_TKCONFIG -]) -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 -# in preference to any others. Same logic is used when choosing library -# and again with Tcl. The search order is the best place to look first, then in -# decreasing significance. The loop breaks if the trigger file is found. -# Note the gross little conversion here of srcdir by cd'ing to the found -# directory. This converts the path from a relative to an absolute, so -# recursive cache variables for the path will work right. We check all -# the possible paths in one loop rather than many separate loops to speed -# things up. -# the alternative search directory is involked by --with-tkinclude -# -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -no_tk=true -AC_MSG_CHECKING(for Tk headers in the source tree) -AC_ARG_WITH(tkinclude, [ --with-tkinclude directory where tk headers are], with_tkinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_tkh,[ -dnl first check to see if --with-tkinclude was specified -if test x"${with_tkinclude}" != x ; then - if test -f ${with_tkinclude}/tk.h ; then - ac_cv_c_tkh=`(cd ${with_tkinclude}; ${PWDCMD-pwd})` - elif test -f ${with_tkinclude}/generic/tk.h ; then - ac_cv_c_tkh=`(cd ${with_tkinclude}/generic; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_tkinclude} directory doesn't contain headers]) - fi -fi - -dnl next check if it came with Tk configuration file -if test x"${ac_cv_c_tkconfig}" != x ; then - for i in $dirlist; do - if test -f $ac_cv_c_tkconfig/$i/generic/tk.h ; then - ac_cv_c_tkh=`(cd $ac_cv_c_tkconfig/$i/generic; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_tkh}" = x ; then - dnl find the top level Tk source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/tk* 2>/dev/null`" ; then - tkpath=$srcdir/$i - break - fi - done - - dnl find the exact Tk source dir. We do it this way, cause there - dnl might be multiple version of Tk, and we want the most recent one. - for i in `ls -dr $tkpath/tk* 2>/dev/null ` ; do - if test -f $i/generic/tk.h ; then - ac_cv_c_tkh=`(cd $i/generic; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl see if one is installed -if test x"${ac_cv_c_tkh}" = x ; then - AC_MSG_RESULT(none) - dnl Get the path to the compiler. We do it this way instead of using - dnl AC_CHECK_HEADER, cause this doesn't depend in having X configured. - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/include - if test -f $ccpath/tk.h; then - ac_cv_c_tkh=$ccpath - fi -else - AC_MSG_RESULT(${ac_cv_c_tkh}) -fi -]) - TKHDIR="" -if test x"${ac_cv_c_tkh}" = x ; then - AC_MSG_ERROR([Can't find any Tk headers]) -fi -if test x"${ac_cv_c_tkh}" != x ; then - no_tk="" - if test x"${ac_cv_c_tkh}" != x"installed" ; then - if test x"${CC}" = xcl ; then - tmp="`cygpath --windows ${ac_cv_c_tkh}`" - ac_cv_c_tkh="`echo $tmp | sed -e s#\\\\\\\\#/#g`" - fi - AC_MSG_RESULT([found in ${ac_cv_c_tkh}]) - TKHDIR="-I${ac_cv_c_tkh}" - fi -fi - -AC_SUBST(TKHDIR) -]) - -AC_DEFUN(CYG_AC_PATH_TKCONFIG, [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -dnl First, look for one uninstalled. -dnl the alternative search directory is invoked by --with-tkconfig -if test x"${no_tk}" = x ; then - dnl we reset no_tk in case something fails here - no_tk=true - AC_ARG_WITH(tkconfig, [ --with-tkconfig directory containing tk configuration (tkConfig.sh)], - with_tkconfig=${withval}) - AC_MSG_CHECKING([for Tk configuration script]) - AC_CACHE_VAL(ac_cv_c_tkconfig,[ - - dnl First check to see if --with-tkconfig was specified. - if test x"${with_tkconfig}" != x ; then - if test -f "${with_tkconfig}/tkConfig.sh" ; then - ac_cv_c_tkconfig=`(cd ${with_tkconfig}; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) - fi - fi - - dnl next check if it came with Tk configuration file in the source tree - if test x"${ac_cv_c_tkconfig}" = x ; then - for i in $dirlist; do - dnl need to test both unix and win directories, since - dnl cygwin's tkConfig.sh could be in either directory depending - dnl on the cygwin port of tk. - if test -f $srcdir/$i/unix/tkConfig.sh ; then - ac_cv_c_tkconfig=`(cd $srcdir/$i/unix; ${PWDCMD-pwd})` - break - fi - if test -f $srcdir/$i/win/tkConfig.sh ; then - ac_cv_c_tkconfig=`(cd $srcdir/$i/unix; ${PWDCMD-pwd})` - break - fi - done - fi - dnl check in a few other locations - if test x"${ac_cv_c_tkconfig}" = x ; then - dnl find the top level Tk source directory - for i in $dirlist; do - if test -n "`ls -dr $i/tk* 2>/dev/null`" ; then - tkconfpath=$i - break - fi - done - - dnl find the exact Tk dir. We do it this way, cause there - dnl might be multiple version of Tk, and we want the most recent one. - for i in `ls -dr $tkconfpath/tk* 2>/dev/null ` ; do - dnl need to test both unix and win directories, since - dnl cygwin's tkConfig.sh could be in either directory depending - dnl on the cygwin port of tk. - if test -f $i/unix/tkConfig.sh ; then - ac_cv_c_tkconfig=`(cd $i/unix; ${PWDCMD-pwd})` - break - fi - if test -f $i/win/tkConfig.sh ; then - ac_cv_c_tkconfig=`(cd $i/win; ${PWDCMD-pwd})` - break - fi - done - fi - - dnl Check to see if it's installed. We have to look in the $CC path - dnl to find it, cause our $prefix may not match the compilers. - if test x"${ac_cv_c_tkconfig}" = x ; then - dnl Get the path to the compiler - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/lib - if test -f $ccpath/tkConfig.sh; then - ac_cv_c_tkconfig=$ccpath - fi - fi - ]) dnl end of cache_val - - if test x"${ac_cv_c_tkconfig}" = x ; then - TKCONFIG="" - AC_MSG_WARN(Can't find Tk configuration definitions) - else - no_tk="" - TKCONFIG=${ac_cv_c_tkconfig}/tkConfig.sh - AC_MSG_RESULT(${TKCONFIG}) - fi -fi -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, [ - if test -f "$TKCONFIG" ; then - . $TKCONFIG - fi - - AC_SUBST(TK_VERSION) -dnl not actually used, don't export to save symbols -dnl AC_SUBST(TK_MAJOR_VERSION) -dnl AC_SUBST(TK_MINOR_VERSION) - AC_SUBST(TK_DEFS) - -dnl not used, don't export to save symbols - AC_SUBST(TK_LIB_FILE) - AC_SUBST(TK_LIB_FULL_PATH) - AC_SUBST(TK_LIBS) -dnl not used, don't export to save symbols -dnl AC_SUBST(TK_PREFIX) - -dnl not used, don't export to save symbols -dnl AC_SUBST(TK_EXEC_PREFIX) - AC_SUBST(TK_BUILD_INCLUDES) - AC_SUBST(TK_XINCLUDES) - AC_SUBST(TK_XLIBSW) - AC_SUBST(TK_BUILD_LIB_SPEC) - AC_SUBST(TK_LIB_SPEC) -]) - -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, [ - CYG_AC_PATH_ITCLH - CYG_AC_PATH_ITCLLIB - CYG_AC_PATH_ITCLSH - CYG_AC_PATH_ITCLMKIDX -]) -AC_DEFUN(CYG_AC_PATH_ITCLH, [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -no_itcl=true -AC_MSG_CHECKING(for Itcl headers in the source tree) -AC_ARG_WITH(itclinclude, [ --with-itclinclude directory where itcl headers are], with_itclinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_itclh,[ -dnl first check to see if --with-itclinclude was specified -if test x"${with_itclinclude}" != x ; then - if test -f ${with_itclinclude}/itcl.h ; then - ac_cv_c_itclh=`(cd ${with_itclinclude}; ${PWDCMD-pwd})` - elif test -f ${with_itclinclude}/src/itcl.h ; then - ac_cv_c_itclh=`(cd ${with_itclinclude}/src; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_itclinclude} directory doesn't contain headers]) - fi -fi - -dnl next check if it came with Itcl configuration file -if test x"${ac_cv_c_itclconfig}" != x ; then - for i in $dirlist; do - if test -f $ac_cv_c_itclconfig/$i/src/itcl.h ; then - ac_cv_c_itclh=`(cd $ac_cv_c_itclconfig/$i/src; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_itclh}" = x ; then - dnl find the top level Itcl source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/itcl* 2>/dev/null`" ; then - itclpath=$srcdir/$i - break - fi - done - - dnl find the exact Itcl source dir. We do it this way, cause there - dnl might be multiple version of Itcl, and we want the most recent one. - for i in `ls -dr $itclpath/itcl* 2>/dev/null ` ; do - if test -f $i/src/itcl.h ; then - ac_cv_c_itclh=`(cd $i/src; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl see if one is installed -if test x"${ac_cv_c_itclh}" = x ; then - AC_MSG_RESULT(none) - AC_CHECK_HEADER(itcl.h, ac_cv_c_itclh=installed, ac_cv_c_itclh="") -else - AC_MSG_RESULT(${ac_cv_c_itclh}) -fi -]) - ITCLHDIR="" -if test x"${ac_cv_c_itclh}" = x ; then - AC_MSG_ERROR([Can't find any Itcl headers]) -fi -if test x"${ac_cv_c_itclh}" != x ; then - no_itcl="" - if test x"${ac_cv_c_itclh}" != x"installed" ; then - AC_MSG_RESULT(${ac_cv_c_itclh}) - ITCLHDIR="-I${ac_cv_c_itclh}" - fi -fi - -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, [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -if test x"${no_itcl}" = x ; then - dnl we reset no_itcl incase something fails here - no_itcl=true - AC_ARG_WITH(itcllib, - [ --with-itcllib directory where the itcl library is], - with_itcllib=${withval}) - AC_MSG_CHECKING([for Itcl library]) - AC_CACHE_VAL(ac_cv_c_itcllib,[ - dnl First check to see if --with-itcllib was specified. - if test x"${with_itcllib}" != x ; then - if test -f "${with_itcllib}/libitcl$TCL_SHARED_LIB_SUFFIX" ; then - ac_cv_c_itcllib=`(cd ${with_itcllib}; ${PWDCMD-pwd})`/libitcl$TCL_SHARED_LIB_SUFFIX - else - if test -f "${with_itcllib}/libitcl$TCL_UNSHARED_LIB_SUFFIX"; then - ac_cv_c_itcllib=`(cd ${with_itcllib}; ${PWDCMD-pwd})`/libitcl$TCL_UNSHARED_LIB_SUFFIX - fi - fi - fi - dnl then check for a Itcl library. Since these are uninstalled, - dnl use the simple lib name root. - if test x"${ac_cv_c_itcllib}" = x ; then - dnl find the top level Itcl build directory - for i in $dirlist; do - if test -n "`ls -dr $i/itcl* 2>/dev/null`" ; then - itclpath=$i/itcl - break - fi - done - dnl Itcl 7.5 and greater puts library in subdir. Look there first. - if test -f "$itclpath/src/libitcl.$TCL_SHLIB_SUFFIX" ; then - ac_cv_c_itcllib=`(cd $itclpath/src; ${PWDCMD-pwd})` - elif test -f "$itclpath/src/libitcl.a"; then - ac_cv_c_itcllib=`(cd $itclpath/src; ${PWDCMD-pwd})` - fi - fi - dnl check in a few other private locations - if test x"${ac_cv_c_itcllib}" = x ; then - for i in ${dirlist}; do - if test -n "`ls -dr ${srcdir}/$i/itcl* 2>/dev/null`" ; then - itclpath=${srcdir}/$i - break - fi - done - for i in `ls -dr ${itclpath}/itcl* 2>/dev/null` ; do - dnl Itcl 7.5 and greater puts library in subdir. Look there first. - if test -f "$i/src/libitcl$TCL_SHLIB_SUFFIX" ; then - ac_cv_c_itcllib=`(cd $i/src; ${PWDCMD-pwd})` - break - elif test -f "$i/src/libitcl.a"; then - ac_cv_c_itcllib=`(cd $i/src; ${PWDCMD-pwd})` - break - fi - done - fi - - dnl see if one is conveniently installed with the compiler - if test x"${ac_cv_c_itcllib}" = x ; then - dnl Get the path to the compiler - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/lib - dnl Itcl 7.5 and greater puts library in subdir. Look there first. - if test -f "${ccpath}/libitcl$TCL_SHLIB_SUFFIX" ; then - ac_cv_c_itcllib=`(cd ${ccpath}; ${PWDCMD-pwd})` - elif test -f "${ccpath}/libitcl.a"; then - ac_cv_c_itcllib=`(cd ${ccpath}; ${PWDCMD-pwd})` - fi - fi - ]) - if test x"${ac_cv_c_itcllib}" = x ; then - ITCLLIB="" - AC_MSG_WARN(Can't find Itcl library) - else - ITCLLIB="-L${ac_cv_c_itcllib}" - AC_MSG_RESULT(${ac_cv_c_itcllib}) - no_itcl="" - fi -fi - -AC_PROVIDE([$0]) -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, [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -no_itcl=true -AC_MSG_CHECKING(for the itcl_sh script) -AC_ARG_WITH(itclinclude, [ --with-itclinclude directory where itcl headers are], with_itclinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_itclsh,[ -dnl first check to see if --with-itclinclude was specified -if test x"${with_itclinclude}" != x ; then - if test -f ${with_itclinclude}/itcl_sh ; then - ac_cv_c_itclsh=`(cd ${with_itclinclude}; ${PWDCMD-pwd})` - elif test -f ${with_itclinclude}/src/itcl_sh ; then - ac_cv_c_itclsh=`(cd ${with_itclinclude}/src; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_itclinclude} directory doesn't contain itcl_sh]) - fi -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_itclsh}" = x ; then - dnl find the top level Itcl source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/itcl* 2>/dev/null`" ; then - itclpath=$srcdir/$i - break - fi - done - - dnl find the exact Itcl source dir. We do it this way, cause there - dnl might be multiple version of Itcl, and we want the most recent one. - for i in `ls -dr $itclpath/itcl* 2>/dev/null ` ; do - if test -f $i/src/itcl_sh ; then - ac_cv_c_itclsh=`(cd $i/src; ${PWDCMD-pwd})`/itcl_sh - break - fi - done -fi - -dnl see if one is installed -if test x"${ac_cv_c_itclsh}" = x ; then - AC_MSG_RESULT(none) - AC_PATH_PROG(ac_cv_c_itclsh, itcl_sh) -else - AC_MSG_RESULT(${ac_cv_c_itclsh}) -fi -]) - -if test x"${ac_cv_c_itclsh}" = x ; then - AC_MSG_ERROR([Can't find the itcl_sh script]) -fi -if test x"${ac_cv_c_itclsh}" != x ; then - no_itcl="" - AC_MSG_RESULT(${ac_cv_c_itclsh}) - ITCLSH="${ac_cv_c_itclsh}" -fi -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, [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -no_itcl=true -AC_MSG_CHECKING(for itcl_mkindex.tcl script) -AC_ARG_WITH(itclinclude, [ --with-itclinclude directory where itcl headers are], with_itclinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_itclmkidx,[ -dnl first check to see if --with-itclinclude was specified -if test x"${with_itclinclude}" != x ; then - if test -f ${with_itclinclude}/itcl_sh ; then - ac_cv_c_itclmkidx=`(cd ${with_itclinclude}; ${PWDCMD-pwd})` - elif test -f ${with_itclinclude}/src/itcl_sh ; then - ac_cv_c_itclmkidx=`(cd ${with_itclinclude}/src; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_itclinclude} directory doesn't contain itcl_sh]) - fi -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_itclmkidx}" = x ; then - dnl find the top level Itcl source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/itcl* 2>/dev/null`" ; then - itclpath=$srcdir/$i - break - fi - done - - dnl find the exact Itcl source dir. We do it this way, cause there - dnl might be multiple version of Itcl, and we want the most recent one. - for i in `ls -dr $itclpath/itcl* 2>/dev/null ` ; do - if test -f $i/library/itcl_mkindex.tcl ; then - ac_cv_c_itclmkidx=`(cd $i/library; ${PWDCMD-pwd})`/itcl_mkindex.tcl - break - fi - done -fi -if test x"${ac_cv_c_itclmkidx}" = x ; then - dnl Get the path to the compiler - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/share - dnl Itcl 7.5 and greater puts library in subdir. Look there first. - for i in `ls -dr $ccpath/itcl* 2>/dev/null ` ; do - if test -f $i/itcl_mkindex.tcl ; then - ac_cv_c_itclmkidx=`(cd $i; ${PWDCMD-pwd})`/itcl_mkindex.tcl - break - fi - done -fi -]) - -if test x"${ac_cv_c_itclmkidx}" = x ; then - AC_MSG_ERROR([Can't find the itcl_mkindex.tcl script]) -fi -if test x"${ac_cv_c_itclmkidx}" != x ; then - no_itcl="" - AC_MSG_RESULT(${ac_cv_c_itclmkidx}) - ITCLMKIDX="${ac_cv_c_itclmkidx}" -else - AC_MSG_RESULT(none) -fi -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, [ - CYG_AC_PATH_TIXH - CYG_AC_PATH_TIXLIB -]) -AC_DEFUN(CYG_AC_PATH_TIXH, [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -no_tix=true -AC_MSG_CHECKING(for Tix headers in the source tree) -AC_ARG_WITH(tixinclude, [ --with-tixinclude directory where tix headers are], with_tixinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_tixh,[ -dnl first check to see if --with-tixinclude was specified -if test x"${with_tixinclude}" != x ; then - if test -f ${with_tixinclude}/tix.h ; then - ac_cv_c_tixh=`(cd ${with_tixinclude}; ${PWDCMD-pwd})` - elif test -f ${with_tixinclude}/generic/tix.h ; then - ac_cv_c_tixh=`(cd ${with_tixinclude}/generic; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_tixinclude} directory doesn't contain headers]) - fi -fi - -dnl next check if it came with Tix configuration file -if test x"${ac_cv_c_tixconfig}" != x ; then - for i in $dirlist; do - if test -f $ac_cv_c_tixconfig/$i/generic/tix.h ; then - ac_cv_c_tixh=`(cd $ac_cv_c_tixconfig/$i/generic; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_tixh}" = x ; then - dnl find the top level Tix source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/tix* 2>/dev/null`" ; then - tixpath=$srcdir/$i - break - fi - done - - dnl find the exact Tix source dir. We do it this way, cause there - dnl might be multiple version of Tix, and we want the most recent one. - for i in `ls -dr $tixpath/tix* 2>/dev/null ` ; do - if test -f $i/generic/tix.h ; then - ac_cv_c_tixh=`(cd $i/generic; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl see if one is installed -if test x"${ac_cv_c_tixh}" = x ; then - AC_MSG_RESULT(none) - dnl Get the path to the compiler - - dnl Get the path to the compiler. We do it this way instead of using - dnl AC_CHECK_HEADER, cause this doesn't depend in having X configured. - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/include - if test -f $ccpath/tix.h; then - ac_cv_c_tixh=installed - fi -else - AC_MSG_RESULT(${ac_cv_c_tixh}) -fi -]) -if test x"${ac_cv_c_tixh}" = x ; then - AC_MSG_ERROR([Can't find any Tix headers]) -fi -if test x"${ac_cv_c_tixh}" != x ; then - no_tix="" - AC_MSG_RESULT(${ac_cv_c_tixh}) - if test x"${ac_cv_c_tixh}" != x"installed" ; then - TIXHDIR="-I${ac_cv_c_tixh}" - fi -fi - -AC_SUBST(TIXHDIR) -]) - -AC_DEFUN(CYG_AC_PATH_TIXCONFIG, [ -# -# Ok, lets find the tix configuration -# First, look for one uninstalled. -# the alternative search directory is invoked by --with-tixconfig -# - -if test x"${no_tix}" = x ; then - # we reset no_tix in case something fails here - no_tix=true - AC_ARG_WITH(tixconfig, [ --with-tixconfig directory containing tix configuration (tixConfig.sh)], - with_tixconfig=${withval}) - AC_MSG_CHECKING([for Tix configuration]) - AC_CACHE_VAL(ac_cv_c_tixconfig,[ - - # First check to see if --with-tixconfig was specified. - if test x"${with_tixconfig}" != x ; then - if test -f "${with_tixconfig}/tixConfig.sh" ; then - ac_cv_c_tixconfig=`(cd ${with_tixconfig}; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_tixconfig} directory doesn't contain tixConfig.sh]) - fi - fi - - # then check for a private Tix library - if test x"${ac_cv_c_tixconfig}" = x ; then - for i in \ - ../tix \ - `ls -dr ../tix[[4]]* 2>/dev/null` \ - ../../tix \ - `ls -dr ../../tix[[4]]* 2>/dev/null` \ - ../../../tix \ - `ls -dr ../../../tix[[4]]* 2>/dev/null` ; do - if test -f "$i/tixConfig.sh" ; then - ac_cv_c_tixconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - # check in a few common install locations - if test x"${ac_cv_c_tixconfig}" = x ; then - for i in `ls -d ${prefix}/lib /usr/local/lib 2>/dev/null` ; do - if test -f "$i/tixConfig.sh" ; then - ac_cv_c_tkconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - # check in a few other private locations - if test x"${ac_cv_c_tixconfig}" = x ; then - for i in \ - ${srcdir}/../tix \ - `ls -dr ${srcdir}/../tix[[4-9]]* 2>/dev/null` ; do - if test -f "$i/tixConfig.sh" ; then - ac_cv_c_tixconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - ]) - if test x"${ac_cv_c_tixconfig}" = x ; then - TIXCONFIG="# no Tix configs found" - AC_MSG_WARN(Can't find Tix configuration definitions) - else - no_tix= - TIXCONFIG=${ac_cv_c_tixconfig}/tixConfig.sh - AC_MSG_RESULT(found $TIXCONFIG) - fi -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, [ - if test -f "$TIXCONFIG" ; then - . $TIXCONFIG - fi - - AC_SUBST(TIX_BUILD_LIB_SPEC) - AC_SUBST(TIX_LIB_FULL_PATH) -]) - -AC_DEFUN(CYG_AC_PATH_ITCLCONFIG, [ -# -# Ok, lets find the itcl configuration -# First, look for one uninstalled. -# the alternative search directory is invoked by --with-itclconfig -# - -if test x"${no_itcl}" = x ; then - # we reset no_itcl in case something fails here - no_itcl=true - AC_ARG_WITH(itclconfig, [ --with-itclconfig directory containing itcl configuration (itclConfig.sh)], - with_itclconfig=${withval}) - AC_MSG_CHECKING([for Itcl configuration]) - AC_CACHE_VAL(ac_cv_c_itclconfig,[ - - # First check to see if --with-itclconfig was specified. - if test x"${with_itclconfig}" != x ; then - if test -f "${with_itclconfig}/itclConfig.sh" ; then - ac_cv_c_itclconfig=`(cd ${with_itclconfig}; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_itclconfig} directory doesn't contain itclConfig.sh]) - fi - fi - - # then check for a private itcl library - if test x"${ac_cv_c_itclconfig}" = x ; then - for i in \ - ../itcl/itcl \ - `ls -dr ../itcl/itcl[[3]]* 2>/dev/null` \ - ../../itcl/itcl \ - `ls -dr ../../itcl/itcl[[3]]* 2>/dev/null` \ - ../../../itcl/itcl \ - `ls -dr ../../../itcl/itcl[[3]]* 2>/dev/null` ; do - if test -f "$i/itclConfig.sh" ; then - ac_cv_c_itclconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - # check in a few common install locations - if test x"${ac_cv_c_itclconfig}" = x ; then - for i in `ls -d ${prefix}/lib /usr/local/lib 2>/dev/null` ; do - if test -f "$i/itclConfig.sh" ; then - ac_cv_c_itclconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - # check in a few other private locations - if test x"${ac_cv_c_itclconfig}" = x ; then - for i in \ - ${srcdir}/../itcl/itcl \ - `ls -dr ${srcdir}/../itcl/itcl[[3]]* 2>/dev/null` ; do - if test -f "$i/itcl/itclConfig.sh" ; then - ac_cv_c_itclconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - ]) - if test x"${ac_cv_c_itclconfig}" = x ; then - ITCLCONFIG="# no itcl configs found" - AC_MSG_WARN(Can't find itcl configuration definitions) - else - no_itcl= - ITCLCONFIG=${ac_cv_c_itclconfig}/itclConfig.sh - AC_MSG_RESULT(found $ITCLCONFIG) - fi -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, [ - if test -f "$ITCLCONFIG" ; then - . $ITCLCONFIG - fi - - AC_SUBST(ITCL_BUILD_LIB_SPEC) - AC_SUBST(ITCL_SH) - AC_SUBST(ITCL_LIB_FILE) - AC_SUBST(ITCL_LIB_FULL_PATH) - -]) - - -AC_DEFUN(CYG_AC_PATH_ITKCONFIG, [ -# -# Ok, lets find the itk configuration -# First, look for one uninstalled. -# the alternative search directory is invoked by --with-itkconfig -# - -if test x"${no_itk}" = x ; then - # we reset no_itk in case something fails here - no_itk=true - AC_ARG_WITH(itkconfig, [ --with-itkconfig directory containing itk configuration (itkConfig.sh)], - with_itkconfig=${withval}) - AC_MSG_CHECKING([for Itk configuration]) - AC_CACHE_VAL(ac_cv_c_itkconfig,[ - - # First check to see if --with-itkconfig was specified. - if test x"${with_itkconfig}" != x ; then - if test -f "${with_itkconfig}/itkConfig.sh" ; then - ac_cv_c_itkconfig=`(cd ${with_itkconfig}; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_itkconfig} directory doesn't contain itkConfig.sh]) - fi - fi - - # then check for a private itk library - if test x"${ac_cv_c_itkconfig}" = x ; then - for i in \ - ../itcl/itk \ - `ls -dr ../itcl/itk[[3]]* 2>/dev/null` \ - ../../itcl/itk \ - `ls -dr ../../itcl/itk[[3]]* 2>/dev/null` \ - ../../../itcl/itk \ - `ls -dr ../../../itcl/itk[[3]]* 2>/dev/null` ; do - if test -f "$i/itkConfig.sh" ; then - ac_cv_c_itkconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - # check in a few common install locations - if test x"${ac_cv_c_itkconfig}" = x ; then - for i in `ls -d ${prefix}/lib /usr/local/lib 2>/dev/null` ; do - if test -f "$i/itcl/itkConfig.sh" ; then - ac_cv_c_itkconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - # check in a few other private locations - if test x"${ac_cv_c_itkconfig}" = x ; then - for i in \ - ${srcdir}/../itcl/itk \ - `ls -dr ${srcdir}/../itcl/itk[[3]]* 2>/dev/null` ; do - if test -f "$i/itkConfig.sh" ; then - ac_cv_c_itkconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - ]) - if test x"${ac_cv_c_itkconfig}" = x ; then - ITCLCONFIG="# no itk configs found" - AC_MSG_WARN(Can't find itk configuration definitions) - else - no_itk= - ITKCONFIG=${ac_cv_c_itkconfig}/itkConfig.sh - AC_MSG_RESULT(found $ITKCONFIG) - fi -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, [ - if test -f "$ITKCONFIG" ; then - . $ITKCONFIG - fi - - AC_SUBST(ITK_BUILD_LIB_SPEC) - AC_SUBST(ITK_LIB_FILE) - AC_SUBST(ITK_LIB_FULL_PATH) -]) - - -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, [ - CYG_AC_PATH_LIBGUIH - CYG_AC_PATH_LIBGUILIB -]) -AC_DEFUN(CYG_AC_PATH_LIBGUIH, [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../..../../../../../../../../../../.." -no_libgui=true -AC_MSG_CHECKING(for Libgui headers in the source tree) -AC_ARG_WITH(libguiinclude, [ --with-libguiinclude directory where libgui headers are], with_libguiinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_libguih,[ -dnl first check to see if --with-libguiinclude was specified -if test x"${with_libguiinclude}" != x ; then - if test -f ${with_libguiinclude}/guitcl.h ; then - ac_cv_c_libguih=`(cd ${with_libguiinclude}; ${PWDCMD-pwd})` - elif test -f ${with_libguiinclude}/src/guitcl.h ; then - ac_cv_c_libguih=`(cd ${with_libguiinclude}/src; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_libguiinclude} directory doesn't contain headers]) - fi -fi - -dnl next check if it came with Libgui configuration file -if test x"${ac_cv_c_libguiconfig}" != x ; then - for i in $dirlist; do - if test -f $ac_cv_c_libguiconfig/$i/src/guitcl.h ; then - ac_cv_c_libguih=`(cd $ac_cv_c_libguiconfig/$i/src; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_libguih}" = x ; then - dnl find the top level Libgui source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/libgui* 2>/dev/null`" ; then - libguipath=$srcdir/$i - break - fi - done - - dnl find the exact Libgui source dir. We do it this way, cause there - dnl might be multiple version of Libgui, and we want the most recent one. - for i in `ls -dr $libguipath/libgui* 2>/dev/null ` ; do - if test -f $i/src/guitcl.h ; then - ac_cv_c_libguih=`(cd $i/src; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl see if one is installed -if test x"${ac_cv_c_libguih}" = x ; then - AC_MSG_RESULT(none) - AC_CHECK_HEADER(guitcl.h, ac_cv_c_libguih=installed, ac_cv_c_libguih="") -fi -]) -LIBGUIHDIR="" -if test x"${ac_cv_c_libguih}" = x ; then - AC_MSG_WARN([Can't find any Libgui headers]) -fi -if test x"${ac_cv_c_libguih}" != x ; then - no_libgui="" - if test x"${ac_cv_c_libguih}" != x"installed" ; then - LIBGUIHDIR="-I${ac_cv_c_libguih}" - fi -fi -AC_MSG_RESULT(${ac_cv_c_libguih}) -AC_SUBST(LIBGUIHDIR) -]) - -dnl ==================================================================== -dnl find the GUI library -AC_DEFUN(CYG_AC_PATH_LIBGUILIB, [ -AC_MSG_CHECKING(for GUI library in the build tree) -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -dnl look for the library -AC_MSG_CHECKING(for GUI library) -AC_CACHE_VAL(ac_cv_c_libguilib,[ -if test x"${ac_cv_c_libguilib}" = x ; then - for i in $dirlist; do - if test -f "$i/libgui/src/Makefile" ; then - ac_cv_c_libguilib=`(cd $i/libgui/src; ${PWDCMD-pwd})` - break - fi - done -fi -]) -if test x"${ac_cv_c_libguilib}" != x ; then - GUILIB="${GUILIB} -L${ac_cv_c_libguilib}" - LIBGUILIB="-lgui" - AC_MSG_RESULT(${ac_cv_c_libguilib}) -else - AC_MSG_RESULT(none) -fi - -AC_SUBST(GUILIB) -AC_SUBST(LIBGUILIB) -]) diff --git a/contrib/binutils/config/mh-armpic b/contrib/binutils/config/mh-armpic deleted file mode 100644 index 35cf2c8ee4e3..000000000000 --- a/contrib/binutils/config/mh-armpic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fPIC diff --git a/contrib/binutils/config/mh-cxux b/contrib/binutils/config/mh-cxux deleted file mode 100644 index 0a98f113bafb..000000000000 --- a/contrib/binutils/config/mh-cxux +++ /dev/null @@ -1,7 +0,0 @@ -# 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-decstation b/contrib/binutils/config/mh-decstation deleted file mode 100644 index 320927c306a4..000000000000 --- a/contrib/binutils/config/mh-decstation +++ /dev/null @@ -1,3 +0,0 @@ -# for X11, since the native DECwindows include files are really broken when -# it comes to function prototypes. -X11_EXTRA_CFLAGS = "-DNeedFunctionPrototypes=0" diff --git a/contrib/binutils/config/mh-elfalphapic b/contrib/binutils/config/mh-elfalphapic deleted file mode 100644 index 35cf2c8ee4e3..000000000000 --- a/contrib/binutils/config/mh-elfalphapic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fPIC diff --git a/contrib/binutils/config/mh-ia64pic b/contrib/binutils/config/mh-ia64pic deleted file mode 100644 index 92e48d90fbdf..000000000000 --- a/contrib/binutils/config/mh-ia64pic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fpic diff --git a/contrib/binutils/config/mh-mingw32 b/contrib/binutils/config/mh-mingw32 deleted file mode 100644 index f622c8bec018..000000000000 --- a/contrib/binutils/config/mh-mingw32 +++ /dev/null @@ -1,7 +0,0 @@ -# We also need to override LIBGCC2_DEBUG_CFLAGS so libgcc2 will be -# built without debugging information - -LIBGCC2_DEBUG_CFLAGS= - -# custom installation rules for mingw32 (append .exe to binaries, etc.) -# INSTALL_DOSREL=install-dosrel diff --git a/contrib/binutils/config/mh-necv4 b/contrib/binutils/config/mh-necv4 deleted file mode 100644 index 6845f3caa200..000000000000 --- a/contrib/binutils/config/mh-necv4 +++ /dev/null @@ -1,6 +0,0 @@ -# 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 40030020773a..000000000000 --- a/contrib/binutils/config/mh-openedition +++ /dev/null @@ -1 +0,0 @@ -RANLIB = true diff --git a/contrib/binutils/config/mh-papic b/contrib/binutils/config/mh-papic deleted file mode 100644 index 35cf2c8ee4e3..000000000000 --- a/contrib/binutils/config/mh-papic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fPIC diff --git a/contrib/binutils/config/mh-ppcpic b/contrib/binutils/config/mh-ppcpic deleted file mode 100644 index 35cf2c8ee4e3..000000000000 --- a/contrib/binutils/config/mh-ppcpic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fPIC diff --git a/contrib/binutils/config/mh-s390pic b/contrib/binutils/config/mh-s390pic deleted file mode 100644 index 92e48d90fbdf..000000000000 --- a/contrib/binutils/config/mh-s390pic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fpic diff --git a/contrib/binutils/config/mh-sco b/contrib/binutils/config/mh-sco deleted file mode 100644 index 574b92aa71d7..000000000000 --- a/contrib/binutils/config/mh-sco +++ /dev/null @@ -1,5 +0,0 @@ -RANLIB = true -# You may need this if you don't have bison. -# BISON = yacc -Sm10400 - -X11_EXTRA_LIBS = -lsocket -lm -lintl -lmalloc diff --git a/contrib/binutils/config/mh-solaris b/contrib/binutils/config/mh-solaris deleted file mode 100644 index 16553c5f3cd9..000000000000 --- a/contrib/binutils/config/mh-solaris +++ /dev/null @@ -1,5 +0,0 @@ -# Makefile changes for Suns running Solaris 2 - -RANLIB = true - -X11_EXTRA_LIBS = -lnsl -lsocket diff --git a/contrib/binutils/config/mh-sparcpic b/contrib/binutils/config/mh-sparcpic deleted file mode 100644 index e218bb48aa43..000000000000 --- a/contrib/binutils/config/mh-sparcpic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=`case '${LIBCFLAGS} ${LIBCXXFLAGS}' in *-fpic* ) echo -fpic ;; * ) echo -fPIC ;; esac` diff --git a/contrib/binutils/config/mh-sysv b/contrib/binutils/config/mh-sysv deleted file mode 100644 index 40030020773a..000000000000 --- 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 deleted file mode 100644 index 3634950d75cb..000000000000 --- a/contrib/binutils/config/mh-sysv4 +++ /dev/null @@ -1,6 +0,0 @@ -RANLIB = true - -# The l flag generates a warning from the SVR4 archiver, remove it. -AR_FLAGS = cr - -X11_EXTRA_LIBS = -lnsl diff --git a/contrib/binutils/config/mh-sysv5 b/contrib/binutils/config/mh-sysv5 deleted file mode 100644 index 3634950d75cb..000000000000 --- a/contrib/binutils/config/mh-sysv5 +++ /dev/null @@ -1,6 +0,0 @@ -RANLIB = true - -# The l flag generates a warning from the SVR4 archiver, remove it. -AR_FLAGS = cr - -X11_EXTRA_LIBS = -lnsl diff --git a/contrib/binutils/config/mh-x86pic b/contrib/binutils/config/mh-x86pic deleted file mode 100644 index 92e48d90fbdf..000000000000 --- a/contrib/binutils/config/mh-x86pic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fpic diff --git a/contrib/binutils/config/mt-alphaieee b/contrib/binutils/config/mt-alphaieee deleted file mode 100644 index 9c205314ad5b..000000000000 --- a/contrib/binutils/config/mt-alphaieee +++ /dev/null @@ -1,2 +0,0 @@ -CFLAGS_FOR_TARGET += -mieee -CXXFLAGS_FOR_TARGET += -mieee diff --git a/contrib/binutils/config/mt-armpic b/contrib/binutils/config/mt-armpic deleted file mode 100644 index 35b8c9e4dc23..000000000000 --- 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 35b8c9e4dc23..000000000000 --- 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 ff9872755757..000000000000 --- a/contrib/binutils/config/mt-ia64pic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG_FOR_TARGET=-fpic diff --git a/contrib/binutils/config/mt-linux b/contrib/binutils/config/mt-linux deleted file mode 100644 index 15bf41716033..000000000000 --- a/contrib/binutils/config/mt-linux +++ /dev/null @@ -1 +0,0 @@ -CXXFLAGS_FOR_TARGET = $(CXXFLAGS) -D_GNU_SOURCE diff --git a/contrib/binutils/config/mt-ospace b/contrib/binutils/config/mt-ospace deleted file mode 100644 index 7f091041d8a7..000000000000 --- a/contrib/binutils/config/mt-ospace +++ /dev/null @@ -1,3 +0,0 @@ -# Build libraries optimizing for space, not speed. - CFLAGS_FOR_TARGET = -g -Os - CXXFLAGS_FOR_TARGET = -g -Os diff --git a/contrib/binutils/config/mt-papic b/contrib/binutils/config/mt-papic deleted file mode 100644 index 35b8c9e4dc23..000000000000 --- 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 35b8c9e4dc23..000000000000 --- 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 ff9872755757..000000000000 --- 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 a62b38bd9c1b..000000000000 --- 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 deleted file mode 100644 index 97da6c265921..000000000000 --- a/contrib/binutils/config/mt-v810 +++ /dev/null @@ -1,4 +0,0 @@ -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 ff9872755757..000000000000 --- a/contrib/binutils/config/mt-x86pic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG_FOR_TARGET=-fpic diff --git a/contrib/binutils/contrib/ChangeLog b/contrib/binutils/contrib/ChangeLog deleted file mode 100644 index 4a0de852933a..000000000000 --- a/contrib/binutils/contrib/ChangeLog +++ /dev/null @@ -1,7 +0,0 @@ -2002-07-03 Nick Clifton <nickc@cambridge.redhat.com> - - * ChangeLog: Newly created. - * texi2pod.pl: Imported from FSF GCC sources. - - - diff --git a/contrib/binutils/contrib/texi2pod.pl b/contrib/binutils/contrib/texi2pod.pl deleted file mode 100755 index e5560f303de2..000000000000 --- a/contrib/binutils/contrib/texi2pod.pl +++ /dev/null @@ -1,431 +0,0 @@ -#! /usr/bin/perl -w - -# Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. - -# This file is part of GNU CC. - -# GNU CC 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. - -# GNU CC 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 GNU CC; see the file COPYING. If not, write to -# the Free Software Foundation, 59 Temple Place - Suite 330, -# Boston MA 02111-1307, USA. - -# This does trivial (and I mean _trivial_) conversion of Texinfo -# markup to Perl POD format. It's intended to be used to extract -# something suitable for a manpage from a Texinfo document. - -$output = 0; -$skipping = 0; -%sects = (); -$section = ""; -@icstack = (); -@endwstack = (); -@skstack = (); -@instack = (); -$shift = ""; -%defs = (); -$fnno = 1; -$inf = ""; -$ibase = ""; - -while ($_ = shift) { - if (/^-D(.*)$/) { - if ($1 ne "") { - $flag = $1; - } else { - $flag = shift; - } - $value = ""; - ($flag, $value) = ($flag =~ /^([^=]+)(?:=(.+))?/); - die "no flag specified for -D\n" - unless $flag ne ""; - die "flags may only contain letters, digits, hyphens, dashes and underscores\n" - unless $flag =~ /^[a-zA-Z0-9_-]+$/; - $defs{$flag} = $value; - } elsif (/^-/) { - usage(); - } else { - $in = $_, next unless defined $in; - $out = $_, next unless defined $out; - usage(); - } -} - -if (defined $in) { - $inf = gensym(); - open($inf, "<$in") or die "opening \"$in\": $!\n"; - $ibase = $1 if $in =~ m|^(.+)/[^/]+$|; -} else { - $inf = \*STDIN; -} - -if (defined $out) { - open(STDOUT, ">$out") or die "opening \"$out\": $!\n"; -} - -while(defined $inf) { -while(<$inf>) { - # Certain commands are discarded without further processing. - /^\@(?: - [a-z]+index # @*index: useful only in complete manual - |need # @need: useful only in printed manual - |(?:end\s+)?group # @group .. @end group: ditto - |page # @page: ditto - |node # @node: useful only in .info file - |(?:end\s+)?ifnottex # @ifnottex .. @end ifnottex: use contents - )\b/x and next; - - chomp; - - # Look for filename and title markers. - /^\@setfilename\s+([^.]+)/ and $fn = $1, next; - /^\@settitle\s+([^.]+)/ and $tl = postprocess($1), next; - - # Identify a man title but keep only the one we are interested in. - /^\@c\s+man\s+title\s+([A-Za-z0-9-]+)\s+(.+)/ and do { - if (exists $defs{$1}) { - $fn = $1; - $tl = postprocess($2); - } - next; - }; - - # Look for blocks surrounded by @c man begin SECTION ... @c man end. - # This really oughta be @ifman ... @end ifman and the like, but such - # would require rev'ing all other Texinfo translators. - /^\@c\s+man\s+begin\s+([A-Z]+)\s+([A-Za-z0-9-]+)/ and do { - $output = 1 if exists $defs{$2}; - $sect = $1; - next; - }; - /^\@c\s+man\s+begin\s+([A-Z]+)/ and $sect = $1, $output = 1, next; - /^\@c\s+man\s+end/ and do { - $sects{$sect} = "" unless exists $sects{$sect}; - $sects{$sect} .= postprocess($section); - $section = ""; - $output = 0; - next; - }; - - # handle variables - /^\@set\s+([a-zA-Z0-9_-]+)\s*(.*)$/ and do { - $defs{$1} = $2; - next; - }; - /^\@clear\s+([a-zA-Z0-9_-]+)/ and do { - delete $defs{$1}; - next; - }; - - next unless $output; - - # Discard comments. (Can't do it above, because then we'd never see - # @c man lines.) - /^\@c\b/ and next; - - # End-block handler goes up here because it needs to operate even - # if we are skipping. - /^\@end\s+([a-z]+)/ and do { - # Ignore @end foo, where foo is not an operation which may - # cause us to skip, if we are presently skipping. - my $ended = $1; - next if $skipping && $ended !~ /^(?:ifset|ifclear|ignore|menu|iftex)$/; - - die "\@end $ended without \@$ended at line $.\n" unless defined $endw; - die "\@$endw ended by \@end $ended at line $.\n" unless $ended eq $endw; - - $endw = pop @endwstack; - - if ($ended =~ /^(?:ifset|ifclear|ignore|menu|iftex)$/) { - $skipping = pop @skstack; - next; - } elsif ($ended =~ /^(?:example|smallexample|display)$/) { - $shift = ""; - $_ = ""; # need a paragraph break - } elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) { - $_ = "\n=back\n"; - $ic = pop @icstack; - } else { - die "unknown command \@end $ended at line $.\n"; - } - }; - - # We must handle commands which can cause skipping even while we - # are skipping, otherwise we will not process nested conditionals - # correctly. - /^\@ifset\s+([a-zA-Z0-9_-]+)/ and do { - push @endwstack, $endw; - push @skstack, $skipping; - $endw = "ifset"; - $skipping = 1 unless exists $defs{$1}; - next; - }; - - /^\@ifclear\s+([a-zA-Z0-9_-]+)/ and do { - push @endwstack, $endw; - push @skstack, $skipping; - $endw = "ifclear"; - $skipping = 1 if exists $defs{$1}; - next; - }; - - /^\@(ignore|menu|iftex)\b/ and do { - push @endwstack, $endw; - push @skstack, $skipping; - $endw = $1; - $skipping = 1; - next; - }; - - next if $skipping; - - # Character entities. First the ones that can be replaced by raw text - # or discarded outright: - s/\@copyright\{\}/(c)/g; - s/\@dots\{\}/.../g; - s/\@enddots\{\}/..../g; - s/\@([.!? ])/$1/g; - s/\@[:-]//g; - s/\@bullet(?:\{\})?/*/g; - s/\@TeX\{\}/TeX/g; - s/\@pounds\{\}/\#/g; - s/\@minus(?:\{\})?/-/g; - s/\\,/,/g; - - # Now the ones that have to be replaced by special escapes - # (which will be turned back into text by unmunge()) - s/&/&/g; - s/\@\{/{/g; - s/\@\}/}/g; - s/\@\@/&at;/g; - - # Inside a verbatim block, handle @var specially. - if ($shift ne "") { - s/\@var\{([^\}]*)\}/<$1>/g; - } - - # POD doesn't interpret E<> inside a verbatim block. - if ($shift eq "") { - s/</</g; - s/>/>/g; - } else { - s/</</g; - s/>/>/g; - } - - # Single line command handlers. - - /^\@include\s+(.+)$/ and do { - push @instack, $inf; - $inf = gensym(); - - # Try cwd and $ibase. - open($inf, "<" . $1) - or open($inf, "<" . $ibase . "/" . $1) - or die "cannot open $1 or $ibase/$1: $!\n"; - next; - }; - - /^\@(?:section|unnumbered|unnumberedsec|center)\s+(.+)$/ - and $_ = "\n=head2 $1\n"; - /^\@subsection\s+(.+)$/ - and $_ = "\n=head3 $1\n"; - - # Block command handlers: - /^\@itemize\s+(\@[a-z]+|\*|-)/ and do { - push @endwstack, $endw; - push @icstack, $ic; - $ic = $1; - $_ = "\n=over 4\n"; - $endw = "itemize"; - }; - - /^\@enumerate(?:\s+([a-zA-Z0-9]+))?/ and do { - push @endwstack, $endw; - push @icstack, $ic; - if (defined $1) { - $ic = $1 . "."; - } else { - $ic = "1."; - } - $_ = "\n=over 4\n"; - $endw = "enumerate"; - }; - - /^\@([fv]?table)\s+(\@[a-z]+)/ and do { - push @endwstack, $endw; - push @icstack, $ic; - $endw = $1; - $ic = $2; - $ic =~ s/\@(?:samp|strong|key|gcctabopt|env)/B/; - $ic =~ s/\@(?:code|kbd)/C/; - $ic =~ s/\@(?:dfn|var|emph|cite|i)/I/; - $ic =~ s/\@(?:file)/F/; - $_ = "\n=over 4\n"; - }; - - /^\@((?:small)?example|display)/ and do { - push @endwstack, $endw; - $endw = $1; - $shift = "\t"; - $_ = ""; # need a paragraph break - }; - - /^\@itemx?\s*(.+)?$/ and do { - if (defined $1) { - # Entity escapes prevent munging by the <> processing below. - $_ = "\n=item $ic\<$1\>\n"; - } else { - $_ = "\n=item $ic\n"; - $ic =~ y/A-Ya-y/B-Zb-z/; - $ic =~ s/(\d+)/$1 + 1/eg; - } - }; - - $section .= $shift.$_."\n"; -} -# End of current file. -close($inf); -$inf = pop @instack; -} - -die "No filename or title\n" unless defined $fn && defined $tl; - -$sects{NAME} = "$fn \- $tl\n"; -$sects{FOOTNOTES} .= "=back\n" if exists $sects{FOOTNOTES}; - -for $sect (qw(NAME SYNOPSIS DESCRIPTION OPTIONS ENVIRONMENT FILES - BUGS NOTES FOOTNOTES SEEALSO AUTHOR COPYRIGHT)) { - if(exists $sects{$sect}) { - $head = $sect; - $head =~ s/SEEALSO/SEE ALSO/; - print "=head1 $head\n\n"; - print scalar unmunge ($sects{$sect}); - print "\n"; - } -} - -sub usage -{ - die "usage: $0 [-D toggle...] [infile [outfile]]\n"; -} - -sub postprocess -{ - local $_ = $_[0]; - - # @value{foo} is replaced by whatever 'foo' is defined as. - while (m/(\@value\{([a-zA-Z0-9_-]+)\})/g) { - if (! exists $defs{$2}) { - print STDERR "Option $2 not defined\n"; - s/\Q$1\E//; - } else { - $value = $defs{$2}; - s/\Q$1\E/$value/; - } - } - - # Formatting commands. - # Temporary escape for @r. - s/\@r\{([^\}]*)\}/R<$1>/g; - s/\@(?:dfn|var|emph|cite|i)\{([^\}]*)\}/I<$1>/g; - s/\@(?:code|kbd)\{([^\}]*)\}/C<$1>/g; - s/\@(?:gccoptlist|samp|strong|key|option|env|command|b)\{([^\}]*)\}/B<$1>/g; - s/\@sc\{([^\}]*)\}/\U$1/g; - s/\@file\{([^\}]*)\}/F<$1>/g; - s/\@w\{([^\}]*)\}/S<$1>/g; - s/\@(?:dmn|math)\{([^\}]*)\}/$1/g; - - # Cross references are thrown away, as are @noindent and @refill. - # (@noindent is impossible in .pod, and @refill is unnecessary.) - # @* is also impossible in .pod; we discard it and any newline that - # follows it. Similarly, our macro @gol must be discarded. - - s/\(?\@xref\{(?:[^\}]*)\}(?:[^.<]|(?:<[^<>]*>))*\.\)?//g; - s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g; - s/;\s+\@pxref\{(?:[^\}]*)\}//g; - s/\@noindent\s*//g; - s/\@refill//g; - s/\@gol//g; - s/\@\*\s*\n?//g; - - # @uref can take one, two, or three arguments, with different - # semantics each time. @url and @email are just like @uref with - # one argument, for our purposes. - s/\@(?:uref|url|email)\{([^\},]*)\}/<B<$1>>/g; - s/\@uref\{([^\},]*),([^\},]*)\}/$2 (C<$1>)/g; - s/\@uref\{([^\},]*),([^\},]*),([^\},]*)\}/$3/g; - - # Un-escape <> at this point. - s/</</g; - s/>/>/g; - - # Now un-nest all B<>, I<>, R<>. Theoretically we could have - # indefinitely deep nesting; in practice, one level suffices. - 1 while s/([BIR])<([^<>]*)([BIR])<([^<>]*)>/$1<$2>$3<$4>$1</g; - - # Replace R<...> with bare ...; eliminate empty markup, B<>; - # shift white space at the ends of [BI]<...> expressions outside - # the expression. - s/R<([^<>]*)>/$1/g; - s/[BI]<>//g; - s/([BI])<(\s+)([^>]+)>/$2$1<$3>/g; - s/([BI])<([^>]+?)(\s+)>/$1<$2>$3/g; - - # Extract footnotes. This has to be done after all other - # processing because otherwise the regexp will choke on formatting - # inside @footnote. - while (/\@footnote/g) { - s/\@footnote\{([^\}]+)\}/[$fnno]/; - add_footnote($1, $fnno); - $fnno++; - } - - return $_; -} - -sub unmunge -{ - # Replace escaped symbols with their equivalents. - local $_ = $_[0]; - - s/</E<lt>/g; - s/>/E<gt>/g; - s/{/\{/g; - s/}/\}/g; - s/&at;/\@/g; - s/&/&/g; - return $_; -} - -sub add_footnote -{ - unless (exists $sects{FOOTNOTES}) { - $sects{FOOTNOTES} = "\n=over 4\n\n"; - } - - $sects{FOOTNOTES} .= "=item $fnno.\n\n"; $fnno++; - $sects{FOOTNOTES} .= $_[0]; - $sects{FOOTNOTES} .= "\n\n"; -} - -# stolen from Symbol.pm -{ - my $genseq = 0; - sub gensym - { - my $name = "GEN" . $genseq++; - my $ref = \*{$name}; - delete $::{$name}; - return $ref; - } -} diff --git a/contrib/binutils/etc/ChangeLog b/contrib/binutils/etc/ChangeLog deleted file mode 100644 index debe735ca99f..000000000000 --- a/contrib/binutils/etc/ChangeLog +++ /dev/null @@ -1,552 +0,0 @@ -2002-06-11 Nick Clifton <nickc@cambridge.redhat.com> - - Import the following patches from the FSF GCC sources: - 2002-03-25 Zack Weinberg <zack@codesourcery.com> - - * texi2pod.pl: Handle @end ftable and @end vtable. - - 2001-12-12 Matthias Klose <doko@debian.org> - - * texi2pod.pl: Merge changes from binutils' texi2pod.pl. Allows - generation of more than one man page from one source. - Add '-' to set of valid chars for an identifier. - Let -D option accept flags of the form <flag>=<value>. - Use \s+ for whitespace detection in '@c man' lines. - Handle @set and @clear independent of $output. - Substitute all @value{}'s in a line. - - 2001-11-14 Joseph S. Myers <jsm28@cam.ac.uk> - - * texi2pod.pl: Handle @ifnottex, @iftex and @display. Handle @var - in verbatim blocks specially. Handle @unnumbered, @unnumberedsec - and @center. Allow [a-z] after @enumerate. Handle 0 and numbers - greater than 9 in enumerations. - - 2001-07-03 Joseph S. Myers <jsm28@cam.ac.uk> - - * texi2pod.pl: Handle @r inside @item. - -2002-02-27 Andrew Cagney <ac131313@redhat.com> - - * fdl.texi: New file. - -2002-02-24 Andrew Cagney <ac131313@redhat.com> - - * standards.texi: Import February 14, 2002 version. - * make-stds.texi: Import 2001 version. - -2002-01-26 Hans-Peter Nilsson <hp@bitrange.com> - - * Makefile.in (install): Depend on install-info. - -2001-03-25 Stephane Carrez <Stephane.Carrez@worldnet.fr> - - * texi2pod.pl: New file (from gcc/contrib). - -1999-04-01 Jim Blandy <jimb@zwingli.cygnus.com> - - * add-log.el, add-log.vi: New files. - -1999-01-20 Angela Marie Thomas (angela@cygnus.com) - - * comp-tools-verify: Remove some checks that are no longer valid. - -1998-12-03 Nick Clifton <nickc@cygnus.com> - - * targetdoc/fr30.texi: New document. - -1998-10-01 Angela Marie Thomas (angela@cygnus.com) - - * comp-tools-fix, cross-tools-fix: Replace /usr/include - with ${FIXINCDIR}. - -1998-08-11 Doug Evans <devans@canuck.cygnus.com> - - * make-rel-sym-tree (version): Update calculation. - -1998-06-12 Ian Lance Taylor <ian@cygnus.com> - - * configure.texi: Various additions. - * Makefile.in (TEXI2HTML, DVIPS): New variables. - (standards.ps): New target. - (configure.dvi): Copy .tin files in as well. - (configure.ps, configure.html): New targets. - (clean): Remove configdev.jpg and configbuild.jpg. - * configdev.fig: New file. - * configdev.ein: New file (EPS version of configdev.fig). - * configdev.jin: New file (JPEG version of configdev.fig). - * configbuild.fig: New file. - * configbuild.ein: New file (EPS version of configbuild.fig). - * configbuild.jin: New file (JPEG version of configbuild.fig). - -1998-06-10 Ian Lance Taylor <ian@cygnus.com> - - * configure.texi: New file. - * configdev.tin: New file. - * configbuild.tin: New file. - * Makefile.in (MAKEINFO): Use makeinfo from texinfo directory if - it exists. - (TEXI2DVI): Likewise for texi2dvi. - (INFOFILES): Add configure.info. - (DVIFILES): Add configure.dvi. - (info): Only build info files if the source files exist. - (install-info): Only install info files if they exist. - (dvi): Only build DVI files if the sources files exist. - (configure.info): New target. - (configure.dvi): New target. - (clean): Remove configdev and configbuild derived files. - - Remove obsolete documentation. - * intro.texi: Remove. - * install.texi: Remove. - * config-names.texi: Remove. - * screen1.eps: Remove. - * screen1.obj: Remove. - * screen2.eps: Remove. - * screen2.obj: Remove. - * Makefile.in: Remove references to the above. - -Thu May 21 14:34:51 1998 Nick Clifton <nickc@cygnus.com> - - * targetdoc/arm-interwork.texi: Add note about ignoring linker - warning message when using --support-old-code. - -Mon May 18 14:27:37 1998 Angela Marie Thomas (angela@cygnus.com) - - * Install.in, comp-tools-fix, comp-tools-verify, cross-tools-fix: - Use $GCCvn rather than substitute everywhere. - -Thu May 14 14:43:10 1998 Nick Clifton <nickc@cygnus.com> - - * targetdoc/arm-interwork.texi: Document dlltool support of - interworking. - -Thu May 7 16:49:38 1998 Jason Molenda (crash@bugshack.cygnus.com) - - * Install.in: Remove references to TCL_LIBRARY, TK_LIBRARY, - and GDBTK_FILENAME. - -Wed Apr 1 17:11:44 1998 Nick Clifton <nickc@cygnus.com> - - * targetdoc/arm-interwork.texi: Document ARM/thumb interworking. - -Tue Mar 31 15:28:20 1998 Ian Lance Taylor <ian@cygnus.com> - - * standards.texi, make-stds.texi: Update to current FSF versions. - * Makefile.in (standards.info): Depend upon make-std.texi. - -Tue Mar 24 16:13:26 1998 Stu Grossman <grossman@bhuna.cygnus.co.uk> - - * configure: Regenerate with autoconf 2.12.1 to fix shell issues - for NT native builds. - -Mon Mar 9 16:41:04 1998 Doug Evans <devans@canuck.cygnus.com> - - * make-rel-sym-tree (binprogs): Add objcopy. - -Tue Feb 24 18:11:58 1998 Doug Evans <devans@canuck.cygnus.com> - - * make-rel-sym-tree: as.new -> as-new, ld.new -> ld-new - nm.new -> nm-new. Make symlinks to crt*.o. - -Fri Nov 21 12:54:58 1997 Manfred Hollstein <manfred@s-direktnet.de> - - * Makefile.in: Add --no-split argument to avoid creating files - with names longer than 14 characters. - -Thu Sep 25 13:13:11 1997 Jason Molenda (crash@pern.cygnus.com) - - * intro.texi: Add closing ifset. - -Mon Sep 1 10:31:32 1997 Angela Marie Thomas (angela@cygnus.com) - - * Install.in: Move setting HOST and TARGET to the beginning - of the file for editing convenience. - -Mon Sep 1 10:28:37 1997 Angela Marie Thomas (angela@cygnus.com) - - * Install.in.: More friendly options/messages when extracting - from a file instead of a tape device. - -Tue Jun 17 15:50:23 1997 Angela Marie Thomas (angela@cygnus.com) - - * Install.in: Add /usr/bsd to PATH for Irix (home of compress) - -Thu Jun 12 13:47:00 1997 Angela Marie Thomas (angela@cygnus.com) - - * Install.in (show_exec_prefix_msg): fix quoting - -Wed Jun 4 15:31:43 1997 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * rebuilding.texi: Removed. - -Sat May 24 18:02:20 1997 Angela Marie Thomas (angela@cygnus.com) - - * cross-tools-fix: Remove host check since it doesn't matter - for this case. - * Install.in (guess_system): clean up more unused hosts. - * Install.in, cross-tools-fix, comp-tools-fix, comp-tools-verify: - Hack for host check to not warn the user for certain cases. - -Fri May 23 23:46:10 1997 Angela Marie Thomas (angela@cygnus.com) - - * subst-strings: Remove a lot of unused code - * Install.in: Remove reference to TAPEdflt, use variables instead of - string substitution when able. - -Fri Apr 11 17:25:52 1997 Ian Lance Taylor <ian@cygnus.com> - - * configure.in: Change file named in AC_INIT to Makefile.in. - * configure: Rebuild. - -Fri Apr 11 18:12:42 1997 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * Install.in (guess_system): Back out change to INSTALLHOST to - call all IRIX systems "mips-sgi-irix4" - - * Makefile.in: Remove references to configure.texi and cfg-paper.texi. - -Thu Apr 10 23:26:45 1997 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * srctree.texi, emacs-relnotes.texi, cfg-paper.texi: Remove. - * Install.in: Remove Ultrix-specific hacks. - Update Cygnus phone numbers. - (guess_system): Remove some old systems (Ultrix, OSF1 v1 & 2, - m68k-HPUX, m68k SunOS, etc.) - (show_gnu_root_msg): Remove. - Removed all the remove option code. - -Thu Apr 10 23:23:33 1997 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * configure.man, configure.texi: Remote. - -Mon Apr 7 18:15:00 1997 Brendan Kehoe <brendan@cygnus.com> - - * Fix the version string for OSF1 4.0 to recognize either - V4.* or X4.* - -Mon Apr 7 15:34:47 1997 Ian Lance Taylor <ian@cygnus.com> - - * standards.texi, make-stds.texi: Update to current FSF versions. - -Tue Nov 19 15:36:14 1996 Doug Evans <dje@canuck.cygnus.com> - - * make-rel-sym-tree: New file. - -Wed Oct 23 00:34:07 1996 Angela Marie Thomas (angela@cygnus.com) - - * Lots of patches from progressive... - * Install.in: restore DDOPTS for AIX 4.x - * Install.in, subst-strings: add case for DG Aviion - * subst-strings: fix typo in INSTALLdir var setting - * comp-tools-verify: set SHLIB_PATH for shared libs - * Install.in, subst-strings: add case for solaris2.5 - * Install.in: fix regression for hppa1.1 check - * comp-tools-fix: set LD_LIBRARY_PATH - * comp-tools-fix: If fixincludes fixes /usr/include/limits.h, - install it as syslimits.h. - -Wed Oct 16 19:20:42 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * Install.in (guess_system): Treat powerpc-ibm-aix4.1 the same as - rs6000-ibm-aix4.1, since the compiler now uses common mode by - default. - -Wed Oct 2 15:39:07 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * configure.in (AC_PROG_INSTALL): Added. - * Makefile.in (distclean): Remove config.cache. - -Wed Oct 2 14:33:58 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * configure.in: Switch to autoconf configure.in. - * configure: New. - * Makefile.in: Use autoconf-substituted values. - -Tue Jun 25 18:56:08 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * Makefile.in (datadir): Changed to $(prefix)/share. - -Fri Mar 29 11:38:01 1996 J.T. Conklin (jtc@lisa.cygnus.com) - - * configure.man: Changed to be recognized by catman -w on Solaris. - -Wed Dec 6 15:40:28 1995 Doug Evans <dje@canuck.cygnus.com> - - * comp-tools-fix (fixincludes): Define FIXPROTO_DEFINES from - .../install-tools/fixproto-defines. - -Sun Nov 12 19:31:27 1995 Jason Molenda (crash@phydeaux.cygnus.com) - - * comp-tools-verify (verify_cxx_initializers): delete argv, - argc declarations, add -static to compile line. - (verify_cxx_hello_world): delete argv, argc declarations, add - -static to compile line. - -Wed Sep 20 13:21:52 1995 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (maintainer-clean): New target, synonym for - realclean. - -Mon Aug 28 17:25:49 1995 Jason Molenda (crash@phydeaux.cygnus.com) - - * Install.in (PATH): add /usr/ucb to $PATH (for SunOS 4.1.x). - -Tue Aug 15 21:51:58 1995 Jason Molenda (crash@phydeaux.cygnus.com) - - * Install.in (guess_system): Match OSF/1 v3.x as the same as - v2.x--v2.x binaries are upward compatible. - -Tue Aug 15 21:46:54 1995 Jason Molenda (crash@phydeaux.cygnus.com) - - * Install.in (guess_system): recognize HP 9000/800 systems as the - same as HP 9000/700 systems. - -Tue Aug 8 13:11:56 1995 Brendan Kehoe <brendan@lisa.cygnus.com> - - * Install.in: For emacs, run show_emacs_alternate_msg and exit. - (show_emacs_alternate_msg): New message saying how emacs can't be - installed in an alternate prefix. - -Thu Jun 8 00:42:56 1995 Angela Marie Thomas <angela@cirdan.cygnus.com> - - * subst-strings: change du commands to $BINDIR/. & $SRCDIR/. just - in case they are symlinks. - -Tue Apr 18 14:23:10 1995 J.T. Conklin <jtc@rtl.cygnus.com> - - * cdk-fix: Extracted table of targets that don't need their - headers fixed from gcc's configure script. - - * cdk-fix, cdk-verify: Use ${HOST} instead of ||HOSTstr|| - - * cdk-fix, cdk-verify: New files, install script fragments used - for Cygnus Developer's Kit. - - * Install.in (do_mkdir): New function. - - * Install.in: Added support for --with and --without options. - Changed so that tape commands are not run when extracting - from a file. - (do_mt): Changed to take only one argument. - -Wed Mar 29 11:16:38 1995 Jason Molenda (crash@phydeaux.cygnus.com) - - * Install.in: catch UNAME==alpha-dec-osf2.x and correct entry for - alpha-dec-osf1.x - -Fri Jan 27 12:04:29 1995 J.T. Conklin <jtc@rtl.cygnus.com> - - * subst-strings (mips-sgi-irix5): New entry in table. - -Thu Jan 19 12:15:44 1995 J.T. Conklin <jtc@rtl.cygnus.com> - - * Install.in: Major rewrite, bundle dependent code (for example, - fixincludes for comp-tools) will be inserted into the Install - script when it is generated. - -Tue Jan 17 16:51:32 1995 Ian Lance Taylor <ian@sanguine.cygnus.com> - - * Makefile.in (Makefile): Rebuild using $(SHELL). - -Thu Nov 3 19:30:33 1994 Ken Raeburn <raeburn@cujo.cygnus.com> - - * Makefile.in (install-info): Depend on info. - -Fri Aug 19 16:16:38 1994 Jason Molenda (crash@phydeaux.cygnus.com) - - * Install.in: set $FIX_HEADER so fixproto can find fix-header. - -Fri May 6 16:18:58 1994 Jason Molenda (crash@sendai.cygnus.com) - - * Makefile.in (install-info): add a semicolon in the if statement. - -Fri Apr 29 16:56:07 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * cfg-paper.texi: Update some outdated information. - - * Makefile.in (install-info): Pass file, not directory, as last - arg to INSTALL_DATA. - (uninstall): New target. - -Thu Apr 28 14:42:22 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * configure.texi: Comment out @smallbook. - - * Makefile.in: Define TEXI2DVI and TEXIDIR, and use the latter. - Remove info files in realclean, not clean, per coding standards. - Remove TeX output in clean. - -Tue Apr 26 17:18:03 1994 Jason Molenda (crash@sendai.cygnus.com) - - * Install.in: fixincludes output is actually put in fixincludes.log, - but echo'ed messages claim it is fixinc.log. This is the same - messages as I logged in March 4 1994, but for some reason we found - the change hadn't been done. I'll have to dig through the logs - and find out what I really did do that day. :) - -Mon Apr 25 20:28:19 1994 Jason Molenda (crash@sendai.cygnus.com) - - * Install.in: use eval to call do_mt() for Ultrix brokenness. - -Mon Apr 25 20:00:00 1994 Jason Molenda (crash@sendai.cygnus.com) - - * Install.in(do_mt): exit with error status 1 if # of parameters - != 3. - -Mon Apr 25 19:42:36 1994 Jason Molenda (crash@sendai.cygnus.com) - - * Install.in: lose TAPE_FORWARD and TAPE_REWIND, add do_mt() - to do all tape movement operations. Currently untested. Addresses - PR # 4886 from bull. - - * Install.in: add 1994 to the copyright thing. - -Fri Apr 22 19:05:13 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * standards.texi: Update from FSF. - -Fri Apr 22 15:46:10 1994 Jason Molenda (crash@cygnus.com) - - * Install.in: Add $DDOPTS, has ``bs=124b'' for all systems except - AIX (some versions of AIX don't understand bs=124b. Silly OS). - -Mon Apr 4 22:55:05 1994 Jason Molenda (crash@sendai.cygnus.com) - - * Install.in: null out $TOOLS before adding stuff to it - non-destructively. - -Wed Mar 30 21:45:35 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * standards.texi: Fix typo. - - * configure.texi, configure.man: Document --disable-. - -Mon Mar 28 13:22:15 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * standards.texi: Update from FSF. - -Sat Mar 26 09:21:44 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * standards.texi, make-stds.texi: Update from FSF. - -Fri Mar 25 22:59:45 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * configure.texi, configure.man: Document --enable-* options. - -Wed Mar 23 23:38:24 1994 Jason Molenda (crash@sendai.cygnus.com) - - * Install.in: set CPP to be gcc -E for fixincludes. - -Wed Mar 23 13:42:48 1994 Jason Molenda (crash@sendai.cygnus.com) - - * Install.in: set PATH to $PATH:/bin:/usr/bin so we can pick - up native tools even if the user doesn't have them in his - path. - - * Install.in: ``hppa-1.1-hp-hpux'' -> ``hppa1.1-hp-hpux''. - -Tue Mar 15 22:09:20 1994 Jason Molenda (crash@sendai.cygnus.com) - - * Install.in: TAPE_REWIND and TAPE_FORWARD variables for Unixunaware, - added switch statement to detect if system is Unixunaware. - -Fri Mar 4 12:10:30 1994 Jason Molenda (crash@sendai.cygnus.com) - - * Install.in: fixincludes output is actually put in fixincludes.log, - but echo'ed messages claim it is fixinc.log. - -Wed Nov 3 02:58:02 1993 Jeffrey Osier (jeffrey@thepub.cygnus.com) - - * subst-strings: output TEXBUNDLE for more install notes matching - * install-texi.in: PRMS info now exists - -Tue Oct 26 16:57:12 1993 K. Richard Pixley (rich@sendai.cygnus.com) - - * subst-strings: match solaris*. Also, add default case to catch - and error out for unrecognized systems. - -Thu Aug 19 18:21:31 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) - - * Install.in: handle the new fixproto work - -Mon Jul 19 12:05:41 1993 david d `zoo' zuhn (zoo@cirdan.cygnus.com) - - * Install.in: remove "MT=tctl" for AIX (not needed, and barely - worked anyway) - -Mon Jun 14 19:09:22 1993 Jeffrey Osier (jeffrey@cygnus.com) - - * subst-strings: changed HOST to recognize Solaris for install notes - -Thu Jun 10 16:01:25 1993 Jeffrey Osier (jeffrey@cygnus.com) - - * dos-inst.texi: new file. - -Wed Jun 9 19:23:59 1993 Jeffrey Osier (jeffrey@rtl.cygnus.com) - - * install-texi.in: added conditionals (nearly complete) - cleaned up - added support for other releases (not done) - -Wed Jun 9 15:53:58 1993 Jim Kingdon (kingdon@cygnus.com) - - * Makefile.in (install-info): Use INSTALL_DATA. - ({dist,real}clean): Also delete Makefile and config.status. - -Fri Jun 4 17:09:56 1993 Jeffrey Osier (jeffrey@cygnus.com) - - * subst-strings: added data for OS_STRING - - * subst-strings: added support for OS_STRING - -Thu Jun 3 00:37:01 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Install.in: pull COPYING and COPYING.LIB off of the tape - -Tue Jun 1 16:52:08 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * subst-strings: replace RELEASE_DIR too - -Mon Mar 22 23:55:27 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Makefile.in: add installcheck target - -Wed Mar 17 02:21:15 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Install.in: fix 'source only' extraction bug where it looked for - the src dir under H-<host>/src instead of src; also remove stray - reference to EMACSHIBIN - -Mon Mar 15 01:25:45 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * make-stds.texi: added 'installcheck' to the standard targets - -Tue Mar 9 19:48:28 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * standards.texi: added INFO-DIR-ENTRY, updated version from the FSF - -Tue Feb 9 12:40:23 1993 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in (standards.info): Added -I$(srcdir) to find - make-stds.texi. - -Mon Feb 1 16:32:56 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * standards.texi: updated to latest FSF version, which includes: - - * make-stds.texi: new file - -Mon Nov 30 01:31:40 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * install-texi.in, relnotes.texi, intro.texi: changed Cygnus phone - numbers from the old Palo Alto ones to the new Mtn. View numbers - -Mon Nov 16 16:50:43 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Makefile.in: define $(RM) to "rm -f" - -Sun Oct 11 16:05:48 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * intro.texi: added INFO-DIR-ENTRY - diff --git a/contrib/binutils/etc/Makefile.in b/contrib/binutils/etc/Makefile.in deleted file mode 100644 index 2bc34574540e..000000000000 --- a/contrib/binutils/etc/Makefile.in +++ /dev/null @@ -1,157 +0,0 @@ -# -# Makefile.in for etc -# - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -srcdir = @srcdir@ -VPATH = @srcdir@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(libdir) -datadir = @datadir@ - -mandir = @mandir@ -man1dir = $(mandir)/man1 -man2dir = $(mandir)/man2 -man3dir = $(mandir)/man3 -man4dir = $(mandir)/man4 -man5dir = $(mandir)/man5 -man6dir = $(mandir)/man6 -man7dir = $(mandir)/man7 -man8dir = $(mandir)/man8 -man9dir = $(mandir)/man9 -infodir = @infodir@ - -SHELL = /bin/sh - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -MAKEINFO = `if [ -f ../texinfo/makeinfo/makeinfo ]; \ - then echo ../texinfo/makeinfo/makeinfo; \ - else echo makeinfo; fi` -TEXI2DVI = `if [ -f ../texinfo/util/texi2dvi ]; \ - then echo ../texinfo/util/texi2dvi; \ - else echo texi2dvi; fi` -TEXI2HTML = texi2html -DVIPS = dvips - -# Where to find texinfo.tex to format documentation with TeX. -TEXIDIR = $(srcdir)/../texinfo - -#### Host, target, and site specific Makefile fragments come in here. -### - -INFOFILES = standards.info configure.info -DVIFILES = standards.dvi configure.dvi - -all: - -# We want install to imply install-info as per GNU standards. -install: install-info - -uninstall: - -info: - for f in $(INFOFILES); do \ - if test -f $(srcdir)/`echo $$f | sed -e 's/.info$$/.texi/'`; then \ - if $(MAKE) "MAKEINFO=$(MAKEINFO)" $$f; then \ - true; \ - else \ - exit 1; \ - fi; \ - fi; \ - done - -install-info: info - $(SHELL) $(srcdir)/../mkinstalldirs $(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; \ - 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; \ - done; \ - fi - -dvi: - for f in $(DVIFILES); do \ - if test -f $(srcdir)/`echo $$f | sed -e 's/.dvi$$/.texi/'`; then \ - if $(MAKE) "TEXI2DVI=$(TEXI2DVI)" $$f; then \ - true; \ - else \ - exit 1; \ - fi; \ - fi; \ - done - -standards.info: $(srcdir)/standards.texi $(srcdir)/make-stds.texi - $(MAKEINFO) --no-split -I$(srcdir) -o standards.info $(srcdir)/standards.texi - -standards.dvi: $(srcdir)/standards.texi - TEXINPUTS=$(TEXIDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/standards.texi - -standards.ps: standards.dvi - $(DVIPS) standards.dvi -o standards.ps - -# makeinfo requires images to be in the current directory. -configure.info: $(srcdir)/configure.texi $(srcdir)/configdev.tin $(srcdir)/configbuild.tin - rm -f configdev.txt configbuild.txt - cp $(srcdir)/configdev.tin configdev.txt - cp $(srcdir)/configbuild.tin configbuild.txt - $(MAKEINFO) -I$(srcdir) -o configure.info $(srcdir)/configure.texi - rm -f configdev.txt configbuild.txt - -# texi2dvi wants both the .txt and the .eps files. -configure.dvi: $(srcdir)/configure.texi $(srcdir)/configdev.tin $(srcdir)/configbuild.tin $(srcdir)/configdev.ein $(srcdir)/configbuild.ein - rm -f configdev.txt configbuild.txt - cp $(srcdir)/configdev.tin configdev.txt - cp $(srcdir)/configbuild.tin configbuild.txt - rm -f configdev.eps configbuild.eps - cp $(srcdir)/configdev.ein configdev.eps - cp $(srcdir)/configbuild.ein configbuild.eps - TEXINPUTS=$(TEXIDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/configure.texi - rm -f configdev.txt configbuild.txt - rm -f configdev.eps configbuild.eps - -# dvips requires images to be in the current directory -configure.ps: configure.dvi $(srcdir)/configdev.ein $(srcdir)/configbuild.ein - rm -f configdev.eps configbuild.eps - cp $(srcdir)/configdev.ein configdev.eps - cp $(srcdir)/configbuild.ein configbuild.eps - $(DVIPS) configure.dvi -o configure.ps - rm -f configdev.eps configbuild.eps - -configure.html: $(srcdir)/configure.texi - $(TEXI2HTML) -split_chapter $(srcdir)/configure.texi - -clean: - rm -f *.aux *.cp *.cps *.dvi *.fn *.fns *.ky *.kys *.log - rm -f *.pg *.pgs *.toc *.tp *.tps *.vr *.vrs - rm -f configdev.txt configbuild.txt configdev.eps configbuild.eps - rm -f configdev.jpg configbuild.jpg - -mostlyclean: clean - -distclean: clean - rm -f Makefile config.status config.cache - -maintainer-clean realclean: distclean - rm -f *.info* - -Makefile: $(srcdir)/Makefile.in $(host_makefile_frag) $(target_makefile_frag) - $(SHELL) ./config.status - -## these last targets are for standards.texi conformance -dist: -check: -installcheck: -TAGS: diff --git a/contrib/binutils/etc/add-log.el b/contrib/binutils/etc/add-log.el deleted file mode 100644 index 60c88e8c9490..000000000000 --- a/contrib/binutils/etc/add-log.el +++ /dev/null @@ -1,573 +0,0 @@ -;;; ============ NOTE WELL! ============= -;;; -;;; You only need to use this file if you're using a version of Emacs -;;; prior to 20.1 to work on GDB. The only difference between this -;;; and the standard add-log.el provided with 19.34 is that it -;;; generates dates using the terser format used by Emacs 20. This is -;;; the format recommended for use in GDB ChangeLogs. -;;; -;;; To use this code, you should create a directory `~/elisp', save the code -;;; below in `~/elisp/add-log.el', and then put something like this in -;;; your `~/.emacs' file, to tell Emacs where to find it: -;;; -;;; (setq load-path -;;; (cons (expand-file-name "~/elisp") -;;; load-path)) -;;; -;;; If you want, you can also byte-compile it --- it'll run a little -;;; faster, and use a little less memory. (Not that those matter much for -;;; this file.) To do that, after you've saved the text as -;;; ~/elisp/add-log.el, bring it up in Emacs, and type -;;; -;;; C-u M-x byte-compile-file -;;; -;;; --- Jim Blandy - -;;; add-log.el --- change log maintenance commands for Emacs - -;; Copyright (C) 1985, 1986, 1988, 1993, 1994 Free Software Foundation, Inc. - -;; Keywords: maint - -;; This file is part of GNU Emacs. - -;; GNU Emacs 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. - -;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Commentary: - -;; This facility is documented in the Emacs Manual. - -;;; Code: - -(defvar change-log-default-name nil - "*Name of a change log file for \\[add-change-log-entry].") - -(defvar add-log-current-defun-function nil - "\ -*If non-nil, function to guess name of current function from surrounding text. -\\[add-change-log-entry] calls this function (if nil, `add-log-current-defun' -instead) with no arguments. It returns a string or nil if it cannot guess.") - -;;;###autoload -(defvar add-log-full-name nil - "*Full name of user, for inclusion in ChangeLog daily headers. -This defaults to the value returned by the `user-full-name' function.") - -;;;###autoload -(defvar add-log-mailing-address nil - "*Electronic mail address of user, for inclusion in ChangeLog daily headers. -This defaults to the value of `user-mail-address'.") - -(defvar change-log-font-lock-keywords - '(("^[SMTWF].+" . font-lock-function-name-face) ; Date line. - ("^\t\\* \\([^ :\n]+\\)" 1 font-lock-comment-face) ; File name. - ("(\\([^)\n]+\\)):" 1 font-lock-keyword-face)) ; Function name. - "Additional expressions to highlight in Change Log mode.") - -(defvar change-log-mode-map nil - "Keymap for Change Log major mode.") -(if change-log-mode-map - nil - (setq change-log-mode-map (make-sparse-keymap)) - (define-key change-log-mode-map "\M-q" 'change-log-fill-paragraph)) - -(defun change-log-name () - (or change-log-default-name - (if (eq system-type 'vax-vms) - "$CHANGE_LOG$.TXT" - (if (or (eq system-type 'ms-dos) (eq system-type 'windows-nt)) - "changelo" - "ChangeLog")))) - -;;;###autoload -(defun prompt-for-change-log-name () - "Prompt for a change log name." - (let* ((default (change-log-name)) - (name (expand-file-name - (read-file-name (format "Log file (default %s): " default) - nil default)))) - ;; Handle something that is syntactically a directory name. - ;; Look for ChangeLog or whatever in that directory. - (if (string= (file-name-nondirectory name) "") - (expand-file-name (file-name-nondirectory default) - name) - ;; Handle specifying a file that is a directory. - (if (file-directory-p name) - (expand-file-name (file-name-nondirectory default) - (file-name-as-directory name)) - name)))) - -;;;###autoload -(defun find-change-log (&optional file-name) - "Find a change log file for \\[add-change-log-entry] and return the name. - -Optional arg FILE-NAME specifies the file to use. -If FILE-NAME is nil, use the value of `change-log-default-name'. -If 'change-log-default-name' is nil, behave as though it were 'ChangeLog' -\(or whatever we use on this operating system). - -If 'change-log-default-name' contains a leading directory component, then -simply find it in the current directory. Otherwise, search in the current -directory and its successive parents for a file so named. - -Once a file is found, `change-log-default-name' is set locally in the -current buffer to the complete file name." - ;; If user specified a file name or if this buffer knows which one to use, - ;; just use that. - (or file-name - (setq file-name (and change-log-default-name - (file-name-directory change-log-default-name) - change-log-default-name)) - (progn - ;; Chase links in the source file - ;; and use the change log in the dir where it points. - (setq file-name (or (and buffer-file-name - (file-name-directory - (file-chase-links buffer-file-name))) - default-directory)) - (if (file-directory-p file-name) - (setq file-name (expand-file-name (change-log-name) file-name))) - ;; Chase links before visiting the file. - ;; This makes it easier to use a single change log file - ;; for several related directories. - (setq file-name (file-chase-links file-name)) - (setq file-name (expand-file-name file-name)) - ;; Move up in the dir hierarchy till we find a change log file. - (let ((file1 file-name) - parent-dir) - (while (and (not (or (get-file-buffer file1) (file-exists-p file1))) - (progn (setq parent-dir - (file-name-directory - (directory-file-name - (file-name-directory file1)))) - ;; Give up if we are already at the root dir. - (not (string= (file-name-directory file1) - parent-dir)))) - ;; Move up to the parent dir and try again. - (setq file1 (expand-file-name - (file-name-nondirectory (change-log-name)) - parent-dir))) - ;; If we found a change log in a parent, use that. - (if (or (get-file-buffer file1) (file-exists-p file1)) - (setq file-name file1))))) - ;; Make a local variable in this buffer so we needn't search again. - (set (make-local-variable 'change-log-default-name) file-name) - file-name) - -;;;###autoload -(defun add-change-log-entry (&optional whoami file-name other-window new-entry) - "Find change log file and add an entry for today. -Optional arg (interactive prefix) non-nil means prompt for user name and site. -Second arg is file name of change log. If nil, uses `change-log-default-name'. -Third arg OTHER-WINDOW non-nil means visit in other window. -Fourth arg NEW-ENTRY non-nil means always create a new entry at the front; -never append to an existing entry." - (interactive (list current-prefix-arg - (prompt-for-change-log-name))) - (or add-log-full-name - (setq add-log-full-name (user-full-name))) - (or add-log-mailing-address - (setq add-log-mailing-address user-mail-address)) - (if whoami - (progn - (setq add-log-full-name (read-input "Full name: " add-log-full-name)) - ;; Note that some sites have room and phone number fields in - ;; full name which look silly when inserted. Rather than do - ;; anything about that here, let user give prefix argument so that - ;; s/he can edit the full name field in prompter if s/he wants. - (setq add-log-mailing-address - (read-input "Mailing address: " add-log-mailing-address)))) - (let ((defun (funcall (or add-log-current-defun-function - 'add-log-current-defun))) - paragraph-end entry) - - (setq file-name (expand-file-name (find-change-log file-name))) - - ;; Set ENTRY to the file name to use in the new entry. - (and buffer-file-name - ;; Never want to add a change log entry for the ChangeLog file itself. - (not (string= buffer-file-name file-name)) - (setq entry (if (string-match - (concat "^" (regexp-quote (file-name-directory - file-name))) - buffer-file-name) - (substring buffer-file-name (match-end 0)) - (file-name-nondirectory buffer-file-name)))) - - (if (and other-window (not (equal file-name buffer-file-name))) - (find-file-other-window file-name) - (find-file file-name)) - (or (eq major-mode 'change-log-mode) - (change-log-mode)) - (undo-boundary) - (goto-char (point-min)) - (let ((heading (format "%s %s <%s>" - (format-time-string "%Y-%m-%d") - add-log-full-name - add-log-mailing-address))) - (if (looking-at (regexp-quote heading)) - (forward-line 1) - (insert heading "\n\n"))) - - ;; Search only within the first paragraph. - (if (looking-at "\n*[^\n* \t]") - (skip-chars-forward "\n") - (forward-paragraph 1)) - (setq paragraph-end (point)) - (goto-char (point-min)) - - ;; Now insert the new line for this entry. - (cond ((re-search-forward "^\\s *\\*\\s *$" paragraph-end t) - ;; Put this file name into the existing empty entry. - (if entry - (insert entry))) - ((and (not new-entry) - (let (case-fold-search) - (re-search-forward - (concat (regexp-quote (concat "* " entry)) - ;; Don't accept `foo.bar' when - ;; looking for `foo': - "\\(\\s \\|[(),:]\\)") - paragraph-end t))) - ;; Add to the existing entry for the same file. - (re-search-forward "^\\s *$\\|^\\s \\*") - (goto-char (match-beginning 0)) - ;; Delete excess empty lines; make just 2. - (while (and (not (eobp)) (looking-at "^\\s *$")) - (delete-region (point) (save-excursion (forward-line 1) (point)))) - (insert "\n\n") - (forward-line -2) - (indent-relative-maybe)) - (t - ;; Make a new entry. - (forward-line 1) - (while (looking-at "\\sW") - (forward-line 1)) - (while (and (not (eobp)) (looking-at "^\\s *$")) - (delete-region (point) (save-excursion (forward-line 1) (point)))) - (insert "\n\n\n") - (forward-line -2) - (indent-to left-margin) - (insert "* " (or entry "")))) - ;; Now insert the function name, if we have one. - ;; Point is at the entry for this file, - ;; either at the end of the line or at the first blank line. - (if defun - (progn - ;; Make it easy to get rid of the function name. - (undo-boundary) - (insert (if (save-excursion - (beginning-of-line 1) - (looking-at "\\s *$")) - "" - " ") - "(" defun "): ")) - ;; No function name, so put in a colon unless we have just a star. - (if (not (save-excursion - (beginning-of-line 1) - (looking-at "\\s *\\(\\*\\s *\\)?$"))) - (insert ": "))))) - -;;;###autoload -(defun add-change-log-entry-other-window (&optional whoami file-name) - "Find change log file in other window and add an entry for today. -Optional arg (interactive prefix) non-nil means prompt for user name and site. -Second arg is file name of change log. \ -If nil, uses `change-log-default-name'." - (interactive (if current-prefix-arg - (list current-prefix-arg - (prompt-for-change-log-name)))) - (add-change-log-entry whoami file-name t)) -;;;###autoload (define-key ctl-x-4-map "a" 'add-change-log-entry-other-window) - -;;;###autoload -(defun change-log-mode () - "Major mode for editing change logs; like Indented Text Mode. -Prevents numeric backups and sets `left-margin' to 8 and `fill-column' to 74. -New log entries are usually made with \\[add-change-log-entry] or \\[add-change-log-entry-other-window]. -Each entry behaves as a paragraph, and the entries for one day as a page. -Runs `change-log-mode-hook'." - (interactive) - (kill-all-local-variables) - (indented-text-mode) - (setq major-mode 'change-log-mode - mode-name "Change Log" - left-margin 8 - fill-column 74 - indent-tabs-mode t - tab-width 8) - (use-local-map change-log-mode-map) - ;; Let each entry behave as one paragraph: - ;; We really do want "^" in paragraph-start below: it is only the lines that - ;; begin at column 0 (despite the left-margin of 8) that we are looking for. - (set (make-local-variable 'paragraph-start) "\\s *$\\|\f\\|^\\sw") - (set (make-local-variable 'paragraph-separate) "\\s *$\\|\f\\|^\\sw") - ;; Let all entries for one day behave as one page. - ;; Match null string on the date-line so that the date-line - ;; is grouped with what follows. - (set (make-local-variable 'page-delimiter) "^\\<\\|^\f") - (set (make-local-variable 'version-control) 'never) - (set (make-local-variable 'adaptive-fill-regexp) "\\s *") - (set (make-local-variable 'font-lock-defaults) - '(change-log-font-lock-keywords t)) - (run-hooks 'change-log-mode-hook)) - -;; It might be nice to have a general feature to replace this. The idea I -;; have is a variable giving a regexp matching text which should not be -;; moved from bol by filling. change-log-mode would set this to "^\\s *\\s(". -;; But I don't feel up to implementing that today. -(defun change-log-fill-paragraph (&optional justify) - "Fill the paragraph, but preserve open parentheses at beginning of lines. -Prefix arg means justify as well." - (interactive "P") - (let ((end (save-excursion (forward-paragraph) (point))) - (beg (save-excursion (backward-paragraph)(point))) - (paragraph-start (concat paragraph-start "\\|\\s *\\s("))) - (fill-region beg end justify))) - -(defvar add-log-current-defun-header-regexp - "^\\([A-Z][A-Z_ ]*[A-Z_]\\|[-_a-zA-Z]+\\)[ \t]*[:=]" - "*Heuristic regexp used by `add-log-current-defun' for unknown major modes.") - -;;;###autoload -(defun add-log-current-defun () - "Return name of function definition point is in, or nil. - -Understands C, Lisp, LaTeX (\"functions\" are chapters, sections, ...), -Texinfo (@node titles), Perl, and Fortran. - -Other modes are handled by a heuristic that looks in the 10K before -point for uppercase headings starting in the first column or -identifiers followed by `:' or `=', see variable -`add-log-current-defun-header-regexp'. - -Has a preference of looking backwards." - (condition-case nil - (save-excursion - (let ((location (point))) - (cond ((memq major-mode '(emacs-lisp-mode lisp-mode scheme-mode - lisp-interaction-mode)) - ;; If we are now precisely at the beginning of a defun, - ;; make sure beginning-of-defun finds that one - ;; rather than the previous one. - (or (eobp) (forward-char 1)) - (beginning-of-defun) - ;; Make sure we are really inside the defun found, not after it. - (if (and (looking-at "\\s(") - (progn (end-of-defun) - (< location (point))) - (progn (forward-sexp -1) - (>= location (point)))) - (progn - (if (looking-at "\\s(") - (forward-char 1)) - (forward-sexp 1) - (skip-chars-forward " '") - (buffer-substring (point) - (progn (forward-sexp 1) (point)))))) - ((and (memq major-mode '(c-mode c++-mode c++-c-mode objc-mode)) - (save-excursion (beginning-of-line) - ;; Use eq instead of = here to avoid - ;; error when at bob and char-after - ;; returns nil. - (while (eq (char-after (- (point) 2)) ?\\) - (forward-line -1)) - (looking-at "[ \t]*#[ \t]*define[ \t]"))) - ;; Handle a C macro definition. - (beginning-of-line) - (while (eq (char-after (- (point) 2)) ?\\) ;not =; note above - (forward-line -1)) - (search-forward "define") - (skip-chars-forward " \t") - (buffer-substring (point) - (progn (forward-sexp 1) (point)))) - ((memq major-mode '(c-mode c++-mode c++-c-mode objc-mode)) - (beginning-of-line) - ;; See if we are in the beginning part of a function, - ;; before the open brace. If so, advance forward. - (while (not (looking-at "{\\|\\(\\s *$\\)")) - (forward-line 1)) - (or (eobp) - (forward-char 1)) - (beginning-of-defun) - (if (progn (end-of-defun) - (< location (point))) - (progn - (backward-sexp 1) - (let (beg tem) - - (forward-line -1) - ;; Skip back over typedefs of arglist. - (while (and (not (bobp)) - (looking-at "[ \t\n]")) - (forward-line -1)) - ;; See if this is using the DEFUN macro used in Emacs, - ;; or the DEFUN macro used by the C library. - (if (condition-case nil - (and (save-excursion - (end-of-line) - (while (= (preceding-char) ?\\) - (end-of-line 2)) - (backward-sexp 1) - (beginning-of-line) - (setq tem (point)) - (looking-at "DEFUN\\b")) - (>= location tem)) - (error nil)) - (progn - (goto-char tem) - (down-list 1) - (if (= (char-after (point)) ?\") - (progn - (forward-sexp 1) - (skip-chars-forward " ,"))) - (buffer-substring (point) - (progn (forward-sexp 1) (point)))) - (if (looking-at "^[+-]") - (get-method-definition) - ;; Ordinary C function syntax. - (setq beg (point)) - (if (and (condition-case nil - ;; Protect against "Unbalanced parens" error. - (progn - (down-list 1) ; into arglist - (backward-up-list 1) - (skip-chars-backward " \t") - t) - (error nil)) - ;; Verify initial pos was after - ;; real start of function. - (save-excursion - (goto-char beg) - ;; For this purpose, include the line - ;; that has the decl keywords. This - ;; may also include some of the - ;; comments before the function. - (while (and (not (bobp)) - (save-excursion - (forward-line -1) - (looking-at "[^\n\f]"))) - (forward-line -1)) - (>= location (point))) - ;; Consistency check: going down and up - ;; shouldn't take us back before BEG. - (> (point) beg)) - (let (end middle) - ;; Don't include any final newline - ;; in the name we use. - (if (= (preceding-char) ?\n) - (forward-char -1)) - (setq end (point)) - (backward-sexp 1) - ;; Now find the right beginning of the name. - ;; Include certain keywords if they - ;; precede the name. - (setq middle (point)) - (forward-word -1) - ;; Ignore these subparts of a class decl - ;; and move back to the class name itself. - (while (looking-at "public \\|private ") - (skip-chars-backward " \t:") - (setq end (point)) - (backward-sexp 1) - (setq middle (point)) - (forward-word -1)) - (and (bolp) - (looking-at "struct \\|union \\|class ") - (setq middle (point))) - (buffer-substring middle end))))))))) - ((memq major-mode - '(TeX-mode plain-TeX-mode LaTeX-mode;; tex-mode.el - plain-tex-mode latex-mode;; cmutex.el - )) - (if (re-search-backward - "\\\\\\(sub\\)*\\(section\\|paragraph\\|chapter\\)" nil t) - (progn - (goto-char (match-beginning 0)) - (buffer-substring (1+ (point));; without initial backslash - (progn - (end-of-line) - (point)))))) - ((eq major-mode 'texinfo-mode) - (if (re-search-backward "^@node[ \t]+\\([^,\n]+\\)" nil t) - (buffer-substring (match-beginning 1) - (match-end 1)))) - ((eq major-mode 'perl-mode) - (if (re-search-backward "^sub[ \t]+\\([^ \t\n]+\\)" nil t) - (buffer-substring (match-beginning 1) - (match-end 1)))) - ((eq major-mode 'fortran-mode) - ;; must be inside function body for this to work - (beginning-of-fortran-subprogram) - (let ((case-fold-search t)) ; case-insensitive - ;; search for fortran subprogram start - (if (re-search-forward - "^[ \t]*\\(program\\|subroutine\\|function\ -\\|[ \ta-z0-9*]*[ \t]+function\\)" - nil t) - (progn - ;; move to EOL or before first left paren - (if (re-search-forward "[(\n]" nil t) - (progn (forward-char -1) - (skip-chars-backward " \t")) - (end-of-line)) - ;; Use the name preceding that. - (buffer-substring (point) - (progn (forward-sexp -1) - (point))))))) - (t - ;; If all else fails, try heuristics - (let (case-fold-search) - (end-of-line) - (if (re-search-backward add-log-current-defun-header-regexp - (- (point) 10000) - t) - (buffer-substring (match-beginning 1) - (match-end 1)))))))) - (error nil))) - -(defvar get-method-definition-md) - -;; Subroutine used within get-method-definition. -;; Add the last match in the buffer to the end of `md', -;; followed by the string END; move to the end of that match. -(defun get-method-definition-1 (end) - (setq get-method-definition-md - (concat get-method-definition-md - (buffer-substring (match-beginning 1) (match-end 1)) - end)) - (goto-char (match-end 0))) - -;; For objective C, return the method name if we are in a method. -(defun get-method-definition () - (let ((get-method-definition-md "[")) - (save-excursion - (if (re-search-backward "^@implementation\\s-*\\([A-Za-z_]*\\)" nil t) - (get-method-definition-1 " "))) - (save-excursion - (cond - ((re-search-forward "^\\([-+]\\)[ \t\n\f\r]*\\(([^)]*)\\)?\\s-*" nil t) - (get-method-definition-1 "") - (while (not (looking-at "[{;]")) - (looking-at - "\\([A-Za-z_]*:?\\)\\s-*\\(([^)]*)\\)?[A-Za-z_]*[ \t\n\f\r]*") - (get-method-definition-1 "")) - (concat get-method-definition-md "]")))))) - - -(provide 'add-log) - -;;; add-log.el ends here diff --git a/contrib/binutils/etc/add-log.vi b/contrib/binutils/etc/add-log.vi deleted file mode 100644 index efb8c77aa2b8..000000000000 --- a/contrib/binutils/etc/add-log.vi +++ /dev/null @@ -1,11 +0,0 @@ -Here is a vi macro to create entries in the recommended format for -GDB's ChangeLogs. - -map 1GO:r !date '+\%Y-\%m-\%d'2GA Jason Molenda (:r !whoamikJxA@:r !hostnameA)kJxkddjO
*
k$ - -It contains control and escape sequences, so don't just cut and paste it. -You'll need to change the "Jason Molenda" bit, of course. :-) Put this -in your $HOME/.exrc and when you type control-X in move-around-mode, -you'll have a changelog template inserted. - ---- Jason Molenda diff --git a/contrib/binutils/etc/cfg-paper.texi b/contrib/binutils/etc/cfg-paper.texi deleted file mode 100644 index bcfbb31e13f8..000000000000 --- a/contrib/binutils/etc/cfg-paper.texi +++ /dev/null @@ -1,717 +0,0 @@ -\input texinfo -@c %**start of header -@setfilename cfg-paper.info -@settitle On Configuring Development Tools -@c %**end of header -@setchapternewpage off - -@ifinfo -This document attempts to describe the general concepts behind -configuration of the @sc{gnu} Development Tools. -It also discusses common usage. - -Copyright (C) 1991, 1992, 1994 Cygnus Support -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries 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 and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by Cygnus Support. -@end ifinfo - -@titlepage -@sp 10 -@title{On Configuring Development Tools} -@author{K. Richard Pixley, @code{rich@@cygnus.com}} -@author{Cygnus Support} -@page - -@vskip 0pt plus 1filll -Copyright @copyright{} 1991, 1992, 1994 Cygnus Support - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by Cygnus Support. -@end titlepage - -@ifinfo -@format -START-INFO-DIR-ENTRY -* configuration: (cfg-paper). Some theory on configuring source. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@node top, Some Basic Terms, (dir), (dir) - -@ifinfo -This document attempts to describe the general concepts behind -configuration of the @sc{gnu} Development Tools. -It also discusses common usage. -@end ifinfo - -@menu -* Some Basic Terms:: Some Basic Terms -* Specifics.:: Specifics -* Building Development Environments:: Building Development Environments -* A Walk Through:: A Walk Through -* Final Notes:: Final Notes -* Index:: Index - - --- The Detailed Node Listing --- - -Some Basic Terms - -* Host Environments:: Host Environments -* Configuration Time Options:: Configuration Time Options - -A Walk Through - -* Native Development Environments:: Native Development Environments -* Emulation Environments:: Emulation Environments -* Simple Cross Environments:: Simple Cross Environments -* Crossing Into Targets:: Crossing Into Targets -* Canadian Cross:: Canadian Cross - -Final Notes - -* Hacking Configurations:: Hacking Configurations -@end menu - -@node Some Basic Terms, Specifics., top, top -@chapter Some Basic Terms - -There are a lot of terms that are frequently used when discussing -development tools. Most of the common terms have been used for many -different concepts such that their meanings have become ambiguous to the -point of being confusing. Typically, we only guess at their meanings -from context and we frequently guess wrong. - -This document uses very few terms by comparison. The intent is to make -the concepts as clear as possible in order to convey the usage and -intent of these tools. - -@emph{Programs} run on @emph{machines}. Programs are very nearly always -written in @emph{source}. Programs are @emph{built} from source. -@emph{Compilation} is a process that is frequently, but not always, used -when building programs. -@cindex Programs -@cindex Machines -@cindex Source -@cindex Building -@cindex Compilation - -@menu -* Host Environments:: Host Environments -* Configuration Time Options:: Configuration Time Options -@end menu - -@node Host Environments, Configuration Time Options, Some Basic Terms, Some Basic Terms -@section Host Environments - -@cindex host -In this document, the word @emph{host} refers to the environment in -which the source in question will be compiled. @emph{host} and -@emph{host name} have nothing to do with the proper name of your host, -like @emph{ucbvax}, @emph{prep.ai.mit.edu} or @emph{att.com}. Instead -they refer to things like @emph{sun4} and @emph{dec3100}. - -Forget for a moment that this particular directory of source is the -source for a development environment. Instead, pretend that it is the -source for a simpler, more mundane, application, say, a desk calculator. - -Source that can be compiled in more than one environment, generally -needs to be set up for each environment explicitly. Here we refer to -that process as configuration. That is, we configure the source for a -host. - -For example, if we wanted to configure our mythical desk calculator to -compile on a SparcStation, we might configure for host sun4. With our -configuration system: - -@example -cd desk-calculator ; ./configure sun4 -@end example - -@noindent -does the trick. @code{configure} is a shell script that sets up Makefiles, -subdirectories, and symbolic links appropriate for compiling the source -on a sun4. - -The @emph{host} environment does not necessarily refer to the machine on -which the tools are built. It is possible to provide a sun3 development -environment on a sun4. If we wanted to use a cross compiler on the sun4 -to build a program intended to be run on a sun3, we would configure the -source for sun3. - -@example -cd desk-calculator ; ./configure sun3 -@end example - -@noindent -The fact that we are actually building the program on a sun4 makes no -difference if the sun3 cross compiler presents an environment that looks -like a sun3 from the point of view of the desk calculator source code. -Specifically, the environment is a sun3 environment if the header files, -predefined symbols, and libraries appear as they do on a sun3. - -Nor does the host environment refer to the the machine on which the -program to be built will run. It is possible to provide a sun3 -emulation environment on a sun4 such that programs built in a sun3 -development environment actually run on the sun4. This technique is -often used within individual programs to remedy deficiencies in the host -operating system. For example, some operating systems do not provide -the @code{bcopy} function and so it is emulated using the -@code{memcpy} funtion. - -Host environment simply refers to the environment in which the program -will be built from the source. - - -@node Configuration Time Options, , Host Environments, Some Basic Terms -@section Configuration Time Options - -Many programs have compile time options. That is, features of the -program that are either compiled into the program or not based on a -choice made by the person who builds the program. We refer to these as -@emph{configuration options}. For example, our desk calculator might be -capable of being compiled into a program that either uses infix notation -or postfix as a configuration option. For a sun3, to choose infix you -might use: - -@example -./configure sun3 --enable-notation=infix -@end example - -@noindent -while for a sun4 with postfix you might use: - -@example -./configure sun4 --enable-notation=postfix -@end example - -If we wanted to build both at the same time, the intermediate pieces -used in the build process must be kept separate. - -@example -mkdir ../objdir.sun4 -(cd ../objdir.sun4 ; ../configure sun4 --enable-notation=postfix --srcdir=../src) -mkdir ../objdir.sun3 -(cd ../objdir.sun3 ; ../configure sun3 --enable-notation=infix --srcdir=../src) -@end example - -@noindent -will create subdirectories for the intermediate pieces of the sun4 and -sun3 configurations. This is necessary as previous systems were only -capable of one configuration at a time. Otherwise, a second -configuration would write over the first. We've chosen to retain this -behaviour so the obj directories and the @code{--srcdir} configuration -option are necessary to get the new behaviour. The order of the -arguments doesn't matter. There should be exactly one argument without -a leading @samp{-} and that argument will be assumed to be the host -name. - -From here on the examples will assume that you want to build the tools -@emph{in place} and won't show the @code{--srcdir} option, but remember -that it is available. - -In order to actually install the program, the configuration system needs -to know where you would like the program installed. The default -location is @file{/usr/local}. We refer to this location as -@code{$(prefix)}. All user visible programs will be installed in -@file{@code{$(prefix)}/bin}. All other programs and files will be -installed in a subdirectory of @file{@code{$(prefix)}/lib}. - -You can only change @code{$(prefix)} as a configuration time -option. - -@example -./configure sun4 --enable-notation=postfix --prefix=/local -@end example - -@noindent -Will configure the source such that: - -@example -make install -@end example - -@noindent -will put its programs in @file{/local/bin} and @file{/local/lib/gcc}. -If you change @code{$(prefix)} after building the source, you will need -to: - -@example -make clean -@end example - -@noindent -before the change will be propogated properly. This is because some -tools need to know the locations of other tools. - -With these concepts in mind, we can drop the desk calculator example and -move on to the application that resides in these directories, namely, -the source to a development environment. - -@node Specifics., Building Development Environments, Some Basic Terms, top -@chapter Specifics - -The @sc{gnu} Development Tools can be built on a wide variety of hosts. So, -of course, they must be configured. Like the last example, - -@example -./configure sun4 --prefix=/local -./configure sun3 --prefix=/local -@end example - -@noindent -will configure the source to be built in subdirectories, in order to -keep the intermediate pieces separate, and to be installed in -@file{/local}. - -When built with suitable development environments, these will be native -tools. We'll explain the term @emph{native} later. - -@node Building Development Environments, A Walk Through, Specifics., top -@chapter Building Development Environments - -@cindex Target - -The @sc{gnu} development tools can not only be built in a -number of host development environments, they can also be configured to -create a number of different development environments on each of those -hosts. We refer to a specific development environment created as a -@emph{target}. That is, the word @emph{target} refers to the development -environment produced by compiling this source and installing the -resulting programs. - -For the @sc{gnu} development tools, the default target is the -same as the host. That is, the development environment produced is -intended to be compatible with the environment used to build the tools. - -In the example above, we created two configurations, one for sun4 and -one for sun3. The first configuration is expecting to be built in a -sun4 development environment, to create a sun4 development environment. -It doesn't necessarily need to be built on a sun4 if a sun4 development -environment is available elsewhere. Likewise, if the available sun4 -development environment produces executables intended for something -other than sun4, then the development environment built from this sun4 -configuration will run on something other than a sun4. From the point -of view of the configuration system and the @sc{gnu} development tools -source, this doesn't matter. What matters is that they will be built in -a sun4 environment. - -Similarly, the second configuration given above is expecting to be built -in a sun3 development environment, to create a sun3 development -environment. - -The development environment produced is a configuration time option, -just like @code{$(prefix)}. - -@example -./configure sun4 --prefix=/local --target=sun3 -./configure sun3 --prefix=/local --target=sun4 -@end example - -In this example, like before, we create two configurations. The first -is intended to be built in a sun4 environment, in subdirectories, to be -installed in @file{/local}. The second is intended to be built in a -sun3 environment, in subdirectories, to be installed in @file{/local}. - -Unlike the previous example, the first configuration will produce a sun3 -development environment, perhaps even suitable for building the second -configuration. Likewise, the second configuration will produce a sun4 -development environment, perhaps even suitable for building the first -configuration. - -The development environment used to build these configurations will -determine the machines on which the resulting development environments -can be used. - - -@node A Walk Through, Final Notes, Building Development Environments, top -@chapter A Walk Through - - -@menu -* Native Development Environments:: Native Development Environments -* Emulation Environments:: Emulation Environments -* Simple Cross Environments:: Simple Cross Environments -* Crossing Into Targets:: Crossing Into Targets -* Canadian Cross:: Canadian Cross -@end menu - -@node Native Development Environments, Emulation Environments, A Walk Through, A Walk Through -@section Native Development Environments - -Let us assume for a moment that you have a sun4 and that with your sun4 -you received a development environment. This development environment is -intended to be run on your sun4 to build programs that can be run on -your sun4. You could, for instance, run this development environment on -your sun4 to build our example desk calculator program. You could then -run the desk calculator program on your sun4. - -@cindex Native -@cindex Foreign -The resulting desk calculator program is referred to as a @emph{native} -program. The development environment itself is composed of native -programs that, when run, build other native programs. Any other program -is referred to as @emph{foreign}. Programs intended for other machines are -foreign programs. - -This type of development environment, which is by far the most common, -is refered to as @emph{native}. That is, a native development environment -runs on some machine to build programs for that same machine. The -process of using a native development environment to build native -programs is called a @emph{native} build. - -@example -./configure sun4 -@end example - -@noindent -will configure this source such that when built in a sun4 development -environment, with a development environment that builds programs -intended to be run on sun4 machines, the programs built will be native -programs and the resulting development environment will be a native -development environment. - -The development system that came with your sun4 is one such environment. -Using it to build the @sc{gnu} Development Tools is a very common activity -and the resulting development environment is quite popular. - -@example -make all -@end example - -@noindent -will build the tools as configured and will assume that you want to use -the native development environment that came with your machine. - -@cindex Bootstrapping -@cindex Stage1 -Using a development environment to build a development environment is -called @emph{bootstrapping}. The release of the @sc{gnu} -Development Tools is capable of bootstrapping itself. This is a very -powerful feature that we'll return to later. For now, let's pretend -that you used the native development environment that came with your -sun4 to bootstrap the release and let's call the new -development environment @emph{stage1}. - -Why bother? Well, most people find that the @sc{gnu} development -environment builds programs that run faster and take up less space than -the native development environments that came with their machines. Some -people didn't get development environments with their machines and some -people just like using the @sc{gnu} tools better than using other tools. - -@cindex Stage2 -While you're at it, if the @sc{gnu} tools produce better programs, maybe you -should use them to build the @sc{gnu} tools. So let's -pretend that you do. Let's call the new development environment -@emph{stage2}. - -@cindex Stage3 -So far you've built a development environment, stage1, and you've used -stage1 to build a new, faster and smaller development environment, -stage2, but you haven't run any of the programs that the @sc{gnu} tools have -built. You really don't yet know if these tools work. Do you have any -programs built with the @sc{gnu} tools? Yes, you do. stage2. What does -that program do? It builds programs. Ok, do you have any source handy -to build into a program? Yes, you do. The @sc{gnu} tools themselves. In -fact, if you use stage2 to build the @sc{gnu} tools again the resulting -programs should be identical to stage2. Let's pretend that you do and -call the new development environment @emph{stage3}. - -@cindex Three stage boot -You've just completed what's called a @emph{three stage boot}. You now have -a small, fast, somewhat tested, development environment. - -@example -make bootstrap -@end example - -@noindent -will do a three stage boot across all tools and will compare stage2 to -stage3 and complain if they are not identical. - -Once built, - -@example -make install -@end example - -@noindent -will install the development environment in the default location, or in -@code{$(prefix)} if you specified an alternate when you configured. - -@cindex Cross -Any development environment that is not a native development environment -is refered to as a @emph{cross} development environment. There are many -different types of cross development environments but most fall into one -of three basic categories. - - -@node Emulation Environments, Simple Cross Environments, Native Development Environments, A Walk Through -@section Emulation Environments - -@cindex Emulation -The first category of cross development environment is called -@emph{emulation}. There are two primary types of emulation, but both -types result in programs that run on the native host. - -@cindex Software emulation -@cindex Software emulator -The first type is @emph{software emulation}. This form of cross -development environment involves a native program that when run on the -native host, is capable of interpreting, and in most aspects running, a -program intended for some other machine. This technique is typically -used when the other machine is either too expensive, too slow, too fast, -or not available, perhaps because it hasn't yet been built. The native, -interpreting program is called a @emph{software emulator}. - -The @sc{gnu} Development Tools do not currently include any software -emulators. Some do exist and the @sc{gnu} Development Tools can be -configured to create simple cross development environments for with -these emulators. More on this later. - -The second type of emulation is when source intended for some other -development environment is built into a program intended for the native -host. The concepts of operating system universes and hosted operating -systems are two such development environments. - -@node Simple Cross Environments, Crossing Into Targets, Emulation Environments, A Walk Through -@section Simple Cross Environments - -@example -./configure sun4 --target=a29k -@end example - -@noindent -will configure the tools such that when compiled in a sun4 development -environment the resulting development environment can be used to create -programs intended for an a29k. Again, this does not necessarily mean -that the new development environment can be run on a sun4. That would -depend on the development environment used to build these tools. - -Earlier you saw how to configure the tools to build a native development -environment, that is, a development environment that runs on your sun4 -and builds programs for your sun4. Let's pretend that you use stage3 to -build this simple cross configuration and let's call the new development -environment gcc-a29k. Remember that this is a native build. Gcc-a29k -is a collection of native programs intended to run on your sun4. That's -what stage3 builds, programs for your sun4. Gcc-a29k represents an a29k -development environment that builds programs intended to run on an a29k. -But, remember, gcc-a29k runs on your sun4. Programs built with gcc-a29k -will run on your sun4 only with the help of an appropriate software -emulator. - -@cindex Simple cross -@cindex Crossing to -Building gcc-a29k is also a bootstrap but of a slightly different sort. -We call gcc-a29k a @emph{simple cross} environment and using gcc-a29k to -build a program intended for a29k is called @emph{crossing to} a29k. -Simple cross environments are the second category of cross development -environments. - - -@node Crossing Into Targets, Canadian Cross, Simple Cross Environments, A Walk Through -@section Crossing Into Targets - -@example -./configure a29k --target=a29k -@end example - -@noindent -will configure the tools such that when compiled in an a29k development -environment, the resulting development environment can be used to create -programs intended for an a29k. Again, this does not necessarily mean -that the new development environment can be run on an a29k. That would -depend on the development environment used to build these tools. - -If you've been following along this walk through, then you've already -built an a29k environment, namely gcc-a29k. Let's pretend you use -gcc-a29k to build the current configuration. - -Gcc-a29k builds programs intended for the a29k so the new development -environment will be intended for use on an a29k. That is, this new gcc -consists of programs that are foreign to your sun4. They cannot be run -on your sun4. - -@cindex Crossing into -The process of building this configuration is a another bootstrap. This -bootstrap is also a cross to a29k. Because this type of build is both a -bootstrap and a cross to a29k, it is sometimes referred to as a -@emph{cross into} a29k. This new development environment isn't really a -cross development environment at all. It is intended to run on an a29k -to produce programs for an a29k. You'll remember that this makes it, by -definition, an a29k native compiler. @emph{Crossing into} has been -introduced here not because it is a type of cross development -environment, but because it is frequently mistaken as one. The process -is @emph{a cross} but the resulting development environment is a native -development environment. - -You could not have built this configuration with stage3, because stage3 -doesn't provide an a29k environment. Instead it provides a sun4 -environment. - -If you happen to have an a29k lying around, you could now use this fresh -development environment on the a29k to three-stage these tools all over -again. This process would look just like it did when we built the -native sun4 development environment because we would be building another -native development environment, this one on a29k. - - -@node Canadian Cross, , Crossing Into Targets, A Walk Through -@section Canadian Cross - -So far you've seen that our development environment source must be -configured for a specific host and for a specific target. You've also -seen that the resulting development environment depends on the -development environment used in the build process. - -When all four match identically, that is, the configured host, the -configured target, the environment presented by the development -environment used in the build, and the machine on which the resulting -development environment is intended to run, then the new development -environment will be a native development environment. - -When all four match except the configured host, then we can assume that -the development environment used in the build is some form of library -emulation. - -When all four match except for the configured target, then the resulting -development environment will be a simple cross development environment. - -When all four match except for the host on which the development -environment used in the build runs, the build process is a @emph{cross into} -and the resulting development environment will be native to some other -machine. - -Most of the other permutations do exist in some form, but only one more -is interesting to the current discussion. - -@example -./configure a29k --target=sun3 -@end example - -@noindent -will configure the tools such that when compiled in an a29k development -environment, the resulting development environment can be used to create -programs intended for a sun3. Again, this does not necessarily mean -that the new development environment can be run on an a29k. That would -depend on the development environment used to build these tools. - -If you are still following along, then you have two a29k development -environments, the native development environment that runs on a29k, and -the simple cross that runs on your sun4. If you use the a29k native -development environment on the a29k, you will be doing the same thing we -did a while back, namely building a simple cross from a29k to sun3. -Let's pretend that instead, you use gcc-a29k, the simple cross -development environment that runs on sun4 but produces programs for -a29k. - -The resulting development environment will run on a29k because that's -what gcc-a29k builds, a29k programs. This development environment will -produce programs for a sun3 because that is how it was configured. This -means that the resulting development environment is a simple cross. - -@cindex Canadian Cross -@cindex Three party cross -There really isn't a common name for this process because very few -development environments are capable of being configured this -extensively. For the sake of discussion, let's call this process a -@emph{Canadian cross}. It's a three party cross, Canada has a three -party system, hence Canadian Cross. - -@node Final Notes, Index, A Walk Through, top -@chapter Final Notes - -By @emph{configures}, I mean that links, Makefile, .gdbinit, and -config.status are built. Configuration is always done from the source -directory. - -@table @code - -@item ./configure @var{name} -configures this directory, perhaps recursively, for a single host+target -pair where the host and target are both @var{name}. If a previous -configuration existed, it will be overwritten. - -@item ./configure @var{hostname} --target=@var{targetname} -configures this directory, perhaps recursively, for a single host+target -pair where the host is @var{hostname} and target is @var{targetname}. -If a previous configuration existed, it will be overwritten. - -@end table - -@menu -* Hacking Configurations:: Hacking Configurations -@end menu - -@node Hacking Configurations, , Final Notes, Final Notes -@section Hacking Configurations - -The configure scripts essentially do three things, create subdirectories -if appropriate, build a @file{Makefile}, and create links to files, all -based on and tailored to, a specific host+target pair. The scripts also -create a @file{.gdbinit} if appropriate but this is not tailored. - -The Makefile is created by prepending some variable definitions to a -Makefile template called @file{Makefile.in} and then inserting host and -target specific Makefile fragments. The variables are set based on the -chosen host+target pair and build style, that is, if you use -@code{--srcdir} or not. The host and target specific Makefile may or may -not exist. - -@itemize @bullet - -@item -Makefiles can be edited directly, but those changes will eventually be -lost. Changes intended to be permanent for a specific host should be -made to the host specific Makefile fragment. This should be in -@file{./config/mh-@var{host}} if it exists. Changes intended to be -permanent for a specific target should be made to the target specific -Makefile fragment. This should be in @file{./config/mt-@var{target}} if -it exists. Changes intended to be permanent for the directory should be -made in @file{Makefile.in}. To propogate changes to any of these, -either use @code{make Makefile} or @code{./config.status} or -re-configure. - -@end itemize - -@page -@node Index, , Final Notes, top -@appendix Index - -@printindex cp - -@contents -@bye - -@c Local Variables: -@c fill-column: 72 -@c End: diff --git a/contrib/binutils/etc/configbuild.ein b/contrib/binutils/etc/configbuild.ein deleted file mode 100644 index 7a0e214f2d52..000000000000 --- a/contrib/binutils/etc/configbuild.ein +++ /dev/null @@ -1,149 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: configbuild.fig -%%Creator: fig2dev Version 3.1 Patchlevel 1 -%%CreationDate: Fri Jun 12 20:13:16 1998 -%%For: ian@tito.cygnus.com (Ian Lance Taylor) -%%Orientation: Portrait -%%BoundingBox: 0 0 322 173 -%%Pages: 0 -%%BeginSetup -%%IncludeFeature: *PageSize Letter -%%EndSetup -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {} def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save --62.0 226.0 translate -1 -1 scale - -/clp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/l {lineto} bind def -/m {moveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def -%%EndProlog - -$F2psBegin -10 setmiterlimit - 0.06000 0.06000 sc -7.500 slw -% Polyline -n 1050 900 m 2100 900 l 2100 1425 l 1050 1425 l clp gs col-1 s gr -% Polyline -n 1500 1425 m 1500 2100 l gs col-1 s gr -n 1530.00 1980.00 m 1500.00 2100.00 l 1470.00 1980.00 l 1500.50 1980.50 l 1530.00 1980.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 1500 2625 m 1500 3300 l gs col-1 s gr -n 1530.00 3180.00 m 1500.00 3300.00 l 1470.00 3180.00 l 1500.50 3180.50 l 1530.00 3180.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 2925 900 m 3825 900 l 3825 1425 l 2925 1425 l clp gs col-1 s gr -% Polyline -n 1155 2100 m 1050 2100 1050 2520 105 arcto 4 {pop} repeat 1050 2625 2220 2625 105 arcto 4 {pop} repeat 2325 2625 2325 2205 105 arcto 4 {pop} repeat 2325 2100 1155 2100 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Polyline -n 2850 2100 m 4125 2100 l 4125 2625 l 2850 2625 l clp gs col-1 s gr -% Polyline -n 3375 1425 m 3375 2100 l gs col-1 s gr -n 3405.00 1980.00 m 3375.00 2100.00 l 3345.00 1980.00 l 3375.50 1980.50 l 3405.00 1980.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 5100 900 m 6300 900 l 6300 1350 l 5100 1350 l clp gs col-1 s gr -% Polyline -n 5625 1350 m 5625 2100 l gs col-1 s gr -n 5655.00 1980.00 m 5625.00 2100.00 l 5595.00 1980.00 l 5625.50 1980.50 l 5655.00 1980.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 5205 2100 m 5100 2100 5100 2520 105 arcto 4 {pop} repeat 5100 2625 6270 2625 105 arcto 4 {pop} repeat 6375 2625 6375 2205 105 arcto 4 {pop} repeat 6375 2100 5205 2100 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Polyline -n 5625 2625 m 5625 3300 l gs col-1 s gr -n 5655.00 3180.00 m 5625.00 3300.00 l 5595.00 3180.00 l 5625.50 3180.50 l 5655.00 3180.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 5100 3300 m 6225 3300 l 6225 3750 l 5100 3750 l clp gs col-1 s gr -% Polyline - [1 50.0] 50.000000 setdash -n 2850 2400 m 2325 2400 l gs col-1 s gr [] 0 setdash -n 2445.00 2430.00 m 2325.00 2400.00 l 2445.00 2370.00 l 2445.50 2400.50 l 2445.00 2430.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline - [1 50.0] 50.000000 setdash -n 4125 2400 m 5100 2400 l gs col-1 s gr [] 0 setdash -n 4980.00 2370.00 m 5100.00 2400.00 l 4980.00 2430.00 l 4980.50 2400.50 l 4980.00 2370.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 1050 3300 m 1950 3300 l 1950 3750 l 1050 3750 l clp gs col-1 s gr -/Times-Roman findfont 180.00 scalefont setfont -1200 1200 m -gs 1 -1 sc (config.in) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -3000 1200 m -gs 1 -1 sc (configure) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -3000 2400 m -gs 1 -1 sc (config.status) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -1200 2400 m -gs 1 -1 sc (config.status) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -1200 3600 m -gs 1 -1 sc (config.h) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -5250 1200 m -gs 1 -1 sc (Makefile.in) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -5250 2400 m -gs 1 -1 sc (config.status) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -5250 3600 m -gs 1 -1 sc (Makefile) col-1 show gr -$F2psEnd -restore diff --git a/contrib/binutils/etc/configbuild.fig b/contrib/binutils/etc/configbuild.fig deleted file mode 100644 index 747592d3d623..000000000000 --- a/contrib/binutils/etc/configbuild.fig +++ /dev/null @@ -1,50 +0,0 @@ -#FIG 3.1 -Portrait -Center -Inches -1200 2 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 1050 900 2100 900 2100 1425 1050 1425 1050 900 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 1500 1425 1500 2100 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 1500 2625 1500 3300 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 2925 900 3825 900 3825 1425 2925 1425 2925 900 -2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 - 2325 2625 2325 2100 1050 2100 1050 2625 2325 2625 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 2850 2100 4125 2100 4125 2625 2850 2625 2850 2100 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 3375 1425 3375 2100 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 5100 900 6300 900 6300 1350 5100 1350 5100 900 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 5625 1350 5625 2100 -2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 - 6375 2625 6375 2100 5100 2100 5100 2625 6375 2625 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 5625 2625 5625 3300 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 5100 3300 6225 3300 6225 3750 5100 3750 5100 3300 -2 1 2 1 -1 7 0 0 -1 3.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 2850 2400 2325 2400 -2 1 2 1 -1 7 0 0 -1 3.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4125 2400 5100 2400 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 1050 3300 1950 3300 1950 3750 1050 3750 1050 3300 -4 0 -1 0 0 0 12 0.0000000 4 180 645 1200 1200 config.in\001 -4 0 -1 0 0 0 12 0.0000000 4 180 705 3000 1200 configure\001 -4 0 -1 0 0 0 12 0.0000000 4 180 990 3000 2400 config.status\001 -4 0 -1 0 0 0 12 0.0000000 4 180 990 1200 2400 config.status\001 -4 0 -1 0 0 0 12 0.0000000 4 180 600 1200 3600 config.h\001 -4 0 -1 0 0 0 12 0.0000000 4 135 855 5250 1200 Makefile.in\001 -4 0 -1 0 0 0 12 0.0000000 4 180 990 5250 2400 config.status\001 -4 0 -1 0 0 0 12 0.0000000 4 135 675 5250 3600 Makefile\001 diff --git a/contrib/binutils/etc/configbuild.jin b/contrib/binutils/etc/configbuild.jin Binary files differdeleted file mode 100644 index 44cd9397aa16..000000000000 --- a/contrib/binutils/etc/configbuild.jin +++ /dev/null diff --git a/contrib/binutils/etc/configbuild.tin b/contrib/binutils/etc/configbuild.tin deleted file mode 100644 index cfdd6fe07437..000000000000 --- a/contrib/binutils/etc/configbuild.tin +++ /dev/null @@ -1,9 +0,0 @@ - config.in *configure* Makefile.in - | | | - | v | - | config.status | - | | | - *config.status*<======+==========>*config.status* - | | - v v - config.h Makefile diff --git a/contrib/binutils/etc/configdev.ein b/contrib/binutils/etc/configdev.ein deleted file mode 100644 index 7f837850d695..000000000000 --- a/contrib/binutils/etc/configdev.ein +++ /dev/null @@ -1,185 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: configdev.fig -%%Creator: fig2dev Version 3.1 Patchlevel 1 -%%CreationDate: Mon Jun 15 17:35:19 1998 -%%For: ian@tito.cygnus.com (Ian Lance Taylor) -%%Orientation: Portrait -%%BoundingBox: 0 0 344 317 -%%Pages: 0 -%%BeginSetup -%%IncludeFeature: *PageSize Letter -%%EndSetup -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {} def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save --62.0 370.0 translate -1 -1 scale - -/clp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/l {lineto} bind def -/m {moveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def -%%EndProlog - -$F2psBegin -10 setmiterlimit - 0.06000 0.06000 sc -7.500 slw -% Polyline -n 1050 900 m 2100 900 l 2100 1425 l 1050 1425 l clp gs col-1 s gr -% Polyline -n 2925 900 m 3975 900 l 3975 1425 l 2925 1425 l clp gs col-1 s gr -% Polyline -n 5550 900 m 6750 900 l 6750 1350 l 5550 1350 l clp gs col-1 s gr -% Polyline -n 3750 1800 m 5025 1800 l 5025 2250 l 3750 2250 l clp gs col-1 s gr -% Polyline -n 1155 2100 m 1050 2100 1050 2520 105 arcto 4 {pop} repeat 1050 2625 2070 2625 105 arcto 4 {pop} repeat 2175 2625 2175 2205 105 arcto 4 {pop} repeat 2175 2100 1155 2100 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Polyline -n 5550 3300 m 6675 3300 l 6675 3750 l 5550 3750 l clp gs col-1 s gr -% Polyline -n 5655 2100 m 5550 2100 5550 2520 105 arcto 4 {pop} repeat 5550 2625 6495 2625 105 arcto 4 {pop} repeat 6600 2625 6600 2205 105 arcto 4 {pop} repeat 6600 2100 5655 2100 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Polyline -n 3750 3600 m 4875 3600 l 4875 4050 l 3750 4050 l clp gs col-1 s gr -% Polyline -n 3855 2700 m 3750 2700 3750 3045 105 arcto 4 {pop} repeat 3750 3150 4545 3150 105 arcto 4 {pop} repeat 4650 3150 4650 2805 105 arcto 4 {pop} repeat 4650 2700 3855 2700 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Polyline -n 2850 5700 m 3750 5700 l 3750 6150 l 2850 6150 l clp gs col-1 s gr -% Polyline -n 3030 4800 m 2925 4800 2925 5145 105 arcto 4 {pop} repeat 2925 5250 3645 5250 105 arcto 4 {pop} repeat 3750 5250 3750 4905 105 arcto 4 {pop} repeat 3750 4800 3030 4800 105 arcto 4 {pop} repeat clp gs col-1 s gr -% Polyline -n 1500 1425 m 1500 2100 l gs col-1 s gr -n 1530.00 1980.00 m 1500.00 2100.00 l 1470.00 1980.00 l 1500.50 1980.50 l 1530.00 1980.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 3300 1425 m 3300 4800 l gs col-1 s gr -n 3330.00 4680.00 m 3300.00 4800.00 l 3270.00 4680.00 l 3300.50 4680.50 l 3330.00 4680.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 3300 1575 m 1875 1575 l 1875 2100 l gs col-1 s gr -n 1905.00 1980.00 m 1875.00 2100.00 l 1845.00 1980.00 l 1875.50 1980.50 l 1905.00 1980.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 3300 1575 m 5700 1575 l 5700 2100 l gs col-1 s gr -n 5730.00 1980.00 m 5700.00 2100.00 l 5670.00 1980.00 l 5700.50 1980.50 l 5730.00 1980.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 6225 1350 m 6225 2100 l gs col-1 s gr -n 6255.00 1980.00 m 6225.00 2100.00 l 6195.00 1980.00 l 6225.50 1980.50 l 6255.00 1980.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 6075 2625 m 6075 3300 l gs col-1 s gr -n 6105.00 3180.00 m 6075.00 3300.00 l 6045.00 3180.00 l 6075.50 3180.50 l 6105.00 3180.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 4200 2250 m 4200 2700 l gs col-1 s gr -n 4230.00 2580.00 m 4200.00 2700.00 l 4170.00 2580.00 l 4200.50 2580.50 l 4230.00 2580.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 4200 3150 m 4200 3600 l gs col-1 s gr -n 4230.00 3480.00 m 4200.00 3600.00 l 4170.00 3480.00 l 4200.50 3480.50 l 4230.00 3480.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 4200 4050 m 4200 4500 l 3675 4500 l 3675 4800 l gs col-1 s gr -n 3705.00 4680.00 m 3675.00 4800.00 l 3645.00 4680.00 l 3675.50 4680.50 l 3705.00 4680.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 3375 5250 m 3375 5700 l gs col-1 s gr -n 3405.00 5580.00 m 3375.00 5700.00 l 3345.00 5580.00 l 3375.50 5580.50 l 3405.00 5580.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 3300 2925 m 3750 2925 l gs col-1 s gr -n 3630.00 2895.00 m 3750.00 2925.00 l 3630.00 2955.00 l 3630.50 2925.50 l 3630.00 2895.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 1500 2625 m 1500 3300 l gs col-1 s gr -n 1530.00 3180.00 m 1500.00 3300.00 l 1470.00 3180.00 l 1500.50 3180.50 l 1530.00 3180.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -% Polyline -n 1050 3300 m 2100 3300 l 2100 3750 l 1050 3750 l clp gs col-1 s gr -% Polyline -n 4875 3825 m 5250 3825 l 5250 2400 l 5550 2400 l gs col-1 s gr -n 5430.00 2370.00 m 5550.00 2400.00 l 5430.00 2430.00 l 5430.50 2400.50 l 5430.00 2370.00 l clp gs 0.00 setgray ef gr gs col-1 s gr -/Times-Roman findfont 180.00 scalefont setfont -1200 1200 m -gs 1 -1 sc (acconfig.h) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -3000 1200 m -gs 1 -1 sc (configure.in) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -5700 1200 m -gs 1 -1 sc (Makefile.am) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -3900 2100 m -gs 1 -1 sc (acinclude.m4) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -1200 2400 m -gs 1 -1 sc (autoheader) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -1200 3600 m -gs 1 -1 sc (config.in) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -5700 3600 m -gs 1 -1 sc (Makefile.in) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -5700 2400 m -gs 1 -1 sc (automake) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -3900 3900 m -gs 1 -1 sc (aclocal.m4) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -3900 3000 m -gs 1 -1 sc (aclocal) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -3000 6000 m -gs 1 -1 sc (configure) col-1 show gr -/Times-Roman findfont 180.00 scalefont setfont -3000 5100 m -gs 1 -1 sc (autoconf) col-1 show gr -$F2psEnd -restore diff --git a/contrib/binutils/etc/configdev.fig b/contrib/binutils/etc/configdev.fig deleted file mode 100644 index 4d386ec4ff7a..000000000000 --- a/contrib/binutils/etc/configdev.fig +++ /dev/null @@ -1,80 +0,0 @@ -#FIG 3.1 -Portrait -Center -Inches -1200 2 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 1050 900 2100 900 2100 1425 1050 1425 1050 900 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 2925 900 3975 900 3975 1425 2925 1425 2925 900 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 5550 900 6750 900 6750 1350 5550 1350 5550 900 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 3750 1800 5025 1800 5025 2250 3750 2250 3750 1800 -2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 - 2175 2625 2175 2100 1050 2100 1050 2625 2175 2625 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 5550 3300 6675 3300 6675 3750 5550 3750 5550 3300 -2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 - 6600 2625 6600 2100 5550 2100 5550 2625 6600 2625 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 3750 3600 4875 3600 4875 4050 3750 4050 3750 3600 -2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 - 4650 3150 4650 2700 3750 2700 3750 3150 4650 3150 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 2850 5700 3750 5700 3750 6150 2850 6150 2850 5700 -2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 - 3750 5250 3750 4800 2925 4800 2925 5250 3750 5250 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 1500 1425 1500 2100 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 3300 1425 3300 4800 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 3 - 1 1 1.00 60.00 120.00 - 3300 1575 1875 1575 1875 2100 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 3 - 1 1 1.00 60.00 120.00 - 3300 1575 5700 1575 5700 2100 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 6225 1350 6225 2100 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 6075 2625 6075 3300 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4200 2250 4200 2700 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4200 3150 4200 3600 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 4 - 1 1 1.00 60.00 120.00 - 4200 4050 4200 4500 3675 4500 3675 4800 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 3375 5250 3375 5700 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 3300 2925 3750 2925 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 1500 2625 1500 3300 -2 2 0 1 -1 7 0 0 -1 0.000 0 0 0 0 0 5 - 1050 3300 2100 3300 2100 3750 1050 3750 1050 3300 -2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 4 - 1 1 1.00 60.00 120.00 - 4875 3825 5250 3825 5250 2400 5550 2400 -4 0 -1 0 0 0 12 0.0000000 4 180 780 1200 1200 acconfig.h\001 -4 0 -1 0 0 0 12 0.0000000 4 180 885 3000 1200 configure.in\001 -4 0 -1 0 0 0 12 0.0000000 4 135 945 5700 1200 Makefile.am\001 -4 0 -1 0 0 0 12 0.0000000 4 135 990 3900 2100 acinclude.m4\001 -4 0 -1 0 0 0 12 0.0000000 4 135 840 1200 2400 autoheader\001 -4 0 -1 0 0 0 12 0.0000000 4 180 645 1200 3600 config.in\001 -4 0 -1 0 0 0 12 0.0000000 4 135 855 5700 3600 Makefile.in\001 -4 0 -1 0 0 0 12 0.0000000 4 135 735 5700 2400 automake\001 -4 0 -1 0 0 0 12 0.0000000 4 135 810 3900 3900 aclocal.m4\001 -4 0 -1 0 0 0 12 0.0000000 4 135 540 3900 3000 aclocal\001 -4 0 -1 0 0 0 12 0.0000000 4 180 705 3000 6000 configure\001 -4 0 -1 0 0 0 12 0.0000000 4 135 660 3000 5100 autoconf\001 diff --git a/contrib/binutils/etc/configdev.jin b/contrib/binutils/etc/configdev.jin Binary files differdeleted file mode 100644 index 9b11a71acd7d..000000000000 --- a/contrib/binutils/etc/configdev.jin +++ /dev/null diff --git a/contrib/binutils/etc/configdev.tin b/contrib/binutils/etc/configdev.tin deleted file mode 100644 index c9b6f34f4d79..000000000000 --- a/contrib/binutils/etc/configdev.tin +++ /dev/null @@ -1,17 +0,0 @@ - acconfig.h configure.in Makefile.am - | | | - | --------------+---------------------- | - | | | | | - v v | acinclude.m4 | | - *autoheader* | | v v - | | v --->*automake* - v |--->*aclocal* | | - config.in | | | v - | v | Makefile.in - | aclocal.m4--- - | | - v v - *autoconf* - | - v - configure diff --git a/contrib/binutils/etc/configure b/contrib/binutils/etc/configure deleted file mode 100755 index 101fcefecfcc..000000000000 --- a/contrib/binutils/etc/configure +++ /dev/null @@ -1,862 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.12.1 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - -ac_prev= -for ac_option -do - - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.12.1" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=Makefile.in - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - - - -ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:555: checking for a BSD compatible install" >&5 -if test -z "$INSTALL"; then -if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - IFS="$ac_save_IFS" - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL="$ac_cv_path_install" - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL="$ac_install_sh" - fi -fi -echo "$ac_t""$INSTALL" 1>&6 - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - -trap '' 1 2 15 -cat > confcache <<\EOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - case `(ac_space=' '; set) 2>&1 | grep ac_space` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -cat > conftest.defs <<\EOF -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g -s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g -s%\[%\\&%g -s%\]%\\&%g -s%\$%$$%g -EOF -DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` -rm -f conftest.defs - - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS <<EOF -#! /bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.12.1" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir -ac_given_INSTALL="$INSTALL" - -trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS <<EOF - -# Protect against being on the right side of a sed subst in config.status. -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@SHELL@%$SHELL%g -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_DATA@%$INSTALL_DATA%g - -CEOF -EOF - -cat >> $CONFIG_STATUS <<\EOF - -# Split the substitutions into bite-sized pieces for seds with -# small command number limits, like on Digital OSF/1 and HP-UX. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. -ac_file=1 # Number of current file. -ac_beg=1 # First line for current file. -ac_end=$ac_max_sed_cmds # Line after last line for current file. -ac_more_lines=: -ac_sed_cmds="" -while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file - else - sed "${ac_end}q" conftest.subs > conftest.s$ac_file - fi - if test ! -s conftest.s$ac_file; then - ac_more_lines=false - rm -f conftest.s$ac_file - else - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f conftest.s$ac_file" - else - ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" - fi - ac_file=`expr $ac_file + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_cmds` - fi -done -if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat -fi -EOF - -cat >> $CONFIG_STATUS <<EOF - -CONFIG_FILES=\${CONFIG_FILES-"Makefile"} -EOF -cat >> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - case "$ac_given_INSTALL" in - [/$]*) INSTALL="$ac_given_INSTALL" ;; - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -s%@INSTALL@%$INSTALL%g -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file -fi; done -rm -f conftest.s* - -EOF -cat >> $CONFIG_STATUS <<EOF - -EOF -cat >> $CONFIG_STATUS <<\EOF - -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - diff --git a/contrib/binutils/etc/configure.in b/contrib/binutils/etc/configure.in deleted file mode 100644 index b785068009eb..000000000000 --- a/contrib/binutils/etc/configure.in +++ /dev/null @@ -1,7 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_PREREQ(2.5) -AC_INIT(Makefile.in) - -AC_PROG_INSTALL - -AC_OUTPUT(Makefile) diff --git a/contrib/binutils/etc/configure.man b/contrib/binutils/etc/configure.man deleted file mode 100644 index a7699041a711..000000000000 --- a/contrib/binutils/etc/configure.man +++ /dev/null @@ -1,166 +0,0 @@ -.\" -*- nroff -*- -.\" Copyright (c) 1991, 1992, 1996 Cygnus Support -.\" written by K. Richard Pixley -.TH configure 1 "29 March 1996" "cygnus support" "Cygnus Support" -.de BP -.sp -.ti \-.2i -\(** -.. - -.SH NAME -configure \- prepare source code to be built - -.SH SYNOPSIS -configure HOST [--target=TARGET] [--srcdir=DIR] [--rm] - [--site=SITE] [--prefix=DIR] [--exec_prefix=DIR] - [--program_prefix=DIR] [--tmpdir=DIR] - [--with-PACKAGE[=YES/NO]] [--without-PACKAGE] - [--enable-FEATURE[=YES/NO]] [--disable-FEATURE] - [--norecursion] [--nfp] [-s] [-v] [-V | --version] [--help] - -.SH DESCRIPTION -.I configure -is a program used to prepare souce code to be built. It does this by -generating Makefiles and .gdbinit files, creating symlinks, recursing -in subdirectories, and some other miscellaneous file editing. - -.SH OPTIONS -.I configure -accepts the following options: - -.TP -.I \--target=TARGET -Requests that the sources be configured to target the -.I TARGET -machine. If no target is specified explicitly, the target is assumed -to be the same as the host. - -.TP -.I \--srcdir=DIR -tells configure to find the source in -.I DIR. -Object code is always built in the current directory, -.I `.'. - -.TP -.I \--rm -asks configure to remove a configuration rather than create one. - -.TP -.I \--site=SITE -asks configure to use any site-specific Makefile fragments for -.I SITE -when building Makefiles. - -.TP -.I \--prefix=DIR -sets the location in which to install files to -.I DIR. -The default is "/usr/local". - -.TP -.I \--exec_prefix=DIR -sets the root directory for host-dependent files to -.I DIR. -The default location is the value of -.I prefix. - -.TP -.I \--program_prefix=DIR -configures the source to install programs which have the same names as -common Unix programs, such as "make", in -.I DIR. -Also applies to programs which might be used for cross-compilation. - -.TP -.I \--tmpdir=DIR -sets the directory in which configure creates temporary files to -.I DIR. - -.TP -.I \--with-PACKAGE[=YES/NO] -sets a flag for the build to recognize that -.I PACKAGE -is explicitly present or not present. If -.I \=YES/NO -is nonexistent, the default is -.I YES. -.I \--without-PACKAGE -is equivalent to -.IR \--with-PACKAGE=no . - -.TP -.I \--enable-FEATURE[=YES/NO] -sets a flag for the build to recognize that -.I FEATURE -should be included or not included. If -.I \=YES/NO -is nonexistent, the default is -.I YES. -.I \--disable-FEATURE -is equivalent to -.IR --enable-FEATURE=no . - -.TP -.I \--norecursion -asks that only the current directory be configured. Normally -.I configure -recurs on subdirectories. - -.TP -.I \-nfp -Notifies -.I configure -that all of the specified hosts have -.I no floating point -units. - -.TP -.I \-s -used internally by configure to supress status messages on -subdirectory recursions. Override with -.I \-v - -.TP -.I \-v -verbose output. Asks that configure print status lines for each -directory configured. Normally, only the status lines for the current -directory are printed. - -.TP -.I \--version -.I \-V -prints -.I configure -version number. - -.TP -.I \-help -displays a brief usage summary. - - -.SH FILES -configure.in for each directory's individual needs -.br -Makefile.in Makefile template -.br -config.sub for parsing configuration names -.br -config.guess for guessing HOST when not specified -.br -config.status non-recursively rebuilds current directory - -.SH FILES -.ta \w'gmon.sum 'u -a.out the namelist and text space. -.br -gmon.out dynamic call graph and profile. -.br -gmon.sum summarized dynamic call graph and profile. - -.SH "SEE ALSO" -.RB "`\|" configure "\|'" -entry in -.B -info. diff --git a/contrib/binutils/etc/configure.texi b/contrib/binutils/etc/configure.texi deleted file mode 100644 index 91401671f925..000000000000 --- a/contrib/binutils/etc/configure.texi +++ /dev/null @@ -1,2644 +0,0 @@ -\input texinfo -@c %**start of header -@setfilename configure.info -@settitle The GNU configure and build system -@setchapternewpage off -@c %**end of header - -@dircategory GNU admin -@direntry -* configure: (configure). The GNU configure and build system -@end direntry - -@ifinfo -This file documents the GNU configure and build system. - -Copyright (C) 1998 Cygnus Solutions. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph - - -@end ignore -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Foundation. -@end ifinfo - -@titlepage -@title The GNU configure and build system -@author Ian Lance Taylor - -@page -@vskip 0pt plus 1filll -Copyright @copyright{} 1998 Cygnus Solutions - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation -approved by the Free Software Foundation. -@end titlepage - -@ifinfo -@node Top -@top GNU configure and build system - -The GNU configure and build system. - -@menu -* Introduction:: Introduction. -* Getting Started:: Getting Started. -* Files:: Files. -* Configuration Names:: Configuration Names. -* Cross Compilation Tools:: Cross Compilation Tools. -* Canadian Cross:: Canadian Cross. -* Cygnus Configure:: Cygnus Configure. -* Multilibs:: Multilibs. -* FAQ:: Frequently Asked Questions. -* Index:: Index. -@end menu - -@end ifinfo - -@node Introduction -@chapter Introduction - -This document describes the GNU configure and build systems. It -describes how autoconf, automake, libtool, and make fit together. It -also includes a discussion of the older Cygnus configure system. - -This document does not describe in detail how to use each of the tools; -see the respective manuals for that. Instead, it describes which files -the developer must write, which files are machine generated and how they -are generated, and where certain common problems should be addressed. - -@ifnothtml -This document draws on several sources, including the autoconf manual by -David MacKenzie (@pxref{Top, , autoconf overview, autoconf, Autoconf}), -the automake manual by David MacKenzie and Tom Tromey (@pxref{Top, , -automake overview, automake, GNU Automake}), the libtool manual by -Gordon Matzigkeit (@pxref{Top, , libtool overview, libtool, GNU -libtool}), and the Cygnus configure manual by K. Richard Pixley. -@end ifnothtml -@ifhtml -This document draws on several sources, including -@uref{http://www.delorie.com/gnu/docs/autoconf/autoconf_toc.html, the -autoconf manual} by David MacKenzie, -@uref{http://www.delorie.com/gnu/docs/automake/automake_toc.html, the -automake manual} by David MacKenzie and Tom Tromey, -@uref{http://www.delorie.com/gnu/docs/libtool/libtool_toc.html, the -libtool manual} by Gordon Matzigkeit, and the Cygnus configure manual by -K. Richard Pixley. -@end ifhtml - -@menu -* Goals:: Goals. -* Tools:: The tools. -* History:: History. -* Building:: Building. -@end menu - -@node Goals -@section Goals -@cindex goals - -The GNU configure and build system has two main goals. - -The first is to simplify the development of portable programs. The -system permits the developer to concentrate on writing the program, -simplifying many details of portability across Unix and even Windows -systems, and permitting the developer to describe how to build the -program using simple rules rather than complex Makefiles. - -The second is to simplify the building of programs distributed as source -code. All programs are built using a simple, standardized, two step -process. The program builder need not install any special tools in -order to build the program. - -@node Tools -@section Tools - -The GNU configure and build system is comprised of several different -tools. Program developers must build and install all of these tools. - -People who just want to build programs from distributed sources normally -do not need any special tools beyond a Unix shell, a make program, and a -C compiler. - -@table @asis -@item autoconf -provides a general portability framework, based on testing the features -of the host system at build time. -@item automake -a system for describing how to build a program, permitting the developer -to write a simplified @file{Makefile}. -@item libtool -a standardized approach to building shared libraries. -@item gettext -provides a framework for translation of text messages into other -languages; not really discussed in this document. -@item m4 -autoconf requires the GNU version of m4; the standard Unix m4 does not -suffice. -@item perl -automake requires perl. -@end table - -@node History -@section History -@cindex history - -This is a very brief and probably inaccurate history. - -As the number of Unix variants increased during the 1980s, it became -harder to write programs which could run on all variants. While it was -often possible to use @code{#ifdef} to identify particular systems, -developers frequently did not have access to every system, and the -characteristics of some systems changed from version to version. - -By 1992, at least three different approaches had been developed: -@itemize @bullet -@item -The Metaconfig program, by Larry Wall, Harlan Stenn, and Raphael -Manfredi. -@item -The Cygnus configure script, by K. Richard Pixley, and the gcc configure -script, by Richard Stallman. These use essentially the same approach, -and the developers communicated regularly. -@item -The autoconf program, by David MacKenzie. -@end itemize - -The Metaconfig program is still used for Perl and a few other programs. -It is part of the Dist package. I do not know if it is being developed. - -In 1994, David MacKenzie and others modified autoconf to incorporate all -the features of Cygnus configure. Since then, there has been a slow but -steady conversion of GNU programs from Cygnus configure to autoconf. gcc -has been converted, eliminating the gcc configure script. - -GNU autoconf was regularly maintained until late 1996. As of this -writing in June, 1998, it has no public maintainer. - -Most programs are built using the make program, which requires the -developer to write Makefiles describing how to build the programs. -Since most programs are built in pretty much the same way, this led to a -lot of duplication. - -The X Window system is built using the imake tool, which uses a database -of rules to eliminate the duplication. However, building a tool which -was developed using imake requires that the builder have imake -installed, violating one of the goals of the GNU system. - -The new BSD make provides a standard library of Makefile fragments, -which permits developers to write very simple Makefiles. However, this -requires that the builder install the new BSD make program. - -In 1994, David MacKenzie wrote the first version of automake, which -permitted writing a simple build description which was converted into a -Makefile which could be used by the standard make program. In 1995, Tom -Tromey completely rewrote automake in Perl, and he continues to enhance -it. - -Various free packages built libraries, and by around 1995 several -included support to build shared libraries on various platforms. -However, there was no consistent approach. In early 1996, Gordon -Matzigkeit began working on libtool, which provided a standardized -approach to building shared libraries. This was integrated into -automake from the start. - -The development of automake and libtool was driven by the GNITS project, -a group of GNU maintainers who designed standardized tools to help meet -the GNU coding standards. - -@node Building -@section Building - -Most readers of this document should already know how to build a tool by -running @samp{configure} and @samp{make}. This section may serve as a -quick introduction or reminder. - -Building a tool is normally as simple as running @samp{configure} -followed by @samp{make}. You should normally run @samp{configure} from -an empty directory, using some path to refer to the @samp{configure} -script in the source directory. The directory in which you run -@samp{configure} is called the @dfn{object directory}. - -In order to use a object directory which is different from the source -directory, you must be using the GNU version of @samp{make}, which has -the required @samp{VPATH} support. Despite this restriction, using a -different object directory is highly recommended: -@itemize @bullet -@item -It keeps the files generated during the build from cluttering up your -sources. -@item -It permits you to remove the built files by simply removing the entire -build directory. -@item -It permits you to build from the same sources with several sets of -configure options simultaneously. -@end itemize - -If you don't have GNU @samp{make}, you will have to run @samp{configure} -in the source directory. All GNU packages should support this; in -particular, GNU packages should not assume the presence of GNU -@samp{make}. - -After running @samp{configure}, you can build the tools by running -@samp{make}. - -To install the tools, run @samp{make install}. Installing the tools -will copy the programs and any required support files to the -@dfn{installation directory}. The location of the installation -directory is controlled by @samp{configure} options, as described below. - -In the Cygnus tree at present, the info files are built and installed as -a separate step. To build them, run @samp{make info}. To install them, -run @samp{make install-info}. - -All @samp{configure} scripts support a wide variety of options. The -most interesting ones are @samp{--with} and @samp{--enable} options -which are generally specific to particular tools. You can usually use -the @samp{--help} option to get a list of interesting options for a -particular configure script. - -The only generic options you are likely to use are the @samp{--prefix} -and @samp{--exec-prefix} options. These options are used to specify the -installation directory. - -The directory named by the @samp{--prefix} option will hold machine -independent files such as info files. - -The directory named by the @samp{--exec-prefix} option, which is -normally a subdirectory of the @samp{--prefix} directory, will hold -machine dependent files such as executables. - -The default for @samp{--prefix} is @file{/usr/local}. The default for -@samp{--exec-prefix} is the value used for @samp{--prefix}. - -The convention used in Cygnus releases is to use a @samp{--prefix} -option of @file{/usr/cygnus/@var{release}}, where @var{release} is the -name of the release, and to use a @samp{--exec-prefix} option of -@file{/usr/cygnus/@var{release}/H-@var{host}}, where @var{host} is the -configuration name of the host system (@pxref{Configuration Names}). - -Do not use either the source or the object directory as the installation -directory. That will just lead to confusion. - -@node Getting Started -@chapter Getting Started - -To start using the GNU configure and build system with your software -package, you must write three files, and you must run some tools to -manually generate additional files. - -@menu -* Write configure.in:: Write configure.in. -* Write Makefile.am:: Write Makefile.am. -* Write acconfig.h:: Write acconfig.h. -* Generate files:: Generate files. -* Getting Started Example:: Example. -@end menu - -@node Write configure.in -@section Write configure.in -@cindex @file{configure.in}, writing - -You must first write the file @file{configure.in}. This is an autoconf -input file, and the autoconf manual describes in detail what this file -should look like. - -You will write tests in your @file{configure.in} file to check for -conditions that may change from one system to another, such as the -presence of particular header files or functions. - -For example, not all systems support the @samp{gettimeofday} function. -If you want to use the @samp{gettimeofday} function when it is -available, and to use some other function when it is not, you would -check for this by putting @samp{AC_CHECK_FUNCS(gettimeofday)} in -@file{configure.in}. - -When the configure script is run at build time, this will arrange to -define the preprocessor macro @samp{HAVE_GETTIMEOFDAY} to the value 1 if -the @samp{gettimeofday} function is available, and to not define the -macro at all if the function is not available. Your code can then use -@samp{#ifdef} to test whether it is safe to call @samp{gettimeofday}. - -If you have an existing body of code, the @samp{autoscan} program may -help identify potential portability problems, and hence configure tests -that you will want to use. -@ifnothtml -@xref{Invoking autoscan, , , autoconf, the autoconf manual}. -@end ifnothtml -@ifhtml -See @uref{http://www.delorie.com/gnu/docs/autoconf/autoconf_4.html, the -autoscan documentation}. -@end ifhtml - -Another handy tool for an existing body of code is @samp{ifnames}. This -will show you all the preprocessor conditionals that the code already -uses. -@ifnothtml -@xref{Invoking ifnames, , , autoconf, the autoconf manual}. -@end ifnothtml -@ifhtml -See @uref{http://www.delorie.com/gnu/docs/autoconf/autoconf_5.html, the -ifnames documentation}. -@end ifhtml - -Besides the portability tests which are specific to your particular -package, every @file{configure.in} file should contain the following -macros. - -@table @samp -@item AC_INIT -@cindex @samp{AC_INIT} -This macro takes a single argument, which is the name of a file in your -package. For example, @samp{AC_INIT(foo.c)}. - -@item AC_PREREQ(@var{VERSION}) -@cindex @samp{AC_PREREQ} -This macro is optional. It may be used to indicate the version of -@samp{autoconf} that you are using. This will prevent users from -running an earlier version of @samp{autoconf} and perhaps getting an -invalid @file{configure} script. For example, @samp{AC_PREREQ(2.12)}. - -@item AM_INIT_AUTOMAKE -@cindex @samp{AM_INIT_AUTOMAKE} -This macro takes two arguments: the name of the package, and a version -number. For example, @samp{AM_INIT_AUTOMAKE(foo, 1.0)}. (This macro is -not needed if you are not using automake). - -@item AM_CONFIG_HEADER -@cindex @samp{AM_CONFIG_HEADER} -This macro names the header file which will hold the preprocessor macro -definitions at run time. Normally this should be @file{config.h}. Your -sources would then use @samp{#include "config.h"} to include it. - -This macro may optionally name the input file for that header file; by -default, this is @file{config.h.in}, but that file name works poorly on -DOS filesystems. Therefore, it is often better to name it explicitly as -@file{config.in}. - -This is what you should normally put in @file{configure.in}: -@example -AM_CONFIG_HEADER(config.h:config.in) -@end example - -@cindex @samp{AC_CONFIG_HEADER} -(If you are not using automake, use @samp{AC_CONFIG_HEADER} rather than -@samp{AM_CONFIG_HEADER}). - -@item AM_MAINTAINER_MODE -@cindex @samp{AM_MAINTAINER_MODE} -This macro always appears in Cygnus configure scripts. Other programs -may or may not use it. - -If this macro is used, the @samp{--enable-maintainer-mode} option is -required to enable automatic rebuilding of generated files used by the -configure system. This of course requires that developers be aware of, -and use, that option. - -If this macro is not used, then the generated files will always be -rebuilt automatically. This will cause problems if the wrong versions -of autoconf, automake, or others are in the builder's @samp{PATH}. - -(If you are not using automake, you do not need to use this macro). - -@item AC_EXEEXT -@cindex @samp{AC_EXEEXT} -@cindex @samp{AM_EXEEXT} -Either this macro or @samp{AM_EXEEXT} always appears in Cygnus configure -files. Other programs may or may not use one of them. - -This macro looks for the executable suffix used on the host system. On -Unix systems, this is the empty string. On Windows systems, this is -@samp{.exe}. This macro directs automake to use the executable suffix -as appropriate when creating programs. This macro does not take any -arguments. - -The @samp{AC_EXEEXT} form is new, and is part of a Cygnus patch to -autoconf to support compiling with Visual C++. Older programs use -@samp{AM_EXEEXT} instead. - -(Programs which do not use automake use neither @samp{AC_EXEEXT} nor -@samp{AM_EXEEXT}). - -@item AC_PROG_CC -@cindex @samp{AC_PROG_CC} -If you are writing C code, you will normally want to use this macro. It -locates the C compiler to use. It does not take any arguments. - -However, if this @file{configure.in} file is for a library which is to -be compiled by a cross compiler which may not fully work, then you will -not want to use @samp{AC_PROG_CC}. Instead, you will want to use a -variant which does not call the macro @samp{AC_PROG_CC_WORKS}. Examples -can be found in various @file{configure.in} files for libraries that are -compiled with cross compilers, such as libiberty or libgloss. This is -essentially a bug in autoconf, and there will probably be a better -workaround at some point. - -@item AC_PROG_CXX -@cindex @samp{AC_PROG_CXX} -If you are writing C++ code, you will want to use this macro. It -locates the C++ compiler to use. It does not take any arguments. The -same cross compiler comments apply as for @samp{AC_PROG_CC}. - -@item AM_PROG_LIBTOOL -@cindex @samp{AM_PROG_LIBTOOL} -If you want to build libraries, and you want to permit them to be -shared, or you want to link against libraries which were built using -libtool, then you will need this macro. This macro is required in order -to use libtool. - -@cindex @samp{AM_DISABLE_SHARED} -By default, this will cause all libraries to be built as shared -libraries. To prevent this--to change the default--use -@samp{AM_DISABLE_SHARED} before @samp{AM_PROG_LIBTOOL}. The configure -options @samp{--enable-shared} and @samp{--disable-shared} may be used -to override the default at build time. - -@item AC_DEFINE(_GNU_SOURCE) -@cindex @samp{_GNU_SOURCE} -GNU packages should normally include this line before any other feature -tests. This defines the macro @samp{_GNU_SOURCE} when compiling, which -directs the libc header files to provide the standard GNU system -interfaces including all GNU extensions. If this macro is not defined, -certain GNU extensions may not be available. - -@item AC_OUTPUT -@cindex @samp{AC_OUTPUT} -This macro takes a list of file names which the configure process should -produce. This is normally a list of one or more @file{Makefile} files -in different directories. If your package lives entirely in a single -directory, you would use simply @samp{AC_OUTPUT(Makefile)}. If you also -have, for example, a @file{lib} subdirectory, you would use -@samp{AC_OUTPUT(Makefile lib/Makefile)}. -@end table - -If you want to use locally defined macros in your @file{configure.in} -file, then you will need to write a @file{acinclude.m4} file which -defines them (if not using automake, this file is called -@file{aclocal.m4}). Alternatively, you can put separate macros in an -@file{m4} subdirectory, and put @samp{ACLOCAL_AMFLAGS = -I m4} in your -@file{Makefile.am} file so that the @samp{aclocal} program will be able -to find them. - -The different macro prefixes indicate which tool defines the macro. -Macros which start with @samp{AC_} are part of autoconf. Macros which -start with @samp{AM_} are provided by automake or libtool. - -@node Write Makefile.am -@section Write Makefile.am -@cindex @file{Makefile.am}, writing - -You must write the file @file{Makefile.am}. This is an automake input -file, and the automake manual describes in detail what this file should -look like. - -The automake commands in @file{Makefile.am} mostly look like variable -assignments in a @file{Makefile}. automake recognizes special variable -names, and automatically add make rules to the output as needed. - -There will be one @file{Makefile.am} file for each directory in your -package. For each directory with subdirectories, the @file{Makefile.am} -file should contain the line -@smallexample -SUBDIRS = @var{dir} @var{dir} @dots{} -@end smallexample -@noindent -where each @var{dir} is the name of a subdirectory. - -For each @file{Makefile.am}, there should be a corresponding -@file{Makefile} in the @samp{AC_OUTPUT} macro in @file{configure.in}. - -Every @file{Makefile.am} written at Cygnus should contain the line -@smallexample -AUTOMAKE_OPTIONS = cygnus -@end smallexample -@noindent -This puts automake into Cygnus mode. See the automake manual for -details. - -You may to include the version number of @samp{automake} that you are -using on the @samp{AUTOMAKE_OPTIONS} line. For example, -@smallexample -AUTOMAKE_OPTIONS = cygnus 1.3 -@end smallexample -@noindent -This will prevent users from running an earlier version of -@samp{automake} and perhaps getting an invalid @file{Makefile.in}. - -If your package builds a program, then in the directory where that -program is built you will normally want a line like -@smallexample -bin_PROGRAMS = @var{program} -@end smallexample -@noindent -where @var{program} is the name of the program. You will then want a -line like -@smallexample -@var{program}_SOURCES = @var{file} @var{file} @dots{} -@end smallexample -@noindent -where each @var{file} is the name of a source file to link into the -program (e.g., @samp{foo.c}). - -If your package builds a library, and you do not want the library to -ever be built as a shared library, then in the directory where that -library is built you will normally want a line like -@smallexample -lib_LIBRARIES = lib@var{name}.a -@end smallexample -@noindent -where @samp{lib@var{name}.a} is the name of the library. You will then -want a line like -@smallexample -lib@var{name}_a_SOURCES = @var{file} @var{file} @dots{} -@end smallexample -@noindent -where each @var{file} is the name of a source file to add to the -library. - -If your package builds a library, and you want to permit building the -library as a shared library, then in the directory where that library is -built you will normally want a line like -@smallexample -lib_LTLIBRARIES = lib@var{name}.la -@end smallexample -The use of @samp{LTLIBRARIES}, and the @samp{.la} extension, indicate a -library to be built using libtool. As usual, you will then want a line -like -@smallexample -lib@var{name}_la_SOURCES = @var{file} @var{file} @dots{} -@end smallexample - -The strings @samp{bin} and @samp{lib} that appear above in -@samp{bin_PROGRAMS} and @samp{lib_LIBRARIES} are not arbitrary. They -refer to particular directories, which may be set by the @samp{--bindir} -and @samp{--libdir} options to @file{configure}. If those options are -not used, the default values are based on the @samp{--prefix} or -@samp{--exec-prefix} options to @file{configure}. It is possible to use -other names if the program or library should be installed in some other -directory. - -The @file{Makefile.am} file may also contain almost anything that may -appear in a normal @file{Makefile}. automake also supports many other -special variables, as well as conditionals. - -See the automake manual for more information. - -@node Write acconfig.h -@section Write acconfig.h -@cindex @file{acconfig.h}, writing - -If you are generating a portability header file, (i.e., you are using -@samp{AM_CONFIG_HEADER} in @file{configure.in}), then you will have to -write a @file{acconfig.h} file. It will have to contain the following -lines. - -@smallexample -/* Name of package. */ -#undef PACKAGE - -/* Version of package. */ -#undef VERSION -@end smallexample - -This requirement is really a bug in the system, and the requirement may -be eliminated at some later date. - -The @file{acconfig.h} file will also similar comment and @samp{#undef} -lines for any unusual macros in the @file{configure.in} file, including -any macro which appears in a @samp{AC_DEFINE} macro. - -In particular, if you are writing a GNU package and therefore include -@samp{AC_DEFINE(_GNU_SOURCE)} in @file{configure.in} as suggested above, -you will need lines like this in @file{acconfig.h}: -@smallexample -/* Enable GNU extensions. */ -#undef _GNU_SOURCE -@end smallexample - -Normally the @samp{autoheader} program will inform you of any such -requirements by printing an error message when it is run. However, if -you do anything particular odd in your @file{configure.in} file, you -will have to make sure that the right entries appear in -@file{acconfig.h}, since otherwise the results of the tests may not be -available in the @file{config.h} file which your code will use. - -(Thee @samp{PACKAGE} and @samp{VERSION} lines are not required if you -are not using automake, and in that case you may not need a -@file{acconfig.h} file at all). - -@node Generate files -@section Generate files - -Once you have written @file{configure.in}, @file{Makefile.am}, -@file{acconfig.h}, and possibly @file{acinclude.m4}, you must use -autoconf and automake programs to produce the first versions of the -generated files. This is done by executing the following sequence of -commands. - -@smallexample -aclocal -autoconf -autoheader -automake -@end smallexample - -The @samp{aclocal} and @samp{automake} commands are part of the automake -package, and the @samp{autoconf} and @samp{autoheader} commands are part -of the autoconf package. - -If you are using a @file{m4} subdirectory for your macros, you will need -to use the @samp{-I m4} option when you run @samp{aclocal}. - -If you are not using the Cygnus tree, use the @samp{-a} option when -running @samp{automake} command in order to copy the required support -files into your source directory. - -If you are using libtool, you must build and install the libtool package -with the same @samp{--prefix} and @samp{--exec-prefix} options as you -used with the autoconf and automake packages. You must do this before -running any of the above commands. If you are not using the Cygnus -tree, you will need to run the @samp{libtoolize} program to copy the -libtool support files into your directory. - -Once you have managed to run these commands without getting any errors, -you should create a new empty directory, and run the @samp{configure} -script which will have been created by @samp{autoconf} with the -@samp{--enable-maintainer-mode} option. This will give you a set of -Makefiles which will include rules to automatically rebuild all the -generated files. - -After doing that, whenever you have changed some of the input files and -want to regenerated the other files, go to your object directory and run -@samp{make}. Doing this is more reliable than trying to rebuild the -files manually, because there are complex order dependencies and it is -easy to forget something. - -@node Getting Started Example -@section Example - -Let's consider a trivial example. - -Suppose we want to write a simple version of @samp{touch}. Our program, -which we will call @samp{poke}, will take a single file name argument, -and use the @samp{utime} system call to set the modification and access -times of the file to the current time. We want this program to be -highly portable. - -We'll first see what this looks like without using autoconf and -automake, and then see what it looks like with them. - -@menu -* Getting Started Example 1:: First Try. -* Getting Started Example 2:: Second Try. -* Getting Started Example 3:: Third Try. -* Generate Files in Example:: Generate Files. -@end menu - -@node Getting Started Example 1 -@subsection First Try - -Here is our first try at @samp{poke.c}. Note that we've written it -without ANSI/ISO C prototypes, since we want it to be highly portable. - -@example -#include <stdio.h> -#include <stdlib.h> -#include <sys/types.h> -#include <utime.h> - -int -main (argc, argv) - int argc; - char **argv; -@{ - if (argc != 2) - @{ - fprintf (stderr, "Usage: poke file\n"); - exit (1); - @} - - if (utime (argv[1], NULL) < 0) - @{ - perror ("utime"); - exit (1); - @} - - exit (0); -@} -@end example - -We also write a simple @file{Makefile}. - -@example -CC = gcc -CFLAGS = -g -O2 - -all: poke - -poke: poke.o - $(CC) -o poke $(CFLAGS) $(LDFLAGS) poke.o -@end example - -So far, so good. - -Unfortunately, there are a few problems. - -On older Unix systems derived from BSD 4.3, the @samp{utime} system call -does not accept a second argument of @samp{NULL}. On those systems, we -need to pass a pointer to @samp{struct utimbuf} structure. -Unfortunately, even older systems don't define that structure; on those -systems, we need to pass an array of two @samp{long} values. - -The header file @file{stdlib.h} was invented by ANSI C, and older -systems don't have a copy. We included it above to get a declaration of -@samp{exit}. - -We can find some of these portability problems by running -@samp{autoscan}, which will create a @file{configure.scan} file which we -can use as a prototype for our @file{configure.in} file. I won't show -the output, but it will notice the potential problems with @samp{utime} -and @file{stdlib.h}. - -In our @file{Makefile}, we don't provide any way to install the program. -This doesn't matter much for such a simple example, but a real program -will need an @samp{install} target. For that matter, we will also want -a @samp{clean} target. - -@node Getting Started Example 2 -@subsection Second Try - -Here is our second try at this program. - -We modify @file{poke.c} to use preprocessor macros to control what -features are available. (I've cheated a bit by using the same macro -names which autoconf will use). - -@example -#include <stdio.h> - -#ifdef STDC_HEADERS -#include <stdlib.h> -#endif - -#include <sys/types.h> - -#ifdef HAVE_UTIME_H -#include <utime.h> -#endif - -#ifndef HAVE_UTIME_NULL - -#include <time.h> - -#ifndef HAVE_STRUCT_UTIMBUF - -struct utimbuf -@{ - long actime; - long modtime; -@}; - -#endif - -static int -utime_now (file) - char *file; -@{ - struct utimbuf now; - - now.actime = now.modtime = time (NULL); - return utime (file, &now); -@} - -#define utime(f, p) utime_now (f) - -#endif /* HAVE_UTIME_NULL */ - -int -main (argc, argv) - int argc; - char **argv; -@{ - if (argc != 2) - @{ - fprintf (stderr, "Usage: poke file\n"); - exit (1); - @} - - if (utime (argv[1], NULL) < 0) - @{ - perror ("utime"); - exit (1); - @} - - exit (0); -@} -@end example - -Here is the associated @file{Makefile}. We've added support for the -preprocessor flags we use. We've also added @samp{install} and -@samp{clean} targets. - -@example -# Set this to your installation directory. -bindir = /usr/local/bin - -# Uncomment this if you have the standard ANSI/ISO C header files. -# STDC_HDRS = -DSTDC_HEADERS - -# Uncomment this if you have utime.h. -# UTIME_H = -DHAVE_UTIME_H - -# Uncomment this if utime (FILE, NULL) works on your system. -# UTIME_NULL = -DHAVE_UTIME_NULL - -# Uncomment this if struct utimbuf is defined in utime.h. -# UTIMBUF = -DHAVE_STRUCT_UTIMBUF - -CC = gcc -CFLAGS = -g -O2 - -ALL_CFLAGS = $(STDC_HDRS) $(UTIME_H) $(UTIME_NULL) $(UTIMBUF) $(CFLAGS) - -all: poke - -poke: poke.o - $(CC) -o poke $(ALL_CFLAGS) $(LDFLAGS) poke.o - -.c.o: - $(CC) -c $(ALL_CFLAGS) poke.c - -install: poke - cp poke $(bindir)/poke - -clean: - rm poke poke.o -@end example - -Some problems with this approach should be clear. - -Users who want to compile poke will have to know how @samp{utime} works -on their systems, so that they can uncomment the @file{Makefile} -correctly. - -The installation is done using @samp{cp}, but many systems have an -@samp{install} program which may be used, and which supports optional -features such as stripping debugging information out of the installed -binary. - -The use of @file{Makefile} variables like @samp{CC}, @samp{CFLAGS} and -@samp{LDFLAGS} follows the requirements of the GNU standards. This is -convenient for all packages, since it reduces surprises for users. -However, it is easy to get the details wrong, and wind up with a -slightly nonstandard distribution. - -@node Getting Started Example 3 -@subsection Third Try - -For our third try at this program, we will write a @file{configure.in} -script to discover the configuration features on the host system, rather -than requiring the user to edit the @file{Makefile}. We will also write -a @file{Makefile.am} rather than a @file{Makefile}. - -The only change to @file{poke.c} is to add a line at the start of the -file: -@smallexample -#include "config.h" -@end smallexample - -The new @file{configure.in} file is as follows. - -@example -AC_INIT(poke.c) -AM_INIT_AUTOMAKE(poke, 1.0) -AM_CONFIG_HEADER(config.h:config.in) -AC_PROG_CC -AC_HEADER_STDC -AC_CHECK_HEADERS(utime.h) -AC_EGREP_HEADER(utimbuf, utime.h, AC_DEFINE(HAVE_STRUCT_UTIMBUF)) -AC_FUNC_UTIME_NULL -AC_OUTPUT(Makefile) -@end example - -The first four macros in this file, and the last one, were described -above; see @ref{Write configure.in}. If we omit these macros, then when -we run @samp{automake} we will get a reminder that we need them. - -The other macros are standard autoconf macros. - -@table @samp -@item AC_HEADER_STDC -Check for standard C headers. -@item AC_CHECK_HEADERS -Check whether a particular header file exists. -@item AC_EGREP_HEADER -Check for a particular string in a particular header file, in this case -checking for @samp{utimbuf} in @file{utime.h}. -@item AC_FUNC_UTIME_NULL -Check whether @samp{utime} accepts a NULL second argument to set the -file change time to the current time. -@end table - -See the autoconf manual for a more complete description. - -The new @file{Makefile.am} file is as follows. Note how simple this is -compared to our earlier @file{Makefile}. - -@example -bin_PROGRAMS = poke - -poke_SOURCES = poke.c -@end example - -This means that we should build a single program name @samp{poke}. It -should be installed in the binary directory, which we called -@samp{bindir} earlier. The program @samp{poke} is built from the source -file @file{poke.c}. - -We must also write a @file{acconfig.h} file. Besides @samp{PACKAGE} and -@samp{VERSION}, which must be mentioned for all packages which use -automake, we must include @samp{HAVE_STRUCT_UTIMBUF}, since we mentioned -it in an @samp{AC_DEFINE}. - -@example -/* Name of package. */ -#undef PACKAGE - -/* Version of package. */ -#undef VERSION - -/* Whether utime.h defines struct utimbuf. */ -#undef HAVE_STRUCT_UTIMBUF -@end example - -@node Generate Files in Example -@subsection Generate Files - -We must now generate the other files, using the following commands. - -@smallexample -aclocal -autoconf -autoheader -automake -@end smallexample - -When we run @samp{autoheader}, it will remind us of any macros we forgot -to add to @file{acconfig.h}. - -When we run @samp{automake}, it will want to add some files to our -distribution. It will add them automatically if we use the -@samp{--add-missing} option. - -By default, @samp{automake} will run in GNU mode, which means that it -will want us to create certain additional files; as of this writing, it -will want @file{NEWS}, @file{README}, @file{AUTHORS}, and -@file{ChangeLog}, all of which are files which should appear in a -standard GNU distribution. We can either add those files, or run -@samp{automake} with the @samp{--foreign} option. - -Running these tools will generate the following files, all of which are -described in the next chapter. - -@itemize @bullet -@item -@file{aclocal.m4} -@item -@file{configure} -@item -@file{config.in} -@item -@file{Makefile.in} -@item -@file{stamp-h.in} -@end itemize - -@node Files -@chapter Files - -As was seen in the previous chapter, the GNU configure and build system -uses a number of different files. The developer must write a few files. -The others are generated by various tools. - -The system is rather flexible, and can be used in many different ways. -In describing the files that it uses, I will describe the common case, -and mention some other cases that may arise. - -@menu -* Developer Files:: Developer Files. -* Build Files:: Build Files. -* Support Files:: Support Files. -@end menu - -@node Developer Files -@section Developer Files - -This section describes the files written or generated by the developer -of a package. - -@menu -* Developer Files Picture:: Developer Files Picture. -* Written Developer Files:: Written Developer Files. -* Generated Developer Files:: Generated Developer Files. -@end menu - -@node Developer Files Picture -@subsection Developer Files Picture - -Here is a picture of the files which are written by the developer, the -generated files which would be included with a complete source -distribution, and the tools which create those files. -@ifinfo -The file names are plain text and the tool names are enclosed by -@samp{*} characters -@end ifinfo -@ifnotinfo -The file names are in rectangles with square corners and the tool names -are in rectangles with rounded corners -@end ifnotinfo -(e.g., @samp{autoheader} is the name of a tool, not the name of a file). - -@image{configdev} - -@node Written Developer Files -@subsection Written Developer Files - -The following files would be written by the developer. - -@table @file -@item configure.in -@cindex @file{configure.in} -This is the configuration script. This script contains invocations of -autoconf macros. It may also contain ordinary shell script code. This -file will contain feature tests for portability issues. The last thing -in the file will normally be an @samp{AC_OUTPUT} macro listing which -files to create when the builder runs the configure script. This file -is always required when using the GNU configure system. @xref{Write -configure.in}. - -@item Makefile.am -@cindex @file{Makefile.am} -This is the automake input file. It describes how the code should be -built. It consists of definitions of automake variables. It may also -contain ordinary Makefile targets. This file is only needed when using -automake (newer tools normally use automake, but there are still older -tools which have not been converted, in which the developer writes -@file{Makefile.in} directly). @xref{Write Makefile.am}. - -@item acconfig.h -@cindex @file{acconfig.h} -When the configure script creates a portability header file, by using -@samp{AM_CONFIG_HEADER} (or, if not using automake, -@samp{AC_CONFIG_HEADER}), this file is used to describe macros which are -not recognized by the @samp{autoheader} command. This is normally a -fairly uninteresting file, consisting of a collection of @samp{#undef} -lines with comments. Normally any call to @samp{AC_DEFINE} in -@file{configure.in} will require a line in this file. @xref{Write -acconfig.h}. - -@item acinclude.m4 -@cindex @file{acinclude.m4} -This file is not always required. It defines local autoconf macros. -These macros may then be used in @file{configure.in}. If you don't need -any local autoconf macros, then you don't need this file at all. In -fact, in general, you never need local autoconf macros, since you can -put everything in @file{configure.in}, but sometimes a local macro is -convenient. - -Newer tools may omit @file{acinclude.m4}, and instead use a -subdirectory, typically named @file{m4}, and define -@samp{ACLOCAL_AMFLAGS = -I m4} in @file{Makefile.am} to force -@samp{aclocal} to look there for macro definitions. The macro -definitions are then placed in separate files in that directory. - -The @file{acinclude.m4} file is only used when using automake; in older -tools, the developer writes @file{aclocal.m4} directly, if it is needed. -@end table - -@node Generated Developer Files -@subsection Generated Developer Files - -The following files would be generated by the developer. - -When using automake, these files are normally not generated manually -after the first time. Instead, the generated @file{Makefile} contains -rules to automatically rebuild the files as required. When -@samp{AM_MAINTAINER_MODE} is used in @file{configure.in} (the normal -case in Cygnus code), the automatic rebuilding rules will only be -defined if you configure using the @samp{--enable-maintainer-mode} -option. - -When using automatic rebuilding, it is important to ensure that all the -various tools have been built and installed on your @samp{PATH}. Using -automatic rebuilding is highly recommended, so much so that I'm not -going to explain what you have to do if you don't use it. - -@table @file -@item configure -@cindex @file{configure} -This is the configure script which will be run when building the -package. This is generated by @samp{autoconf} from @file{configure.in} -and @file{aclocal.m4}. This is a shell script. - -@item Makefile.in -@cindex @file{Makefile.in} -This is the file which the configure script will turn into the -@file{Makefile} at build time. This file is generated by -@samp{automake} from @file{Makefile.am}. If you aren't using automake, -you must write this file yourself. This file is pretty much a normal -@file{Makefile}, with some configure substitutions for certain -variables. - -@item aclocal.m4 -@cindex @file{aclocal.m4} -This file is created by the @samp{aclocal} program, based on the -contents of @file{configure.in} and @file{acinclude.m4} (or, as noted in -the description of @file{acinclude.m4} above, on the contents of an -@file{m4} subdirectory). This file contains definitions of autoconf -macros which @samp{autoconf} will use when generating the file -@file{configure}. These autoconf macros may be defined by you in -@file{acinclude.m4} or they may be defined by other packages such as -automake, libtool or gettext. If you aren't using automake, you will -normally write this file yourself; in that case, if @file{configure.in} -uses only standard autoconf macros, this file will not be needed at all. - -@item config.in -@cindex @file{config.in} -@cindex @file{config.h.in} -This file is created by @samp{autoheader} based on @file{acconfig.h} and -@file{configure.in}. At build time, the configure script will define -some of the macros in it to create @file{config.h}, which may then be -included by your program. This permits your C code to use preprocessor -conditionals to change its behaviour based on the characteristics of the -host system. This file may also be called @file{config.h.in}. - -@item stamp.h-in -@cindex @file{stamp-h.in} -This rather uninteresting file, which I omitted from the picture, is -generated by @samp{automake}. It always contains the string -@samp{timestamp}. It is used as a timestamp file indicating whether -@file{config.in} is up to date. Using a timestamp file means that -@file{config.in} can be marked as up to date without actually changing -its modification time. This is useful since @file{config.in} depends -upon @file{configure.in}, but it is easy to change @file{configure.in} -in a way which does not affect @file{config.in}. -@end table - -@node Build Files -@section Build Files - -This section describes the files which are created at configure and -build time. These are the files which somebody who builds the package -will see. - -Of course, the developer will also build the package. The distinction -between developer files and build files is not that the developer does -not see the build files, but that somebody who only builds the package -does not have to worry about the developer files. - -@menu -* Build Files Picture:: Build Files Picture. -* Build Files Description:: Build Files Description. -@end menu - -@node Build Files Picture -@subsection Build Files Picture - -Here is a picture of the files which will be created at build time. -@file{config.status} is both a created file and a shell script which is -run to create other files, and the picture attempts to show that. - -@image{configbuild} - -@node Build Files Description -@subsection Build Files Description - -This is a description of the files which are created at build time. - -@table @file -@item config.status -@cindex @file{config.status} -The first step in building a package is to run the @file{configure} -script. The @file{configure} script will create the file -@file{config.status}, which is itself a shell script. When you first -run @file{configure}, it will automatically run @file{config.status}. -An @file{Makefile} derived from an automake generated @file{Makefile.in} -will contain rules to automatically run @file{config.status} again when -necessary to recreate certain files if their inputs change. - -@item Makefile -@cindex @file{Makefile} -This is the file which make will read to build the program. The -@file{config.status} script will transform @file{Makefile.in} into -@file{Makefile}. - -@item config.h -@cindex @file{config.h} -This file defines C preprocessor macros which C code can use to adjust -its behaviour on different systems. The @file{config.status} script -will transform @file{config.in} into @file{config.h}. - -@item config.cache -@cindex @file{config.cache} -This file did not fit neatly into the picture, and I omitted it. It is -used by the @file{configure} script to cache results between runs. This -can be an important speedup. If you modify @file{configure.in} in such -a way that the results of old tests should change (perhaps you have -added a new library to @samp{LDFLAGS}), then you will have to remove -@file{config.cache} to force the tests to be rerun. - -The autoconf manual explains how to set up a site specific cache file. -This can speed up running @file{configure} scripts on your system. - -@item stamp.h -@cindex @file{stamp-h} -This file, which I omitted from the picture, is similar to -@file{stamp-h.in}. It is used as a timestamp file indicating whether -@file{config.h} is up to date. This is useful since @file{config.h} -depends upon @file{config.status}, but it is easy for -@file{config.status} to change in a way which does not affect -@file{config.h}. -@end table - -@node Support Files -@section Support Files - -The GNU configure and build system requires several support files to be -included with your distribution. You do not normally need to concern -yourself with these. If you are using the Cygnus tree, most are already -present. Otherwise, they will be installed with your source by -@samp{automake} (with the @samp{--add-missing} option) and -@samp{libtoolize}. - -You don't have to put the support files in the top level directory. You -can put them in a subdirectory, and use the @samp{AC_CONFIG_AUX_DIR} -macro in @file{configure.in} to tell @samp{automake} and the -@file{configure} script where they are. - -In this section, I describe the support files, so that you can know what -they are and why they are there. - -@table @file -@item ABOUT-NLS -Added by automake if you are using gettext. This is a documentation -file about the gettext project. -@item ansi2knr.c -Used by an automake generated @file{Makefile} if you put @samp{ansi2knr} -in @samp{AUTOMAKE_OPTIONS} in @file{Makefile.am}. This permits -compiling ANSI C code with a K&R C compiler. -@item ansi2knr.1 -The man page which goes with @file{ansi2knr.c}. -@item config.guess -A shell script which determines the configuration name for the system on -which it is run. -@item config.sub -A shell script which canonicalizes a configuration name entered by a -user. -@item elisp-comp -Used to compile Emacs LISP files. -@item install-sh -A shell script which installs a program. This is used if the configure -script can not find an install binary. -@item ltconfig -Used by libtool. This is a shell script which configures libtool for -the particular system on which it is used. -@item ltmain.sh -Used by libtool. This is the actual libtool script which is used, after -it is configured by @file{ltconfig} to build a library. -@item mdate-sh -A shell script used by an automake generated @file{Makefile} to pretty -print the modification time of a file. This is used to maintain version -numbers for texinfo files. -@item missing -A shell script used if some tool is missing entirely. This is used by -an automake generated @file{Makefile} to avoid certain sorts of -timestamp problems. -@item mkinstalldirs -A shell script which creates a directory, including all parent -directories. This is used by an automake generated @file{Makefile} -during installation. -@item texinfo.tex -Required if you have any texinfo files. This is used when converting -Texinfo files into DVI using @samp{texi2dvi} and @TeX{}. -@item ylwrap -A shell script used by an automake generated @file{Makefile} to run -programs like @samp{bison}, @samp{yacc}, @samp{flex}, and @samp{lex}. -These programs default to producing output files with a fixed name, and -the @file{ylwrap} script runs them in a subdirectory to avoid file name -conflicts when using a parallel make program. -@end table - -@node Configuration Names -@chapter Configuration Names -@cindex configuration names -@cindex configuration triplets -@cindex triplets -@cindex host names -@cindex host triplets -@cindex canonical system names -@cindex system names -@cindex system types - -The GNU configure system names all systems using a @dfn{configuration -name}. All such names used to be triplets (they may now contain four -parts in certain cases), and the term @dfn{configuration triplet} is -still seen. - -@menu -* Configuration Name Definition:: Configuration Name Definition. -* Using Configuration Names:: Using Configuration Names. -@end menu - -@node Configuration Name Definition -@section Configuration Name Definition - -This is a string of the form -@var{cpu}-@var{manufacturer}-@var{operating_system}. In some cases, -this is extended to a four part form: -@var{cpu}-@var{manufacturer}-@var{kernel}-@var{operating_system}. - -When using a configuration name in a configure option, it is normally -not necessary to specify an entire name. In particular, the -@var{manufacturer} field is often omitted, leading to strings such as -@samp{i386-linux} or @samp{sparc-sunos}. The shell script -@file{config.sub} will translate these shortened strings into the -canonical form. autoconf will arrange for @file{config.sub} to be run -automatically when it is needed. - -The fields of a configuration name are as follows: - -@table @var -@item cpu -The type of processor. This is typically something like @samp{i386} or -@samp{sparc}. More specific variants are used as well, such as -@samp{mipsel} to indicate a little endian MIPS processor. -@item manufacturer -A somewhat freeform field which indicates the manufacturer of the -system. This is often simply @samp{unknown}. Other common strings are -@samp{pc} for an IBM PC compatible system, or the name of a workstation -vendor, such as @samp{sun}. -@item operating_system -The name of the operating system which is run on the system. This will -be something like @samp{solaris2.5} or @samp{irix6.3}. There is no -particular restriction on the version number, and strings like -@samp{aix4.1.4.0} are seen. For an embedded system, which has no -operating system, this field normally indicates the type of object file -format, such as @samp{elf} or @samp{coff}. -@item kernel -This is used mainly for GNU/Linux. A typical GNU/Linux configuration -name is @samp{i586-pc-linux-gnulibc1}. In this case the kernel, -@samp{linux}, is separated from the operating system, @samp{gnulibc1}. -@end table - -The shell script @file{config.guess} will normally print the correct -configuration name for the system on which it is run. It does by -running @samp{uname} and by examining other characteristics of the -system. - -Because @file{config.guess} can normally determine the configuration -name for a machine, it is normally only necessary to specify a -configuration name when building a cross-compiler or when building using -a cross-compiler. - -@node Using Configuration Names -@section Using Configuration Names - -A configure script will sometimes have to make a decision based on a -configuration name. You will need to do this if you have to compile -code differently based on something which can not be tested using a -standard autoconf feature test. - -It is normally better to test for particular features, rather than to -test for a particular system. This is because as Unix evolves, -different systems copy features from one another. Even if you need to -determine whether the feature is supported based on a configuration -name, you should define a macro which describes the feature, rather than -defining a macro which describes the particular system you are on. - -Testing for a particular system is normally done using a case statement -in @file{configure.in}. The case statement might look something like -the following, assuming that @samp{host} is a shell variable holding a -canonical configuration name (which will be the case if -@file{configure.in} uses the @samp{AC_CANONICAL_HOST} or -@samp{AC_CANONICAL_SYSTEM} macro). - -@smallexample -case "$@{host@}" in -i[3456]86-*-linux-gnu*) do something ;; -sparc*-sun-solaris2.[56789]*) do something ;; -sparc*-sun-solaris*) do something ;; -mips*-*-elf*) do something ;; -esac -@end smallexample - -It is particularly important to use @samp{*} after the operating system -field, in order to match the version number which will be generated by -@file{config.guess}. - -In most cases you must be careful to match a range of processor types. -For most processor families, a trailing @samp{*} suffices, as in -@samp{mips*} above. For the i386 family, something along the lines of -@samp{i[3456]86} suffices at present. For the m68k family, you will -need something like @samp{m68*}. Of course, if you do not need to match -on the processor, it is simpler to just replace the entire field by a -@samp{*}, as in @samp{*-*-irix*}. - -@node Cross Compilation Tools -@chapter Cross Compilation Tools -@cindex cross tools - -The GNU configure and build system can be used to build @dfn{cross -compilation} tools. A cross compilation tool is a tool which runs on -one system and produces code which runs on another system. - -@menu -* Cross Compilation Concepts:: Cross Compilation Concepts. -* Host and Target:: Host and Target. -* Using the Host Type:: Using the Host Type. -* Specifying the Target:: Specifying the Target. -* Using the Target Type:: Using the Target Type. -* Cross Tools in the Cygnus Tree:: Cross Tools in the Cygnus Tree -@end menu - -@node Cross Compilation Concepts -@section Cross Compilation Concepts - -@cindex cross compiler -A compiler which produces programs which run on a different system is a -cross compilation compiler, or simply a @dfn{cross compiler}. -Similarly, we speak of cross assemblers, cross linkers, etc. - -In the normal case, a compiler produces code which runs on the same -system as the one on which the compiler runs. When it is necessary to -distinguish this case from the cross compilation case, such a compiler -is called a @dfn{native compiler}. Similarly, we speak of native -assemblers, etc. - -Although the debugger is not strictly speaking a compilation tool, it is -nevertheless meaningful to speak of a cross debugger: a debugger which -is used to debug code which runs on another system. Everything that is -said below about configuring cross compilation tools applies to the -debugger as well. - -@node Host and Target -@section Host and Target -@cindex host system -@cindex target system - -When building cross compilation tools, there are two different systems -involved: the system on which the tools will run, and the system for -which the tools generate code. - -The system on which the tools will run is called the @dfn{host} system. - -The system for which the tools generate code is called the @dfn{target} -system. - -For example, suppose you have a compiler which runs on a GNU/Linux -system and generates ELF programs for a MIPS embedded system. In this -case the GNU/Linux system is the host, and the MIPS ELF system is the -target. Such a compiler could be called a GNU/Linux cross MIPS ELF -compiler, or, equivalently, a @samp{i386-linux-gnu} cross -@samp{mips-elf} compiler. - -Naturally, most programs are not cross compilation tools. For those -programs, it does not make sense to speak of a target. It only makes -sense to speak of a target for tools like @samp{gcc} or the -@samp{binutils} which actually produce running code. For example, it -does not make sense to speak of the target of a tool like @samp{bison} -or @samp{make}. - -Most cross compilation tools can also serve as native tools. For a -native compilation tool, it is still meaningful to speak of a target. -For a native tool, the target is the same as the host. For example, for -a GNU/Linux native compiler, the host is GNU/Linux, and the target is -also GNU/Linux. - -@node Using the Host Type -@section Using the Host Type - -In almost all cases the host system is the system on which you run the -@samp{configure} script, and on which you build the tools (for the case -when they differ, @pxref{Canadian Cross}). - -@cindex @samp{AC_CANONICAL_HOST} -If your configure script needs to know the configuration name of the -host system, and the package is not a cross compilation tool and -therefore does not have a target, put @samp{AC_CANONICAL_HOST} in -@file{configure.in}. This macro will arrange to define a few shell -variables when the @samp{configure} script is run. - -@table @samp -@item host -The canonical configuration name of the host. This will normally be -determined by running the @file{config.guess} shell script, although the -user is permitted to override this by using an explicit @samp{--host} -option. -@item host_alias -In the unusual case that the user used an explicit @samp{--host} option, -this will be the argument to @samp{--host}. In the normal case, this -will be the same as the @samp{host} variable. -@item host_cpu -@itemx host_vendor -@itemx host_os -The first three parts of the canonical configuration name. -@end table - -The shell variables may be used by putting shell code in -@file{configure.in}. For an example, see @ref{Using Configuration -Names}. - -@node Specifying the Target -@section Specifying the Target - -By default, the @samp{configure} script will assume that the target is -the same as the host. This is the more common case; for example, it -leads to a native compiler rather than a cross compiler. - -@cindex @samp{--target} option -@cindex target option -@cindex configure target -If you want to build a cross compilation tool, you must specify the -target explicitly by using the @samp{--target} option when you run -@samp{configure}. The argument to @samp{--target} is the configuration -name of the system for which you wish to generate code. -@xref{Configuration Names}. - -For example, to build tools which generate code for a MIPS ELF embedded -system, you would use @samp{--target mips-elf}. - -@node Using the Target Type -@section Using the Target Type - -@cindex @samp{AC_CANONICAL_SYSTEM} -When writing @file{configure.in} for a cross compilation tool, you will -need to use information about the target. To do this, put -@samp{AC_CANONICAL_SYSTEM} in @file{configure.in}. - -@samp{AC_CANONICAL_SYSTEM} will look for a @samp{--target} option and -canonicalize it using the @file{config.sub} shell script. It will also -run @samp{AC_CANONICAL_HOST} (@pxref{Using the Host Type}). - -The target type will be recorded in the following shell variables. Note -that the host versions of these variables will also be defined by -@samp{AC_CANONICAL_HOST}. - -@table @samp -@item target -The canonical configuration name of the target. -@item target_alias -The argument to the @samp{--target} option. If the user did not specify -a @samp{--target} option, this will be the same as @samp{host_alias}. -@item target_cpu -@itemx target_vendor -@itemx target_os -The first three parts of the canonical target configuration name. -@end table - -Note that if @samp{host} and @samp{target} are the same string, you can -assume a native configuration. If they are different, you can assume a -cross configuration. - -It is arguably possible for @samp{host} and @samp{target} to represent -the same system, but for the strings to not be identical. For example, -if @samp{config.guess} returns @samp{sparc-sun-sunos4.1.4}, and somebody -configures with @samp{--target sparc-sun-sunos4.1}, then the slight -differences between the two versions of SunOS may be unimportant for -your tool. However, in the general case it can be quite difficult to -determine whether the differences between two configuration names are -significant or not. Therefore, by convention, if the user specifies a -@samp{--target} option without specifying a @samp{--host} option, it is -assumed that the user wants to configure a cross compilation tool. - -The variables @samp{target} and @samp{target_alias} should be handled -differently. - -In general, whenever the user may actually see a string, -@samp{target_alias} should be used. This includes anything which may -appear in the file system, such as a directory name or part of a tool -name. It also includes any tool output, unless it is clearly labelled -as the canonical target configuration name. This permits the user to -use the @samp{--target} option to specify how the tool will appear to -the outside world. - -On the other hand, when checking for characteristics of the target -system, @samp{target} should be used. This is because a wide variety of -@samp{--target} options may map into the same canonical configuration -name. You should not attempt to duplicate the canonicalization done by -@samp{config.sub} in your own code. - -By convention, cross tools are installed with a prefix of the argument -used with the @samp{--target} option, also known as @samp{target_alias} -(@pxref{Using the Target Type}). If the user does not use the -@samp{--target} option, and thus is building a native tool, no prefix is -used. - -For example, if gcc is configured with @samp{--target mips-elf}, then -the installed binary will be named @samp{mips-elf-gcc}. If gcc is -configured without a @samp{--target} option, then the installed binary -will be named @samp{gcc}. - -The autoconf macro @samp{AC_ARG_PROGRAM} will handle this for you. If -you are using automake, no more need be done; the programs will -automatically be installed with the correct prefixes. Otherwise, see -the autoconf documentation for @samp{AC_ARG_PROGRAM}. - -@node Cross Tools in the Cygnus Tree -@section Cross Tools in the Cygnus Tree - -The Cygnus tree is used for various packages including gdb, the GNU -binutils, and egcs. It is also, of course, used for Cygnus releases. - -In the Cygnus tree, the top level @file{configure} script uses the old -Cygnus configure system, not autoconf. The top level @file{Makefile.in} -is written to build packages based on what is in the source tree, and -supports building a large number of tools in a single -@samp{configure}/@samp{make} step. - -The Cygnus tree may be configured with a @samp{--target} option. The -@samp{--target} option applies recursively to every subdirectory, and -permits building an entire set of cross tools at once. - -@menu -* Host and Target Libraries:: Host and Target Libraries. -* Target Library Configure Scripts:: Target Library Configure Scripts. -* Make Targets in Cygnus Tree:: Make Targets in Cygnus Tree. -* Target libiberty:: Target libiberty -@end menu - -@node Host and Target Libraries -@subsection Host and Target Libraries - -The Cygnus tree distinguishes host libraries from target libraries. - -Host libraries are built with the compiler used to build the programs -which run on the host, which is called the host compiler. This includes -libraries such as @samp{bfd} and @samp{tcl}. These libraries are built -with the host compiler, and are linked into programs like the binutils -or gcc which run on the host. - -Target libraries are built with the target compiler. If gcc is present -in the source tree, then the target compiler is the gcc that is built -using the host compiler. Target libraries are libraries such as -@samp{newlib} and @samp{libstdc++}. These libraries are not linked into -the host programs, but are instead made available for use with programs -built with the target compiler. - -For the rest of this section, assume that gcc is present in the source -tree, so that it will be used to build the target libraries. - -There is a complication here. The configure process needs to know which -compiler you are going to use to build a tool; otherwise, the feature -tests will not work correctly. The Cygnus tree handles this by not -configuring the target libraries until the target compiler is built. In -order to permit everything to build using a single -@samp{configure}/@samp{make}, the configuration of the target libraries -is actually triggered during the make step. - -When the target libraries are configured, the @samp{--target} option is -not used. Instead, the @samp{--host} option is used with the argument -of the @samp{--target} option for the overall configuration. If no -@samp{--target} option was used for the overall configuration, the -@samp{--host} option will be passed with the output of the -@file{config.guess} shell script. Any @samp{--build} option is passed -down unchanged. - -This translation of configuration options is done because since the -target libraries are compiled with the target compiler, they are being -built in order to run on the target of the overall configuration. By -the definition of host, this means that their host system is the same as -the target system of the overall configuration. - -The same process is used for both a native configuration and a cross -configuration. Even when using a native configuration, the target -libraries will be configured and built using the newly built compiler. -This is particularly important for the C++ libraries, since there is no -reason to assume that the C++ compiler used to build the host tools (if -there even is one) uses the same ABI as the g++ compiler which will be -used to build the target libraries. - -There is one difference between a native configuration and a cross -configuration. In a native configuration, the target libraries are -normally configured and built as siblings of the host tools. In a cross -configuration, the target libraries are normally built in a subdirectory -whose name is the argument to @samp{--target}. This is mainly for -historical reasons. - -To summarize, running @samp{configure} in the Cygnus tree configures all -the host libraries and tools, but does not configure any of the target -libraries. Running @samp{make} then does the following steps: - -@itemize @bullet -@item -Build the host libraries. -@item -Build the host programs, including gcc. Note that we call gcc both a -host program (since it runs on the host) and a target compiler (since it -generates code for the target). -@item -Using the newly built target compiler, configure the target libraries. -@item -Build the target libraries. -@end itemize - -The steps need not be done in precisely this order, since they are -actually controlled by @file{Makefile} targets. - -@node Target Library Configure Scripts -@subsection Target Library Configure Scripts - -There are a few things you must know in order to write a configure -script for a target library. This is just a quick sketch, and beginners -shouldn't worry if they don't follow everything here. - -The target libraries are configured and built using a newly built target -compiler. There may not be any startup files or libraries for this -target compiler. In fact, those files will probably be built as part of -some target library, which naturally means that they will not exist when -your target library is configured. - -This means that the configure script for a target library may not use -any test which requires doing a link. This unfortunately includes many -useful autoconf macros, such as @samp{AC_CHECK_FUNCS}. autoconf macros -which do a compile but not a link, such as @samp{AC_CHECK_HEADERS}, may -be used. - -This is a severe restriction, but normally not a fatal one, as target -libraries can often assume the presence of other target libraries, and -thus know which functions will be available. - -As of this writing, the autoconf macro @samp{AC_PROG_CC} does a link to -make sure that the compiler works. This may fail in a target library, -so target libraries must use a different set of macros to locate the -compiler. See the @file{configure.in} file in a directory like -@file{libiberty} or @file{libgloss} for an example. - -As noted in the previous section, target libraries are sometimes built -in directories which are siblings to the host tools, and are sometimes -built in a subdirectory. The @samp{--with-target-subdir} configure -option will be passed when the library is configured. Its value will be -an empty string if the target library is a sibling. Its value will be -the name of the subdirectory if the target library is in a subdirectory. - -If the overall build is not a native build (i.e., the overall configure -used the @samp{--target} option), then the library will be configured -with the @samp{--with-cross-host} option. The value of this option will -be the host system of the overall build. Recall that the host system of -the library will be the target of the overall build. If the overall -build is a native build, the @samp{--with-cross-host} option will not be -used. - -A library which can be built both standalone and as a target library may -want to install itself into different directories depending upon the -case. When built standalone, or when built native, the library should -be installed in @samp{$(libdir)}. When built as a target library which -is not native, the library should be installed in @samp{$(tooldir)/lib}. -The @samp{--with-cross-host} option may be used to distinguish these -cases. - -This same test of @samp{--with-cross-host} may be used to see whether it -is OK to use link tests in the configure script. If the -@samp{--with-cross-host} option is not used, then the library is being -built either standalone or native, and a link should work. - -@node Make Targets in Cygnus Tree -@subsection Make Targets in Cygnus Tree - -The top level @file{Makefile} in the Cygnus tree defines targets for -every known subdirectory. - -For every subdirectory @var{dir} which holds a host library or program, -the @file{Makefile} target @samp{all-@var{dir}} will build that library -or program. - -There are dependencies among host tools. For example, building gcc -requires first building gas, because the gcc build process invokes the -target assembler. These dependencies are reflected in the top level -@file{Makefile}. - -For every subdirectory @var{dir} which holds a target library, the -@file{Makefile} target @samp{configure-target-@var{dir}} will configure -that library. The @file{Makefile} target @samp{all-target-@var{dir}} -will build that library. - -Every @samp{configure-target-@var{dir}} target depends upon -@samp{all-gcc}, since gcc, the target compiler, is required to configure -the tool. Every @samp{all-target-@var{dir}} target depends upon the -corresponding @samp{configure-target-@var{dir}} target. - -There are several other targets which may be of interest for each -directory: @samp{install-@var{dir}}, @samp{clean-@var{dir}}, and -@samp{check-@var{dir}}. There are also corresponding @samp{target} -versions of these for the target libraries , such as -@samp{install-target-@var{dir}}. - -@node Target libiberty -@subsection Target libiberty - -The @file{libiberty} subdirectory is currently a special case, in that -it is the only directory which is built both using the host compiler and -using the target compiler. - -This is because the files in @file{libiberty} are used when building the -host tools, and they are also incorporated into the @file{libstdc++} -target library as support code. - -This duality does not pose any particular difficulties. It means that -there are targets for both @samp{all-libiberty} and -@samp{all-target-libiberty}. - -In a native configuration, when target libraries are not built in a -subdirectory, the same objects are normally used as both the host build -and the target build. This is normally OK, since libiberty contains -only C code, and in a native configuration the results of the host -compiler and the target compiler are normally interoperable. - -Irix 6 is again an exception here, since the SGI native compiler -defaults to using the @samp{O32} ABI, and gcc defaults to using the -@samp{N32} ABI. On Irix 6, the target libraries are built in a -subdirectory even for a native configuration, avoiding this problem. - -There are currently no other libraries built for both the host and the -target, but there is no conceptual problem with adding more. - -@node Canadian Cross -@chapter Canadian Cross -@cindex canadian cross -@cindex building with a cross compiler -@cindex cross compiler, building with - -It is possible to use the GNU configure and build system to build a -program which will run on a system which is different from the system on -which the tools are built. In other words, it is possible to build -programs using a cross compiler. - -This is referred to as a @dfn{Canadian Cross}. - -@menu -* Canadian Cross Example:: Canadian Cross Example. -* Canadian Cross Concepts:: Canadian Cross Concepts. -* Build Cross Host Tools:: Build Cross Host Tools. -* Build and Host Options:: Build and Host Options. -* CCross not in Cygnus Tree:: Canadian Cross not in Cygnus Tree. -* CCross in Cygnus Tree:: Canadian Cross in Cygnus Tree. -* Supporting Canadian Cross:: Supporting Canadian Cross. -@end menu - -@node Canadian Cross Example -@section Canadian Cross Example - -Here is an example of a Canadian Cross. - -While running on a GNU/Linux, you can build a program which will run on -a Solaris system. You would use a GNU/Linux cross Solaris compiler to -build the program. - -Of course, you could not run the resulting program on your GNU/Linux -system. You would have to copy it over to a Solaris system before you -would run it. - -Of course, you could also simply build the programs on the Solaris -system in the first place. However, perhaps the Solaris system is not -available for some reason; perhaps you actually don't have one, but you -want to build the tools for somebody else to use. Or perhaps your -GNU/Linux system is much faster than your Solaris system. - -A Canadian Cross build is most frequently used when building programs to -run on a non-Unix system, such as DOS or Windows. It may be simpler to -configure and build on a Unix system than to support the configuration -machinery on a non-Unix system. - -@node Canadian Cross Concepts -@section Canadian Cross Concepts - -When building a Canadian Cross, there are at least two different systems -involved: the system on which the tools are being built, and the system -on which the tools will run. - -The system on which the tools are being built is called the @dfn{build} -system. - -The system on which the tools will run is called the host system. - -For example, if you are building a Solaris program on a GNU/Linux -system, as in the previous section, the build system would be GNU/Linux, -and the host system would be Solaris. - -It is, of course, possible to build a cross compiler using a Canadian -Cross (i.e., build a cross compiler using a cross compiler). In this -case, the system for which the resulting cross compiler generates code -is called the target system. (For a more complete discussion of host -and target systems, @pxref{Host and Target}). - -An example of building a cross compiler using a Canadian Cross would be -building a Windows cross MIPS ELF compiler on a GNU/Linux system. In -this case the build system would be GNU/Linux, the host system would be -Windows, and the target system would be MIPS ELF. - -The name Canadian Cross comes from the case when the build, host, and -target systems are all different. At the time that these issues were -all being hashed out, Canada had three national political parties. - -@node Build Cross Host Tools -@section Build Cross Host Tools - -In order to configure a program for a Canadian Cross build, you must -first build and install the set of cross tools you will use to build the -program. - -These tools will be build cross host tools. That is, they will run on -the build system, and will produce code that runs on the host system. - -It is easy to confuse the meaning of build and host here. Always -remember that the build system is where you are doing the build, and the -host system is where the resulting program will run. Therefore, you -need a build cross host compiler. - -In general, you must have a complete cross environment in order to do -the build. This normally means a cross compiler, cross assembler, and -so forth, as well as libraries and include files for the host system. - -@node Build and Host Options -@section Build and Host Options -@cindex configuring a canadian cross -@cindex canadian cross, configuring - -When you run @file{configure}, you must use both the @samp{--build} and -@samp{--host} options. - -@cindex @samp{--build} option -@cindex build option -@cindex configure build system -The @samp{--build} option is used to specify the configuration name of -the build system. This can normally be the result of running the -@file{config.guess} shell script, and it is reasonable to use -@samp{--build=`config.guess`}. - -@cindex @samp{--host} option -@cindex host option -@cindex configure host -The @samp{--host} option is used to specify the configuration name of -the host system. - -As we explained earlier, @file{config.guess} is used to set the default -value for the @samp{--host} option (@pxref{Using the Host Type}). We -can now see that since @file{config.guess} returns the type of system on -which it is run, it really identifies the build system. Since the host -system is normally the same as the build system (i.e., people do not -normally build using a cross compiler), it is reasonable to use the -result of @file{config.guess} as the default for the host system when -the @samp{--host} option is not used. - -It might seem that if the @samp{--host} option were used without the -@samp{--build} option that the configure script could run -@file{config.guess} to determine the build system, and presume a -Canadian Cross if the result of @file{config.guess} differed from the -@samp{--host} option. However, for historical reasons, some configure -scripts are routinely run using an explicit @samp{--host} option, rather -than using the default from @file{config.guess}. As noted earlier, it -is difficult or impossible to reliably compare configuration names -(@pxref{Using the Target Type}). Therefore, by convention, if the -@samp{--host} option is used, but the @samp{--build} option is not used, -then the build system defaults to the host system. - -@node CCross not in Cygnus Tree -@section Canadian Cross not in Cygnus Tree. - -If you are not using the Cygnus tree, you must explicitly specify the -cross tools which you want to use to build the program. This is done by -setting environment variables before running the @file{configure} -script. - -You must normally set at least the environment variables @samp{CC}, -@samp{AR}, and @samp{RANLIB} to the cross tools which you want to use to -build. - -For some programs, you must set additional cross tools as well, such as -@samp{AS}, @samp{LD}, or @samp{NM}. - -You would set these environment variables to the build cross tools which -you are going to use. - -For example, if you are building a Solaris program on a GNU/Linux -system, and your GNU/Linux cross Solaris compiler were named -@samp{solaris-gcc}, then you would set the environment variable -@samp{CC} to @samp{solaris-gcc}. - -@node CCross in Cygnus Tree -@section Canadian Cross in Cygnus Tree -@cindex canadian cross in cygnus tree - -This section describes configuring and building a Canadian Cross when -using the Cygnus tree. - -@menu -* Standard Cygnus CCross:: Building a Normal Program. -* Cross Cygnus CCross:: Building a Cross Program. -@end menu - -@node Standard Cygnus CCross -@subsection Building a Normal Program - -When configuring a Canadian Cross in the Cygnus tree, all the -appropriate environment variables are automatically set to -@samp{@var{host}-@var{tool}}, where @var{host} is the value used for the -@samp{--host} option, and @var{tool} is the name of the tool (e.g., -@samp{gcc}, @samp{as}, etc.). These tools must be on your @samp{PATH}. - -Adding a prefix of @var{host} will give the usual name for the build -cross host tools. To see this, consider that when these cross tools -were built, they were configured to run on the build system and to -produce code for the host system. That is, they were configured with a -@samp{--target} option that is the same as the system which we are now -calling the host. Recall that the default name for installed cross -tools uses the target system as a prefix (@pxref{Using the Target -Type}). Since that is the system which we are now calling the host, -@var{host} is the right prefix to use. - -For example, if you configure with @samp{--build=i386-linux-gnu} and -@samp{--host=solaris}, then the Cygnus tree will automatically default -to using the compiler @samp{solaris-gcc}. You must have previously -built and installed this compiler, probably by doing a build with no -@samp{--host} option and with a @samp{--target} option of -@samp{solaris}. - -@node Cross Cygnus CCross -@subsection Building a Cross Program - -There are additional considerations if you want to build a cross -compiler, rather than a native compiler, in the Cygnus tree using a -Canadian Cross. - -When you build a cross compiler using the Cygnus tree, then the target -libraries will normally be built with the newly built target compiler -(@pxref{Host and Target Libraries}). However, this will not work when -building with a Canadian Cross. This is because the newly built target -compiler will be a program which runs on the host system, and therefore -will not be able to run on the build system. - -Therefore, when building a cross compiler with the Cygnus tree, you must -first install a set of build cross target tools. These tools will be -used when building the target libraries. - -Note that this is not a requirement of a Canadian Cross in general. For -example, it would be possible to build just the host cross target tools -on the build system, to copy the tools to the host system, and to build -the target libraries on the host system. The requirement for build -cross target tools is imposed by the Cygnus tree, which expects to be -able to build both host programs and target libraries in a single -@samp{configure}/@samp{make} step. Because it builds these in a single -step, it expects to be able to build the target libraries on the build -system, which means that it must use a build cross target toolchain. - -For example, suppose you want to build a Windows cross MIPS ELF compiler -on a GNU/Linux system. You must have previously installed both a -GNU/Linux cross Windows compiler and a GNU/Linux cross MIPS ELF -compiler. - -In order to build the Windows (configuration name @samp{i386-cygwin32}) -cross MIPS ELF (configure name @samp{mips-elf}) compiler, you might -execute the following commands (long command lines are broken across -lines with a trailing backslash as a continuation character). - -@example -mkdir linux-x-cygwin32 -cd linux-x-cygwin32 -@var{srcdir}/configure --target i386-cygwin32 --prefix=@var{installdir} \ - --exec-prefix=@var{installdir}/H-i386-linux -make -make install -cd .. -mkdir linux-x-mips-elf -cd linux-x-mips-elf -@var{srcdir}/configure --target mips-elf --prefix=@var{installdir} \ - --exec-prefix=@var{installdir}/H-i386-linux -make -make install -cd .. -mkdir cygwin32-x-mips-elf -cd cygwin32-x-mips-elf -@var{srcdir}/configure --build=i386-linux-gnu --host=i386-cygwin32 \ - --target=mips-elf --prefix=@var{wininstalldir} \ - --exec-prefix=@var{wininstalldir}/H-i386-cygwin32 -make -make install -@end example - -You would then copy the contents of @var{wininstalldir} over to the -Windows machine, and run the resulting programs. - -@node Supporting Canadian Cross -@section Supporting Canadian Cross - -If you want to make it possible to build a program you are developing -using a Canadian Cross, you must take some care when writing your -configure and make rules. Simple cases will normally work correctly. -However, it is not hard to write configure and make tests which will -fail in a Canadian Cross. - -@menu -* CCross in Configure:: Supporting Canadian Cross in Configure Scripts. -* CCross in Make:: Supporting Canadian Cross in Makefiles. -@end menu - -@node CCross in Configure -@subsection Supporting Canadian Cross in Configure Scripts -@cindex canadian cross in configure - -In a @file{configure.in} file, after calling @samp{AC_PROG_CC}, you can -find out whether this is a Canadian Cross configure by examining the -shell variable @samp{cross_compiling}. In a Canadian Cross, which means -that the compiler is a cross compiler, @samp{cross_compiling} will be -@samp{yes}. In a normal configuration, @samp{cross_compiling} will be -@samp{no}. - -You ordinarily do not need to know the type of the build system in a -configure script. However, if you do need that information, you can get -it by using the macro @samp{AC_CANONICAL_SYSTEM}, the same macro that is -used to determine the target system. This macro will set the variables -@samp{build}, @samp{build_alias}, @samp{build_cpu}, @samp{build_vendor}, -and @samp{build_os}, which correspond to the similar @samp{target} and -@samp{host} variables, except that they describe the build system. - -When writing tests in @file{configure.in}, you must remember that you -want to test the host environment, not the build environment. - -Macros like @samp{AC_CHECK_FUNCS} which use the compiler will test the -host environment. That is because the tests will be done by running the -compiler, which is actually a build cross host compiler. If the -compiler can find the function, that means that the function is present -in the host environment. - -Tests like @samp{test -f /dev/ptyp0}, on the other hand, will test the -build environment. Remember that the configure script is running on the -build system, not the host system. If your configure scripts examines -files, those files will be on the build system. Whatever you determine -based on those files may or may not be the case on the host system. - -Most autoconf macros will work correctly for a Canadian Cross. The main -exception is @samp{AC_TRY_RUN}. This macro tries to compile and run a -test program. This will fail in a Canadian Cross, because the program -will be compiled for the host system, which means that it will not run -on the build system. - -The @samp{AC_TRY_RUN} macro provides an optional argument to tell the -configure script what to do in a Canadian Cross. If that argument is -not present, you will get a warning when you run @samp{autoconf}: -@smallexample -warning: AC_TRY_RUN called without default to allow cross compiling -@end smallexample -@noindent -This tells you that the resulting @file{configure} script will not work -with a Canadian Cross. - -In some cases while it may better to perform a test at configure time, -it is also possible to perform the test at run time. In such a case you -can use the cross compiling argument to @samp{AC_TRY_RUN} to tell your -program that the test could not be performed at configure time. - -There are a few other autoconf macros which will not work correctly with -a Canadian Cross: a partial list is @samp{AC_FUNC_GETPGRP}, -@samp{AC_FUNC_SETPGRP}, @samp{AC_FUNC_SETVBUF_REVERSED}, and -@samp{AC_SYS_RESTARTABLE_SYSCALLS}. The @samp{AC_CHECK_SIZEOF} macro is -generally not very useful with a Canadian Cross; it permits an optional -argument indicating the default size, but there is no way to know what -the correct default should be. - -@node CCross in Make -@subsection Supporting Canadian Cross in Makefiles. -@cindex canadian cross in makefile - -The main Canadian Cross issue in a @file{Makefile} arises when you want -to use a subsidiary program to generate code or data which you will then -include in your real program. - -If you compile this subsidiary program using @samp{$(CC)} in the usual -way, you will not be able to run it. This is because @samp{$(CC)} will -build a program for the host system, but the program is being built on -the build system. - -You must instead use a compiler for the build system, rather than the -host system. In the Cygnus tree, this make variable -@samp{$(CC_FOR_BUILD)} will hold a compiler for the build system. - -Note that you should not include @file{config.h} in a file you are -compiling with @samp{$(CC_FOR_BUILD)}. The @file{configure} script will -build @file{config.h} with information for the host system. However, -you are compiling the file using a compiler for the build system (a -native compiler). Subsidiary programs are normally simple filters which -do no user interaction, and it is normally possible to write them in a -highly portable fashion so that the absence of @file{config.h} is not -crucial. - -@cindex @samp{HOST_CC} -The gcc @file{Makefile.in} shows a complex situation in which certain -files, such as @file{rtl.c}, must be compiled into both subsidiary -programs run on the build system and into the final program. This -approach may be of interest for advanced build system hackers. Note -that the build system compiler is rather confusingly called -@samp{HOST_CC}. - -@node Cygnus Configure -@chapter Cygnus Configure -@cindex cygnus configure - -The Cygnus configure script predates autoconf. All of its interesting -features have been incorporated into autoconf. No new programs should -be written to use the Cygnus configure script. - -However, the Cygnus configure script is still used in a few places: at -the top of the Cygnus tree and in a few target libraries in the Cygnus -tree. Until those uses have been replaced with autoconf, some brief -notes are appropriate here. This is not complete documentation, but it -should be possible to use this as a guide while examining the scripts -themselves. - -@menu -* Cygnus Configure Basics:: Cygnus Configure Basics. -* Cygnus Configure in C++ Libraries:: Cygnus Configure in C++ Libraries. -@end menu - -@node Cygnus Configure Basics -@section Cygnus Configure Basics - -Cygnus configure does not use any generated files; there is no program -corresponding to @samp{autoconf}. Instead, there is a single shell -script named @samp{configure} which may be found at the top of the -Cygnus tree. This shell script was written by hand; it was not -generated by autoconf, and it is incorrect, and indeed harmful, to run -@samp{autoconf} in the top level of a Cygnus tree. - -Cygnus configure works in a particular directory by examining the file -@file{configure.in} in that directory. That file is broken into four -separate shell scripts. - -The first is the contents of @file{configure.in} up to a line that -starts with @samp{# per-host:}. This is the common part. - -The second is the rest of @file{configure.in} up to a line that starts -with @samp{# per-target:}. This is the per host part. - -The third is the rest of @file{configure.in} up to a line that starts -with @samp{# post-target:}. This is the per target part. - -The fourth is the remainder of @file{configure.in}. This is the post -target part. - -If any of these comment lines are missing, the corresponding shell -script is empty. - -Cygnus configure will first execute the common part. This must set the -shell variable @samp{srctrigger} to the name of a source file, to -confirm that Cygnus configure is looking at the right directory. This -may set the shell variables @samp{package_makefile_frag} and -@samp{package_makefile_rules_frag}. - -Cygnus configure will next set the @samp{build} and @samp{host} shell -variables, and execute the per host part. This may set the shell -variable @samp{host_makefile_frag}. - -Cygnus configure will next set the @samp{target} variable, and execute -the per target part. This may set the shell variable -@samp{target_makefile_frag}. - -Any of these scripts may set the @samp{subdirs} shell variable. This -variable is a list of subdirectories where a @file{Makefile.in} file may -be found. Cygnus configure will automatically look for a -@file{Makefile.in} file in the current directory. The @samp{subdirs} -shell variable is not normally used, and I believe that the only -directory which uses it at present is @file{newlib}. - -For each @file{Makefile.in}, Cygnus configure will automatically create -a @file{Makefile} by adding definitions for @samp{make} variables such -as @samp{host} and @samp{target}, and automatically editing the values -of @samp{make} variables such as @samp{prefix} if they are present. - -Also, if any of the @samp{makefile_frag} shell variables are set, Cygnus -configure will interpret them as file names relative to either the -working directory or the source directory, and will read the contents of -the file into the generated @file{Makefile}. The file contents will be -read in after the first line in @file{Makefile.in} which starts with -@samp{####}. - -These @file{Makefile} fragments are used to customize behaviour for a -particular host or target. They serve to select particular files to -compile, and to define particular preprocessor macros by providing -values for @samp{make} variables which are then used during compilation. -Cygnus configure, unlike autoconf, normally does not do feature tests, -and normally requires support to be added manually for each new host. - -The @file{Makefile} fragment support is similar to the autoconf -@samp{AC_SUBST_FILE} macro. - -After creating each @file{Makefile}, the post target script will be run -(i.e., it may be run several times). This script may further customize -the @file{Makefile}. When it is run, the shell variable @samp{Makefile} -will hold the name of the @file{Makefile}, including the appropriate -directory component. - -Like an autoconf generated @file{configure} script, Cygnus configure -will create a file named @file{config.status} which, when run, will -automatically recreate the configuration. The @file{config.status} file -will simply execute the Cygnus configure script again with the -appropriate arguments. - -Any of the parts of @file{configure.in} may set the shell variables -@samp{files} and @samp{links}. Cygnus configure will set up symlinks -from the names in @samp{links} to the files named in @samp{files}. This -is similar to the autoconf @samp{AC_LINK_FILES} macro. - -Finally, any of the parts of @file{configure.in} may set the shell -variable @samp{configdirs} to a set of subdirectories. If it is set, -Cygnus configure will recursively run the configure process in each -subdirectory. If the subdirectory uses Cygnus configure, it will -contain a @file{configure.in} file but no @file{configure} file, in -which case Cygnus configure will invoke itself recursively. If the -subdirectory has a @file{configure} file, Cygnus configure assumes that -it is an autoconf generated @file{configure} script, and simply invokes -it directly. - -@node Cygnus Configure in C++ Libraries -@section Cygnus Configure in C++ Libraries -@cindex @file{libstdc++} configure -@cindex @file{libio} configure -@cindex @file{libg++} configure - -The C++ library configure system, written by Per Bothner, deserves -special mention. It uses Cygnus configure, but it does feature testing -like that done by autoconf generated @file{configure} scripts. This -approach is used in the libraries @file{libio}, @file{libstdc++}, and -@file{libg++}. - -Most of the @file{Makefile} information is written out by the shell -script @file{libio/config.shared}. Each @file{configure.in} file sets -certain shell variables, and then invokes @file{config.shared} to create -two package @file{Makefile} fragments. These fragments are then -incorporated into the resulting @file{Makefile} by the Cygnus configure -script. - -The file @file{_G_config.h} is created in the @file{libio} object -directory by running the shell script @file{libio/gen-params}. This -shell script uses feature tests to define macros and typedefs in -@file{_G_config.h}. - -@node Multilibs -@chapter Multilibs -@cindex multilibs - -For some targets gcc may have different processor requirements depending -upon command line options. An obvious example is the -@samp{-msoft-float} option supported on several processors. This option -means that the floating point registers are not available, which means -that floating point operations must be done by calling an emulation -subroutine rather than by using machine instructions. - -For such options, gcc is often configured to compile target libraries -twice: once with @samp{-msoft-float} and once without. When gcc -compiles target libraries more than once, the resulting libraries are -called @dfn{multilibs}. - -Multilibs are not really part of the GNU configure and build system, but -we discuss them here since they require support in the @file{configure} -scripts and @file{Makefile}s used for target libraries. - -@menu -* Multilibs in gcc:: Multilibs in gcc. -* Multilibs in Target Libraries:: Multilibs in Target Libraries. -@end menu - -@node Multilibs in gcc -@section Multilibs in gcc - -In gcc, multilibs are defined by setting the variable -@samp{MULTILIB_OPTIONS} in the target @file{Makefile} fragment. Several -other @samp{MULTILIB} variables may also be defined there. @xref{Target -Fragment, , The Target Makefile Fragment, gcc, Using and Porting GNU -CC}. - -If you have built gcc, you can see what multilibs it uses by running it -with the @samp{-print-multi-lib} option. The output @samp{.;} means -that no multilibs are used. In general, the output is a sequence of -lines, one per multilib. The first part of each line, up to the -@samp{;}, is the name of the multilib directory. The second part is a -list of compiler options separated by @samp{@@} characters. - -Multilibs are built in a tree of directories. The top of the tree, -represented by @samp{.} in the list of multilib directories, is the -default library to use when no special compiler options are used. The -subdirectories of the tree hold versions of the library to use when -particular compiler options are used. - -@node Multilibs in Target Libraries -@section Multilibs in Target Libraries - -The target libraries in the Cygnus tree are automatically built with -multilibs. That means that each library is built multiple times. - -This default is set in the top level @file{configure.in} file, by adding -@samp{--enable-multilib} to the list of arguments passed to configure -when it is run for the target libraries (@pxref{Host and Target -Libraries}). - -Each target library uses the shell script @file{config-ml.in}, written -by Doug Evans, to prepare to build target libraries. This shell script -is invoked after the @file{Makefile} has been created by the -@file{configure} script. If multilibs are not enabled, it does nothing, -otherwise it modifies the @file{Makefile} to support multilibs. - -The @file{config-ml.in} script makes one copy of the @file{Makefile} for -each multilib in the appropriate subdirectory. When configuring in the -source directory (which is not recommended), it will build a symlink -tree of the sources in each subdirectory. - -The @file{config-ml.in} script sets several variables in the various -@file{Makefile}s. The @file{Makefile.in} must have definitions for -these variables already; @file{config-ml.in} simply changes the existing -values. The @file{Makefile} should use default values for these -variables which will do the right thing in the subdirectories. - -@table @samp -@item MULTISRCTOP -@file{config-ml.in} will set this to a sequence of @samp{../} strings, -where the number of strings is the number of multilib levels in the -source tree. The default value should be the empty string. -@item MULTIBUILDTOP -@file{config-ml.in} will set this to a sequence of @samp{../} strings, -where the number of strings is number of multilib levels in the object -directory. The default value should be the empty string. This will -differ from @samp{MULTISRCTOP} when configuring in the source tree -(which is not recommended). -@item MULTIDIRS -In the top level @file{Makefile} only, @file{config-ml.in} will set this -to the list of multilib subdirectories. The default value should be the -empty string. -@item MULTISUBDIR -@file{config-ml.in} will set this to the installed subdirectory name to -use for this subdirectory, with a leading @samp{/}. The default value -shold be the empty string. -@item MULTIDO -@itemx MULTICLEAN -In the top level @file{Makefile} only, @file{config-ml.in} will set -these variables to commands to use when doing a recursive make. These -variables should both default to the string @samp{true}, so that by -default nothing happens. -@end table - -All references to the parent of the source directory should use the -variable @samp{MULTISRCTOP}. Instead of writing @samp{$(srcdir)/..}, -you must write @samp{$(srcdir)/$(MULTISRCTOP)..}. - -Similarly, references to the parent of the object directory should use -the variable @samp{MULTIBUILDTOP}. - -In the installation target, the libraries should be installed in the -subdirectory @samp{MULTISUBDIR}. Instead of installing -@samp{$(libdir)/libfoo.a}, install -@samp{$(libdir)$(MULTISUBDIR)/libfoo.a}. - -The @file{config-ml.in} script also modifies the top level -@file{Makefile} to add @samp{multi-do} and @samp{multi-clean} targets -which are used when building multilibs. - -The default target of the @file{Makefile} should include the following -command: -@smallexample -@@$(MULTIDO) $(FLAGS_TO_PASS) DO=all multi-do -@end smallexample -@noindent -This assumes that @samp{$(FLAGS_TO_PASS)} is defined as a set of -variables to pass to a recursive invocation of @samp{make}. This will -build all the multilibs. Note that the default value of @samp{MULTIDO} -is @samp{true}, so by default this command will do nothing. It will -only do something in the top level @file{Makefile} if multilibs were -enabled. - -The @samp{install} target of the @file{Makefile} should include the -following command: -@smallexample -@@$(MULTIDO) $(FLAGS_TO_PASS) DO=install multi-do -@end smallexample - -In general, any operation, other than clean, which should be performed -on all the multilibs should use a @samp{$(MULTIDO)} line, setting the -variable @samp{DO} to the target of each recursive call to @samp{make}. - -The @samp{clean} targets (@samp{clean}, @samp{mostlyclean}, etc.) should -use @samp{$(MULTICLEAN)}. For example, the @samp{clean} target should -do this: -@smallexample -@@$(MULTICLEAN) DO=clean multi-clean -@end smallexample - -@node FAQ -@chapter Frequently Asked Questions - -@table @asis -@item Which do I run first, @samp{autoconf} or @samp{automake}? -Except when you first add autoconf or automake support to a package, you -shouldn't run either by hand. Instead, configure with the -@samp{--enable-maintainer-mode} option, and let @samp{make} take care of -it. - -@cindex undefined macros -@item @samp{autoconf} says something about undefined macros. -This means that you have macros in your @file{configure.in} which are -not defined by @samp{autoconf}. You may be using an old version of -@samp{autoconf}; try building and installing a newer one. Make sure the -newly installled @samp{autoconf} is first on your @samp{PATH}. Also, -see the next question. - -@cindex @samp{CY_GNU_GETTEXT} in @file{configure} -@cindex @samp{AM_PROG_LIBTOOL} in @file{configure} -@item My @file{configure} script has stuff like @samp{CY_GNU_GETTEXT} in it. -This means that you have macros in your @file{configure.in} which should -be defined in your @file{aclocal.m4} file, but aren't. This usually -means that @samp{aclocal} was not able to appropriate definitions of the -macros. Make sure that you have installed all the packages you need. -In particular, make sure that you have installed libtool (this is where -@samp{AM_PROG_LIBTOOL} is defined) and gettext (this is where -@samp{CY_GNU_GETTEXT} is defined, at least in the Cygnus version of -gettext). - -@cindex @file{Makefile}, garbage characters -@item My @file{Makefile} has @samp{@@} characters in it. -This may mean that you tried to use an autoconf substitution in your -@file{Makefile.in} without adding the appropriate @samp{AC_SUBST} call -to your @file{configure} script. Or it may just mean that you need to -rebuild @file{Makefile} in your build directory. To rebuild -@file{Makefile} from @file{Makefile.in}, run the shell script -@file{config.status} with no arguments. If you need to force -@file{configure} to run again, first run @samp{config.status --recheck}. -These runs are normally done automatically by @file{Makefile} targets, -but if your @file{Makefile} has gotten messed up you'll need to help -them along. - -@cindex @samp{config.status --recheck} -@item Why do I have to run both @samp{config.status --recheck} and @samp{config.status}? -Normally, you don't; they will be run automatically by @file{Makefile} -targets. If you do need to run them, use @samp{config.status --recheck} -to run the @file{configure} script again with the same arguments as the -first time you ran it. Use @samp{config.status} (with no arguments) to -regenerate all files (@file{Makefile}, @file{config.h}, etc.) based on -the results of the configure script. The two cases are separate because -it isn't always necessary to regenerate all the files after running -@samp{config.status --recheck}. The @file{Makefile} targets generated -by automake will use the environment variables @samp{CONFIG_FILES} and -@samp{CONFIG_HEADERS} to only regenerate files as they are needed. - -@item What is the Cygnus tree? -The Cygnus tree is used for various packages including gdb, the GNU -binutils, and egcs. It is also, of course, used for Cygnus releases. -It is the build system which was developed at Cygnus, using the Cygnus -configure script. It permits building many different packages with a -single configure and make. The configure scripts in the tree are being -converted to autoconf, but the general build structure remains intact. - -@item Why do I have to keep rebuilding and reinstalling the tools? -I know, it's a pain. Unfortunately, there are bugs in the tools -themselves which need to be fixed, and each time that happens everybody -who uses the tools need to reinstall new versions of them. I don't know -if there is going to be a clever fix until the tools stabilize. - -@item Why not just have a Cygnus tree @samp{make} target to update the tools? -The tools unfortunately need to be installed before they can be used. -That means that they must be built using an appropriate prefix, and it -seems unwise to assume that every configuration uses an appropriate -prefix. It might be possible to make them work in place, or it might be -possible to install them in some subdirectory; so far these approaches -have not been implemented. -@end table - -@node Index -@unnumbered Index - -@printindex cp - -@contents -@bye diff --git a/contrib/binutils/etc/make-stds.texi b/contrib/binutils/etc/make-stds.texi deleted file mode 100644 index 250867adfcd4..000000000000 --- a/contrib/binutils/etc/make-stds.texi +++ /dev/null @@ -1,955 +0,0 @@ -@comment This file is included by both standards.texi and make.texinfo. -@comment It was broken out of standards.texi on 1/6/93 by roland. - -@node Makefile Conventions -@chapter Makefile Conventions -@comment standards.texi does not print an index, but make.texinfo does. -@cindex makefile, conventions for -@cindex conventions for makefiles -@cindex standards for makefiles - -@c Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001 Free -@c Software Foundation, Inc. - -@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 -@c Front-Cover Texts, and with no Back-Cover Texts. -@c A copy of the license is included in the section entitled ``GNU -@c Free Documentation License''. - -This -@ifinfo -node -@end ifinfo -@iftex -@ifset CODESTD -section -@end ifset -@ifclear CODESTD -chapter -@end ifclear -@end iftex -describes conventions for writing the Makefiles for GNU programs. -Using Automake will help you write a Makefile that follows these -conventions. - -@menu -* Makefile Basics:: General Conventions for Makefiles -* Utilities in Makefiles:: Utilities in Makefiles -* Command Variables:: Variables for Specifying Commands -* Directory Variables:: Variables for Installation Directories -* Standard Targets:: Standard Targets for Users -* Install Command Categories:: Three categories of commands in the `install' - rule: normal, pre-install and post-install. -@end menu - -@node Makefile Basics -@section General Conventions for Makefiles - -Every Makefile should contain this line: - -@example -SHELL = /bin/sh -@end example - -@noindent -to avoid trouble on systems where the @code{SHELL} variable might be -inherited from the environment. (This is never a problem with GNU -@code{make}.) - -Different @code{make} programs have incompatible suffix lists and -implicit rules, and this sometimes creates confusion or misbehavior. So -it is a good idea to set the suffix list explicitly using only the -suffixes you need in the particular Makefile, like this: - -@example -.SUFFIXES: -.SUFFIXES: .c .o -@end example - -@noindent -The first line clears out the suffix list, the second introduces all -suffixes which may be subject to implicit rules in this Makefile. - -Don't assume that @file{.} is in the path for command execution. When -you need to run programs that are a part of your package during the -make, please make sure that it uses @file{./} if the program is built as -part of the make or @file{$(srcdir)/} if the file is an unchanging part -of the source code. Without one of these prefixes, the current search -path is used. - -The distinction between @file{./} (the @dfn{build directory}) and -@file{$(srcdir)/} (the @dfn{source directory}) is important because -users can build in a separate directory using the @samp{--srcdir} option -to @file{configure}. A rule of the form: - -@smallexample -foo.1 : foo.man sedscript - sed -e sedscript foo.man > foo.1 -@end smallexample - -@noindent -will fail when the build directory is not the source directory, because -@file{foo.man} and @file{sedscript} are in the source directory. - -When using GNU @code{make}, relying on @samp{VPATH} to find the source -file will work in the case where there is a single dependency file, -since the @code{make} automatic variable @samp{$<} will represent the -source file wherever it is. (Many versions of @code{make} set @samp{$<} -only in implicit rules.) A Makefile target like - -@smallexample -foo.o : bar.c - $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o -@end smallexample - -@noindent -should instead be written as - -@smallexample -foo.o : bar.c - $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@@ -@end smallexample - -@noindent -in order to allow @samp{VPATH} to work correctly. When the target has -multiple dependencies, using an explicit @samp{$(srcdir)} is the easiest -way to make the rule work well. For example, the target above for -@file{foo.1} is best written as: - -@smallexample -foo.1 : foo.man sedscript - sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@@ -@end smallexample - -GNU distributions usually contain some files which are not source -files---for example, Info files, and the output from Autoconf, Automake, -Bison or Flex. Since these files normally appear in the source -directory, they should always appear in the source directory, not in the -build directory. So Makefile rules to update them should put the -updated files in the source directory. - -However, if a file does not appear in the distribution, then the -Makefile should not put it in the source directory, because building a -program in ordinary circumstances should not modify the source directory -in any way. - -Try to make the build and installation targets, at least (and all their -subtargets) work correctly with a parallel @code{make}. - -@node Utilities in Makefiles -@section Utilities in Makefiles - -Write the Makefile commands (and any shell scripts, such as -@code{configure}) to run in @code{sh}, not in @code{csh}. Don't use any -special features of @code{ksh} or @code{bash}. - -The @code{configure} script and the Makefile rules for building and -installation should not use any utilities directly except these: - -@c dd find -@c gunzip gzip md5sum -@c mkfifo mknod tee uname - -@example -cat cmp cp diff echo egrep expr false grep install-info -ln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch true -@end example - -The compression program @code{gzip} can be used in the @code{dist} rule. - -Stick to the generally supported options for these programs. For -example, don't use @samp{mkdir -p}, convenient as it may be, because -most systems don't support it. - -It is a good idea to avoid creating symbolic links in makefiles, since a -few systems don't support them. - -The Makefile rules for building and installation can also use compilers -and related programs, but should do so via @code{make} variables so that the -user can substitute alternatives. Here are some of the programs we -mean: - -@example -ar bison cc flex install ld ldconfig lex -make makeinfo ranlib texi2dvi yacc -@end example - -Use the following @code{make} variables to run those programs: - -@example -$(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX) -$(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC) -@end example - -When you use @code{ranlib} or @code{ldconfig}, you should make sure -nothing bad happens if the system does not have the program in question. -Arrange to ignore an error from that command, and print a message before -the command to tell the user that failure of this command does not mean -a problem. (The Autoconf @samp{AC_PROG_RANLIB} macro can help with -this.) - -If you use symbolic links, you should implement a fallback for systems -that don't have symbolic links. - -Additional utilities that can be used via Make variables are: - -@example -chgrp chmod chown mknod -@end example - -It is ok to use other utilities in Makefile portions (or scripts) -intended only for particular systems where you know those utilities -exist. - -@node Command Variables -@section Variables for Specifying Commands - -Makefiles should provide variables for overriding certain commands, options, -and so on. - -In particular, you should run most utility programs via variables. -Thus, if you use Bison, have a variable named @code{BISON} whose default -value is set with @samp{BISON = bison}, and refer to it with -@code{$(BISON)} whenever you need to use Bison. - -File management utilities such as @code{ln}, @code{rm}, @code{mv}, and -so on, need not be referred to through variables in this way, since users -don't need to replace them with other programs. - -Each program-name variable should come with an options variable that is -used to supply options to the program. Append @samp{FLAGS} to the -program-name variable name to get the options variable name---for -example, @code{BISONFLAGS}. (The names @code{CFLAGS} for the C -compiler, @code{YFLAGS} for yacc, and @code{LFLAGS} for lex, are -exceptions to this rule, but we keep them because they are standard.) -Use @code{CPPFLAGS} in any compilation command that runs the -preprocessor, and use @code{LDFLAGS} in any compilation command that -does linking as well as in any direct use of @code{ld}. - -If there are C compiler options that @emph{must} be used for proper -compilation of certain files, do not include them in @code{CFLAGS}. -Users expect to be able to specify @code{CFLAGS} freely themselves. -Instead, arrange to pass the necessary options to the C compiler -independently of @code{CFLAGS}, by writing them explicitly in the -compilation commands or by defining an implicit rule, like this: - -@smallexample -CFLAGS = -g -ALL_CFLAGS = -I. $(CFLAGS) -.c.o: - $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< -@end smallexample - -Do include the @samp{-g} option in @code{CFLAGS}, because that is not -@emph{required} for proper compilation. You can consider it a default -that is only recommended. If the package is set up so that it is -compiled with GCC by default, then you might as well include @samp{-O} -in the default value of @code{CFLAGS} as well. - -Put @code{CFLAGS} last in the compilation command, after other variables -containing compiler options, so the user can use @code{CFLAGS} to -override the others. - -@code{CFLAGS} should be used in every invocation of the C compiler, -both those which do compilation and those which do linking. - -Every Makefile should define the variable @code{INSTALL}, which is the -basic command for installing a file into the system. - -Every Makefile should also define the variables @code{INSTALL_PROGRAM} -and @code{INSTALL_DATA}. (The default for @code{INSTALL_PROGRAM} should -be @code{$(INSTALL)}; the default for @code{INSTALL_DATA} should be -@code{$@{INSTALL@} -m 644}.) Then it should use those variables as the -commands for actual installation, for executables and nonexecutables -respectively. Use these variables as follows: - -@example -$(INSTALL_PROGRAM) foo $(bindir)/foo -$(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a -@end example - -Optionally, you may prepend the value of @code{DESTDIR} to the target -filename. Doing this allows the installer to create a snapshot of the -installation to be copied onto the real target filesystem later. Do not -set the value of @code{DESTDIR} in your Makefile, and do not include it -in any installed files. With support for @code{DESTDIR}, the above -examples become: - -@example -$(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo -$(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a -@end example - -@noindent -Always use a file name, not a directory name, as the second argument of -the installation commands. Use a separate command for each file to be -installed. - -@node Directory Variables -@section Variables for Installation Directories - -Installation directories should always be named by variables, so it is -easy to install in a nonstandard place. The standard names for these -variables are described below. They are based on a standard filesystem -layout; variants of it are used in SVR4, 4.4BSD, GNU/Linux, Ultrix v4, -and other modern operating systems. - -These two variables set the root for the installation. All the other -installation directories should be subdirectories of one of these two, -and nothing should be directly installed into these two directories. - -@table @code -@item prefix -@vindex prefix -A prefix used in constructing the default values of the variables listed -below. The default value of @code{prefix} should be @file{/usr/local}. -When building the complete GNU system, the prefix will be empty and -@file{/usr} will be a symbolic link to @file{/}. -(If you are using Autoconf, write it as @samp{@@prefix@@}.) - -Running @samp{make install} with a different value of @code{prefix} from -the one used to build the program should @emph{not} recompile the -program. - -@item exec_prefix -@vindex exec_prefix -A prefix used in constructing the default values of some of the -variables listed below. The default value of @code{exec_prefix} should -be @code{$(prefix)}. -(If you are using Autoconf, write it as @samp{@@exec_prefix@@}.) - -Generally, @code{$(exec_prefix)} is used for directories that contain -machine-specific files (such as executables and subroutine libraries), -while @code{$(prefix)} is used directly for other directories. - -Running @samp{make install} with a different value of @code{exec_prefix} -from the one used to build the program should @emph{not} recompile the -program. -@end table - -Executable programs are installed in one of the following directories. - -@table @code -@item bindir -@vindex bindir -The directory for installing executable programs that users can run. -This should normally be @file{/usr/local/bin}, but write it as -@file{$(exec_prefix)/bin}. -(If you are using Autoconf, write it as @samp{@@bindir@@}.) - -@item sbindir -@vindex sbindir -The directory for installing executable programs that can be run from -the shell, but are only generally useful to system administrators. This -should normally be @file{/usr/local/sbin}, but write it as -@file{$(exec_prefix)/sbin}. -(If you are using Autoconf, write it as @samp{@@sbindir@@}.) - -@item libexecdir -@vindex libexecdir -@comment This paragraph adjusted to avoid overfull hbox --roland 5jul94 -The directory for installing executable programs to be run by other -programs rather than by users. This directory should normally be -@file{/usr/local/libexec}, but write it as @file{$(exec_prefix)/libexec}. -(If you are using Autoconf, write it as @samp{@@libexecdir@@}.) -@end table - -Data files used by the program during its execution are divided into -categories in two ways. - -@itemize @bullet -@item -Some files are normally modified by programs; others are never normally -modified (though users may edit some of these). - -@item -Some files are architecture-independent and can be shared by all -machines at a site; some are architecture-dependent and can be shared -only by machines of the same kind and operating system; others may never -be shared between two machines. -@end itemize - -This makes for six different possibilities. However, we want to -discourage the use of architecture-dependent files, aside from object -files and libraries. It is much cleaner to make other data files -architecture-independent, and it is generally not hard. - -Therefore, here are the variables Makefiles should use to specify -directories: - -@table @samp -@item datadir -The directory for installing read-only architecture independent data -files. This should normally be @file{/usr/local/share}, but write it as -@file{$(prefix)/share}. -(If you are using Autoconf, write it as @samp{@@datadir@@}.) -As a special exception, see @file{$(infodir)} -and @file{$(includedir)} below. - -@item sysconfdir -The directory for installing read-only data files that pertain to a -single machine--that is to say, files for configuring a host. Mailer -and network configuration files, @file{/etc/passwd}, and so forth belong -here. All the files in this directory should be ordinary ASCII text -files. This directory should normally be @file{/usr/local/etc}, but -write it as @file{$(prefix)/etc}. -(If you are using Autoconf, write it as @samp{@@sysconfdir@@}.) - -Do not install executables here in this directory (they probably belong -in @file{$(libexecdir)} or @file{$(sbindir)}). Also do not install -files that are modified in the normal course of their use (programs -whose purpose is to change the configuration of the system excluded). -Those probably belong in @file{$(localstatedir)}. - -@item sharedstatedir -The directory for installing architecture-independent data files which -the programs modify while they run. This should normally be -@file{/usr/local/com}, but write it as @file{$(prefix)/com}. -(If you are using Autoconf, write it as @samp{@@sharedstatedir@@}.) - -@item localstatedir -The directory for installing data files which the programs modify while -they run, and that pertain to one specific machine. Users should never -need to modify files in this directory to configure the package's -operation; put such configuration information in separate files that go -in @file{$(datadir)} or @file{$(sysconfdir)}. @file{$(localstatedir)} -should normally be @file{/usr/local/var}, but write it as -@file{$(prefix)/var}. -(If you are using Autoconf, write it as @samp{@@localstatedir@@}.) - -@item libdir -The directory for object files and libraries of object code. Do not -install executables here, they probably ought to go in @file{$(libexecdir)} -instead. The value of @code{libdir} should normally be -@file{/usr/local/lib}, but write it as @file{$(exec_prefix)/lib}. -(If you are using Autoconf, write it as @samp{@@libdir@@}.) - -@item infodir -The directory for installing the Info files for this package. By -default, it should be @file{/usr/local/info}, but it should be written -as @file{$(prefix)/info}. -(If you are using Autoconf, write it as @samp{@@infodir@@}.) - -@item lispdir -The directory for installing any Emacs Lisp files in this package. By -default, it should be @file{/usr/local/share/emacs/site-lisp}, but it -should be written as @file{$(prefix)/share/emacs/site-lisp}. - -If you are using Autoconf, write the default as @samp{@@lispdir@@}. -In order to make @samp{@@lispdir@@} work, you need the following lines -in your @file{configure.in} file: - -@example -lispdir='$@{datadir@}/emacs/site-lisp' -AC_SUBST(lispdir) -@end example - -@item includedir -@c rewritten to avoid overfull hbox --roland -The directory for installing header files to be included by user -programs with the C @samp{#include} preprocessor directive. This -should normally be @file{/usr/local/include}, but write it as -@file{$(prefix)/include}. -(If you are using Autoconf, write it as @samp{@@includedir@@}.) - -Most compilers other than GCC do not look for header files in directory -@file{/usr/local/include}. So installing the header files this way is -only useful with GCC. Sometimes this is not a problem because some -libraries are only really intended to work with GCC. But some libraries -are intended to work with other compilers. They should install their -header files in two places, one specified by @code{includedir} and one -specified by @code{oldincludedir}. - -@item oldincludedir -The directory for installing @samp{#include} header files for use with -compilers other than GCC. This should normally be @file{/usr/include}. -(If you are using Autoconf, you can write it as @samp{@@oldincludedir@@}.) - -The Makefile commands should check whether the value of -@code{oldincludedir} is empty. If it is, they should not try to use -it; they should cancel the second installation of the header files. - -A package should not replace an existing header in this directory unless -the header came from the same package. Thus, if your Foo package -provides a header file @file{foo.h}, then it should install the header -file in the @code{oldincludedir} directory if either (1) there is no -@file{foo.h} there or (2) the @file{foo.h} that exists came from the Foo -package. - -To tell whether @file{foo.h} came from the Foo package, put a magic -string in the file---part of a comment---and @code{grep} for that string. -@end table - -Unix-style man pages are installed in one of the following: - -@table @samp -@item mandir -The top-level directory for installing the man pages (if any) for this -package. It will normally be @file{/usr/local/man}, but you should -write it as @file{$(prefix)/man}. -(If you are using Autoconf, write it as @samp{@@mandir@@}.) - -@item man1dir -The directory for installing section 1 man pages. Write it as -@file{$(mandir)/man1}. -@item man2dir -The directory for installing section 2 man pages. Write it as -@file{$(mandir)/man2} -@item @dots{} - -@strong{Don't make the primary documentation for any GNU software be a -man page. Write a manual in Texinfo instead. Man pages are just for -the sake of people running GNU software on Unix, which is a secondary -application only.} - -@item manext -The file name extension for the installed man page. This should contain -a period followed by the appropriate digit; it should normally be @samp{.1}. - -@item man1ext -The file name extension for installed section 1 man pages. -@item man2ext -The file name extension for installed section 2 man pages. -@item @dots{} -Use these names instead of @samp{manext} if the package needs to install man -pages in more than one section of the manual. -@end table - -And finally, you should set the following variable: - -@table @samp -@item srcdir -The directory for the sources being compiled. The value of this -variable is normally inserted by the @code{configure} shell script. -(If you are using Autconf, use @samp{srcdir = @@srcdir@@}.) -@end table - -For example: - -@smallexample -@c I have changed some of the comments here slightly to fix an overfull -@c hbox, so the make manual can format correctly. --roland -# Common prefix for installation directories. -# NOTE: This directory must exist when you start the install. -prefix = /usr/local -exec_prefix = $(prefix) -# Where to put the executable for the command `gcc'. -bindir = $(exec_prefix)/bin -# Where to put the directories used by the compiler. -libexecdir = $(exec_prefix)/libexec -# Where to put the Info files. -infodir = $(prefix)/info -@end smallexample - -If your program installs a large number of files into one of the -standard user-specified directories, it might be useful to group them -into a subdirectory particular to that program. If you do this, you -should write the @code{install} rule to create these subdirectories. - -Do not expect the user to include the subdirectory name in the value of -any of the variables listed above. The idea of having a uniform set of -variable names for installation directories is to enable the user to -specify the exact same values for several different GNU packages. In -order for this to be useful, all the packages must be designed so that -they will work sensibly when the user does so. - -@node Standard Targets -@section Standard Targets for Users - -All GNU programs should have the following targets in their Makefiles: - -@table @samp -@item all -Compile the entire program. This should be the default target. This -target need not rebuild any documentation files; Info files should -normally be included in the distribution, and DVI files should be made -only when explicitly asked for. - -By default, the Make rules should compile and link with @samp{-g}, so -that executable programs have debugging symbols. Users who don't mind -being helpless can strip the executables later if they wish. - -@item install -Compile the program and copy the executables, libraries, and so on to -the file names where they should reside for actual use. If there is a -simple test to verify that a program is properly installed, this target -should run that test. - -Do not strip executables when installing them. Devil-may-care users can -use the @code{install-strip} target to do that. - -If possible, write the @code{install} target rule so that it does not -modify anything in the directory where the program was built, provided -@samp{make all} has just been done. This is convenient for building the -program under one user name and installing it under another. - -The commands should create all the directories in which files are to be -installed, if they don't already exist. This includes the directories -specified as the values of the variables @code{prefix} and -@code{exec_prefix}, as well as all subdirectories that are needed. -One way to do this is by means of an @code{installdirs} target -as described below. - -Use @samp{-} before any command for installing a man page, so that -@code{make} will ignore any errors. This is in case there are systems -that don't have the Unix man page documentation system installed. - -The way to install Info files is to copy them into @file{$(infodir)} -with @code{$(INSTALL_DATA)} (@pxref{Command Variables}), and then run -the @code{install-info} program if it is present. @code{install-info} -is a program that edits the Info @file{dir} file to add or update the -menu entry for the given Info file; it is part of the Texinfo package. -Here is a sample rule to install an Info file: - -@comment This example has been carefully formatted for the Make manual. -@comment Please do not reformat it without talking to roland@gnu.ai.mit.edu. -@smallexample -$(DESTDIR)$(infodir)/foo.info: foo.info - $(POST_INSTALL) -# There may be a newer info file in . than in srcdir. - -if test -f foo.info; then d=.; \ - else d=$(srcdir); fi; \ - $(INSTALL_DATA) $$d/foo.info $(DESTDIR)$@@; \ -# Run install-info only if it exists. -# Use `if' instead of just prepending `-' to the -# line so we notice real errors from install-info. -# We use `$(SHELL) -c' because some shells do not -# fail gracefully when there is an unknown command. - if $(SHELL) -c 'install-info --version' \ - >/dev/null 2>&1; then \ - install-info --dir-file=$(DESTDIR)$(infodir)/dir \ - $(DESTDIR)$(infodir)/foo.info; \ - else true; fi -@end smallexample - -When writing the @code{install} target, you must classify all the -commands into three categories: normal ones, @dfn{pre-installation} -commands and @dfn{post-installation} commands. @xref{Install Command -Categories}. - -@item uninstall -Delete all the installed files---the copies that the @samp{install} -target creates. - -This rule should not modify the directories where compilation is done, -only the directories where files are installed. - -The uninstallation commands are divided into three categories, just like -the installation commands. @xref{Install Command Categories}. - -@item install-strip -Like @code{install}, but strip the executable files while installing -them. In simple cases, this target can use the @code{install} target in -a simple way: - -@smallexample -install-strip: - $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ - install -@end smallexample - -But if the package installs scripts as well as real executables, the -@code{install-strip} target can't just refer to the @code{install} -target; it has to strip the executables but not the scripts. - -@code{install-strip} should not strip the executables in the build -directory which are being copied for installation. It should only strip -the copies that are installed. - -Normally we do not recommend stripping an executable unless you are sure -the program has no bugs. However, it can be reasonable to install a -stripped executable for actual execution while saving the unstripped -executable elsewhere in case there is a bug. - -@comment The gratuitous blank line here is to make the table look better -@comment in the printed Make manual. Please leave it in. -@item clean - -Delete all files from the current directory that are normally created by -building the program. Don't delete the files that record the -configuration. Also preserve files that could be made by building, but -normally aren't because the distribution comes with them. - -Delete @file{.dvi} files here if they are not part of the distribution. - -@item distclean -Delete all files from the current directory that are created by -configuring or building the program. If you have unpacked the source -and built the program without creating any other files, @samp{make -distclean} should leave only the files that were in the distribution. - -@item mostlyclean -Like @samp{clean}, but may refrain from deleting a few files that people -normally don't want to recompile. For example, the @samp{mostlyclean} -target for GCC does not delete @file{libgcc.a}, because recompiling it -is rarely necessary and takes a lot of time. - -@item maintainer-clean -Delete almost everything from the current directory that can be -reconstructed with this Makefile. This typically includes everything -deleted by @code{distclean}, plus more: C source files produced by -Bison, tags tables, Info files, and so on. - -The reason we say ``almost everything'' is that running the command -@samp{make maintainer-clean} should not delete @file{configure} even if -@file{configure} can be remade using a rule in the Makefile. More generally, -@samp{make maintainer-clean} should not delete anything that needs to -exist in order to run @file{configure} and then begin to build the -program. This is the only exception; @code{maintainer-clean} should -delete everything else that can be rebuilt. - -The @samp{maintainer-clean} target is intended to be used by a maintainer of -the package, not by ordinary users. You may need special tools to -reconstruct some of the files that @samp{make maintainer-clean} deletes. -Since these files are normally included in the distribution, we don't -take care to make them easy to reconstruct. If you find you need to -unpack the full distribution again, don't blame us. - -To help make users aware of this, the commands for the special -@code{maintainer-clean} target should start with these two: - -@smallexample -@@echo 'This command is intended for maintainers to use; it' -@@echo 'deletes files that may need special tools to rebuild.' -@end smallexample - -@item TAGS -Update a tags table for this program. -@c ADR: how? - -@item info -Generate any Info files needed. The best way to write the rules is as -follows: - -@smallexample -info: foo.info - -foo.info: foo.texi chap1.texi chap2.texi - $(MAKEINFO) $(srcdir)/foo.texi -@end smallexample - -@noindent -You must define the variable @code{MAKEINFO} in the Makefile. It should -run the @code{makeinfo} program, which is part of the Texinfo -distribution. - -Normally a GNU distribution comes with Info files, and that means the -Info files are present in the source directory. Therefore, the Make -rule for an info file should update it in the source directory. When -users build the package, ordinarily Make will not update the Info files -because they will already be up to date. - -@item dvi -Generate DVI files for all Texinfo documentation. -For example: - -@smallexample -dvi: foo.dvi - -foo.dvi: foo.texi chap1.texi chap2.texi - $(TEXI2DVI) $(srcdir)/foo.texi -@end smallexample - -@noindent -You must define the variable @code{TEXI2DVI} in the Makefile. It should -run the program @code{texi2dvi}, which is part of the Texinfo -distribution.@footnote{@code{texi2dvi} uses @TeX{} to do the real work -of formatting. @TeX{} is not distributed with Texinfo.} Alternatively, -write just the dependencies, and allow GNU @code{make} to provide the command. - -@item dist -Create a distribution tar file for this program. The tar file should be -set up so that the file names in the tar file start with a subdirectory -name which is the name of the package it is a distribution for. This -name can include the version number. - -For example, the distribution tar file of GCC version 1.40 unpacks into -a subdirectory named @file{gcc-1.40}. - -The easiest way to do this is to create a subdirectory appropriately -named, use @code{ln} or @code{cp} to install the proper files in it, and -then @code{tar} that subdirectory. - -Compress the tar file with @code{gzip}. For example, the actual -distribution file for GCC version 1.40 is called @file{gcc-1.40.tar.gz}. - -The @code{dist} target should explicitly depend on all non-source files -that are in the distribution, to make sure they are up to date in the -distribution. -@ifset CODESTD -@xref{Releases, , Making Releases}. -@end ifset -@ifclear CODESTD -@xref{Releases, , Making Releases, standards, GNU Coding Standards}. -@end ifclear - -@item check -Perform self-tests (if any). The user must build the program before -running the tests, but need not install the program; you should write -the self-tests so that they work when the program is built but not -installed. -@end table - -The following targets are suggested as conventional names, for programs -in which they are useful. - -@table @code -@item installcheck -Perform installation tests (if any). The user must build and install -the program before running the tests. You should not assume that -@file{$(bindir)} is in the search path. - -@item installdirs -It's useful to add a target named @samp{installdirs} to create the -directories where files are installed, and their parent directories. -There is a script called @file{mkinstalldirs} which is convenient for -this; you can find it in the Texinfo package. -@c It's in /gd/gnu/lib/mkinstalldirs. -You can use a rule like this: - -@comment This has been carefully formatted to look decent in the Make manual. -@comment Please be sure not to make it extend any further to the right.--roland -@smallexample -# Make sure all installation directories (e.g. $(bindir)) -# actually exist by making them if necessary. -installdirs: mkinstalldirs - $(srcdir)/mkinstalldirs $(bindir) $(datadir) \ - $(libdir) $(infodir) \ - $(mandir) -@end smallexample - -@noindent -or, if you wish to support @env{DESTDIR}, - -@smallexample -# Make sure all installation directories (e.g. $(bindir)) -# actually exist by making them if necessary. -installdirs: mkinstalldirs - $(srcdir)/mkinstalldirs \ - $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \ - $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \ - $(DESTDIR)$(mandir) -@end smallexample - -This rule should not modify the directories where compilation is done. -It should do nothing but create installation directories. -@end table - -@node Install Command Categories -@section Install Command Categories - -@cindex pre-installation commands -@cindex post-installation commands -When writing the @code{install} target, you must classify all the -commands into three categories: normal ones, @dfn{pre-installation} -commands and @dfn{post-installation} commands. - -Normal commands move files into their proper places, and set their -modes. They may not alter any files except the ones that come entirely -from the package they belong to. - -Pre-installation and post-installation commands may alter other files; -in particular, they can edit global configuration files or data bases. - -Pre-installation commands are typically executed before the normal -commands, and post-installation commands are typically run after the -normal commands. - -The most common use for a post-installation command is to run -@code{install-info}. This cannot be done with a normal command, since -it alters a file (the Info directory) which does not come entirely and -solely from the package being installed. It is a post-installation -command because it needs to be done after the normal command which -installs the package's Info files. - -Most programs don't need any pre-installation commands, but we have the -feature just in case it is needed. - -To classify the commands in the @code{install} rule into these three -categories, insert @dfn{category lines} among them. A category line -specifies the category for the commands that follow. - -A category line consists of a tab and a reference to a special Make -variable, plus an optional comment at the end. There are three -variables you can use, one for each category; the variable name -specifies the category. Category lines are no-ops in ordinary execution -because these three Make variables are normally undefined (and you -@emph{should not} define them in the makefile). - -Here are the three possible category lines, each with a comment that -explains what it means: - -@smallexample - $(PRE_INSTALL) # @r{Pre-install commands follow.} - $(POST_INSTALL) # @r{Post-install commands follow.} - $(NORMAL_INSTALL) # @r{Normal commands follow.} -@end smallexample - -If you don't use a category line at the beginning of the @code{install} -rule, all the commands are classified as normal until the first category -line. If you don't use any category lines, all the commands are -classified as normal. - -These are the category lines for @code{uninstall}: - -@smallexample - $(PRE_UNINSTALL) # @r{Pre-uninstall commands follow.} - $(POST_UNINSTALL) # @r{Post-uninstall commands follow.} - $(NORMAL_UNINSTALL) # @r{Normal commands follow.} -@end smallexample - -Typically, a pre-uninstall command would be used for deleting entries -from the Info directory. - -If the @code{install} or @code{uninstall} target has any dependencies -which act as subroutines of installation, then you should start -@emph{each} dependency's commands with a category line, and start the -main target's commands with a category line also. This way, you can -ensure that each command is placed in the right category regardless of -which of the dependencies actually run. - -Pre-installation and post-installation commands should not run any -programs except for these: - -@example -[ basename bash cat chgrp chmod chown cmp cp dd diff echo -egrep expand expr false fgrep find getopt grep gunzip gzip -hostname install install-info kill ldconfig ln ls md5sum -mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee -test touch true uname xargs yes -@end example - -@cindex binary packages -The reason for distinguishing the commands in this way is for the sake -of making binary packages. Typically a binary package contains all the -executables and other files that need to be installed, and has its own -method of installing them---so it does not need to run the normal -installation commands. But installing the binary package does need to -execute the pre-installation and post-installation commands. - -Programs to build binary packages work by extracting the -pre-installation and post-installation commands. Here is one way of -extracting the pre-installation commands: - -@smallexample -make -n install -o all \ - PRE_INSTALL=pre-install \ - POST_INSTALL=post-install \ - NORMAL_INSTALL=normal-install \ - | gawk -f pre-install.awk -@end smallexample - -@noindent -where the file @file{pre-install.awk} could contain this: - -@smallexample -$0 ~ /^\t[ \t]*(normal_install|post_install)[ \t]*$/ @{on = 0@} -on @{print $0@} -$0 ~ /^\t[ \t]*pre_install[ \t]*$/ @{on = 1@} -@end smallexample - -The resulting file of pre-installation commands is executed as a shell -script as part of installing the binary package. diff --git a/contrib/binutils/etc/standards.texi b/contrib/binutils/etc/standards.texi deleted file mode 100644 index 5aa508e0184e..000000000000 --- a/contrib/binutils/etc/standards.texi +++ /dev/null @@ -1,3742 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@setfilename standards.info -@settitle GNU Coding Standards -@c This date is automagically updated when you save this file: -@set lastupdate February 14, 2002 -@c %**end of header - -@ifinfo -@format -START-INFO-DIR-ENTRY -* Standards: (standards). GNU coding standards. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@c @setchapternewpage odd -@setchapternewpage off - -@c Put everything in one index (arbitrarily chosen to be the concept index). -@syncodeindex fn cp -@syncodeindex ky cp -@syncodeindex pg cp -@syncodeindex vr cp - -@c This is used by a cross ref in make-stds.texi -@set CODESTD 1 -@iftex -@set CHAPTER chapter -@end iftex -@ifinfo -@set CHAPTER node -@end ifinfo - -@ifinfo -GNU Coding Standards -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 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 ifinfo - -@titlepage -@title GNU Coding Standards -@author Richard Stallman, et al. -@author last updated @value{lastupdate} -@page - -@vskip 0pt plus 1filll -Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 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 -@node Top, Preface, (dir), (dir) -@top Version - -Last updated @value{lastupdate}. -@end ifinfo - -@menu -* Preface:: About the GNU Coding Standards -* Legal Issues:: Keeping Free Software Free -* Design Advice:: General Program Design -* Program Behavior:: Program Behavior for All Programs -* Writing C:: Making The Best Use of C -* Documentation:: Documenting Programs -* Managing Releases:: The Release Process -* References:: References to Non-Free Software or Documentation -* Copying This Manual:: How to Make Copies of This Manual -* Index:: - -@end menu - -@node Preface -@chapter About the GNU Coding Standards - -The GNU Coding Standards were written by Richard Stallman and other GNU -Project volunteers. Their purpose is to make the GNU system clean, -consistent, and easy to install. This document can also be read as a -guide to writing portable, robust and reliable programs. It focuses on -programs written in C, but many of the rules and principles are useful -even if you write in another programming language. The rules often -state reasons for writing in a certain way. - -This release of the GNU Coding Standards was last updated -@value{lastupdate}. - -@cindex where to obtain @code{standards.texi} -@cindex downloading this manual -If you did not obtain this file directly from the GNU project and -recently, please check for a newer version. You can ftp the GNU -Coding Standards from any GNU FTP host in the directory -@file{/pub/gnu/standards/}. The GNU Coding Standards are available -there in several different formats: @file{standards.text}, -@file{standards.info}, and @file{standards.dvi}, as well as the -Texinfo ``source'' which is divided in two files: -@file{standards.texi} and @file{make-stds.texi}. The GNU Coding -Standards are also available on the GNU World Wide Web server: -@uref{http://www.gnu.org/prep/standards_toc.html}. - -Corrections or suggestions for this document should be sent to -@email{bug-standards@@gnu.org}. If you make a suggestion, please include a -suggested new wording for it; our time is limited. We prefer a context -diff to the @file{standards.texi} or @file{make-stds.texi} files, but if -you don't have those files, please mail your suggestion anyway. - -These standards cover the minimum of what is important when writing a -GNU package. Likely, the needs for additional standards will come up. -Sometimes, you might suggest that such standards be added to this -document. If you think your standards would be generally useful, please -do suggest them. - -You should also set standards for your package on many questions not -addressed or not firmly specified here. The most important point is to -be self-consistent---try to stick to the conventions you pick, and try -to document them as much as possible. That way, your program will be -more maintainable by others. - -@node Legal Issues -@chapter Keeping Free Software Free -@cindex legal aspects - -This @value{CHAPTER} discusses how you can make sure that GNU software -avoids legal difficulties, and other related issues. - -@menu -* Reading Non-Free Code:: Referring to Proprietary Programs -* Contributions:: Accepting Contributions -* Trademarks:: How We Deal with Trademark Issues -@end menu - -@node Reading Non-Free Code -@section Referring to Proprietary Programs -@cindex proprietary programs -@cindex avoiding proprietary code - -Don't in any circumstances refer to Unix source code for or during -your work on GNU! (Or to any other proprietary programs.) - -If you have a vague recollection of the internals of a Unix program, -this does not absolutely mean you can't write an imitation of it, but -do try to organize the imitation internally along different lines, -because this is likely to make the details of the Unix version -irrelevant and dissimilar to your results. - -For example, Unix utilities were generally optimized to minimize -memory use; if you go for speed instead, your program will be very -different. You could keep the entire input file in core and scan it -there instead of using stdio. Use a smarter algorithm discovered more -recently than the Unix program. Eliminate use of temporary files. Do -it in one pass instead of two (we did this in the assembler). - -Or, on the contrary, emphasize simplicity instead of speed. For some -applications, the speed of today's computers makes simpler algorithms -adequate. - -Or go for generality. For example, Unix programs often have static -tables or fixed-size strings, which make for arbitrary limits; use -dynamic allocation instead. Make sure your program handles NULs and -other funny characters in the input files. Add a programming language -for extensibility and write part of the program in that language. - -Or turn some parts of the program into independently usable libraries. -Or use a simple garbage collector instead of tracking precisely when -to free memory, or use a new GNU facility such as obstacks. - -@node Contributions -@section Accepting Contributions -@cindex legal papers -@cindex accepting contributions - -If the program you are working on is copyrighted by the Free Software -Foundation, then when someone else sends you a piece of code to add to -the program, we need legal papers to use it---just as we asked you to -sign papers initially. @emph{Each} person who makes a nontrivial -contribution to a program must sign some sort of legal papers in order -for us to have clear title to the program; the main author alone is not -enough. - -So, before adding in any contributions from other people, please tell -us, so we can arrange to get the papers. Then wait until we tell you -that we have received the signed papers, before you actually use the -contribution. - -This applies both before you release the program and afterward. If -you receive diffs to fix a bug, and they make significant changes, we -need legal papers for that change. - -This also applies to comments and documentation files. For copyright -law, comments and code are just text. Copyright applies to all kinds of -text, so we need legal papers for all kinds. - -We know it is frustrating to ask for legal papers; it's frustrating for -us as well. But if you don't wait, you are going out on a limb---for -example, what if the contributor's employer won't sign a disclaimer? -You might have to take that code out again! - -You don't need papers for changes of a few lines here or there, since -they are not significant for copyright purposes. Also, you don't need -papers if all you get from the suggestion is some ideas, not actual code -which you use. For example, if someone send you one implementation, but -you write a different implementation of the same idea, you don't need to -get papers. - -The very worst thing is if you forget to tell us about the other -contributor. We could be very embarrassed in court some day as a -result. - -We have more detailed advice for maintainers of programs; if you have -reached the stage of actually maintaining a program for GNU (whether -released or not), please ask us for a copy. - -@node Trademarks -@section Trademarks -@cindex trademarks - -Please do not include any trademark acknowledgements in GNU software -packages or documentation. - -Trademark acknowledgements are the statements that such-and-such is a -trademark of so-and-so. The GNU Project has no objection to the basic -idea of trademarks, but these acknowledgements feel like kowtowing, so -we don't use them. There is no legal requirement for them. - -What is legally required, as regards other people's trademarks, is to -avoid using them in ways which a reader might read as naming or labeling -our own programs or activities. For example, since ``Objective C'' is -(or at least was) a trademark, we made sure to say that we provide a -``compiler for the Objective C language'' rather than an ``Objective C -compiler''. The latter is meant to be short for the former, but it does -not explicitly state the relationship, so it could be misinterpreted as -using ``Objective C'' as a label for the compiler rather than for the -language. - -@node Design Advice -@chapter General Program Design -@cindex program design - -This @value{CHAPTER} discusses some of the issues you should take into -account when designing your program. - -@c Standard or ANSI C -@c -@c In 1989 the American National Standards Institute (ANSI) standardized -@c C as standard X3.159-1989. In December of that year the -@c International Standards Organization ISO adopted the ANSI C standard -@c making minor changes. In 1990 ANSI then re-adopted ISO standard -@c C. This version of C is known as either ANSI C or Standard C. - -@c A major revision of the C Standard appeared in 1999. - -@menu -* Source Language:: Which languges to use. -* Compatibility:: Compatibility with other implementations -* Using Extensions:: Using non-standard features -* Standard C:: Using Standard C features -* Conditional Compilation:: Compiling Code Only If A Conditional is True -@end menu - -@node Source Language -@section Which Languages to Use -@cindex programming languges - -When you want to use a language that gets compiled and runs at high -speed, the best language to use is C. Using another language is like -using a non-standard feature: it will cause trouble for users. Even if -GCC supports the other language, users may find it inconvenient to have -to install the compiler for that other language in order to build your -program. For example, if you write your program in C++, people will -have to install the GNU C++ compiler in order to compile your program. - -C has one other advantage over C++ and other compiled languages: more -people know C, so more people will find it easy to read and modify the -program if it is written in C. - -So in general it is much better to use C, rather than the -comparable alternatives. - -But there are two exceptions to that conclusion: - -@itemize @bullet -@item -It is no problem to use another language to write a tool specifically -intended for use with that language. That is because the only people -who want to build the tool will be those who have installed the other -language anyway. - -@item -If an application is of interest only to a narrow part of the community, -then the question of which language it is written in has less effect on -other people, so you may as well please yourself. -@end itemize - -Many programs are designed to be extensible: they include an interpreter -for a language that is higher level than C. Often much of the program -is written in that language, too. The Emacs editor pioneered this -technique. - -@cindex GUILE -The standard extensibility interpreter for GNU software is GUILE, which -implements the language Scheme (an especially clean and simple dialect -of Lisp). @uref{http://www.gnu.org/software/guile/}. We don't reject -programs written in other ``scripting languages'' such as Perl and -Python, but using GUILE is very important for the overall consistency of -the GNU system. - -@node Compatibility -@section Compatibility with Other Implementations -@cindex compatibility with C and @sc{posix} standards -@cindex @sc{posix} compatibility - -With occasional exceptions, utility programs and libraries for GNU -should be upward compatible with those in Berkeley Unix, and upward -compatible with Standard C if Standard C specifies their -behavior, and upward compatible with @sc{posix} if @sc{posix} specifies -their behavior. - -When these standards conflict, it is useful to offer compatibility -modes for each of them. - -@cindex options for compatibility -Standard C and @sc{posix} prohibit many kinds of extensions. Feel -free to make the extensions anyway, and include a @samp{--ansi}, -@samp{--posix}, or @samp{--compatible} option to turn them off. -However, if the extension has a significant chance of breaking any real -programs or scripts, then it is not really upward compatible. So you -should try to redesign its interface to make it upward compatible. - -@cindex @code{POSIXLY_CORRECT}, environment variable -Many GNU programs suppress extensions that conflict with @sc{posix} if the -environment variable @code{POSIXLY_CORRECT} is defined (even if it is -defined with a null value). Please make your program recognize this -variable if appropriate. - -When a feature is used only by users (not by programs or command -files), and it is done poorly in Unix, feel free to replace it -completely with something totally different and better. (For example, -@code{vi} is replaced with Emacs.) But it is nice to offer a compatible -feature as well. (There is a free @code{vi} clone, so we offer it.) - -Additional useful features are welcome regardless of whether -there is any precedent for them. - -@node Using Extensions -@section Using Non-standard Features -@cindex non-standard extensions - -Many GNU facilities that already exist support a number of convenient -extensions over the comparable Unix facilities. Whether to use these -extensions in implementing your program is a difficult question. - -On the one hand, using the extensions can make a cleaner program. -On the other hand, people will not be able to build the program -unless the other GNU tools are available. This might cause the -program to work on fewer kinds of machines. - -With some extensions, it might be easy to provide both alternatives. -For example, you can define functions with a ``keyword'' @code{INLINE} -and define that as a macro to expand into either @code{inline} or -nothing, depending on the compiler. - -In general, perhaps it is best not to use the extensions if you can -straightforwardly do without them, but to use the extensions if they -are a big improvement. - -An exception to this rule are the large, established programs (such as -Emacs) which run on a great variety of systems. Using GNU extensions in -such programs would make many users unhappy, so we don't do that. - -Another exception is for programs that are used as part of compilation: -anything that must be compiled with other compilers in order to -bootstrap the GNU compilation facilities. If these require the GNU -compiler, then no one can compile them without having them installed -already. That would be extremely troublesome in certain cases. - -@node Standard C -@section Standard C and Pre-Standard C -@cindex @sc{ansi} C standard - -1989 Standard C is widespread enough now that it is ok to use its -features in new programs. There is one exception: do not ever use the -``trigraph'' feature of Standard C. - -1999 Standard C is not widespread yet, so please do not require its -features in programs. It is ok to use its features if they are present. - -However, it is easy to support pre-standard compilers in most programs, -so if you know how to do that, feel free. If a program you are -maintaining has such support, you should try to keep it working. - -@cindex function prototypes -To support pre-standard C, instead of writing function definitions in -standard prototype form, - -@example -int -foo (int x, int y) -@dots{} -@end example - -@noindent -write the definition in pre-standard style like this, - -@example -int -foo (x, y) - int x, y; -@dots{} -@end example - -@noindent -and use a separate declaration to specify the argument prototype: - -@example -int foo (int, int); -@end example - -You need such a declaration anyway, in a header file, to get the benefit -of prototypes in all the files where the function is called. And once -you have the declaration, you normally lose nothing by writing the -function definition in the pre-standard style. - -This technique does not work for integer types narrower than @code{int}. -If you think of an argument as being of a type narrower than @code{int}, -declare it as @code{int} instead. - -There are a few special cases where this technique is hard to use. For -example, if a function argument needs to hold the system type -@code{dev_t}, you run into trouble, because @code{dev_t} is shorter than -@code{int} on some machines; but you cannot use @code{int} instead, -because @code{dev_t} is wider than @code{int} on some machines. There -is no type you can safely use on all machines in a non-standard -definition. The only way to support non-standard C and pass such an -argument is to check the width of @code{dev_t} using Autoconf and choose -the argument type accordingly. This may not be worth the trouble. - -In order to support pre-standard compilers that do not recognize -prototypes, you may want to use a preprocessor macro like this: - -@example -/* Declare the prototype for a general external function. */ -#if defined (__STDC__) || defined (WINDOWSNT) -#define P_(proto) proto -#else -#define P_(proto) () -#endif -@end example - -@node Conditional Compilation -@section Conditional Compilation - -When supporting configuration options already known when building your -program we prefer using @code{if (... )} over conditional compilation, -as in the former case the compiler is able to perform more extensive -checking of all possible code paths. - -For example, please write - -@smallexample - if (HAS_FOO) - ... - else - ... -@end smallexample - -instead of: - -@smallexample - #ifdef HAS_FOO - ... - #else - ... - #endif -@end smallexample - -A modern compiler such as GCC will generate exactly the same code in -both cases, and we have been using similar techniques with good success -in several projects. - -While this is not a silver bullet solving all portability problems, -following this policy would have saved the GCC project alone many person -hours if not days per year. - -In the case of function-like macros like @code{REVERSIBLE_CC_MODE} in -GCC which cannot be simply used in @code{if( ...)} statements, there is -an easy workaround. Simply introduce another macro -@code{HAS_REVERSIBLE_CC_MODE} as in the following example: - -@smallexample - #ifdef REVERSIBLE_CC_MODE - #define HAS_REVERSIBLE_CC_MODE 1 - #else - #define HAS_REVERSIBLE_CC_MODE 0 - #endif -@end smallexample - -@node Program Behavior -@chapter Program Behavior for All Programs - -This @value{CHAPTER} describes conventions for writing robust -software. It also describes general standards for error messages, the -command line interface, and how libraries should behave. - -@menu -* Semantics:: Writing robust programs -* Libraries:: Library behavior -* Errors:: Formatting error messages -* User Interfaces:: Standards about interfaces generally -* Graphical Interfaces:: Standards for graphical interfaces -* Command-Line Interfaces:: Standards for command line interfaces -* Option Table:: Table of long options -* Memory Usage:: When and how to care about memory needs -* File Usage:: Which files to use, and where -@end menu - -@node Semantics -@section Writing Robust Programs - -@cindex arbitrary limits on data -Avoid arbitrary limits on the length or number of @emph{any} data -structure, including file names, lines, files, and symbols, by allocating -all data structures dynamically. In most Unix utilities, ``long lines -are silently truncated''. This is not acceptable in a GNU utility. - -@cindex @code{NUL} characters -Utilities reading files should not drop NUL characters, or any other -nonprinting characters @emph{including those with codes above 0177}. -The only sensible exceptions would be utilities specifically intended -for interface to certain types of terminals or printers -that can't handle those characters. -Whenever possible, try to make programs work properly with -sequences of bytes that represent multibyte characters, using encodings -such as UTF-8 and others. - -@cindex error messages -Check every system call for an error return, unless you know you wish to -ignore errors. Include the system error text (from @code{perror} or -equivalent) in @emph{every} error message resulting from a failing -system call, as well as the name of the file if any and the name of the -utility. Just ``cannot open foo.c'' or ``stat failed'' is not -sufficient. - -@cindex @code{malloc} return value -@cindex memory allocation failure -Check every call to @code{malloc} or @code{realloc} to see if it -returned zero. Check @code{realloc} even if you are making the block -smaller; in a system that rounds block sizes to a power of 2, -@code{realloc} may get a different block if you ask for less space. - -In Unix, @code{realloc} can destroy the storage block if it returns -zero. GNU @code{realloc} does not have this bug: if it fails, the -original block is unchanged. Feel free to assume the bug is fixed. If -you wish to run your program on Unix, and wish to avoid lossage in this -case, you can use the GNU @code{malloc}. - -You must expect @code{free} to alter the contents of the block that was -freed. Anything you want to fetch from the block, you must fetch before -calling @code{free}. - -If @code{malloc} fails in a noninteractive program, make that a fatal -error. In an interactive program (one that reads commands from the -user), it is better to abort the command and return to the command -reader loop. This allows the user to kill other processes to free up -virtual memory, and then try the command again. - -@cindex command-line arguments, decoding -Use @code{getopt_long} to decode arguments, unless the argument syntax -makes this unreasonable. - -When static storage is to be written in during program execution, use -explicit C code to initialize it. Reserve C initialized declarations -for data that will not be changed. -@c ADR: why? - -Try to avoid low-level interfaces to obscure Unix data structures (such -as file directories, utmp, or the layout of kernel memory), since these -are less likely to work compatibly. If you need to find all the files -in a directory, use @code{readdir} or some other high-level interface. -These are supported compatibly by GNU. - -@cindex signal handling -The preferred signal handling facilities are the BSD variant of -@code{signal}, and the @sc{posix} @code{sigaction} function; the -alternative USG @code{signal} interface is an inferior design. - -Nowadays, using the @sc{posix} signal functions may be the easiest way -to make a program portable. If you use @code{signal}, then on GNU/Linux -systems running GNU libc version 1, you should include -@file{bsd/signal.h} instead of @file{signal.h}, so as to get BSD -behavior. It is up to you whether to support systems where -@code{signal} has only the USG behavior, or give up on them. - -@cindex impossible conditions -In error checks that detect ``impossible'' conditions, just abort. -There is usually no point in printing any message. These checks -indicate the existence of bugs. Whoever wants to fix the bugs will have -to read the source code and run a debugger. So explain the problem with -comments in the source. The relevant data will be in variables, which -are easy to examine with the debugger, so there is no point moving them -elsewhere. - -Do not use a count of errors as the exit status for a program. -@emph{That does not work}, because exit status values are limited to 8 -bits (0 through 255). A single run of the program might have 256 -errors; if you try to return 256 as the exit status, the parent process -will see 0 as the status, and it will appear that the program succeeded. - -@cindex temporary files -@cindex @code{TMPDIR} environment variable -If you make temporary files, check the @code{TMPDIR} environment -variable; if that variable is defined, use the specified directory -instead of @file{/tmp}. - -In addition, be aware that there is a possible security problem when -creating temporary files in world-writable directories. In C, you can -avoid this problem by creating temporary files in this manner: - -@example -fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0600); -@end example - -@noindent -or by using the @code{mkstemps} function from libiberty. - -In bash, use @code{set -C} to avoid this problem. - -@node Libraries -@section Library Behavior -@cindex libraries - -Try to make library functions reentrant. If they need to do dynamic -storage allocation, at least try to avoid any nonreentrancy aside from -that of @code{malloc} itself. - -Here are certain name conventions for libraries, to avoid name -conflicts. - -Choose a name prefix for the library, more than two characters long. -All external function and variable names should start with this -prefix. In addition, there should only be one of these in any given -library member. This usually means putting each one in a separate -source file. - -An exception can be made when two external symbols are always used -together, so that no reasonable program could use one without the -other; then they can both go in the same file. - -External symbols that are not documented entry points for the user -should have names beginning with @samp{_}. The @samp{_} should be -followed by the chosen name prefix for the library, to prevent -collisions with other libraries. These can go in the same files with -user entry points if you like. - -Static functions and variables can be used as you like and need not -fit any naming convention. - -@node Errors -@section Formatting Error Messages -@cindex formatting error messages -@cindex error messages, formatting - -Error messages from compilers should look like this: - -@example -@var{source-file-name}:@var{lineno}: @var{message} -@end example - -@noindent -If you want to mention the column number, use this format: - -@example -@var{source-file-name}:@var{lineno}:@var{column}: @var{message} -@end example - -@noindent -Line numbers should start from 1 at the beginning of the file, and -column numbers should start from 1 at the beginning of the line. (Both -of these conventions are chosen for compatibility.) Calculate column -numbers assuming that space and all ASCII printing characters have -equal width, and assuming tab stops every 8 columns. - -Error messages from other noninteractive programs should look like this: - -@example -@var{program}:@var{source-file-name}:@var{lineno}: @var{message} -@end example - -@noindent -when there is an appropriate source file, or like this: - -@example -@var{program}: @var{message} -@end example - -@noindent -when there is no relevant source file. - -If you want to mention the column number, use this format: - -@example -@var{program}:@var{source-file-name}:@var{lineno}:@var{column}: @var{message} -@end example - -In an interactive program (one that is reading commands from a -terminal), it is better not to include the program name in an error -message. The place to indicate which program is running is in the -prompt or with the screen layout. (When the same program runs with -input from a source other than a terminal, it is not interactive and -would do best to print error messages using the noninteractive style.) - -The string @var{message} should not begin with a capital letter when -it follows a program name and/or file name. Also, it should not end -with a period. - -Error messages from interactive programs, and other messages such as -usage messages, should start with a capital letter. But they should not -end with a period. - -@node User Interfaces -@section Standards for Interfaces Generally - -@cindex program name and its behavior -@cindex behavior, dependent on program's name -Please don't make the behavior of a utility depend on the name used -to invoke it. It is useful sometimes to make a link to a utility -with a different name, and that should not change what it does. - -Instead, use a run time option or a compilation switch or both -to select among the alternate behaviors. - -@cindex output device and program's behavior -Likewise, please don't make the behavior of the program depend on the -type of output device it is used with. Device independence is an -important principle of the system's design; do not compromise it merely -to save someone from typing an option now and then. (Variation in error -message syntax when using a terminal is ok, because that is a side issue -that people do not depend on.) - -If you think one behavior is most useful when the output is to a -terminal, and another is most useful when the output is a file or a -pipe, then it is usually best to make the default behavior the one that -is useful with output to a terminal, and have an option for the other -behavior. - -Compatibility requires certain programs to depend on the type of output -device. It would be disastrous if @code{ls} or @code{sh} did not do so -in the way all users expect. In some of these cases, we supplement the -program with a preferred alternate version that does not depend on the -output device type. For example, we provide a @code{dir} program much -like @code{ls} except that its default output format is always -multi-column format. - -@node Graphical Interfaces -@section Standards for Graphical Interfaces -@cindex graphical user interface - -@cindex gtk -When you write a program that provides a graphical user interface, -please make it work with X Windows and the GTK toolkit unless the -functionality specifically requires some alternative (for example, -``displaying jpeg images while in console mode''). - -In addition, please provide a command-line interface to control the -functionality. (In many cases, the graphical user interface can be a -separate program which invokes the command-line program.) This is -so that the same jobs can be done from scripts. - -@cindex corba -@cindex gnome -Please also consider providing a CORBA interface (for use from GNOME), a -library interface (for use from C), and perhaps a keyboard-driven -console interface (for use by users from console mode). Once you are -doing the work to provide the functionality and the graphical interface, -these won't be much extra work. - -@node Command-Line Interfaces -@section Standards for Command Line Interfaces -@cindex command-line interface - -@findex getopt -It is a good idea to follow the @sc{posix} guidelines for the -command-line options of a program. The easiest way to do this is to use -@code{getopt} to parse them. Note that the GNU version of @code{getopt} -will normally permit options anywhere among the arguments unless the -special argument @samp{--} is used. This is not what @sc{posix} -specifies; it is a GNU extension. - -@cindex long-named options -Please define long-named options that are equivalent to the -single-letter Unix-style options. We hope to make GNU more user -friendly this way. This is easy to do with the GNU function -@code{getopt_long}. - -One of the advantages of long-named options is that they can be -consistent from program to program. For example, users should be able -to expect the ``verbose'' option of any GNU program which has one, to be -spelled precisely @samp{--verbose}. To achieve this uniformity, look at -the table of common long-option names when you choose the option names -for your program (@pxref{Option Table}). - -It is usually a good idea for file names given as ordinary arguments to -be input files only; any output files would be specified using options -(preferably @samp{-o} or @samp{--output}). Even if you allow an output -file name as an ordinary argument for compatibility, try to provide an -option as another way to specify it. This will lead to more consistency -among GNU utilities, and fewer idiosyncracies for users to remember. - -@cindex standard command-line options -All programs should support two standard options: @samp{--version} -and @samp{--help}. - -@table @code -@cindex @samp{--version} option -@item --version -This option should direct the program to print information about its name, -version, origin and legal status, all on standard output, and then exit -successfully. Other options and arguments should be ignored once this -is seen, and the program should not perform its normal function. - -@cindex canonical name of a program -@cindex program's canonical name -The first line is meant to be easy for a program to parse; the version -number proper starts after the last space. In addition, it contains -the canonical name for this program, in this format: - -@example -GNU Emacs 19.30 -@end example - -@noindent -The program's name should be a constant string; @emph{don't} compute it -from @code{argv[0]}. The idea is to state the standard or canonical -name for the program, not its file name. There are other ways to find -out the precise file name where a command is found in @code{PATH}. - -If the program is a subsidiary part of a larger package, mention the -package name in parentheses, like this: - -@example -emacsserver (GNU Emacs) 19.30 -@end example - -@noindent -If the package has a version number which is different from this -program's version number, you can mention the package version number -just before the close-parenthesis. - -If you @strong{need} to mention the version numbers of libraries which -are distributed separately from the package which contains this program, -you can do so by printing an additional line of version info for each -library you want to mention. Use the same format for these lines as for -the first line. - -Please do not mention all of the libraries that the program uses ``just -for completeness''---that would produce a lot of unhelpful clutter. -Please mention library version numbers only if you find in practice that -they are very important to you in debugging. - -The following line, after the version number line or lines, should be a -copyright notice. If more than one copyright notice is called for, put -each on a separate line. - -Next should follow a brief statement that the program is free software, -and that users are free to copy and change it on certain conditions. If -the program is covered by the GNU GPL, say so here. Also mention that -there is no warranty, to the extent permitted by law. - -It is ok to finish the output with a list of the major authors of the -program, as a way of giving credit. - -Here's an example of output that follows these rules: - -@smallexample -GNU Emacs 19.34.5 -Copyright (C) 1996 Free Software Foundation, Inc. -GNU Emacs comes with NO WARRANTY, -to the extent permitted by law. -You may redistribute copies of GNU Emacs -under the terms of the GNU General Public License. -For more information about these matters, -see the files named COPYING. -@end smallexample - -You should adapt this to your program, of course, filling in the proper -year, copyright holder, name of program, and the references to -distribution terms, and changing the rest of the wording as necessary. - -This copyright notice only needs to mention the most recent year in -which changes were made---there's no need to list the years for previous -versions' changes. You don't have to mention the name of the program in -these notices, if that is inconvenient, since it appeared in the first -line. - -Translations of the above lines must preserve the validity of the -copyright notices (@pxref{Internationalization}). If the translation's -character set supports it, the @samp{(C)} should be replaced with the -copyright symbol, as follows: - -@ifinfo -(the official copyright symbol, which is the letter C in a circle); -@end ifinfo -@ifnotinfo -@copyright{} -@end ifnotinfo - -Write the word ``Copyright'' exactly like that, in English. Do not -translate it into another language. International treaties recognize -the English word ``Copyright''; translations into other languages do not -have legal significance. - - -@cindex @samp{--help} option -@item --help -This option should output brief documentation for how to invoke the -program, on standard output, then exit successfully. Other options and -arguments should be ignored once this is seen, and the program should -not perform its normal function. - -@cindex address for bug reports -@cindex bug reports -Near the end of the @samp{--help} option's output there should be a line -that says where to mail bug reports. It should have this format: - -@example -Report bugs to @var{mailing-address}. -@end example -@end table - -@node Option Table -@section Table of Long Options -@cindex long option names -@cindex table of long options - -Here is a table of long options used by GNU programs. It is surely -incomplete, but we aim to list all the options that a new program might -want to be compatible with. If you use names not already in the table, -please send @email{bug-standards@@gnu.org} a list of them, with their -meanings, so we can update the table. - -@c Please leave newlines between items in this table; it's much easier -@c to update when it isn't completely squashed together and unreadable. -@c When there is more than one short option for a long option name, put -@c a semicolon between the lists of the programs that use them, not a -@c period. --friedman - -@table @samp -@item after-date -@samp{-N} in @code{tar}. - -@item all -@samp{-a} in @code{du}, @code{ls}, @code{nm}, @code{stty}, @code{uname}, -and @code{unexpand}. - -@item all-text -@samp{-a} in @code{diff}. - -@item almost-all -@samp{-A} in @code{ls}. - -@item append -@samp{-a} in @code{etags}, @code{tee}, @code{time}; -@samp{-r} in @code{tar}. - -@item archive -@samp{-a} in @code{cp}. - -@item archive-name -@samp{-n} in @code{shar}. - -@item arglength -@samp{-l} in @code{m4}. - -@item ascii -@samp{-a} in @code{diff}. - -@item assign -@samp{-v} in @code{gawk}. - -@item assume-new -@samp{-W} in Make. - -@item assume-old -@samp{-o} in Make. - -@item auto-check -@samp{-a} in @code{recode}. - -@item auto-pager -@samp{-a} in @code{wdiff}. - -@item auto-reference -@samp{-A} in @code{ptx}. - -@item avoid-wraps -@samp{-n} in @code{wdiff}. - -@item background -For server programs, run in the background. - -@item backward-search -@samp{-B} in @code{ctags}. - -@item basename -@samp{-f} in @code{shar}. - -@item batch -Used in GDB. - -@item baud -Used in GDB. - -@item before -@samp{-b} in @code{tac}. - -@item binary -@samp{-b} in @code{cpio} and @code{diff}. - -@item bits-per-code -@samp{-b} in @code{shar}. - -@item block-size -Used in @code{cpio} and @code{tar}. - -@item blocks -@samp{-b} in @code{head} and @code{tail}. - -@item break-file -@samp{-b} in @code{ptx}. - -@item brief -Used in various programs to make output shorter. - -@item bytes -@samp{-c} in @code{head}, @code{split}, and @code{tail}. - -@item c@t{++} -@samp{-C} in @code{etags}. - -@item catenate -@samp{-A} in @code{tar}. - -@item cd -Used in various programs to specify the directory to use. - -@item changes -@samp{-c} in @code{chgrp} and @code{chown}. - -@item classify -@samp{-F} in @code{ls}. - -@item colons -@samp{-c} in @code{recode}. - -@item command -@samp{-c} in @code{su}; -@samp{-x} in GDB. - -@item compare -@samp{-d} in @code{tar}. - -@item compat -Used in @code{gawk}. - -@item compress -@samp{-Z} in @code{tar} and @code{shar}. - -@item concatenate -@samp{-A} in @code{tar}. - -@item confirmation -@samp{-w} in @code{tar}. - -@item context -Used in @code{diff}. - -@item copyleft -@samp{-W copyleft} in @code{gawk}. - -@item copyright -@samp{-C} in @code{ptx}, @code{recode}, and @code{wdiff}; -@samp{-W copyright} in @code{gawk}. - -@item core -Used in GDB. - -@item count -@samp{-q} in @code{who}. - -@item count-links -@samp{-l} in @code{du}. - -@item create -Used in @code{tar} and @code{cpio}. - -@item cut-mark -@samp{-c} in @code{shar}. - -@item cxref -@samp{-x} in @code{ctags}. - -@item date -@samp{-d} in @code{touch}. - -@item debug -@samp{-d} in Make and @code{m4}; -@samp{-t} in Bison. - -@item define -@samp{-D} in @code{m4}. - -@item defines -@samp{-d} in Bison and @code{ctags}. - -@item delete -@samp{-D} in @code{tar}. - -@item dereference -@samp{-L} in @code{chgrp}, @code{chown}, @code{cpio}, @code{du}, -@code{ls}, and @code{tar}. - -@item dereference-args -@samp{-D} in @code{du}. - -@item device -Specify an I/O device (special file name). - -@item diacritics -@samp{-d} in @code{recode}. - -@item dictionary-order -@samp{-d} in @code{look}. - -@item diff -@samp{-d} in @code{tar}. - -@item digits -@samp{-n} in @code{csplit}. - -@item directory -Specify the directory to use, in various programs. In @code{ls}, it -means to show directories themselves rather than their contents. In -@code{rm} and @code{ln}, it means to not treat links to directories -specially. - -@item discard-all -@samp{-x} in @code{strip}. - -@item discard-locals -@samp{-X} in @code{strip}. - -@item dry-run -@samp{-n} in Make. - -@item ed -@samp{-e} in @code{diff}. - -@item elide-empty-files -@samp{-z} in @code{csplit}. - -@item end-delete -@samp{-x} in @code{wdiff}. - -@item end-insert -@samp{-z} in @code{wdiff}. - -@item entire-new-file -@samp{-N} in @code{diff}. - -@item environment-overrides -@samp{-e} in Make. - -@item eof -@samp{-e} in @code{xargs}. - -@item epoch -Used in GDB. - -@item error-limit -Used in @code{makeinfo}. - -@item error-output -@samp{-o} in @code{m4}. - -@item escape -@samp{-b} in @code{ls}. - -@item exclude-from -@samp{-X} in @code{tar}. - -@item exec -Used in GDB. - -@item exit -@samp{-x} in @code{xargs}. - -@item exit-0 -@samp{-e} in @code{unshar}. - -@item expand-tabs -@samp{-t} in @code{diff}. - -@item expression -@samp{-e} in @code{sed}. - -@item extern-only -@samp{-g} in @code{nm}. - -@item extract -@samp{-i} in @code{cpio}; -@samp{-x} in @code{tar}. - -@item faces -@samp{-f} in @code{finger}. - -@item fast -@samp{-f} in @code{su}. - -@item fatal-warnings -@samp{-E} in @code{m4}. - -@item file -@samp{-f} in @code{info}, @code{gawk}, Make, @code{mt}, and @code{tar}; -@samp{-n} in @code{sed}; -@samp{-r} in @code{touch}. - -@item field-separator -@samp{-F} in @code{gawk}. - -@item file-prefix -@samp{-b} in Bison. - -@item file-type -@samp{-F} in @code{ls}. - -@item files-from -@samp{-T} in @code{tar}. - -@item fill-column -Used in @code{makeinfo}. - -@item flag-truncation -@samp{-F} in @code{ptx}. - -@item fixed-output-files -@samp{-y} in Bison. - -@item follow -@samp{-f} in @code{tail}. - -@item footnote-style -Used in @code{makeinfo}. - -@item force -@samp{-f} in @code{cp}, @code{ln}, @code{mv}, and @code{rm}. - -@item force-prefix -@samp{-F} in @code{shar}. - -@item foreground -For server programs, run in the foreground; -in other words, don't do anything special to run the server -in the background. - -@item format -Used in @code{ls}, @code{time}, and @code{ptx}. - -@item freeze-state -@samp{-F} in @code{m4}. - -@item fullname -Used in GDB. - -@item gap-size -@samp{-g} in @code{ptx}. - -@item get -@samp{-x} in @code{tar}. - -@item graphic -@samp{-i} in @code{ul}. - -@item graphics -@samp{-g} in @code{recode}. - -@item group -@samp{-g} in @code{install}. - -@item gzip -@samp{-z} in @code{tar} and @code{shar}. - -@item hashsize -@samp{-H} in @code{m4}. - -@item header -@samp{-h} in @code{objdump} and @code{recode} - -@item heading -@samp{-H} in @code{who}. - -@item help -Used to ask for brief usage information. - -@item here-delimiter -@samp{-d} in @code{shar}. - -@item hide-control-chars -@samp{-q} in @code{ls}. - -@item html -In @code{makeinfo}, output HTML. - -@item idle -@samp{-u} in @code{who}. - -@item ifdef -@samp{-D} in @code{diff}. - -@item ignore -@samp{-I} in @code{ls}; -@samp{-x} in @code{recode}. - -@item ignore-all-space -@samp{-w} in @code{diff}. - -@item ignore-backups -@samp{-B} in @code{ls}. - -@item ignore-blank-lines -@samp{-B} in @code{diff}. - -@item ignore-case -@samp{-f} in @code{look} and @code{ptx}; -@samp{-i} in @code{diff} and @code{wdiff}. - -@item ignore-errors -@samp{-i} in Make. - -@item ignore-file -@samp{-i} in @code{ptx}. - -@item ignore-indentation -@samp{-I} in @code{etags}. - -@item ignore-init-file -@samp{-f} in Oleo. - -@item ignore-interrupts -@samp{-i} in @code{tee}. - -@item ignore-matching-lines -@samp{-I} in @code{diff}. - -@item ignore-space-change -@samp{-b} in @code{diff}. - -@item ignore-zeros -@samp{-i} in @code{tar}. - -@item include -@samp{-i} in @code{etags}; -@samp{-I} in @code{m4}. - -@item include-dir -@samp{-I} in Make. - -@item incremental -@samp{-G} in @code{tar}. - -@item info -@samp{-i}, @samp{-l}, and @samp{-m} in Finger. - -@item init-file -In some programs, specify the name of the file to read as the user's -init file. - -@item initial -@samp{-i} in @code{expand}. - -@item initial-tab -@samp{-T} in @code{diff}. - -@item inode -@samp{-i} in @code{ls}. - -@item interactive -@samp{-i} in @code{cp}, @code{ln}, @code{mv}, @code{rm}; -@samp{-e} in @code{m4}; -@samp{-p} in @code{xargs}; -@samp{-w} in @code{tar}. - -@item intermix-type -@samp{-p} in @code{shar}. - -@item iso-8601 -Used in @code{date} - -@item jobs -@samp{-j} in Make. - -@item just-print -@samp{-n} in Make. - -@item keep-going -@samp{-k} in Make. - -@item keep-files -@samp{-k} in @code{csplit}. - -@item kilobytes -@samp{-k} in @code{du} and @code{ls}. - -@item language -@samp{-l} in @code{etags}. - -@item less-mode -@samp{-l} in @code{wdiff}. - -@item level-for-gzip -@samp{-g} in @code{shar}. - -@item line-bytes -@samp{-C} in @code{split}. - -@item lines -Used in @code{split}, @code{head}, and @code{tail}. - -@item link -@samp{-l} in @code{cpio}. - -@item lint -@itemx lint-old -Used in @code{gawk}. - -@item list -@samp{-t} in @code{cpio}; -@samp{-l} in @code{recode}. - -@item list -@samp{-t} in @code{tar}. - -@item literal -@samp{-N} in @code{ls}. - -@item load-average -@samp{-l} in Make. - -@item login -Used in @code{su}. - -@item machine -No listing of which programs already use this; -someone should check to -see if any actually do, and tell @email{gnu@@gnu.org}. - -@item macro-name -@samp{-M} in @code{ptx}. - -@item mail -@samp{-m} in @code{hello} and @code{uname}. - -@item make-directories -@samp{-d} in @code{cpio}. - -@item makefile -@samp{-f} in Make. - -@item mapped -Used in GDB. - -@item max-args -@samp{-n} in @code{xargs}. - -@item max-chars -@samp{-n} in @code{xargs}. - -@item max-lines -@samp{-l} in @code{xargs}. - -@item max-load -@samp{-l} in Make. - -@item max-procs -@samp{-P} in @code{xargs}. - -@item mesg -@samp{-T} in @code{who}. - -@item message -@samp{-T} in @code{who}. - -@item minimal -@samp{-d} in @code{diff}. - -@item mixed-uuencode -@samp{-M} in @code{shar}. - -@item mode -@samp{-m} in @code{install}, @code{mkdir}, and @code{mkfifo}. - -@item modification-time -@samp{-m} in @code{tar}. - -@item multi-volume -@samp{-M} in @code{tar}. - -@item name-prefix -@samp{-a} in Bison. - -@item nesting-limit -@samp{-L} in @code{m4}. - -@item net-headers -@samp{-a} in @code{shar}. - -@item new-file -@samp{-W} in Make. - -@item no-builtin-rules -@samp{-r} in Make. - -@item no-character-count -@samp{-w} in @code{shar}. - -@item no-check-existing -@samp{-x} in @code{shar}. - -@item no-common -@samp{-3} in @code{wdiff}. - -@item no-create -@samp{-c} in @code{touch}. - -@item no-defines -@samp{-D} in @code{etags}. - -@item no-deleted -@samp{-1} in @code{wdiff}. - -@item no-dereference -@samp{-d} in @code{cp}. - -@item no-inserted -@samp{-2} in @code{wdiff}. - -@item no-keep-going -@samp{-S} in Make. - -@item no-lines -@samp{-l} in Bison. - -@item no-piping -@samp{-P} in @code{shar}. - -@item no-prof -@samp{-e} in @code{gprof}. - -@item no-regex -@samp{-R} in @code{etags}. - -@item no-sort -@samp{-p} in @code{nm}. - -@item no-split -Used in @code{makeinfo}. - -@item no-static -@samp{-a} in @code{gprof}. - -@item no-time -@samp{-E} in @code{gprof}. - -@item no-timestamp -@samp{-m} in @code{shar}. - -@item no-validate -Used in @code{makeinfo}. - -@item no-wait -Used in @code{emacsclient}. - -@item no-warn -Used in various programs to inhibit warnings. - -@item node -@samp{-n} in @code{info}. - -@item nodename -@samp{-n} in @code{uname}. - -@item nonmatching -@samp{-f} in @code{cpio}. - -@item nstuff -@samp{-n} in @code{objdump}. - -@item null -@samp{-0} in @code{xargs}. - -@item number -@samp{-n} in @code{cat}. - -@item number-nonblank -@samp{-b} in @code{cat}. - -@item numeric-sort -@samp{-n} in @code{nm}. - -@item numeric-uid-gid -@samp{-n} in @code{cpio} and @code{ls}. - -@item nx -Used in GDB. - -@item old-archive -@samp{-o} in @code{tar}. - -@item old-file -@samp{-o} in Make. - -@item one-file-system -@samp{-l} in @code{tar}, @code{cp}, and @code{du}. - -@item only-file -@samp{-o} in @code{ptx}. - -@item only-prof -@samp{-f} in @code{gprof}. - -@item only-time -@samp{-F} in @code{gprof}. - -@item options -@samp{-o} in @code{getopt}, @code{fdlist}, @code{fdmount}, -@code{fdmountd}, and @code{fdumount}. - -@item output -In various programs, specify the output file name. - -@item output-prefix -@samp{-o} in @code{shar}. - -@item override -@samp{-o} in @code{rm}. - -@item overwrite -@samp{-c} in @code{unshar}. - -@item owner -@samp{-o} in @code{install}. - -@item paginate -@samp{-l} in @code{diff}. - -@item paragraph-indent -Used in @code{makeinfo}. - -@item parents -@samp{-p} in @code{mkdir} and @code{rmdir}. - -@item pass-all -@samp{-p} in @code{ul}. - -@item pass-through -@samp{-p} in @code{cpio}. - -@item port -@samp{-P} in @code{finger}. - -@item portability -@samp{-c} in @code{cpio} and @code{tar}. - -@item posix -Used in @code{gawk}. - -@item prefix-builtins -@samp{-P} in @code{m4}. - -@item prefix -@samp{-f} in @code{csplit}. - -@item preserve -Used in @code{tar} and @code{cp}. - -@item preserve-environment -@samp{-p} in @code{su}. - -@item preserve-modification-time -@samp{-m} in @code{cpio}. - -@item preserve-order -@samp{-s} in @code{tar}. - -@item preserve-permissions -@samp{-p} in @code{tar}. - -@item print -@samp{-l} in @code{diff}. - -@item print-chars -@samp{-L} in @code{cmp}. - -@item print-data-base -@samp{-p} in Make. - -@item print-directory -@samp{-w} in Make. - -@item print-file-name -@samp{-o} in @code{nm}. - -@item print-symdefs -@samp{-s} in @code{nm}. - -@item printer -@samp{-p} in @code{wdiff}. - -@item prompt -@samp{-p} in @code{ed}. - -@item proxy -Specify an HTTP proxy. - -@item query-user -@samp{-X} in @code{shar}. - -@item question -@samp{-q} in Make. - -@item quiet -Used in many programs to inhibit the usual output. @strong{Note:} every -program accepting @samp{--quiet} should accept @samp{--silent} as a -synonym. - -@item quiet-unshar -@samp{-Q} in @code{shar} - -@item quote-name -@samp{-Q} in @code{ls}. - -@item rcs -@samp{-n} in @code{diff}. - -@item re-interval -Used in @code{gawk}. - -@item read-full-blocks -@samp{-B} in @code{tar}. - -@item readnow -Used in GDB. - -@item recon -@samp{-n} in Make. - -@item record-number -@samp{-R} in @code{tar}. - -@item recursive -Used in @code{chgrp}, @code{chown}, @code{cp}, @code{ls}, @code{diff}, -and @code{rm}. - -@item reference-limit -Used in @code{makeinfo}. - -@item references -@samp{-r} in @code{ptx}. - -@item regex -@samp{-r} in @code{tac} and @code{etags}. - -@item release -@samp{-r} in @code{uname}. - -@item reload-state -@samp{-R} in @code{m4}. - -@item relocation -@samp{-r} in @code{objdump}. - -@item rename -@samp{-r} in @code{cpio}. - -@item replace -@samp{-i} in @code{xargs}. - -@item report-identical-files -@samp{-s} in @code{diff}. - -@item reset-access-time -@samp{-a} in @code{cpio}. - -@item reverse -@samp{-r} in @code{ls} and @code{nm}. - -@item reversed-ed -@samp{-f} in @code{diff}. - -@item right-side-defs -@samp{-R} in @code{ptx}. - -@item same-order -@samp{-s} in @code{tar}. - -@item same-permissions -@samp{-p} in @code{tar}. - -@item save -@samp{-g} in @code{stty}. - -@item se -Used in GDB. - -@item sentence-regexp -@samp{-S} in @code{ptx}. - -@item separate-dirs -@samp{-S} in @code{du}. - -@item separator -@samp{-s} in @code{tac}. - -@item sequence -Used by @code{recode} to chose files or pipes for sequencing passes. - -@item shell -@samp{-s} in @code{su}. - -@item show-all -@samp{-A} in @code{cat}. - -@item show-c-function -@samp{-p} in @code{diff}. - -@item show-ends -@samp{-E} in @code{cat}. - -@item show-function-line -@samp{-F} in @code{diff}. - -@item show-tabs -@samp{-T} in @code{cat}. - -@item silent -Used in many programs to inhibit the usual output. -@strong{Note:} every program accepting -@samp{--silent} should accept @samp{--quiet} as a synonym. - -@item size -@samp{-s} in @code{ls}. - -@item socket -Specify a file descriptor for a network server to use for its socket, -instead of opening and binding a new socket. This provides a way to -run, in a nonpriveledged process, a server that normally needs a -reserved port number. - -@item sort -Used in @code{ls}. - -@item source -@samp{-W source} in @code{gawk}. - -@item sparse -@samp{-S} in @code{tar}. - -@item speed-large-files -@samp{-H} in @code{diff}. - -@item split-at -@samp{-E} in @code{unshar}. - -@item split-size-limit -@samp{-L} in @code{shar}. - -@item squeeze-blank -@samp{-s} in @code{cat}. - -@item start-delete -@samp{-w} in @code{wdiff}. - -@item start-insert -@samp{-y} in @code{wdiff}. - -@item starting-file -Used in @code{tar} and @code{diff} to specify which file within -a directory to start processing with. - -@item statistics -@samp{-s} in @code{wdiff}. - -@item stdin-file-list -@samp{-S} in @code{shar}. - -@item stop -@samp{-S} in Make. - -@item strict -@samp{-s} in @code{recode}. - -@item strip -@samp{-s} in @code{install}. - -@item strip-all -@samp{-s} in @code{strip}. - -@item strip-debug -@samp{-S} in @code{strip}. - -@item submitter -@samp{-s} in @code{shar}. - -@item suffix -@samp{-S} in @code{cp}, @code{ln}, @code{mv}. - -@item suffix-format -@samp{-b} in @code{csplit}. - -@item sum -@samp{-s} in @code{gprof}. - -@item summarize -@samp{-s} in @code{du}. - -@item symbolic -@samp{-s} in @code{ln}. - -@item symbols -Used in GDB and @code{objdump}. - -@item synclines -@samp{-s} in @code{m4}. - -@item sysname -@samp{-s} in @code{uname}. - -@item tabs -@samp{-t} in @code{expand} and @code{unexpand}. - -@item tabsize -@samp{-T} in @code{ls}. - -@item terminal -@samp{-T} in @code{tput} and @code{ul}. -@samp{-t} in @code{wdiff}. - -@item text -@samp{-a} in @code{diff}. - -@item text-files -@samp{-T} in @code{shar}. - -@item time -Used in @code{ls} and @code{touch}. - -@item timeout -Specify how long to wait before giving up on some operation. - -@item to-stdout -@samp{-O} in @code{tar}. - -@item total -@samp{-c} in @code{du}. - -@item touch -@samp{-t} in Make, @code{ranlib}, and @code{recode}. - -@item trace -@samp{-t} in @code{m4}. - -@item traditional -@samp{-t} in @code{hello}; -@samp{-W traditional} in @code{gawk}; -@samp{-G} in @code{ed}, @code{m4}, and @code{ptx}. - -@item tty -Used in GDB. - -@item typedefs -@samp{-t} in @code{ctags}. - -@item typedefs-and-c++ -@samp{-T} in @code{ctags}. - -@item typeset-mode -@samp{-t} in @code{ptx}. - -@item uncompress -@samp{-z} in @code{tar}. - -@item unconditional -@samp{-u} in @code{cpio}. - -@item undefine -@samp{-U} in @code{m4}. - -@item undefined-only -@samp{-u} in @code{nm}. - -@item update -@samp{-u} in @code{cp}, @code{ctags}, @code{mv}, @code{tar}. - -@item usage -Used in @code{gawk}; same as @samp{--help}. - -@item uuencode -@samp{-B} in @code{shar}. - -@item vanilla-operation -@samp{-V} in @code{shar}. - -@item verbose -Print more information about progress. Many programs support this. - -@item verify -@samp{-W} in @code{tar}. - -@item version -Print the version number. - -@item version-control -@samp{-V} in @code{cp}, @code{ln}, @code{mv}. - -@item vgrind -@samp{-v} in @code{ctags}. - -@item volume -@samp{-V} in @code{tar}. - -@item what-if -@samp{-W} in Make. - -@item whole-size-limit -@samp{-l} in @code{shar}. - -@item width -@samp{-w} in @code{ls} and @code{ptx}. - -@item word-regexp -@samp{-W} in @code{ptx}. - -@item writable -@samp{-T} in @code{who}. - -@item zeros -@samp{-z} in @code{gprof}. -@end table - -@node Memory Usage -@section Memory Usage -@cindex memory usage - -If a program typically uses just a few meg of memory, don't bother making any -effort to reduce memory usage. For example, if it is impractical for -other reasons to operate on files more than a few meg long, it is -reasonable to read entire input files into core to operate on them. - -However, for programs such as @code{cat} or @code{tail}, that can -usefully operate on very large files, it is important to avoid using a -technique that would artificially limit the size of files it can handle. -If a program works by lines and could be applied to arbitrary -user-supplied input files, it should keep only a line in memory, because -this is not very hard and users will want to be able to operate on input -files that are bigger than will fit in core all at once. - -If your program creates complicated data structures, just make them in -core and give a fatal error if @code{malloc} returns zero. - -@node File Usage -@section File Usage -@cindex file usage - -Programs should be prepared to operate when @file{/usr} and @file{/etc} -are read-only file systems. Thus, if the program manages log files, -lock files, backup files, score files, or any other files which are -modified for internal purposes, these files should not be stored in -@file{/usr} or @file{/etc}. - -There are two exceptions. @file{/etc} is used to store system -configuration information; it is reasonable for a program to modify -files in @file{/etc} when its job is to update the system configuration. -Also, if the user explicitly asks to modify one file in a directory, it -is reasonable for the program to store other files in the same -directory. - -@node Writing C -@chapter Making The Best Use of C - -This @value{CHAPTER} provides advice on how best to use the C language -when writing GNU software. - -@menu -* Formatting:: Formatting Your Source Code -* Comments:: Commenting Your Work -* Syntactic Conventions:: Clean Use of C Constructs -* Names:: Naming Variables, Functions, and Files -* System Portability:: Portability between different operating systems -* CPU Portability:: Supporting the range of CPU types -* System Functions:: Portability and ``standard'' library functions -* Internationalization:: Techniques for internationalization -* Mmap:: How you can safely use @code{mmap}. -@end menu - -@node Formatting -@section Formatting Your Source Code -@cindex formatting source code - -@cindex open brace -@cindex braces, in C source -It is important to put the open-brace that starts the body of a C -function in column zero, and avoid putting any other open-brace or -open-parenthesis or open-bracket in column zero. Several tools look -for open-braces in column zero to find the beginnings of C functions. -These tools will not work on code not formatted that way. - -It is also important for function definitions to start the name of the -function in column zero. This helps people to search for function -definitions, and may also help certain tools recognize them. Thus, -the proper format is this: - -@example -static char * -concat (s1, s2) /* Name starts in column zero here */ - char *s1, *s2; -@{ /* Open brace in column zero here */ - @dots{} -@} -@end example - -@noindent -or, if you want to use Standard C syntax, format the definition like -this: - -@example -static char * -concat (char *s1, char *s2) -@{ - @dots{} -@} -@end example - -In Standard C, if the arguments don't fit nicely on one line, -split it like this: - -@example -int -lots_of_args (int an_integer, long a_long, short a_short, - double a_double, float a_float) -@dots{} -@end example - -The rest of this section gives our recommendations for other aspects of -C formatting style, which is also the default style of the @code{indent} -program in version 1.2 and newer. It corresponds to the options - -@smallexample --nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2 --ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob -@end smallexample - -We don't think of these recommendations as requirements, because it -causes no problems for users if two different programs have different -formatting styles. - -But whatever style you use, please use it consistently, since a mixture -of styles within one program tends to look ugly. If you are -contributing changes to an existing program, please follow the style of -that program. - -For the body of the function, our recommended style looks like this: - -@example -if (x < foo (y, z)) - haha = bar[4] + 5; -else - @{ - while (z) - @{ - haha += foo (z, z); - z--; - @} - return ++x + bar (); - @} -@end example - -@cindex spaces before open-paren -We find it easier to read a program when it has spaces before the -open-parentheses and after the commas. Especially after the commas. - -When you split an expression into multiple lines, split it -before an operator, not after one. Here is the right way: - -@cindex expressions, splitting -@example -if (foo_this_is_long && bar > win (x, y, z) - && remaining_condition) -@end example - -Try to avoid having two operators of different precedence at the same -level of indentation. For example, don't write this: - -@example -mode = (inmode[j] == VOIDmode - || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]) - ? outmode[j] : inmode[j]); -@end example - -Instead, use extra parentheses so that the indentation shows the nesting: - -@example -mode = ((inmode[j] == VOIDmode - || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]))) - ? outmode[j] : inmode[j]); -@end example - -Insert extra parentheses so that Emacs will indent the code properly. -For example, the following indentation looks nice if you do it by hand, - -@example -v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 - + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000; -@end example - -@noindent -but Emacs would alter it. Adding a set of parentheses produces -something that looks equally nice, and which Emacs will preserve: - -@example -v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 - + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000); -@end example - -Format do-while statements like this: - -@example -do - @{ - a = foo (a); - @} -while (a > 0); -@end example - -@cindex formfeed -@cindex control-L -Please use formfeed characters (control-L) to divide the program into -pages at logical places (but not within a function). It does not matter -just how long the pages are, since they do not have to fit on a printed -page. The formfeeds should appear alone on lines by themselves. - -@node Comments -@section Commenting Your Work -@cindex commenting - -Every program should start with a comment saying briefly what it is for. -Example: @samp{fmt - filter for simple filling of text}. - -Please write the comments in a GNU program in English, because English -is the one language that nearly all programmers in all countries can -read. If you do not write English well, please write comments in -English as well as you can, then ask other people to help rewrite them. -If you can't write comments in English, please find someone to work with -you and translate your comments into English. - -Please put a comment on each function saying what the function does, -what sorts of arguments it gets, and what the possible values of -arguments mean and are used for. It is not necessary to duplicate in -words the meaning of the C argument declarations, if a C type is being -used in its customary fashion. If there is anything nonstandard about -its use (such as an argument of type @code{char *} which is really the -address of the second character of a string, not the first), or any -possible values that would not work the way one would expect (such as, -that strings containing newlines are not guaranteed to work), be sure -to say so. - -Also explain the significance of the return value, if there is one. - -Please put two spaces after the end of a sentence in your comments, so -that the Emacs sentence commands will work. Also, please write -complete sentences and capitalize the first word. If a lower-case -identifier comes at the beginning of a sentence, don't capitalize it! -Changing the spelling makes it a different identifier. If you don't -like starting a sentence with a lower case letter, write the sentence -differently (e.g., ``The identifier lower-case is @dots{}''). - -The comment on a function is much clearer if you use the argument -names to speak about the argument values. The variable name itself -should be lower case, but write it in upper case when you are speaking -about the value rather than the variable itself. Thus, ``the inode -number NODE_NUM'' rather than ``an inode''. - -There is usually no purpose in restating the name of the function in -the comment before it, because the reader can see that for himself. -There might be an exception when the comment is so long that the function -itself would be off the bottom of the screen. - -There should be a comment on each static variable as well, like this: - -@example -/* Nonzero means truncate lines in the display; - zero means continue them. */ -int truncate_lines; -@end example - -@cindex conditionals, comments for -@cindex @code{#endif}, commenting -Every @samp{#endif} should have a comment, except in the case of short -conditionals (just a few lines) that are not nested. The comment should -state the condition of the conditional that is ending, @emph{including -its sense}. @samp{#else} should have a comment describing the condition -@emph{and sense} of the code that follows. For example: - -@example -@group -#ifdef foo - @dots{} -#else /* not foo */ - @dots{} -#endif /* not foo */ -@end group -@group -#ifdef foo - @dots{} -#endif /* foo */ -@end group -@end example - -@noindent -but, by contrast, write the comments this way for a @samp{#ifndef}: - -@example -@group -#ifndef foo - @dots{} -#else /* foo */ - @dots{} -#endif /* foo */ -@end group -@group -#ifndef foo - @dots{} -#endif /* not foo */ -@end group -@end example - -@node Syntactic Conventions -@section Clean Use of C Constructs -@cindex syntactic conventions - -@cindex implicit @code{int} -@cindex function argument, declaring -Please explicitly declare the types of all objects. For example, you -should explicitly declare all arguments to functions, and you should -declare functions to return @code{int} rather than omitting the -@code{int}. - -@cindex compiler warnings -@cindex @samp{-Wall} compiler option -Some programmers like to use the GCC @samp{-Wall} option, and change the -code whenever it issues a warning. If you want to do this, then do. -Other programmers prefer not to use @samp{-Wall}, because it gives -warnings for valid and legitimate code which they do not want to change. -If you want to do this, then do. The compiler should be your servant, -not your master. - -Declarations of external functions and functions to appear later in the -source file should all go in one place near the beginning of the file -(somewhere before the first function definition in the file), or else -should go in a header file. Don't put @code{extern} declarations inside -functions. - -@cindex temporary variables -It used to be common practice to use the same local variables (with -names like @code{tem}) over and over for different values within one -function. Instead of doing this, it is better declare a separate local -variable for each distinct purpose, and give it a name which is -meaningful. This not only makes programs easier to understand, it also -facilitates optimization by good compilers. You can also move the -declaration of each local variable into the smallest scope that includes -all its uses. This makes the program even cleaner. - -Don't use local variables or parameters that shadow global identifiers. - -@cindex multiple variables in a line -Don't declare multiple variables in one declaration that spans lines. -Start a new declaration on each line, instead. For example, instead -of this: - -@example -@group -int foo, - bar; -@end group -@end example - -@noindent -write either this: - -@example -int foo, bar; -@end example - -@noindent -or this: - -@example -int foo; -int bar; -@end example - -@noindent -(If they are global variables, each should have a comment preceding it -anyway.) - -When you have an @code{if}-@code{else} statement nested in another -@code{if} statement, always put braces around the @code{if}-@code{else}. -Thus, never write like this: - -@example -if (foo) - if (bar) - win (); - else - lose (); -@end example - -@noindent -always like this: - -@example -if (foo) - @{ - if (bar) - win (); - else - lose (); - @} -@end example - -If you have an @code{if} statement nested inside of an @code{else} -statement, either write @code{else if} on one line, like this, - -@example -if (foo) - @dots{} -else if (bar) - @dots{} -@end example - -@noindent -with its @code{then}-part indented like the preceding @code{then}-part, -or write the nested @code{if} within braces like this: - -@example -if (foo) - @dots{} -else - @{ - if (bar) - @dots{} - @} -@end example - -Don't declare both a structure tag and variables or typedefs in the -same declaration. Instead, declare the structure tag separately -and then use it to declare the variables or typedefs. - -Try to avoid assignments inside @code{if}-conditions. For example, -don't write this: - -@example -if ((foo = (char *) malloc (sizeof *foo)) == 0) - fatal ("virtual memory exhausted"); -@end example - -@noindent -instead, write this: - -@example -foo = (char *) malloc (sizeof *foo); -if (foo == 0) - fatal ("virtual memory exhausted"); -@end example - -@pindex lint -Don't make the program ugly to placate @code{lint}. Please don't insert any -casts to @code{void}. Zero without a cast is perfectly fine as a null -pointer constant, except when calling a varargs function. - -@node Names -@section Naming Variables, Functions, and Files - -@cindex names of variables, functions, and files -The names of global variables and functions in a program serve as -comments of a sort. So don't choose terse names---instead, look for -names that give useful information about the meaning of the variable or -function. In a GNU program, names should be English, like other -comments. - -Local variable names can be shorter, because they are used only within -one context, where (presumably) comments explain their purpose. - -Try to limit your use of abbreviations in symbol names. It is ok to -make a few abbreviations, explain what they mean, and then use them -frequently, but don't use lots of obscure abbreviations. - -Please use underscores to separate words in a name, so that the Emacs -word commands can be useful within them. Stick to lower case; reserve -upper case for macros and @code{enum} constants, and for name-prefixes -that follow a uniform convention. - -For example, you should use names like @code{ignore_space_change_flag}; -don't use names like @code{iCantReadThis}. - -Variables that indicate whether command-line options have been -specified should be named after the meaning of the option, not after -the option-letter. A comment should state both the exact meaning of -the option and its letter. For example, - -@example -@group -/* Ignore changes in horizontal whitespace (-b). */ -int ignore_space_change_flag; -@end group -@end example - -When you want to define names with constant integer values, use -@code{enum} rather than @samp{#define}. GDB knows about enumeration -constants. - -@cindex file-name limitations -@pindex doschk -You might want to make sure that none of the file names would conflict -the files were loaded onto an MS-DOS file system which shortens the -names. You can use the program @code{doschk} to test for this. - -Some GNU programs were designed to limit themselves to file names of 14 -characters or less, to avoid file name conflicts if they are read into -older System V systems. Please preserve this feature in the existing -GNU programs that have it, but there is no need to do this in new GNU -programs. @code{doschk} also reports file names longer than 14 -characters. - -@node System Portability -@section Portability between System Types -@cindex portability, between system types - -In the Unix world, ``portability'' refers to porting to different Unix -versions. For a GNU program, this kind of portability is desirable, but -not paramount. - -The primary purpose of GNU software is to run on top of the GNU kernel, -compiled with the GNU C compiler, on various types of @sc{cpu}. So the -kinds of portability that are absolutely necessary are quite limited. -But it is important to support Linux-based GNU systems, since they -are the form of GNU that is popular. - -Beyond that, it is good to support the other free operating systems -(*BSD), and it is nice to support other Unix-like systems if you want -to. Supporting a variety of Unix-like systems is desirable, although -not paramount. It is usually not too hard, so you may as well do it. -But you don't have to consider it an obligation, if it does turn out to -be hard. - -@pindex autoconf -The easiest way to achieve portability to most Unix-like systems is to -use Autoconf. It's unlikely that your program needs to know more -information about the host platform than Autoconf can provide, simply -because most of the programs that need such knowledge have already been -written. - -Avoid using the format of semi-internal data bases (e.g., directories) -when there is a higher-level alternative (@code{readdir}). - -@cindex non-@sc{posix} systems, and portability -As for systems that are not like Unix, such as MSDOS, Windows, the -Macintosh, VMS, and MVS, supporting them is often a lot of work. When -that is the case, it is better to spend your time adding features that -will be useful on GNU and GNU/Linux, rather than on supporting other -incompatible systems. - -It is a good idea to define the ``feature test macro'' -@code{_GNU_SOURCE} when compiling your C files. When you compile on GNU -or GNU/Linux, this will enable the declarations of GNU library extension -functions, and that will usually give you a compiler error message if -you define the same function names in some other way in your program. -(You don't have to actually @emph{use} these functions, if you prefer -to make the program more portable to other systems.) - -But whether or not you use these GNU extensions, you should avoid -using their names for any other meanings. Doing so would make it hard -to move your code into other GNU programs. - -@node CPU Portability -@section Portability between @sc{cpu}s - -@cindex data types, and portability -@cindex portability, and data types -Even GNU systems will differ because of differences among @sc{cpu} -types---for example, difference in byte ordering and alignment -requirements. It is absolutely essential to handle these differences. -However, don't make any effort to cater to the possibility that an -@code{int} will be less than 32 bits. We don't support 16-bit machines -in GNU. - -Similarly, don't make any effort to cater to the possibility that -@code{long} will be smaller than predefined types like @code{size_t}. -For example, the following code is ok: - -@example -printf ("size = %lu\n", (unsigned long) sizeof array); -printf ("diff = %ld\n", (long) (pointer2 - pointer1)); -@end example - -1989 Standard C requires this to work, and we know of only one -counterexample: 64-bit programs on Microsoft Windows IA-64. We will -leave it to those who want to port GNU programs to that environment -to figure out how to do it. - -Predefined file-size types like @code{off_t} are an exception: they are -longer than @code{long} on many platforms, so code like the above won't -work with them. One way to print an @code{off_t} value portably is to -print its digits yourself, one by one. - -Don't assume that the address of an @code{int} object is also the -address of its least-significant byte. This is false on big-endian -machines. Thus, don't make the following mistake: - -@example -int c; -@dots{} -while ((c = getchar()) != EOF) - write(file_descriptor, &c, 1); -@end example - -When calling functions, you need not worry about the difference between -pointers of various types, or between pointers and integers. On most -machines, there's no difference anyway. As for the few machines where -there is a difference, all of them support Standard C prototypes, so you can -use prototypes (perhaps conditionalized to be active only in Standard C) -to make the code work on those systems. - -In certain cases, it is ok to pass integer and pointer arguments -indiscriminately to the same function, and use no prototype on any -system. For example, many GNU programs have error-reporting functions -that pass their arguments along to @code{printf} and friends: - -@example -error (s, a1, a2, a3) - char *s; - char *a1, *a2, *a3; -@{ - fprintf (stderr, "error: "); - fprintf (stderr, s, a1, a2, a3); -@} -@end example - -@noindent -In practice, this works on all machines, since a pointer is generally -the widest possible kind of argument; it is much simpler than any -``correct'' alternative. Be sure @emph{not} to use a prototype for such -functions. - -If you have decided to use Standard C, then you can instead define -@code{error} using @file{stdarg.h}, and pass the arguments along to -@code{vfprintf}. - -@cindex casting pointers to integers -Avoid casting pointers to integers if you can. Such casts greatly -reduce portability, and in most programs they are easy to avoid. In the -cases where casting pointers to integers is essential---such as, a Lisp -interpreter which stores type information as well as an address in one -word---you'll have to make explicit provisions to handle different word -sizes. You will also need to make provision for systems in which the -normal range of addresses you can get from @code{malloc} starts far away -from zero. - -@node System Functions -@section Calling System Functions -@cindex library functions, and portability -@cindex portability, and library functions - -C implementations differ substantially. Standard C reduces but does -not eliminate the incompatibilities; meanwhile, many GNU packages still -support pre-standard compilers because this is not hard to do. This -chapter gives recommendations for how to use the more-or-less standard C -library functions to avoid unnecessary loss of portability. - -@itemize @bullet -@item -Don't use the return value of @code{sprintf}. It returns the number of -characters written on some systems, but not on all systems. - -@item -Be aware that @code{vfprintf} is not always available. - -@item -@code{main} should be declared to return type @code{int}. It should -terminate either by calling @code{exit} or by returning the integer -status code; make sure it cannot ever return an undefined value. - -@cindex declaration for system functions -@item -Don't declare system functions explicitly. - -Almost any declaration for a system function is wrong on some system. -To minimize conflicts, leave it to the system header files to declare -system functions. If the headers don't declare a function, let it -remain undeclared. - -While it may seem unclean to use a function without declaring it, in -practice this works fine for most system library functions on the -systems where this really happens; thus, the disadvantage is only -theoretical. By contrast, actual declarations have frequently caused -actual conflicts. - -@item -If you must declare a system function, don't specify the argument types. -Use an old-style declaration, not a Standard C prototype. The more you -specify about the function, the more likely a conflict. - -@item -In particular, don't unconditionally declare @code{malloc} or -@code{realloc}. - -Most GNU programs use those functions just once, in functions -conventionally named @code{xmalloc} and @code{xrealloc}. These -functions call @code{malloc} and @code{realloc}, respectively, and -check the results. - -Because @code{xmalloc} and @code{xrealloc} are defined in your program, -you can declare them in other files without any risk of type conflict. - -On most systems, @code{int} is the same length as a pointer; thus, the -calls to @code{malloc} and @code{realloc} work fine. For the few -exceptional systems (mostly 64-bit machines), you can use -@strong{conditionalized} declarations of @code{malloc} and -@code{realloc}---or put these declarations in configuration files -specific to those systems. - -@cindex string library functions -@item -The string functions require special treatment. Some Unix systems have -a header file @file{string.h}; others have @file{strings.h}. Neither -file name is portable. There are two things you can do: use Autoconf to -figure out which file to include, or don't include either file. - -@item -If you don't include either strings file, you can't get declarations for -the string functions from the header file in the usual way. - -That causes less of a problem than you might think. The newer standard -string functions should be avoided anyway because many systems still -don't support them. The string functions you can use are these: - -@example -strcpy strncpy strcat strncat -strlen strcmp strncmp -strchr strrchr -@end example - -The copy and concatenate functions work fine without a declaration as -long as you don't use their values. Using their values without a -declaration fails on systems where the width of a pointer differs from -the width of @code{int}, and perhaps in other cases. It is trivial to -avoid using their values, so do that. - -The compare functions and @code{strlen} work fine without a declaration -on most systems, possibly all the ones that GNU software runs on. -You may find it necessary to declare them @strong{conditionally} on a -few systems. - -The search functions must be declared to return @code{char *}. Luckily, -there is no variation in the data type they return. But there is -variation in their names. Some systems give these functions the names -@code{index} and @code{rindex}; other systems use the names -@code{strchr} and @code{strrchr}. Some systems support both pairs of -names, but neither pair works on all systems. - -You should pick a single pair of names and use it throughout your -program. (Nowadays, it is better to choose @code{strchr} and -@code{strrchr} for new programs, since those are the standard -names.) Declare both of those names as functions returning @code{char -*}. On systems which don't support those names, define them as macros -in terms of the other pair. For example, here is what to put at the -beginning of your file (or in a header) if you want to use the names -@code{strchr} and @code{strrchr} throughout: - -@example -#ifndef HAVE_STRCHR -#define strchr index -#endif -#ifndef HAVE_STRRCHR -#define strrchr rindex -#endif - -char *strchr (); -char *strrchr (); -@end example -@end itemize - -Here we assume that @code{HAVE_STRCHR} and @code{HAVE_STRRCHR} are -macros defined in systems where the corresponding functions exist. -One way to get them properly defined is to use Autoconf. - -@node Internationalization -@section Internationalization -@cindex internationalization - -@pindex gettext -GNU has a library called GNU gettext that makes it easy to translate the -messages in a program into various languages. You should use this -library in every program. Use English for the messages as they appear -in the program, and let gettext provide the way to translate them into -other languages. - -Using GNU gettext involves putting a call to the @code{gettext} macro -around each string that might need translation---like this: - -@example -printf (gettext ("Processing file `%s'...")); -@end example - -@noindent -This permits GNU gettext to replace the string @code{"Processing file -`%s'..."} with a translated version. - -Once a program uses gettext, please make a point of writing calls to -@code{gettext} when you add new strings that call for translation. - -Using GNU gettext in a package involves specifying a @dfn{text domain -name} for the package. The text domain name is used to separate the -translations for this package from the translations for other packages. -Normally, the text domain name should be the same as the name of the -package---for example, @samp{fileutils} for the GNU file utilities. - -@cindex message text, and internationalization -To enable gettext to work well, avoid writing code that makes -assumptions about the structure of words or sentences. When you want -the precise text of a sentence to vary depending on the data, use two or -more alternative string constants each containing a complete sentences, -rather than inserting conditionalized words or phrases into a single -sentence framework. - -Here is an example of what not to do: - -@example -printf ("%d file%s processed", nfiles, - nfiles != 1 ? "s" : ""); -@end example - -@noindent -The problem with that example is that it assumes that plurals are made -by adding `s'. If you apply gettext to the format string, like this, - -@example -printf (gettext ("%d file%s processed"), nfiles, - nfiles != 1 ? "s" : ""); -@end example - -@noindent -the message can use different words, but it will still be forced to use -`s' for the plural. Here is a better way: - -@example -printf ((nfiles != 1 ? "%d files processed" - : "%d file processed"), - nfiles); -@end example - -@noindent -This way, you can apply gettext to each of the two strings -independently: - -@example -printf ((nfiles != 1 ? gettext ("%d files processed") - : gettext ("%d file processed")), - nfiles); -@end example - -@noindent -This can be any method of forming the plural of the word for ``file'', and -also handles languages that require agreement in the word for -``processed''. - -A similar problem appears at the level of sentence structure with this -code: - -@example -printf ("# Implicit rule search has%s been done.\n", - f->tried_implicit ? "" : " not"); -@end example - -@noindent -Adding @code{gettext} calls to this code cannot give correct results for -all languages, because negation in some languages requires adding words -at more than one place in the sentence. By contrast, adding -@code{gettext} calls does the job straightfowardly if the code starts -out like this: - -@example -printf (f->tried_implicit - ? "# Implicit rule search has been done.\n", - : "# Implicit rule search has not been done.\n"); -@end example - -@node Mmap -@section Mmap -@findex mmap - -Don't assume that @code{mmap} either works on all files or fails -for all files. It may work on some files and fail on others. - -The proper way to use @code{mmap} is to try it on the specific file for -which you want to use it---and if @code{mmap} doesn't work, fall back on -doing the job in another way using @code{read} and @code{write}. - -The reason this precaution is needed is that the GNU kernel (the HURD) -provides a user-extensible file system, in which there can be many -different kinds of ``ordinary files.'' Many of them support -@code{mmap}, but some do not. It is important to make programs handle -all these kinds of files. - -@node Documentation -@chapter Documenting Programs -@cindex documentation - -A GNU program should ideally come with full free documentation, adequate -for both reference and tutorial purposes. If the package can be -programmed or extended, the documentation should cover programming or -extending it, as well as just using it. - -@menu -* GNU Manuals:: Writing proper manuals. -* Doc Strings and Manuals:: Compiling doc strings doesn't make a manual. -* Manual Structure Details:: Specific structure conventions. -* License for Manuals:: Writing the distribution terms for a manual. -* Manual Credits:: Giving credit to documentation contributors. -* Printed Manuals:: Mentioning the printed manual. -* NEWS File:: NEWS files supplement manuals. -* Change Logs:: Recording Changes -* Man Pages:: Man pages are secondary. -* Reading other Manuals:: How far you can go in learning - from other manuals. -@end menu - -@node GNU Manuals -@section GNU Manuals - -The preferred document format for the GNU system is the Texinfo -formatting language. Every GNU package should (ideally) have -documentation in Texinfo both for reference and for learners. Texinfo -makes it possible to produce a good quality formatted book, using -@TeX{}, and to generate an Info file. It is also possible to generate -HTML output from Texinfo source. See the Texinfo manual, either the -hardcopy, or the on-line version available through @code{info} or the -Emacs Info subsystem (@kbd{C-h i}). - -Nowadays some other formats such as Docbook and Sgmltexi can be -converted automatically into Texinfo. It is ok to produce the Texinfo -documentation by conversion this way, as long as it gives good results. - -Programmers often find it most natural to structure the documentation -following the structure of the implementation, which they know. But -this structure is not necessarily good for explaining how to use the -program; it may be irrelevant and confusing for a user. - -At every level, from the sentences in a paragraph to the grouping of -topics into separate manuals, the right way to structure documentation -is according to the concepts and questions that a user will have in mind -when reading it. Sometimes this structure of ideas matches the -structure of the implementation of the software being documented---but -often they are different. Often the most important part of learning to -write good documentation is learning to notice when you are structuring -the documentation like the implementation, and think about better -alternatives. - -For example, each program in the GNU system probably ought to be -documented in one manual; but this does not mean each program should -have its own manual. That would be following the structure of the -implementation, rather than the structure that helps the user -understand. - -Instead, each manual should cover a coherent @emph{topic}. For example, -instead of a manual for @code{diff} and a manual for @code{diff3}, we -have one manual for ``comparison of files'' which covers both of those -programs, as well as @code{cmp}. By documenting these programs -together, we can make the whole subject clearer. - -The manual which discusses a program should certainly document all of -the program's command-line options and all of its commands. It should -give examples of their use. But don't organize the manual as a list of -features. Instead, organize it logically, by subtopics. Address the -questions that a user will ask when thinking about the job that the -program does. - -In general, a GNU manual should serve both as tutorial and reference. -It should be set up for convenient access to each topic through Info, -and for reading straight through (appendixes aside). A GNU manual -should give a good introduction to a beginner reading through from the -start, and should also provide all the details that hackers want. -The Bison manual is a good example of this---please take a look at it -to see what we mean. - -That is not as hard as it first sounds. Arrange each chapter as a -logical breakdown of its topic, but order the sections, and write their -text, so that reading the chapter straight through makes sense. Do -likewise when structuring the book into chapters, and when structuring a -section into paragraphs. The watchword is, @emph{at each point, address -the most fundamental and important issue raised by the preceding text.} - -If necessary, add extra chapters at the beginning of the manual which -are purely tutorial and cover the basics of the subject. These provide -the framework for a beginner to understand the rest of the manual. The -Bison manual provides a good example of how to do this. - -To serve as a reference, a manual should have an Index that list all the -functions, variables, options, and important concepts that are part of -the program. One combined Index should do for a short manual, but -sometimes for a complex package it is better to use multiple indices. -The Texinfo manual includes advice on preparing good index entries, see -@ref{Index Entries, , Making Index Entries, texinfo, The GNU Texinfo -Manual}, and see @ref{Indexing Commands, , Defining the Entries of an -Index, texinfo, The GNU Texinfo manual}. - -Don't use Unix man pages as a model for how to write GNU documentation; -most of them are terse, badly structured, and give inadequate -explanation of the underlying concepts. (There are, of course, some -exceptions.) Also, Unix man pages use a particular format which is -different from what we use in GNU manuals. - -Please include an email address in the manual for where to report -bugs @emph{in the manual}. - -Please do not use the term ``pathname'' that is used in Unix -documentation; use ``file name'' (two words) instead. We use the term -``path'' only for search paths, which are lists of directory names. - -Please do not use the term ``illegal'' to refer to erroneous input to a -computer program. Please use ``invalid'' for this, and reserve the term -``illegal'' for activities punishable by law. - -@node Doc Strings and Manuals -@section Doc Strings and Manuals - -Some programming systems, such as Emacs, provide a documentation string -for each function, command or variable. You may be tempted to write a -reference manual by compiling the documentation strings and writing a -little additional text to go around them---but you must not do it. That -approach is a fundamental mistake. The text of well-written -documentation strings will be entirely wrong for a manual. - -A documentation string needs to stand alone---when it appears on the -screen, there will be no other text to introduce or explain it. -Meanwhile, it can be rather informal in style. - -The text describing a function or variable in a manual must not stand -alone; it appears in the context of a section or subsection. Other text -at the beginning of the section should explain some of the concepts, and -should often make some general points that apply to several functions or -variables. The previous descriptions of functions and variables in the -section will also have given information about the topic. A description -written to stand alone would repeat some of that information; this -redundance looks bad. Meanwhile, the informality that is acceptable in -a documentation string is totally unacceptable in a manual. - -The only good way to use documentation strings in writing a good manual -is to use them as a source of information for writing good text. - -@node Manual Structure Details -@section Manual Structure Details -@cindex manual structure - -The title page of the manual should state the version of the programs or -packages documented in the manual. The Top node of the manual should -also contain this information. If the manual is changing more -frequently than or independent of the program, also state a version -number for the manual in both of these places. - -Each program documented in the manual should have a node named -@samp{@var{program} Invocation} or @samp{Invoking @var{program}}. This -node (together with its subnodes, if any) should describe the program's -command line arguments and how to run it (the sort of information people -would look in a man page for). Start with an @samp{@@example} -containing a template for all the options and arguments that the program -uses. - -Alternatively, put a menu item in some menu whose item name fits one of -the above patterns. This identifies the node which that item points to -as the node for this purpose, regardless of the node's actual name. - -The @samp{--usage} feature of the Info reader looks for such a node -or menu item in order to find the relevant text, so it is essential -for every Texinfo file to have one. - -If one manual describes several programs, it should have such a node for -each program described in the manual. - -@node License for Manuals -@section License for Manuals -@cindex license for manuals - -Please use the GNU Free Documentation License for all GNU manuals that -are more than a few pages long. Likewise for a collection of short -documents---you only need one copy of the GNU FDL for the whole -collection. For a single short document, you can use a very permissive -non-copyleft license, to avoid taking up space with a long license. - -See @uref{http://www.gnu.org/copyleft/fdl-howto.html} for more explanation -of how to employ the GFDL. - -Note that it is not obligatory to include a copy of the GNU GPL or GNU -LGPL in a manual whose license is neither the GPL nor the LGPL. It can -be a good idea to include the program's license in a large manual; in a -short manual, whose size would be increased considerably by including -the program's license, it is probably better not to include it. - -@node Manual Credits -@section Manual Credits -@cindex credits for manuals - -Please credit the principal human writers of the manual as the authors, -on the title page of the manual. If a company sponsored the work, thank -the company in a suitable place in the manual, but do not cite the -company as an author. - -@node Printed Manuals -@section Printed Manuals - -The FSF publishes some GNU manuals in printed form. To encourage sales -of these manuals, the on-line versions of the manual should mention at -the very start that the printed manual is available and should point at -information for getting it---for instance, with a link to the page -@url{http://www.gnu.org/order/order.html}. This should not be included -in the printed manual, though, because there it is redundant. - -It is also useful to explain in the on-line forms of the manual how the -user can print out the manual from the sources. - -@node NEWS File -@section The NEWS File -@cindex @file{NEWS} file - -In addition to its manual, the package should have a file named -@file{NEWS} which contains a list of user-visible changes worth -mentioning. In each new release, add items to the front of the file and -identify the version they pertain to. Don't discard old items; leave -them in the file after the newer items. This way, a user upgrading from -any previous version can see what is new. - -If the @file{NEWS} file gets very long, move some of the older items -into a file named @file{ONEWS} and put a note at the end referring the -user to that file. - -@node Change Logs -@section Change Logs -@cindex change logs - -Keep a change log to describe all the changes made to program source -files. The purpose of this is so that people investigating bugs in the -future will know about the changes that might have introduced the bug. -Often a new bug can be found by looking at what was recently changed. -More importantly, change logs can help you eliminate conceptual -inconsistencies between different parts of a program, by giving you a -history of how the conflicting concepts arose and who they came from. - -@menu -* Change Log Concepts:: -* Style of Change Logs:: -* Simple Changes:: -* Conditional Changes:: -* Indicating the Part Changed:: -@end menu - -@node Change Log Concepts -@subsection Change Log Concepts - -You can think of the change log as a conceptual ``undo list'' which -explains how earlier versions were different from the current version. -People can see the current version; they don't need the change log -to tell them what is in it. What they want from a change log is a -clear explanation of how the earlier version differed. - -The change log file is normally called @file{ChangeLog} and covers an -entire directory. Each directory can have its own change log, or a -directory can use the change log of its parent directory--it's up to -you. - -Another alternative is to record change log information with a version -control system such as RCS or CVS. This can be converted automatically -to a @file{ChangeLog} file using @code{rcs2log}; in Emacs, the command -@kbd{C-x v a} (@code{vc-update-change-log}) does the job. - -There's no need to describe the full purpose of the changes or how they -work together. If you think that a change calls for explanation, you're -probably right. Please do explain it---but please put the explanation -in comments in the code, where people will see it whenever they see the -code. For example, ``New function'' is enough for the change log when -you add a function, because there should be a comment before the -function definition to explain what it does. - -However, sometimes it is useful to write one line to describe the -overall purpose of a batch of changes. - -The easiest way to add an entry to @file{ChangeLog} is with the Emacs -command @kbd{M-x add-change-log-entry}. An entry should have an -asterisk, the name of the changed file, and then in parentheses the name -of the changed functions, variables or whatever, followed by a colon. -Then describe the changes you made to that function or variable. - -@node Style of Change Logs -@subsection Style of Change Logs -@cindex change logs, style - -Here are some simple examples of change log entries, starting with the -header line that says who made the change and when, followed by -descriptions of specific changes. (These examples are drawn from Emacs -and GCC.) - -@example -1998-08-17 Richard Stallman <rms@@gnu.org> - -* register.el (insert-register): Return nil. -(jump-to-register): Likewise. - -* sort.el (sort-subr): Return nil. - -* tex-mode.el (tex-bibtex-file, tex-file, tex-region): -Restart the tex shell if process is gone or stopped. -(tex-shell-running): New function. - -* expr.c (store_one_arg): Round size up for move_block_to_reg. -(expand_call): Round up when emitting USE insns. -* stmt.c (assign_parms): Round size up for move_block_from_reg. -@end example - -It's important to name the changed function or variable in full. Don't -abbreviate function or variable names, and don't combine them. -Subsequent maintainers will often search for a function name to find all -the change log entries that pertain to it; if you abbreviate the name, -they won't find it when they search. - -For example, some people are tempted to abbreviate groups of function -names by writing @samp{* register.el (@{insert,jump-to@}-register)}; -this is not a good idea, since searching for @code{jump-to-register} or -@code{insert-register} would not find that entry. - -Separate unrelated change log entries with blank lines. When two -entries represent parts of the same change, so that they work together, -then don't put blank lines between them. Then you can omit the file -name and the asterisk when successive entries are in the same file. - -Break long lists of function names by closing continued lines with -@samp{)}, rather than @samp{,}, and opening the continuation with -@samp{(} as in this example: - -@example -* keyboard.c (menu_bar_items, tool_bar_items) -(Fexecute_extended_command): Deal with `keymap' property. -@end example - -@node Simple Changes -@subsection Simple Changes - -Certain simple kinds of changes don't need much detail in the change -log. - -When you change the calling sequence of a function in a simple fashion, -and you change all the callers of the function to use the new calling -sequence, there is no need to make individual entries for all the -callers that you changed. Just write in the entry for the function -being called, ``All callers changed''---like this: - -@example -* keyboard.c (Fcommand_execute): New arg SPECIAL. -All callers changed. -@end example - -When you change just comments or doc strings, it is enough to write an -entry for the file, without mentioning the functions. Just ``Doc -fixes'' is enough for the change log. - -There's no need to make change log entries for documentation files. -This is because documentation is not susceptible to bugs that are hard -to fix. Documentation does not consist of parts that must interact in a -precisely engineered fashion. To correct an error, you need not know -the history of the erroneous passage; it is enough to compare what the -documentation says with the way the program actually works. - -@node Conditional Changes -@subsection Conditional Changes -@cindex conditional changes, and change logs -@cindex change logs, conditional changes - -C programs often contain compile-time @code{#if} conditionals. Many -changes are conditional; sometimes you add a new definition which is -entirely contained in a conditional. It is very useful to indicate in -the change log the conditions for which the change applies. - -Our convention for indicating conditional changes is to use square -brackets around the name of the condition. - -Here is a simple example, describing a change which is conditional but -does not have a function or entity name associated with it: - -@example -* xterm.c [SOLARIS2]: Include string.h. -@end example - -Here is an entry describing a new definition which is entirely -conditional. This new definition for the macro @code{FRAME_WINDOW_P} is -used only when @code{HAVE_X_WINDOWS} is defined: - -@example -* frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined. -@end example - -Here is an entry for a change within the function @code{init_display}, -whose definition as a whole is unconditional, but the changes themselves -are contained in a @samp{#ifdef HAVE_LIBNCURSES} conditional: - -@example -* dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent. -@end example - -Here is an entry for a change that takes affect only when -a certain macro is @emph{not} defined: - -@example -(gethostname) [!HAVE_SOCKETS]: Replace with winsock version. -@end example - -@node Indicating the Part Changed -@subsection Indicating the Part Changed - -Indicate the part of a function which changed by using angle brackets -enclosing an indication of what the changed part does. Here is an entry -for a change in the part of the function @code{sh-while-getopts} that -deals with @code{sh} commands: - -@example -* progmodes/sh-script.el (sh-while-getopts) <sh>: Handle case that -user-specified option string is empty. -@end example - - -@node Man Pages -@section Man Pages -@cindex man pages - -In the GNU project, man pages are secondary. It is not necessary or -expected for every GNU program to have a man page, but some of them do. -It's your choice whether to include a man page in your program. - -When you make this decision, consider that supporting a man page -requires continual effort each time the program is changed. The time -you spend on the man page is time taken away from more useful work. - -For a simple program which changes little, updating the man page may be -a small job. Then there is little reason not to include a man page, if -you have one. - -For a large program that changes a great deal, updating a man page may -be a substantial burden. If a user offers to donate a man page, you may -find this gift costly to accept. It may be better to refuse the man -page unless the same person agrees to take full responsibility for -maintaining it---so that you can wash your hands of it entirely. If -this volunteer later ceases to do the job, then don't feel obliged to -pick it up yourself; it may be better to withdraw the man page from the -distribution until someone else agrees to update it. - -When a program changes only a little, you may feel that the -discrepancies are small enough that the man page remains useful without -updating. If so, put a prominent note near the beginning of the man -page explaining that you don't maintain it and that the Texinfo manual -is more authoritative. The note should say how to access the Texinfo -documentation. - -@node Reading other Manuals -@section Reading other Manuals - -There may be non-free books or documentation files that describe the -program you are documenting. - -It is ok to use these documents for reference, just as the author of a -new algebra textbook can read other books on algebra. A large portion -of any non-fiction book consists of facts, in this case facts about how -a certain program works, and these facts are necessarily the same for -everyone who writes about the subject. But be careful not to copy your -outline structure, wording, tables or examples from preexisting non-free -documentation. Copying from free documentation may be ok; please check -with the FSF about the individual case. - -@node Managing Releases -@chapter The Release Process -@cindex releasing - -Making a release is more than just bundling up your source files in a -tar file and putting it up for FTP. You should set up your software so -that it can be configured to run on a variety of systems. Your Makefile -should conform to the GNU standards described below, and your directory -layout should also conform to the standards discussed below. Doing so -makes it easy to include your package into the larger framework of -all GNU software. - -@menu -* Configuration:: How Configuration Should Work -* Makefile Conventions:: Makefile Conventions -* Releases:: Making Releases -@end menu - -@node Configuration -@section How Configuration Should Work -@cindex program configuration - -@pindex configure -Each GNU distribution should come with a shell script named -@code{configure}. This script is given arguments which describe the -kind of machine and system you want to compile the program for. - -The @code{configure} script must record the configuration options so -that they affect compilation. - -One way to do this is to make a link from a standard name such as -@file{config.h} to the proper configuration file for the chosen system. -If you use this technique, the distribution should @emph{not} contain a -file named @file{config.h}. This is so that people won't be able to -build the program without configuring it first. - -Another thing that @code{configure} can do is to edit the Makefile. If -you do this, the distribution should @emph{not} contain a file named -@file{Makefile}. Instead, it should include a file @file{Makefile.in} which -contains the input used for editing. Once again, this is so that people -won't be able to build the program without configuring it first. - -If @code{configure} does write the @file{Makefile}, then @file{Makefile} -should have a target named @file{Makefile} which causes @code{configure} -to be rerun, setting up the same configuration that was set up last -time. The files that @code{configure} reads should be listed as -dependencies of @file{Makefile}. - -All the files which are output from the @code{configure} script should -have comments at the beginning explaining that they were generated -automatically using @code{configure}. This is so that users won't think -of trying to edit them by hand. - -The @code{configure} script should write a file named @file{config.status} -which describes which configuration options were specified when the -program was last configured. This file should be a shell script which, -if run, will recreate the same configuration. - -The @code{configure} script should accept an option of the form -@samp{--srcdir=@var{dirname}} to specify the directory where sources are found -(if it is not the current directory). This makes it possible to build -the program in a separate directory, so that the actual source directory -is not modified. - -If the user does not specify @samp{--srcdir}, then @code{configure} should -check both @file{.} and @file{..} to see if it can find the sources. If -it finds the sources in one of these places, it should use them from -there. Otherwise, it should report that it cannot find the sources, and -should exit with nonzero status. - -Usually the easy way to support @samp{--srcdir} is by editing a -definition of @code{VPATH} into the Makefile. Some rules may need to -refer explicitly to the specified source directory. To make this -possible, @code{configure} can add to the Makefile a variable named -@code{srcdir} whose value is precisely the specified directory. - -The @code{configure} script should also take an argument which specifies the -type of system to build the program for. This argument should look like -this: - -@example -@var{cpu}-@var{company}-@var{system} -@end example - -For example, a Sun 3 might be @samp{m68k-sun-sunos4.1}. - -The @code{configure} script needs to be able to decode all plausible -alternatives for how to describe a machine. Thus, @samp{sun3-sunos4.1} -would be a valid alias. For many programs, @samp{vax-dec-ultrix} would -be an alias for @samp{vax-dec-bsd}, simply because the differences -between Ultrix and @sc{bsd} are rarely noticeable, but a few programs -might need to distinguish them. -@c Real 4.4BSD now runs on some Suns. - -There is a shell script called @file{config.sub} that you can use -as a subroutine to validate system types and canonicalize aliases. - -@cindex optional features, configure-time -Other options are permitted to specify in more detail the software -or hardware present on the machine, and include or exclude optional -parts of the package: - -@table @samp -@item --enable-@var{feature}@r{[}=@var{parameter}@r{]} -Configure the package to build and install an optional user-level -facility called @var{feature}. This allows users to choose which -optional features to include. Giving an optional @var{parameter} of -@samp{no} should omit @var{feature}, if it is built by default. - -No @samp{--enable} option should @strong{ever} cause one feature to -replace another. No @samp{--enable} option should ever substitute one -useful behavior for another useful behavior. The only proper use for -@samp{--enable} is for questions of whether to build part of the program -or exclude it. - -@item --with-@var{package} -@c @r{[}=@var{parameter}@r{]} -The package @var{package} will be installed, so configure this package -to work with @var{package}. - -@c Giving an optional @var{parameter} of -@c @samp{no} should omit @var{package}, if it is used by default. - -Possible values of @var{package} include -@samp{gnu-as} (or @samp{gas}), @samp{gnu-ld}, @samp{gnu-libc}, -@samp{gdb}, -@samp{x}, -and -@samp{x-toolkit}. - -Do not use a @samp{--with} option to specify the file name to use to -find certain files. That is outside the scope of what @samp{--with} -options are for. -@end table - -All @code{configure} scripts should accept all of these ``detail'' -options, whether or not they make any difference to the particular -package at hand. In particular, they should accept any option that -starts with @samp{--with-} or @samp{--enable-}. This is so users will -be able to configure an entire GNU source tree at once with a single set -of options. - -You will note that the categories @samp{--with-} and @samp{--enable-} -are narrow: they @strong{do not} provide a place for any sort of option -you might think of. That is deliberate. We want to limit the possible -configuration options in GNU software. We do not want GNU programs to -have idiosyncratic configuration options. - -Packages that perform part of the compilation process may support -cross-compilation. In such a case, the host and target machines for the -program may be different. - -The @code{configure} script should normally treat the specified type of -system as both the host and the target, thus producing a program which -works for the same type of machine that it runs on. - -To configure a cross-compiler, cross-assembler, or what have you, you -should specify a target different from the host, using the configure -option @samp{--target=@var{targettype}}. The syntax for -@var{targettype} is the same as for the host type. So the command would -look like this: - -@example -./configure @var{hosttype} --target=@var{targettype} -@end example - -Programs for which cross-operation is not meaningful need not accept the -@samp{--target} option, because configuring an entire operating system for -cross-operation is not a meaningful operation. - -Bootstrapping a cross-compiler requires compiling it on a machine other -than the host it will run on. Compilation packages accept a -configuration option @samp{--build=@var{buildtype}} for specifying the -configuration on which you will compile them, but the configure script -should normally guess the build machine type (using -@file{config.guess}), so this option is probably not necessary. The -host and target types normally default from the build type, so in -bootstrapping a cross-compiler you must specify them both explicitly. - -Some programs have ways of configuring themselves automatically. If -your program is set up to do this, your @code{configure} script can simply -ignore most of its arguments. - -@comment The makefile standards are in a separate file that is also -@comment included by make.texinfo. Done by roland@gnu.ai.mit.edu on 1/6/93. -@comment For this document, turn chapters into sections, etc. -@lowersections -@include make-stds.texi -@raisesections - -@node Releases -@section Making Releases -@cindex packaging - -Package the distribution of @code{Foo version 69.96} up in a gzipped tar -file with the name @file{foo-69.96.tar.gz}. It should unpack into a -subdirectory named @file{foo-69.96}. - -Building and installing the program should never modify any of the files -contained in the distribution. This means that all the files that form -part of the program in any way must be classified into @dfn{source -files} and @dfn{non-source files}. Source files are written by humans -and never changed automatically; non-source files are produced from -source files by programs under the control of the Makefile. - -@cindex @file{README} file -The distribution should contain a file named @file{README} which gives -the name of the package, and a general description of what it does. It -is also good to explain the purpose of each of the first-level -subdirectories in the package, if there are any. The @file{README} file -should either state the version number of the package, or refer to where -in the package it can be found. - -The @file{README} file should refer to the file @file{INSTALL}, which -should contain an explanation of the installation procedure. - -The @file{README} file should also refer to the file which contains the -copying conditions. The GNU GPL, if used, should be in a file called -@file{COPYING}. If the GNU LGPL is used, it should be in a file called -@file{COPYING.LIB}. - -Naturally, all the source files must be in the distribution. It is okay -to include non-source files in the distribution, provided they are -up-to-date and machine-independent, so that building the distribution -normally will never modify them. We commonly include non-source files -produced by Bison, @code{lex}, @TeX{}, and @code{makeinfo}; this helps avoid -unnecessary dependencies between our distributions, so that users can -install whichever packages they want to install. - -Non-source files that might actually be modified by building and -installing the program should @strong{never} be included in the -distribution. So if you do distribute non-source files, always make -sure they are up to date when you make a new distribution. - -Make sure that the directory into which the distribution unpacks (as -well as any subdirectories) are all world-writable (octal mode 777). -This is so that old versions of @code{tar} which preserve the -ownership and permissions of the files from the tar archive will be -able to extract all the files even if the user is unprivileged. - -Make sure that all the files in the distribution are world-readable. - -Make sure that no file name in the distribution is more than 14 -characters long. Likewise, no file created by building the program -should have a name longer than 14 characters. The reason for this is -that some systems adhere to a foolish interpretation of the @sc{posix} -standard, and refuse to open a longer name, rather than truncating as -they did in the past. - -Don't include any symbolic links in the distribution itself. If the tar -file contains symbolic links, then people cannot even unpack it on -systems that don't support symbolic links. Also, don't use multiple -names for one file in different directories, because certain file -systems cannot handle this and that prevents unpacking the -distribution. - -Try to make sure that all the file names will be unique on MS-DOS. A -name on MS-DOS consists of up to 8 characters, optionally followed by a -period and up to three characters. MS-DOS will truncate extra -characters both before and after the period. Thus, -@file{foobarhacker.c} and @file{foobarhacker.o} are not ambiguous; they -are truncated to @file{foobarha.c} and @file{foobarha.o}, which are -distinct. - -@cindex @file{texinfo.tex}, in a distribution -Include in your distribution a copy of the @file{texinfo.tex} you used -to test print any @file{*.texinfo} or @file{*.texi} files. - -Likewise, if your program uses small GNU software packages like regex, -getopt, obstack, or termcap, include them in the distribution file. -Leaving them out would make the distribution file a little smaller at -the expense of possible inconvenience to a user who doesn't know what -other files to get. - -@node References -@chapter References to Non-Free Software and Documentation -@cindex references to non-free material - -A GNU program should not recommend use of any non-free program. We -can't stop some people from writing proprietary programs, or stop -other people from using them, but we can and should avoid helping to -advertise them to new potential customers. Proprietary software is a -social and ethical problem, and the point of GNU is to solve that -problem. - -When a non-free program or system is well known, you can mention it in -passing---that is harmless, since users who might want to use it -probably already know about it. For instance, it is fine to explain -how to build your package on top of some non-free operating system, or -how to use it together with some widely used non-free program. - -However, you should give only the necessary information to help those -who already use the non-free program to use your program with -it---don't give, or refer to, any further information about the -proprietary program, and don't imply that the proprietary program -enhances your program, or that its existence is in any way a good -thing. The goal should be that people already using the proprietary -program will get the advice they need about how to use your free -program, while people who don't already use the proprietary program -will not see anything to lead them to take an interest in it. - -If a non-free program or system is obscure in your program's domain, -your program should not mention or support it at all, since doing so -would tend to popularize the non-free program more than it popularizes -your program. (You cannot hope to find many additional users among -the users of Foobar if the users of Foobar are few.) - -A GNU package should not refer the user to any non-free documentation -for free software. Free documentation that can be included in free -operating systems is essential for completing the GNU system, so it is -a major focus of the GNU Project; to recommend use of documentation -that we are not allowed to use in GNU would undermine the efforts to -get documentation that we can include. So GNU packages should never -recommend non-free documentation. - -@node Copying This Manual -@appendix Copying This Manual - -@menu -* GNU Free Documentation License:: License for copying this manual -@end menu - -@include fdl.texi - -@node Index -@unnumbered Index -@printindex cp - -@contents - -@bye -@c Local variables: -@c eval: (add-hook 'write-file-hooks 'time-stamp) -@c time-stamp-start: "@set lastupdate " -@c time-stamp-end: "$" -@c time-stamp-format: "%:b %:d, %:y" -@c compile-command: "make just-standards" -@c End: diff --git a/contrib/binutils/gas/acconfig.h b/contrib/binutils/gas/acconfig.h deleted file mode 100644 index c9c60025c757..000000000000 --- a/contrib/binutils/gas/acconfig.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Name of package. */ -#undef PACKAGE - -/* Version of package. */ -#undef VERSION - -/* Should gas use high-level BFD interfaces? */ -#undef BFD_ASSEMBLER - -/* Some assert/preprocessor combinations are incapable of handling - certain kinds of constructs in the argument of assert. For example, - quoted strings (if requoting isn't done right) or newlines. */ -#undef BROKEN_ASSERT - -/* If we aren't doing cross-assembling, some operations can be optimized, - since byte orders and value sizes don't need to be adjusted. */ -#undef CROSS_COMPILE - -/* Some gas code wants to know these parameters. */ -#undef TARGET_ALIAS -#undef TARGET_CPU -#undef TARGET_CANONICAL -#undef TARGET_OS -#undef TARGET_VENDOR - -/* Sometimes the system header files don't declare strstr. */ -#undef NEED_DECLARATION_STRSTR - -/* Sometimes the system header files don't declare malloc and realloc. */ -#undef NEED_DECLARATION_MALLOC - -/* Sometimes the system header files don't declare free. */ -#undef NEED_DECLARATION_FREE - -/* Sometimes the system header files don't declare sbrk. */ -#undef NEED_DECLARATION_SBRK - -/* Sometimes errno.h doesn't declare errno itself. */ -#undef NEED_DECLARATION_ERRNO - -#undef MANY_SEGMENTS - -/* The configure script defines this for some targets based on the - target name used. It is not always defined. */ -#undef TARGET_BYTES_BIG_ENDIAN - -/* Needed only for some configurations that can produce multiple output - formats. */ -#undef DEFAULT_EMULATION -#undef EMULATIONS -#undef USE_EMULATIONS -#undef OBJ_MAYBE_AOUT -#undef OBJ_MAYBE_BOUT -#undef OBJ_MAYBE_COFF -#undef OBJ_MAYBE_ECOFF -#undef OBJ_MAYBE_ELF -#undef OBJ_MAYBE_GENERIC -#undef OBJ_MAYBE_HP300 -#undef OBJ_MAYBE_IEEE -#undef OBJ_MAYBE_SOM -#undef OBJ_MAYBE_VMS - -/* Used for some of the COFF configurations, when the COFF code needs - to select something based on the CPU type before it knows it... */ -#undef I386COFF -#undef M68KCOFF -#undef M88KCOFF - -/* Using cgen code? */ -#undef USING_CGEN - -/* Needed only for sparc configuration. */ -#undef DEFAULT_ARCH - -/* Needed only for PowerPC Solaris. */ -#undef TARGET_SOLARIS_COMMENT - -/* Needed only for SCO 5. */ -#undef SCO_ELF diff --git a/contrib/binutils/gas/as.h b/contrib/binutils/gas/as.h index 5e30f478313e..890ecd8f1056 100644 --- a/contrib/binutils/gas/as.h +++ b/contrib/binutils/gas/as.h @@ -1,6 +1,6 @@ /* as.h - global header file Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005 + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -397,22 +397,6 @@ typedef unsigned int relax_substateT; /* Enough bits for address, but still an integer type. Could be a problem, cross-assembling for 64-bit machines. */ typedef addressT relax_addressT; - -struct relax_type -{ - /* Forward reach. Signed number. > 0. */ - offsetT rlx_forward; - /* Backward reach. Signed number. < 0. */ - offsetT rlx_backward; - - /* Bytes length of this address. */ - unsigned char rlx_length; - - /* Next longer relax-state. 0 means there is no 'next' relax-state. */ - relax_substateT rlx_more; -}; - -typedef struct relax_type relax_typeS; /* main program "as.c" (command arguments etc) */ diff --git a/contrib/binutils/gas/conf.in b/contrib/binutils/gas/conf.in deleted file mode 100644 index d56807cd88d5..000000000000 --- a/contrib/binutils/gas/conf.in +++ /dev/null @@ -1,127 +0,0 @@ -/* conf.in. Generated automatically from configure.in by autoheader. */ - -/* Define if using alloca.c. */ -#undef C_ALLOCA - -/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. - This function is required for alloca.c support on those systems. */ -#undef CRAY_STACKSEG_END - -/* Define if you have alloca, as a function or macro. */ -#undef HAVE_ALLOCA - -/* Define if you have <alloca.h> and it should be used (not on Ultrix). */ -#undef HAVE_ALLOCA_H - -/* Define as __inline if that's what the C compiler calls it. */ -#undef inline - -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at run-time. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown - */ -#undef STACK_DIRECTION - -/* Should gas use high-level BFD interfaces? */ -#undef BFD_ASSEMBLER - -/* Some assert/preprocessor combinations are incapable of handling - certain kinds of constructs in the argument of assert. For example, - quoted strings (if requoting isn't done right) or newlines. */ -#undef BROKEN_ASSERT - -/* If we aren't doing cross-assembling, some operations can be optimized, - since byte orders and value sizes don't need to be adjusted. */ -#undef CROSS_COMPILE - -/* Some gas code wants to know these parameters. */ -#undef TARGET_ALIAS -#undef TARGET_CPU -#undef TARGET_CANONICAL -#undef TARGET_OS -#undef TARGET_VENDOR - -/* Sometimes the system header files don't declare strstr. */ -#undef NEED_DECLARATION_STRSTR - -/* Sometimes the system header files don't declare malloc and realloc. */ -#undef NEED_DECLARATION_MALLOC - -/* Sometimes the system header files don't declare free. */ -#undef NEED_DECLARATION_FREE - -/* Sometimes the system header files don't declare sbrk. */ -#undef NEED_DECLARATION_SBRK - -/* Sometimes errno.h doesn't declare errno itself. */ -#undef NEED_DECLARATION_ERRNO - -#undef MANY_SEGMENTS - -/* Needed only for sparc configuration. */ -#undef SPARC_V9 -#undef SPARC_ARCH64 - -/* Defined if using CGEN. */ -#undef USING_CGEN - -/* Needed only for some configurations that can produce multiple output - formats. */ -#undef DEFAULT_EMULATION -#undef EMULATIONS -#undef USE_EMULATIONS -#undef OBJ_MAYBE_AOUT -#undef OBJ_MAYBE_BOUT -#undef OBJ_MAYBE_COFF -#undef OBJ_MAYBE_ECOFF -#undef OBJ_MAYBE_ELF -#undef OBJ_MAYBE_GENERIC -#undef OBJ_MAYBE_HP300 -#undef OBJ_MAYBE_IEEE -#undef OBJ_MAYBE_SOM -#undef OBJ_MAYBE_VMS - -/* Used for some of the COFF configurations, when the COFF code needs - to select something based on the CPU type before it knows it... */ -#undef I386COFF -#undef M68KCOFF -#undef M88KCOFF - -/* Define if you have the remove function. */ -#undef HAVE_REMOVE - -/* Define if you have the sbrk function. */ -#undef HAVE_SBRK - -/* Define if you have the unlink function. */ -#undef HAVE_UNLINK - -/* Define if you have the <errno.h> header file. */ -#undef HAVE_ERRNO_H - -/* Define if you have the <memory.h> header file. */ -#undef HAVE_MEMORY_H - -/* Define if you have the <stdarg.h> header file. */ -#undef HAVE_STDARG_H - -/* Define if you have the <stdlib.h> header file. */ -#undef HAVE_STDLIB_H - -/* Define if you have the <string.h> header file. */ -#undef HAVE_STRING_H - -/* Define if you have the <strings.h> header file. */ -#undef HAVE_STRINGS_H - -/* Define if you have the <sys/types.h> header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define if you have the <unistd.h> header file. */ -#undef HAVE_UNISTD_H - -/* Define if you have the <varargs.h> header file. */ -#undef HAVE_VARARGS_H diff --git a/contrib/binutils/gas/config/i386coff.mt b/contrib/binutils/gas/config/i386coff.mt deleted file mode 100644 index efda83365181..000000000000 --- a/contrib/binutils/gas/config/i386coff.mt +++ /dev/null @@ -1 +0,0 @@ -TDEFINES=-DI386COFF diff --git a/contrib/binutils/gas/config/obj-generic.c b/contrib/binutils/gas/config/obj-generic.c deleted file mode 100644 index 69fc3d1dbf96..000000000000 --- 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 8cb8020d0a42..000000000000 --- 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/config/sco5.mt b/contrib/binutils/gas/config/sco5.mt deleted file mode 100644 index 8879320c4e1e..000000000000 --- a/contrib/binutils/gas/config/sco5.mt +++ /dev/null @@ -1 +0,0 @@ -TDEFINES=-DSCO_ELF diff --git a/contrib/binutils/gas/config/tc-sh.c b/contrib/binutils/gas/config/tc-sh.c deleted file mode 100644 index 1361cb8d5155..000000000000 --- a/contrib/binutils/gas/config/tc-sh.c +++ /dev/null @@ -1,4054 +0,0 @@ -/* tc-sh.c -- Assemble code for the Hitachi Super-H - Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 - 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. */ - -/* Written By Steve Chamberlain <sac@cygnus.com> */ - -#include <stdio.h> -#include "as.h" -#include "bfd.h" -#include "subsegs.h" -#define DEFINE_TABLE -#include "opcodes/sh-opc.h" -#include "safe-ctype.h" -#include "struc-symbol.h" - -#ifdef OBJ_ELF -#include "elf/sh.h" -#endif - -#include "dwarf2dbg.h" - -typedef struct - { - sh_arg_type type; - int reg; - expressionS immediate; - } -sh_operand_info; - -const char comment_chars[] = "!"; -const char line_separator_chars[] = ";"; -const char line_comment_chars[] = "!#"; - -static void s_uses PARAMS ((int)); - -static void sh_count_relocs PARAMS ((bfd *, segT, PTR)); -static void sh_frob_section PARAMS ((bfd *, segT, PTR)); - -static void s_uacons PARAMS ((int)); -static sh_opcode_info *find_cooked_opcode PARAMS ((char **)); -static unsigned int assemble_ppi PARAMS ((char *, sh_opcode_info *)); -static void little PARAMS ((int)); -static void big PARAMS ((int)); -static int parse_reg PARAMS ((char *, int *, int *)); -static char *parse_exp PARAMS ((char *, sh_operand_info *)); -static char *parse_at PARAMS ((char *, sh_operand_info *)); -static void get_operand PARAMS ((char **, sh_operand_info *)); -static char *get_operands - PARAMS ((sh_opcode_info *, char *, sh_operand_info *)); -static sh_opcode_info *get_specific - PARAMS ((sh_opcode_info *, sh_operand_info *)); -static void insert PARAMS ((char *, int, int, sh_operand_info *)); -static void build_relax PARAMS ((sh_opcode_info *, sh_operand_info *)); -static char *insert_loop_bounds PARAMS ((char *, sh_operand_info *)); -static unsigned int build_Mytes - PARAMS ((sh_opcode_info *, sh_operand_info *)); - -#ifdef OBJ_ELF -static void sh_elf_cons PARAMS ((int)); - -inline static int sh_PIC_related_p PARAMS ((symbolS *)); -static int sh_check_fixup PARAMS ((expressionS *, bfd_reloc_code_real_type *)); -inline static char *sh_end_of_match PARAMS ((char *, char *)); - -symbolS *GOT_symbol; /* Pre-defined "_GLOBAL_OFFSET_TABLE_" */ -#endif - -static void -big (ignore) - int ignore ATTRIBUTE_UNUSED; -{ - if (! target_big_endian) - as_bad (_("directive .big encountered when option -big required")); - - /* Stop further messages. */ - target_big_endian = 1; -} - -static void -little (ignore) - int ignore ATTRIBUTE_UNUSED; -{ - if (target_big_endian) - as_bad (_("directive .little encountered when option -little required")); - - /* Stop further messages. */ - target_big_endian = 0; -} - -/* This table describes all the machine specific pseudo-ops the assembler - has to support. The fields are: - pseudo-op name without dot - function to call to execute this pseudo-op - Integer arg to pass to the function. */ - -const pseudo_typeS md_pseudo_table[] = -{ -#ifdef OBJ_ELF - {"long", sh_elf_cons, 4}, - {"int", sh_elf_cons, 4}, - {"word", sh_elf_cons, 2}, - {"short", sh_elf_cons, 2}, -#else - {"int", cons, 4}, - {"word", cons, 2}, -#endif /* OBJ_ELF */ - {"big", big, 0}, - {"form", listing_psize, 0}, - {"little", little, 0}, - {"heading", listing_title, 0}, - {"import", s_ignore, 0}, - {"page", listing_eject, 0}, - {"program", s_ignore, 0}, - {"uses", s_uses, 0}, - {"uaword", s_uacons, 2}, - {"ualong", s_uacons, 4}, - {"uaquad", s_uacons, 8}, - {"2byte", s_uacons, 2}, - {"4byte", s_uacons, 4}, - {"8byte", s_uacons, 8}, -#ifdef BFD_ASSEMBLER - {"file", dwarf2_directive_file, 0 }, - {"loc", dwarf2_directive_loc, 0 }, -#endif -#ifdef HAVE_SH64 - {"mode", s_sh64_mode, 0 }, - - /* Have the old name too. */ - {"isa", s_sh64_mode, 0 }, - - /* Assert that the right ABI is used. */ - {"abi", s_sh64_abi, 0 }, - - { "vtable_inherit", sh64_vtable_inherit, 0 }, - { "vtable_entry", sh64_vtable_entry, 0 }, -#endif /* HAVE_SH64 */ - {0, 0, 0} -}; - -/*int md_reloc_size; */ - -int sh_relax; /* set if -relax seen */ - -/* Whether -small was seen. */ - -int sh_small; - -/* Whether -dsp was seen. */ - -static int sh_dsp; - -/* The bit mask of architectures that could - accomodate the insns seen so far. */ -static int valid_arch; - -const char EXP_CHARS[] = "eE"; - -/* Chars that mean this number is a floating point constant. */ -/* As in 0f12.456 */ -/* or 0d1.2345e12 */ -const char FLT_CHARS[] = "rRsSfFdDxXpP"; - -#define C(a,b) ENCODE_RELAX(a,b) - -#define ENCODE_RELAX(what,length) (((what) << 4) + (length)) -#define GET_WHAT(x) ((x>>4)) - -/* These are the three types of relaxable instrction. */ -/* These are the types of relaxable instructions; except for END which is - a marker. */ -#define COND_JUMP 1 -#define COND_JUMP_DELAY 2 -#define UNCOND_JUMP 3 - -#ifdef HAVE_SH64 - -/* A 16-bit (times four) pc-relative operand, at most expanded to 32 bits. */ -#define SH64PCREL16_32 4 -/* A 16-bit (times four) pc-relative operand, at most expanded to 64 bits. */ -#define SH64PCREL16_64 5 - -/* Variants of the above for adjusting the insn to PTA or PTB according to - the label. */ -#define SH64PCREL16PT_32 6 -#define SH64PCREL16PT_64 7 - -/* A MOVI expansion, expanding to at most 32 or 64 bits. */ -#define MOVI_IMM_32 8 -#define MOVI_IMM_32_PCREL 9 -#define MOVI_IMM_64 10 -#define MOVI_IMM_64_PCREL 11 -#define END 12 - -#else /* HAVE_SH64 */ - -#define END 4 - -#endif /* HAVE_SH64 */ - -#define UNDEF_DISP 0 -#define COND8 1 -#define COND12 2 -#define COND32 3 -#define UNDEF_WORD_DISP 4 - -#define UNCOND12 1 -#define UNCOND32 2 - -#ifdef HAVE_SH64 -#define UNDEF_SH64PCREL 0 -#define SH64PCREL16 1 -#define SH64PCREL32 2 -#define SH64PCREL48 3 -#define SH64PCREL64 4 -#define SH64PCRELPLT 5 - -#define UNDEF_MOVI 0 -#define MOVI_16 1 -#define MOVI_32 2 -#define MOVI_48 3 -#define MOVI_64 4 -#define MOVI_PLT 5 -#define MOVI_GOTOFF 6 -#define MOVI_GOTPC 7 -#endif /* HAVE_SH64 */ - -/* Branch displacements are from the address of the branch plus - four, thus all minimum and maximum values have 4 added to them. */ -#define COND8_F 258 -#define COND8_M -252 -#define COND8_LENGTH 2 - -/* There is one extra instruction before the branch, so we must add - two more bytes to account for it. */ -#define COND12_F 4100 -#define COND12_M -4090 -#define COND12_LENGTH 6 - -#define COND12_DELAY_LENGTH 4 - -/* ??? The minimum and maximum values are wrong, but this does not matter - since this relocation type is not supported yet. */ -#define COND32_F (1<<30) -#define COND32_M -(1<<30) -#define COND32_LENGTH 14 - -#define UNCOND12_F 4098 -#define UNCOND12_M -4092 -#define UNCOND12_LENGTH 2 - -/* ??? The minimum and maximum values are wrong, but this does not matter - since this relocation type is not supported yet. */ -#define UNCOND32_F (1<<30) -#define UNCOND32_M -(1<<30) -#define UNCOND32_LENGTH 14 - -#ifdef HAVE_SH64 -/* The trivial expansion of a SH64PCREL16 relaxation is just a "PT label, - TRd" as is the current insn, so no extra length. Note that the "reach" - is calculated from the address *after* that insn, but the offset in the - insn is calculated from the beginning of the insn. We also need to - take into account the implicit 1 coded as the "A" in PTA when counting - forward. If PTB reaches an odd address, we trap that as an error - elsewhere, so we don't have to have different relaxation entries. We - don't add a one to the negative range, since PTB would then have the - farthest backward-reaching value skipped, not generated at relaxation. */ -#define SH64PCREL16_F (32767 * 4 - 4 + 1) -#define SH64PCREL16_M (-32768 * 4 - 4) -#define SH64PCREL16_LENGTH 0 - -/* The next step is to change that PT insn into - MOVI ((label - datalabel Ln) >> 16) & 65535, R25 - SHORI (label - datalabel Ln) & 65535, R25 - Ln: - PTREL R25,TRd - which means two extra insns, 8 extra bytes. This is the limit for the - 32-bit ABI. - - The expressions look a bit bad since we have to adjust this to avoid overflow on a - 32-bit host. */ -#define SH64PCREL32_F ((((long) 1 << 30) - 1) * 2 + 1 - 4) -#define SH64PCREL32_LENGTH (2 * 4) - -/* Similarly, we just change the MOVI and add a SHORI for the 48-bit - expansion. */ -#if BFD_HOST_64BIT_LONG -/* The "reach" type is long, so we can only do this for a 64-bit-long - host. */ -#define SH64PCREL32_M (((long) -1 << 30) * 2 - 4) -#define SH64PCREL48_F ((((long) 1 << 47) - 1) - 4) -#define SH64PCREL48_M (((long) -1 << 47) - 4) -#define SH64PCREL48_LENGTH (3 * 4) -#else -/* If the host does not have 64-bit longs, just make this state identical - in reach to the 32-bit state. Note that we have a slightly incorrect - reach, but the correct one above will overflow a 32-bit number. */ -#define SH64PCREL32_M (((long) -1 << 30) * 2) -#define SH64PCREL48_F SH64PCREL32_F -#define SH64PCREL48_M SH64PCREL32_M -#define SH64PCREL48_LENGTH (3 * 4) -#endif /* BFD_HOST_64BIT_LONG */ - -/* And similarly for the 64-bit expansion; a MOVI + SHORI + SHORI + SHORI - + PTREL sequence. */ -#define SH64PCREL64_LENGTH (4 * 4) - -/* For MOVI, we make the MOVI + SHORI... expansion you can see in the - SH64PCREL expansions. The PCREL one is similar, but the other has no - pc-relative reach; it must be fully expanded in - shmedia_md_estimate_size_before_relax. */ -#define MOVI_16_LENGTH 0 -#define MOVI_16_F (32767 - 4) -#define MOVI_16_M (-32768 - 4) -#define MOVI_32_LENGTH 4 -#define MOVI_32_F ((((long) 1 << 30) - 1) * 2 + 1 - 4) -#define MOVI_48_LENGTH 8 - -#if BFD_HOST_64BIT_LONG -/* The "reach" type is long, so we can only do this for a 64-bit-long - host. */ -#define MOVI_32_M (((long) -1 << 30) * 2 - 4) -#define MOVI_48_F ((((long) 1 << 47) - 1) - 4) -#define MOVI_48_M (((long) -1 << 47) - 4) -#else -/* If the host does not have 64-bit longs, just make this state identical - in reach to the 32-bit state. Note that we have a slightly incorrect - reach, but the correct one above will overflow a 32-bit number. */ -#define MOVI_32_M (((long) -1 << 30) * 2) -#define MOVI_48_F MOVI_32_F -#define MOVI_48_M MOVI_32_M -#endif /* BFD_HOST_64BIT_LONG */ - -#define MOVI_64_LENGTH 12 -#endif /* HAVE_SH64 */ - -#define EMPTY { 0, 0, 0, 0 } - -const relax_typeS md_relax_table[C (END, 0)] = { - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - - EMPTY, - /* C (COND_JUMP, COND8) */ - { COND8_F, COND8_M, COND8_LENGTH, C (COND_JUMP, COND12) }, - /* C (COND_JUMP, COND12) */ - { COND12_F, COND12_M, COND12_LENGTH, C (COND_JUMP, COND32), }, - /* C (COND_JUMP, COND32) */ - { COND32_F, COND32_M, COND32_LENGTH, 0, }, - /* C (COND_JUMP, UNDEF_WORD_DISP) */ - { 0, 0, COND32_LENGTH, 0, }, - EMPTY, EMPTY, EMPTY, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - - EMPTY, - /* C (COND_JUMP_DELAY, COND8) */ - { COND8_F, COND8_M, COND8_LENGTH, C (COND_JUMP_DELAY, COND12) }, - /* C (COND_JUMP_DELAY, COND12) */ - { COND12_F, COND12_M, COND12_DELAY_LENGTH, C (COND_JUMP_DELAY, COND32), }, - /* C (COND_JUMP_DELAY, COND32) */ - { COND32_F, COND32_M, COND32_LENGTH, 0, }, - /* C (COND_JUMP_DELAY, UNDEF_WORD_DISP) */ - { 0, 0, COND32_LENGTH, 0, }, - EMPTY, EMPTY, EMPTY, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - - EMPTY, - /* C (UNCOND_JUMP, UNCOND12) */ - { UNCOND12_F, UNCOND12_M, UNCOND12_LENGTH, C (UNCOND_JUMP, UNCOND32), }, - /* C (UNCOND_JUMP, UNCOND32) */ - { UNCOND32_F, UNCOND32_M, UNCOND32_LENGTH, 0, }, - EMPTY, - /* C (UNCOND_JUMP, UNDEF_WORD_DISP) */ - { 0, 0, UNCOND32_LENGTH, 0, }, - EMPTY, EMPTY, EMPTY, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - -#ifdef HAVE_SH64 - /* C (SH64PCREL16_32, SH64PCREL16) */ - EMPTY, - { SH64PCREL16_F, SH64PCREL16_M, SH64PCREL16_LENGTH, C (SH64PCREL16_32, SH64PCREL32) }, - /* C (SH64PCREL16_32, SH64PCREL32) */ - { 0, 0, SH64PCREL32_LENGTH, 0 }, - EMPTY, EMPTY, - /* C (SH64PCREL16_32, SH64PCRELPLT) */ - { 0, 0, SH64PCREL32_LENGTH, 0 }, - EMPTY, EMPTY, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - - /* C (SH64PCREL16_64, SH64PCREL16) */ - EMPTY, - { SH64PCREL16_F, SH64PCREL16_M, SH64PCREL16_LENGTH, C (SH64PCREL16_64, SH64PCREL32) }, - /* C (SH64PCREL16_64, SH64PCREL32) */ - { SH64PCREL32_F, SH64PCREL32_M, SH64PCREL32_LENGTH, C (SH64PCREL16_64, SH64PCREL48) }, - /* C (SH64PCREL16_64, SH64PCREL48) */ - { SH64PCREL48_F, SH64PCREL48_M, SH64PCREL48_LENGTH, C (SH64PCREL16_64, SH64PCREL64) }, - /* C (SH64PCREL16_64, SH64PCREL64) */ - { 0, 0, SH64PCREL64_LENGTH, 0 }, - /* C (SH64PCREL16_64, SH64PCRELPLT) */ - { 0, 0, SH64PCREL64_LENGTH, 0 }, - EMPTY, EMPTY, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - - /* C (SH64PCREL16PT_32, SH64PCREL16) */ - EMPTY, - { SH64PCREL16_F, SH64PCREL16_M, SH64PCREL16_LENGTH, C (SH64PCREL16PT_32, SH64PCREL32) }, - /* C (SH64PCREL16PT_32, SH64PCREL32) */ - { 0, 0, SH64PCREL32_LENGTH, 0 }, - EMPTY, EMPTY, - /* C (SH64PCREL16PT_32, SH64PCRELPLT) */ - { 0, 0, SH64PCREL32_LENGTH, 0 }, - EMPTY, EMPTY, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - - /* C (SH64PCREL16PT_64, SH64PCREL16) */ - EMPTY, - { SH64PCREL16_F, SH64PCREL16_M, SH64PCREL16_LENGTH, C (SH64PCREL16PT_64, SH64PCREL32) }, - /* C (SH64PCREL16PT_64, SH64PCREL32) */ - { SH64PCREL32_F, - SH64PCREL32_M, - SH64PCREL32_LENGTH, - C (SH64PCREL16PT_64, SH64PCREL48) }, - /* C (SH64PCREL16PT_64, SH64PCREL48) */ - { SH64PCREL48_F, SH64PCREL48_M, SH64PCREL48_LENGTH, C (SH64PCREL16PT_64, SH64PCREL64) }, - /* C (SH64PCREL16PT_64, SH64PCREL64) */ - { 0, 0, SH64PCREL64_LENGTH, 0 }, - /* C (SH64PCREL16PT_64, SH64PCRELPLT) */ - { 0, 0, SH64PCREL64_LENGTH, 0}, - EMPTY, EMPTY, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - - /* C (MOVI_IMM_32, UNDEF_MOVI) */ - { 0, 0, MOVI_32_LENGTH, 0 }, - /* C (MOVI_IMM_32, MOVI_16) */ - { MOVI_16_F, MOVI_16_M, MOVI_16_LENGTH, C (MOVI_IMM_32, MOVI_32) }, - /* C (MOVI_IMM_32, MOVI_32) */ - { MOVI_32_F, MOVI_32_M, MOVI_32_LENGTH, 0 }, - EMPTY, EMPTY, EMPTY, - /* C (MOVI_IMM_32, MOVI_GOTOFF) */ - { 0, 0, MOVI_32_LENGTH, 0 }, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - - /* C (MOVI_IMM_32_PCREL, MOVI_16) */ - EMPTY, - { MOVI_16_F, MOVI_16_M, MOVI_16_LENGTH, C (MOVI_IMM_32_PCREL, MOVI_32) }, - /* C (MOVI_IMM_32_PCREL, MOVI_32) */ - { 0, 0, MOVI_32_LENGTH, 0 }, - EMPTY, EMPTY, - /* C (MOVI_IMM_32_PCREL, MOVI_PLT) */ - { 0, 0, MOVI_32_LENGTH, 0 }, - EMPTY, - /* C (MOVI_IMM_32_PCREL, MOVI_GOTPC) */ - { 0, 0, MOVI_32_LENGTH, 0 }, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - - /* C (MOVI_IMM_64, UNDEF_MOVI) */ - { 0, 0, MOVI_64_LENGTH, 0 }, - /* C (MOVI_IMM_64, MOVI_16) */ - { MOVI_16_F, MOVI_16_M, MOVI_16_LENGTH, C (MOVI_IMM_64, MOVI_32) }, - /* C (MOVI_IMM_64, MOVI_32) */ - { MOVI_32_F, MOVI_32_M, MOVI_32_LENGTH, C (MOVI_IMM_64, MOVI_48) }, - /* C (MOVI_IMM_64, MOVI_48) */ - { MOVI_48_F, MOVI_48_M, MOVI_48_LENGTH, C (MOVI_IMM_64, MOVI_64) }, - /* C (MOVI_IMM_64, MOVI_64) */ - { 0, 0, MOVI_64_LENGTH, 0 }, - EMPTY, - /* C (MOVI_IMM_64, MOVI_GOTOFF) */ - { 0, 0, MOVI_64_LENGTH, 0 }, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - - /* C (MOVI_IMM_64_PCREL, MOVI_16) */ - EMPTY, - { MOVI_16_F, MOVI_16_M, MOVI_16_LENGTH, C (MOVI_IMM_64_PCREL, MOVI_32) }, - /* C (MOVI_IMM_64_PCREL, MOVI_32) */ - { MOVI_32_F, MOVI_32_M, MOVI_32_LENGTH, C (MOVI_IMM_64_PCREL, MOVI_48) }, - /* C (MOVI_IMM_64_PCREL, MOVI_48) */ - { MOVI_48_F, MOVI_48_M, MOVI_48_LENGTH, C (MOVI_IMM_64_PCREL, MOVI_64) }, - /* C (MOVI_IMM_64_PCREL, MOVI_64) */ - { 0, 0, MOVI_64_LENGTH, 0 }, - /* C (MOVI_IMM_64_PCREL, MOVI_PLT) */ - { 0, 0, MOVI_64_LENGTH, 0 }, - EMPTY, - /* C (MOVI_IMM_64_PCREL, MOVI_GOTPC) */ - { 0, 0, MOVI_64_LENGTH, 0 }, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - -#endif /* HAVE_SH64 */ - -}; - -#undef EMPTY - -static struct hash_control *opcode_hash_control; /* Opcode mnemonics */ - - -#ifdef OBJ_ELF -/* Determinet whether the symbol needs any kind of PIC relocation. */ - -inline static int -sh_PIC_related_p (sym) - symbolS *sym; -{ - expressionS *exp; - - if (! sym) - return 0; - - if (sym == GOT_symbol) - return 1; - -#ifdef HAVE_SH64 - if (sh_PIC_related_p (*symbol_get_tc (sym))) - return 1; -#endif - - exp = symbol_get_value_expression (sym); - - return (exp->X_op == O_PIC_reloc - || sh_PIC_related_p (exp->X_add_symbol) - || sh_PIC_related_p (exp->X_op_symbol)); -} - -/* Determine the relocation type to be used to represent the - expression, that may be rearranged. */ - -static int -sh_check_fixup (main_exp, r_type_p) - expressionS *main_exp; - bfd_reloc_code_real_type *r_type_p; -{ - expressionS *exp = main_exp; - - /* This is here for backward-compatibility only. GCC used to generated: - - f@PLT + . - (.LPCS# + 2) - - but we'd rather be able to handle this as a PIC-related reference - plus/minus a symbol. However, gas' parser gives us: - - O_subtract (O_add (f@PLT, .), .LPCS#+2) - - so we attempt to transform this into: - - O_subtract (f@PLT, O_subtract (.LPCS#+2, .)) - - which we can handle simply below. */ - if (exp->X_op == O_subtract) - { - if (sh_PIC_related_p (exp->X_op_symbol)) - return 1; - - exp = symbol_get_value_expression (exp->X_add_symbol); - - if (exp && sh_PIC_related_p (exp->X_op_symbol)) - return 1; - - if (exp && exp->X_op == O_add - && sh_PIC_related_p (exp->X_add_symbol)) - { - symbolS *sym = exp->X_add_symbol; - - exp->X_op = O_subtract; - exp->X_add_symbol = main_exp->X_op_symbol; - - main_exp->X_op_symbol = main_exp->X_add_symbol; - main_exp->X_add_symbol = sym; - - main_exp->X_add_number += exp->X_add_number; - exp->X_add_number = 0; - } - - exp = main_exp; - } - else if (exp->X_op == O_add && sh_PIC_related_p (exp->X_op_symbol)) - return 1; - - if (exp->X_op == O_symbol || exp->X_op == O_add || exp->X_op == O_subtract) - { -#ifdef HAVE_SH64 - if (exp->X_add_symbol - && (exp->X_add_symbol == GOT_symbol - || (GOT_symbol - && *symbol_get_tc (exp->X_add_symbol) == GOT_symbol))) - { - switch (*r_type_p) - { - case BFD_RELOC_SH_IMM_LOW16: - *r_type_p = BFD_RELOC_SH_GOTPC_LOW16; - break; - - case BFD_RELOC_SH_IMM_MEDLOW16: - *r_type_p = BFD_RELOC_SH_GOTPC_MEDLOW16; - break; - - case BFD_RELOC_SH_IMM_MEDHI16: - *r_type_p = BFD_RELOC_SH_GOTPC_MEDHI16; - break; - - case BFD_RELOC_SH_IMM_HI16: - *r_type_p = BFD_RELOC_SH_GOTPC_HI16; - break; - - case BFD_RELOC_NONE: - case BFD_RELOC_UNUSED: - *r_type_p = BFD_RELOC_SH_GOTPC; - break; - - default: - abort (); - } - return 0; - } -#else - if (exp->X_add_symbol && exp->X_add_symbol == GOT_symbol) - { - *r_type_p = BFD_RELOC_SH_GOTPC; - return 0; - } -#endif - exp = symbol_get_value_expression (exp->X_add_symbol); - if (! exp) - return 0; - } - - if (exp->X_op == O_PIC_reloc) - { -#ifdef HAVE_SH64 - switch (*r_type_p) - { - case BFD_RELOC_NONE: - case BFD_RELOC_UNUSED: - *r_type_p = exp->X_md; - break; - - case BFD_RELOC_SH_IMM_LOW16: - switch (exp->X_md) - { - case BFD_RELOC_32_GOTOFF: - *r_type_p = BFD_RELOC_SH_GOTOFF_LOW16; - break; - - case BFD_RELOC_SH_GOTPLT32: - *r_type_p = BFD_RELOC_SH_GOTPLT_LOW16; - break; - - case BFD_RELOC_32_GOT_PCREL: - *r_type_p = BFD_RELOC_SH_GOT_LOW16; - break; - - case BFD_RELOC_32_PLT_PCREL: - *r_type_p = BFD_RELOC_SH_PLT_LOW16; - break; - - default: - abort (); - } - break; - - case BFD_RELOC_SH_IMM_MEDLOW16: - switch (exp->X_md) - { - case BFD_RELOC_32_GOTOFF: - *r_type_p = BFD_RELOC_SH_GOTOFF_MEDLOW16; - break; - - case BFD_RELOC_SH_GOTPLT32: - *r_type_p = BFD_RELOC_SH_GOTPLT_MEDLOW16; - break; - - case BFD_RELOC_32_GOT_PCREL: - *r_type_p = BFD_RELOC_SH_GOT_MEDLOW16; - break; - - case BFD_RELOC_32_PLT_PCREL: - *r_type_p = BFD_RELOC_SH_PLT_MEDLOW16; - break; - - default: - abort (); - } - break; - - case BFD_RELOC_SH_IMM_MEDHI16: - switch (exp->X_md) - { - case BFD_RELOC_32_GOTOFF: - *r_type_p = BFD_RELOC_SH_GOTOFF_MEDHI16; - break; - - case BFD_RELOC_SH_GOTPLT32: - *r_type_p = BFD_RELOC_SH_GOTPLT_MEDHI16; - break; - - case BFD_RELOC_32_GOT_PCREL: - *r_type_p = BFD_RELOC_SH_GOT_MEDHI16; - break; - - case BFD_RELOC_32_PLT_PCREL: - *r_type_p = BFD_RELOC_SH_PLT_MEDHI16; - break; - - default: - abort (); - } - break; - - case BFD_RELOC_SH_IMM_HI16: - switch (exp->X_md) - { - case BFD_RELOC_32_GOTOFF: - *r_type_p = BFD_RELOC_SH_GOTOFF_HI16; - break; - - case BFD_RELOC_SH_GOTPLT32: - *r_type_p = BFD_RELOC_SH_GOTPLT_HI16; - break; - - case BFD_RELOC_32_GOT_PCREL: - *r_type_p = BFD_RELOC_SH_GOT_HI16; - break; - - case BFD_RELOC_32_PLT_PCREL: - *r_type_p = BFD_RELOC_SH_PLT_HI16; - break; - - default: - abort (); - } - break; - - default: - abort (); - } -#else - *r_type_p = exp->X_md; -#endif - if (exp == main_exp) - exp->X_op = O_symbol; - else - { - main_exp->X_add_symbol = exp->X_add_symbol; - main_exp->X_add_number += exp->X_add_number; - } - } - else - return (sh_PIC_related_p (exp->X_add_symbol) - || sh_PIC_related_p (exp->X_op_symbol)); - - return 0; -} - -/* Add expression EXP of SIZE bytes to offset OFF of fragment FRAG. */ - -void -sh_cons_fix_new (frag, off, size, exp) - fragS *frag; - int off, size; - expressionS *exp; -{ - bfd_reloc_code_real_type r_type = BFD_RELOC_UNUSED; - - if (sh_check_fixup (exp, &r_type)) - as_bad (_("Invalid PIC expression.")); - - if (r_type == BFD_RELOC_UNUSED) - switch (size) - { - case 1: - r_type = BFD_RELOC_8; - break; - - case 2: - r_type = BFD_RELOC_16; - break; - - case 4: - r_type = BFD_RELOC_32; - break; - -#ifdef HAVE_SH64 - case 8: - r_type = BFD_RELOC_64; - break; -#endif - - default: - goto error; - } - else if (size != 4) - { - error: - as_bad (_("unsupported BFD relocation size %u"), size); - r_type = BFD_RELOC_UNUSED; - } - - fix_new_exp (frag, off, size, exp, 0, r_type); -} - -/* The regular cons() function, that reads constants, doesn't support - suffixes such as @GOT, @GOTOFF and @PLT, that generate - machine-specific relocation types. So we must define it here. */ -/* Clobbers input_line_pointer, checks end-of-line. */ -static void -sh_elf_cons (nbytes) - register int nbytes; /* 1=.byte, 2=.word, 4=.long */ -{ - expressionS exp; - -#ifdef HAVE_SH64 - - /* Update existing range to include a previous insn, if there was one. */ - sh64_update_contents_mark (true); - - /* We need to make sure the contents type is set to data. */ - sh64_flag_output (); - -#endif /* HAVE_SH64 */ - - if (is_it_end_of_statement ()) - { - demand_empty_rest_of_line (); - return; - } - - do - { - expression (&exp); - emit_expr (&exp, (unsigned int) nbytes); - } - while (*input_line_pointer++ == ','); - - input_line_pointer--; /* Put terminator back into stream. */ - if (*input_line_pointer == '#' || *input_line_pointer == '!') - { - while (! is_end_of_line[(unsigned char) *input_line_pointer++]); - } - else - demand_empty_rest_of_line (); -} -#endif /* OBJ_ELF */ - - -/* This function is called once, at assembler startup time. This should - set up all the tables, etc that the MD part of the assembler needs. */ - -void -md_begin () -{ - sh_opcode_info *opcode; - char *prev_name = ""; - int target_arch; - - target_arch = arch_sh1_up & ~(sh_dsp ? arch_sh3e_up : arch_sh_dsp_up); - valid_arch = target_arch; - -#ifdef HAVE_SH64 - shmedia_md_begin (); -#endif - - opcode_hash_control = hash_new (); - - /* Insert unique names into hash table. */ - for (opcode = sh_table; opcode->name; opcode++) - { - if (strcmp (prev_name, opcode->name)) - { - if (! (opcode->arch & target_arch)) - continue; - prev_name = opcode->name; - hash_insert (opcode_hash_control, opcode->name, (char *) opcode); - } - else - { - /* Make all the opcodes with the same name point to the same - string. */ - opcode->name = prev_name; - } - } -} - -static int reg_m; -static int reg_n; -static int reg_x, reg_y; -static int reg_efg; -static int reg_b; - -#define IDENT_CHAR(c) (ISALNUM (c) || (c) == '_') - -/* Try to parse a reg name. Return the number of chars consumed. */ - -static int -parse_reg (src, mode, reg) - char *src; - int *mode; - int *reg; -{ - char l0 = TOLOWER (src[0]); - char l1 = l0 ? TOLOWER (src[1]) : 0; - - /* We use ! IDENT_CHAR for the next character after the register name, to - make sure that we won't accidentally recognize a symbol name such as - 'sram' or sr_ram as being a reference to the register 'sr'. */ - - if (l0 == 'r') - { - if (l1 == '1') - { - if (src[2] >= '0' && src[2] <= '5' - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = A_REG_N; - *reg = 10 + src[2] - '0'; - return 3; - } - } - if (l1 >= '0' && l1 <= '9' - && ! IDENT_CHAR ((unsigned char) src[2])) - { - *mode = A_REG_N; - *reg = (l1 - '0'); - return 2; - } - if (l1 >= '0' && l1 <= '7' && strncasecmp (&src[2], "_bank", 5) == 0 - && ! IDENT_CHAR ((unsigned char) src[7])) - { - *mode = A_REG_B; - *reg = (l1 - '0'); - return 7; - } - - if (l1 == 'e' && ! IDENT_CHAR ((unsigned char) src[2])) - { - *mode = A_RE; - return 2; - } - if (l1 == 's' && ! IDENT_CHAR ((unsigned char) src[2])) - { - *mode = A_RS; - return 2; - } - } - - if (l0 == 'a') - { - if (l1 == '0') - { - if (! IDENT_CHAR ((unsigned char) src[2])) - { - *mode = DSP_REG_N; - *reg = A_A0_NUM; - return 2; - } - if (TOLOWER (src[2]) == 'g' && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = DSP_REG_N; - *reg = A_A0G_NUM; - return 3; - } - } - if (l1 == '1') - { - if (! IDENT_CHAR ((unsigned char) src[2])) - { - *mode = DSP_REG_N; - *reg = A_A1_NUM; - return 2; - } - if (TOLOWER (src[2]) == 'g' && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = DSP_REG_N; - *reg = A_A1G_NUM; - return 3; - } - } - - if (l1 == 'x' && src[2] >= '0' && src[2] <= '1' - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = A_REG_N; - *reg = 4 + (l1 - '0'); - return 3; - } - if (l1 == 'y' && src[2] >= '0' && src[2] <= '1' - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = A_REG_N; - *reg = 6 + (l1 - '0'); - return 3; - } - if (l1 == 's' && src[2] >= '0' && src[2] <= '3' - && ! IDENT_CHAR ((unsigned char) src[3])) - { - int n = l1 - '0'; - - *mode = A_REG_N; - *reg = n | ((~n & 2) << 1); - return 3; - } - } - - if (l0 == 'i' && l1 && ! IDENT_CHAR ((unsigned char) src[2])) - { - if (l1 == 's') - { - *mode = A_REG_N; - *reg = 8; - return 2; - } - if (l1 == 'x') - { - *mode = A_REG_N; - *reg = 8; - return 2; - } - if (l1 == 'y') - { - *mode = A_REG_N; - *reg = 9; - return 2; - } - } - - if (l0 == 'x' && l1 >= '0' && l1 <= '1' - && ! IDENT_CHAR ((unsigned char) src[2])) - { - *mode = DSP_REG_N; - *reg = A_X0_NUM + l1 - '0'; - return 2; - } - - if (l0 == 'y' && l1 >= '0' && l1 <= '1' - && ! IDENT_CHAR ((unsigned char) src[2])) - { - *mode = DSP_REG_N; - *reg = A_Y0_NUM + l1 - '0'; - return 2; - } - - if (l0 == 'm' && l1 >= '0' && l1 <= '1' - && ! IDENT_CHAR ((unsigned char) src[2])) - { - *mode = DSP_REG_N; - *reg = l1 == '0' ? A_M0_NUM : A_M1_NUM; - return 2; - } - - if (l0 == 's' - && l1 == 's' - && TOLOWER (src[2]) == 'r' && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = A_SSR; - return 3; - } - - if (l0 == 's' && l1 == 'p' && TOLOWER (src[2]) == 'c' - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = A_SPC; - return 3; - } - - if (l0 == 's' && l1 == 'g' && TOLOWER (src[2]) == 'r' - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = A_SGR; - return 3; - } - - if (l0 == 'd' && l1 == 's' && TOLOWER (src[2]) == 'r' - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = A_DSR; - return 3; - } - - if (l0 == 'd' && l1 == 'b' && TOLOWER (src[2]) == 'r' - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = A_DBR; - return 3; - } - - if (l0 == 's' && l1 == 'r' && ! IDENT_CHAR ((unsigned char) src[2])) - { - *mode = A_SR; - return 2; - } - - if (l0 == 's' && l1 == 'p' && ! IDENT_CHAR ((unsigned char) src[2])) - { - *mode = A_REG_N; - *reg = 15; - return 2; - } - - if (l0 == 'p' && l1 == 'r' && ! IDENT_CHAR ((unsigned char) src[2])) - { - *mode = A_PR; - return 2; - } - if (l0 == 'p' && l1 == 'c' && ! IDENT_CHAR ((unsigned char) src[2])) - { - /* Don't use A_DISP_PC here - that would accept stuff like 'mova pc,r0' - and use an uninitialized immediate. */ - *mode = A_PC; - return 2; - } - if (l0 == 'g' && l1 == 'b' && TOLOWER (src[2]) == 'r' - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = A_GBR; - return 3; - } - if (l0 == 'v' && l1 == 'b' && TOLOWER (src[2]) == 'r' - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = A_VBR; - return 3; - } - - if (l0 == 'm' && l1 == 'a' && TOLOWER (src[2]) == 'c' - && ! IDENT_CHAR ((unsigned char) src[4])) - { - if (TOLOWER (src[3]) == 'l') - { - *mode = A_MACL; - return 4; - } - if (TOLOWER (src[3]) == 'h') - { - *mode = A_MACH; - return 4; - } - } - if (l0 == 'm' && l1 == 'o' && TOLOWER (src[2]) == 'd' - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = A_MOD; - return 3; - } - if (l0 == 'f' && l1 == 'r') - { - if (src[2] == '1') - { - if (src[3] >= '0' && src[3] <= '5' - && ! IDENT_CHAR ((unsigned char) src[4])) - { - *mode = F_REG_N; - *reg = 10 + src[3] - '0'; - return 4; - } - } - if (src[2] >= '0' && src[2] <= '9' - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = F_REG_N; - *reg = (src[2] - '0'); - return 3; - } - } - if (l0 == 'd' && l1 == 'r') - { - if (src[2] == '1') - { - if (src[3] >= '0' && src[3] <= '4' && ! ((src[3] - '0') & 1) - && ! IDENT_CHAR ((unsigned char) src[4])) - { - *mode = D_REG_N; - *reg = 10 + src[3] - '0'; - return 4; - } - } - if (src[2] >= '0' && src[2] <= '8' && ! ((src[2] - '0') & 1) - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = D_REG_N; - *reg = (src[2] - '0'); - return 3; - } - } - if (l0 == 'x' && l1 == 'd') - { - if (src[2] == '1') - { - if (src[3] >= '0' && src[3] <= '4' && ! ((src[3] - '0') & 1) - && ! IDENT_CHAR ((unsigned char) src[4])) - { - *mode = X_REG_N; - *reg = 11 + src[3] - '0'; - return 4; - } - } - if (src[2] >= '0' && src[2] <= '8' && ! ((src[2] - '0') & 1) - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = X_REG_N; - *reg = (src[2] - '0') + 1; - return 3; - } - } - if (l0 == 'f' && l1 == 'v') - { - if (src[2] == '1'&& src[3] == '2' && ! IDENT_CHAR ((unsigned char) src[4])) - { - *mode = V_REG_N; - *reg = 12; - return 4; - } - if ((src[2] == '0' || src[2] == '4' || src[2] == '8') - && ! IDENT_CHAR ((unsigned char) src[3])) - { - *mode = V_REG_N; - *reg = (src[2] - '0'); - return 3; - } - } - if (l0 == 'f' && l1 == 'p' && TOLOWER (src[2]) == 'u' - && TOLOWER (src[3]) == 'l' - && ! IDENT_CHAR ((unsigned char) src[4])) - { - *mode = FPUL_N; - return 4; - } - - if (l0 == 'f' && l1 == 'p' && TOLOWER (src[2]) == 's' - && TOLOWER (src[3]) == 'c' - && TOLOWER (src[4]) == 'r' && ! IDENT_CHAR ((unsigned char) src[5])) - { - *mode = FPSCR_N; - return 5; - } - - if (l0 == 'x' && l1 == 'm' && TOLOWER (src[2]) == 't' - && TOLOWER (src[3]) == 'r' - && TOLOWER (src[4]) == 'x' && ! IDENT_CHAR ((unsigned char) src[5])) - { - *mode = XMTRX_M4; - return 5; - } - - return 0; -} - -static char * -parse_exp (s, op) - char *s; - sh_operand_info *op; -{ - char *save; - char *new; - - save = input_line_pointer; - input_line_pointer = s; - expression (&op->immediate); - if (op->immediate.X_op == O_absent) - as_bad (_("missing operand")); -#ifdef OBJ_ELF - else if (op->immediate.X_op == O_PIC_reloc - || sh_PIC_related_p (op->immediate.X_add_symbol) - || sh_PIC_related_p (op->immediate.X_op_symbol)) - as_bad (_("misplaced PIC operand")); -#endif - new = input_line_pointer; - input_line_pointer = save; - return new; -} - -/* The many forms of operand: - - Rn Register direct - @Rn Register indirect - @Rn+ Autoincrement - @-Rn Autodecrement - @(disp:4,Rn) - @(disp:8,GBR) - @(disp:8,PC) - - @(R0,Rn) - @(R0,GBR) - - disp:8 - disp:12 - #imm8 - pr, gbr, vbr, macl, mach - */ - -static char * -parse_at (src, op) - char *src; - sh_operand_info *op; -{ - int len; - int mode; - src++; - if (src[0] == '-') - { - /* Must be predecrement. */ - src++; - - len = parse_reg (src, &mode, &(op->reg)); - if (mode != A_REG_N) - as_bad (_("illegal register after @-")); - - op->type = A_DEC_N; - src += len; - } - else if (src[0] == '(') - { - /* Could be @(disp, rn), @(disp, gbr), @(disp, pc), @(r0, gbr) or - @(r0, rn). */ - src++; - len = parse_reg (src, &mode, &(op->reg)); - if (len && mode == A_REG_N) - { - src += len; - if (op->reg != 0) - { - as_bad (_("must be @(r0,...)")); - } - if (src[0] == ',') - { - src++; - /* Now can be rn or gbr. */ - len = parse_reg (src, &mode, &(op->reg)); - } - else - { - len = 0; - } - if (len) - { - if (mode == A_GBR) - { - op->type = A_R0_GBR; - } - else if (mode == A_REG_N) - { - op->type = A_IND_R0_REG_N; - } - else - { - as_bad (_("syntax error in @(r0,...)")); - } - } - else - { - as_bad (_("syntax error in @(r0...)")); - } - } - else - { - /* Must be an @(disp,.. thing). */ - src = parse_exp (src, op); - if (src[0] == ',') - src++; - /* Now can be rn, gbr or pc. */ - len = parse_reg (src, &mode, &op->reg); - if (len) - { - if (mode == A_REG_N) - { - op->type = A_DISP_REG_N; - } - else if (mode == A_GBR) - { - op->type = A_DISP_GBR; - } - else if (mode == A_PC) - { - /* We want @(expr, pc) to uniformly address . + expr, - no matter if expr is a constant, or a more complex - expression, e.g. sym-. or sym1-sym2. - However, we also used to accept @(sym,pc) - as adressing sym, i.e. meaning the same as plain sym. - Some existing code does use the @(sym,pc) syntax, so - we give it the old semantics for now, but warn about - its use, so that users have some time to fix their code. - - Note that due to this backward compatibility hack, - we'll get unexpected results when @(offset, pc) is used, - and offset is a symbol that is set later to an an address - difference, or an external symbol that is set to an - address difference in another source file, so we want to - eventually remove it. */ - if (op->immediate.X_op == O_symbol) - { - op->type = A_DISP_PC; - as_warn (_("Deprecated syntax.")); - } - else - { - op->type = A_DISP_PC_ABS; - /* Such operands don't get corrected for PC==.+4, so - make the correction here. */ - op->immediate.X_add_number -= 4; - } - } - else - { - as_bad (_("syntax error in @(disp,[Rn, gbr, pc])")); - } - } - else - { - as_bad (_("syntax error in @(disp,[Rn, gbr, pc])")); - } - } - src += len; - if (src[0] != ')') - as_bad (_("expecting )")); - else - src++; - } - else - { - src += parse_reg (src, &mode, &(op->reg)); - if (mode != A_REG_N) - as_bad (_("illegal register after @")); - - if (src[0] == '+') - { - char l0, l1; - - src++; - l0 = TOLOWER (src[0]); - l1 = TOLOWER (src[1]); - - if ((l0 == 'r' && l1 == '8') - || (l0 == 'i' && (l1 == 'x' || l1 == 's'))) - { - src += 2; - op->type = A_PMOD_N; - } - else if ( (l0 == 'r' && l1 == '9') - || (l0 == 'i' && l1 == 'y')) - { - src += 2; - op->type = A_PMODY_N; - } - else - op->type = A_INC_N; - } - else - op->type = A_IND_N; - } - return src; -} - -static void -get_operand (ptr, op) - char **ptr; - sh_operand_info *op; -{ - char *src = *ptr; - int mode = -1; - unsigned int len; - - if (src[0] == '#') - { - src++; - *ptr = parse_exp (src, op); - op->type = A_IMM; - return; - } - - else if (src[0] == '@') - { - *ptr = parse_at (src, op); - return; - } - len = parse_reg (src, &mode, &(op->reg)); - if (len) - { - *ptr = src + len; - op->type = mode; - return; - } - else - { - /* Not a reg, the only thing left is a displacement. */ - *ptr = parse_exp (src, op); - op->type = A_DISP_PC; - return; - } -} - -static char * -get_operands (info, args, operand) - sh_opcode_info *info; - char *args; - sh_operand_info *operand; -{ - char *ptr = args; - if (info->arg[0]) - { - /* The pre-processor will eliminate whitespace in front of '@' - after the first argument; we may be called multiple times - from assemble_ppi, so don't insist on finding whitespace here. */ - if (*ptr == ' ') - ptr++; - - get_operand (&ptr, operand + 0); - if (info->arg[1]) - { - if (*ptr == ',') - { - ptr++; - } - get_operand (&ptr, operand + 1); - /* ??? Hack: psha/pshl have a varying operand number depending on - the type of the first operand. We handle this by having the - three-operand version first and reducing the number of operands - parsed to two if we see that the first operand is an immediate. - This works because no insn with three operands has an immediate - as first operand. */ - if (info->arg[2] && operand[0].type != A_IMM) - { - if (*ptr == ',') - { - ptr++; - } - get_operand (&ptr, operand + 2); - } - else - { - operand[2].type = 0; - } - } - else - { - operand[1].type = 0; - operand[2].type = 0; - } - } - else - { - operand[0].type = 0; - operand[1].type = 0; - operand[2].type = 0; - } - return ptr; -} - -/* Passed a pointer to a list of opcodes which use different - addressing modes, return the opcode which matches the opcodes - provided. */ - -static sh_opcode_info * -get_specific (opcode, operands) - sh_opcode_info *opcode; - sh_operand_info *operands; -{ - sh_opcode_info *this_try = opcode; - char *name = opcode->name; - int n = 0; - - while (opcode->name) - { - this_try = opcode++; - if (this_try->name != name) - { - /* We've looked so far down the table that we've run out of - opcodes with the same name. */ - return 0; - } - - /* Look at both operands needed by the opcodes and provided by - the user - since an arg test will often fail on the same arg - again and again, we'll try and test the last failing arg the - first on each opcode try. */ - for (n = 0; this_try->arg[n]; n++) - { - sh_operand_info *user = operands + n; - sh_arg_type arg = this_try->arg[n]; - - switch (arg) - { - case A_DISP_PC: - if (user->type == A_DISP_PC_ABS) - break; - /* Fall through. */ - case A_IMM: - case A_BDISP12: - case A_BDISP8: - case A_DISP_GBR: - case A_MACH: - case A_PR: - case A_MACL: - if (user->type != arg) - goto fail; - break; - case A_R0: - /* opcode needs r0 */ - if (user->type != A_REG_N || user->reg != 0) - goto fail; - break; - case A_R0_GBR: - if (user->type != A_R0_GBR || user->reg != 0) - goto fail; - break; - case F_FR0: - if (user->type != F_REG_N || user->reg != 0) - goto fail; - break; - - case A_REG_N: - case A_INC_N: - case A_DEC_N: - case A_IND_N: - case A_IND_R0_REG_N: - case A_DISP_REG_N: - case F_REG_N: - case D_REG_N: - case X_REG_N: - case V_REG_N: - case FPUL_N: - case FPSCR_N: - case A_PMOD_N: - case A_PMODY_N: - case DSP_REG_N: - /* Opcode needs rn */ - if (user->type != arg) - goto fail; - reg_n = user->reg; - break; - case DX_REG_N: - if (user->type != D_REG_N && user->type != X_REG_N) - goto fail; - reg_n = user->reg; - break; - case A_GBR: - case A_SR: - case A_VBR: - case A_DSR: - case A_MOD: - case A_RE: - case A_RS: - case A_SSR: - case A_SPC: - case A_SGR: - case A_DBR: - if (user->type != arg) - goto fail; - break; - - case A_REG_B: - if (user->type != arg) - goto fail; - reg_b = user->reg; - break; - - case A_REG_M: - case A_INC_M: - case A_DEC_M: - case A_IND_M: - case A_IND_R0_REG_M: - case A_DISP_REG_M: - case DSP_REG_M: - /* Opcode needs rn */ - if (user->type != arg - A_REG_M + A_REG_N) - goto fail; - reg_m = user->reg; - break; - - case DSP_REG_X: - if (user->type != DSP_REG_N) - goto fail; - switch (user->reg) - { - case A_X0_NUM: - reg_x = 0; - break; - case A_X1_NUM: - reg_x = 1; - break; - case A_A0_NUM: - reg_x = 2; - break; - case A_A1_NUM: - reg_x = 3; - break; - default: - goto fail; - } - break; - - case DSP_REG_Y: - if (user->type != DSP_REG_N) - goto fail; - switch (user->reg) - { - case A_Y0_NUM: - reg_y = 0; - break; - case A_Y1_NUM: - reg_y = 1; - break; - case A_M0_NUM: - reg_y = 2; - break; - case A_M1_NUM: - reg_y = 3; - break; - default: - goto fail; - } - break; - - case DSP_REG_E: - if (user->type != DSP_REG_N) - goto fail; - switch (user->reg) - { - case A_X0_NUM: - reg_efg = 0 << 10; - break; - case A_X1_NUM: - reg_efg = 1 << 10; - break; - case A_Y0_NUM: - reg_efg = 2 << 10; - break; - case A_A1_NUM: - reg_efg = 3 << 10; - break; - default: - goto fail; - } - break; - - case DSP_REG_F: - if (user->type != DSP_REG_N) - goto fail; - switch (user->reg) - { - case A_Y0_NUM: - reg_efg |= 0 << 8; - break; - case A_Y1_NUM: - reg_efg |= 1 << 8; - break; - case A_X0_NUM: - reg_efg |= 2 << 8; - break; - case A_A1_NUM: - reg_efg |= 3 << 8; - break; - default: - goto fail; - } - break; - - case DSP_REG_G: - if (user->type != DSP_REG_N) - goto fail; - switch (user->reg) - { - case A_M0_NUM: - reg_efg |= 0 << 2; - break; - case A_M1_NUM: - reg_efg |= 1 << 2; - break; - case A_A0_NUM: - reg_efg |= 2 << 2; - break; - case A_A1_NUM: - reg_efg |= 3 << 2; - break; - default: - goto fail; - } - break; - - case A_A0: - if (user->type != DSP_REG_N || user->reg != A_A0_NUM) - goto fail; - break; - case A_X0: - if (user->type != DSP_REG_N || user->reg != A_X0_NUM) - goto fail; - break; - case A_X1: - if (user->type != DSP_REG_N || user->reg != A_X1_NUM) - goto fail; - break; - case A_Y0: - if (user->type != DSP_REG_N || user->reg != A_Y0_NUM) - goto fail; - break; - case A_Y1: - if (user->type != DSP_REG_N || user->reg != A_Y1_NUM) - goto fail; - break; - - case F_REG_M: - case D_REG_M: - case X_REG_M: - case V_REG_M: - case FPUL_M: - case FPSCR_M: - /* Opcode needs rn */ - if (user->type != arg - F_REG_M + F_REG_N) - goto fail; - reg_m = user->reg; - break; - case DX_REG_M: - if (user->type != D_REG_N && user->type != X_REG_N) - goto fail; - reg_m = user->reg; - break; - case XMTRX_M4: - if (user->type != XMTRX_M4) - goto fail; - reg_m = 4; - break; - - default: - printf (_("unhandled %d\n"), arg); - goto fail; - } - } - if ( !(valid_arch & this_try->arch)) - goto fail; - valid_arch &= this_try->arch; - return this_try; - fail: - ; - } - - return 0; -} - -static void -insert (where, how, pcrel, op) - char *where; - int how; - int pcrel; - sh_operand_info *op; -{ - fix_new_exp (frag_now, - where - frag_now->fr_literal, - 2, - &op->immediate, - pcrel, - how); -} - -static void -build_relax (opcode, op) - sh_opcode_info *opcode; - sh_operand_info *op; -{ - int high_byte = target_big_endian ? 0 : 1; - char *p; - - if (opcode->arg[0] == A_BDISP8) - { - int what = (opcode->nibbles[1] & 4) ? COND_JUMP_DELAY : COND_JUMP; - p = frag_var (rs_machine_dependent, - md_relax_table[C (what, COND32)].rlx_length, - md_relax_table[C (what, COND8)].rlx_length, - C (what, 0), - op->immediate.X_add_symbol, - op->immediate.X_add_number, - 0); - p[high_byte] = (opcode->nibbles[0] << 4) | (opcode->nibbles[1]); - } - else if (opcode->arg[0] == A_BDISP12) - { - p = frag_var (rs_machine_dependent, - md_relax_table[C (UNCOND_JUMP, UNCOND32)].rlx_length, - md_relax_table[C (UNCOND_JUMP, UNCOND12)].rlx_length, - C (UNCOND_JUMP, 0), - op->immediate.X_add_symbol, - op->immediate.X_add_number, - 0); - p[high_byte] = (opcode->nibbles[0] << 4); - } - -} - -/* Insert ldrs & ldre with fancy relocations that relaxation can recognize. */ - -static char * -insert_loop_bounds (output, operand) - char *output; - sh_operand_info *operand; -{ - char *name; - symbolS *end_sym; - - /* Since the low byte of the opcode will be overwritten by the reloc, we - can just stash the high byte into both bytes and ignore endianness. */ - output[0] = 0x8c; - output[1] = 0x8c; - insert (output, BFD_RELOC_SH_LOOP_START, 1, operand); - insert (output, BFD_RELOC_SH_LOOP_END, 1, operand + 1); - - if (sh_relax) - { - static int count = 0; - - /* If the last loop insn is a two-byte-insn, it is in danger of being - swapped with the insn after it. To prevent this, create a new - symbol - complete with SH_LABEL reloc - after the last loop insn. - If the last loop insn is four bytes long, the symbol will be - right in the middle, but four byte insns are not swapped anyways. */ - /* A REPEAT takes 6 bytes. The SH has a 32 bit address space. - Hence a 9 digit number should be enough to count all REPEATs. */ - name = alloca (11); - sprintf (name, "_R%x", count++ & 0x3fffffff); - end_sym = symbol_new (name, undefined_section, 0, &zero_address_frag); - /* Make this a local symbol. */ -#ifdef OBJ_COFF - SF_SET_LOCAL (end_sym); -#endif /* OBJ_COFF */ - symbol_table_insert (end_sym); - end_sym->sy_value = operand[1].immediate; - end_sym->sy_value.X_add_number += 2; - fix_new (frag_now, frag_now_fix (), 2, end_sym, 0, 1, BFD_RELOC_SH_LABEL); - } - - output = frag_more (2); - output[0] = 0x8e; - output[1] = 0x8e; - insert (output, BFD_RELOC_SH_LOOP_START, 1, operand); - insert (output, BFD_RELOC_SH_LOOP_END, 1, operand + 1); - - return frag_more (2); -} - -/* Now we know what sort of opcodes it is, let's build the bytes. */ - -static unsigned int -build_Mytes (opcode, operand) - sh_opcode_info *opcode; - sh_operand_info *operand; -{ - int index; - char nbuf[4]; - char *output = frag_more (2); - unsigned int size = 2; - int low_byte = target_big_endian ? 1 : 0; - nbuf[0] = 0; - nbuf[1] = 0; - nbuf[2] = 0; - nbuf[3] = 0; - - for (index = 0; index < 4; index++) - { - sh_nibble_type i = opcode->nibbles[index]; - if (i < 16) - { - nbuf[index] = i; - } - else - { - switch (i) - { - case REG_N: - nbuf[index] = reg_n; - break; - case REG_M: - nbuf[index] = reg_m; - break; - case SDT_REG_N: - if (reg_n < 2 || reg_n > 5) - as_bad (_("Invalid register: 'r%d'"), reg_n); - nbuf[index] = (reg_n & 3) | 4; - break; - case REG_NM: - nbuf[index] = reg_n | (reg_m >> 2); - break; - case REG_B: - nbuf[index] = reg_b | 0x08; - break; - case IMM0_4BY4: - insert (output + low_byte, BFD_RELOC_SH_IMM4BY4, 0, operand); - break; - case IMM0_4BY2: - insert (output + low_byte, BFD_RELOC_SH_IMM4BY2, 0, operand); - break; - case IMM0_4: - insert (output + low_byte, BFD_RELOC_SH_IMM4, 0, operand); - break; - case IMM1_4BY4: - insert (output + low_byte, BFD_RELOC_SH_IMM4BY4, 0, operand + 1); - break; - case IMM1_4BY2: - insert (output + low_byte, BFD_RELOC_SH_IMM4BY2, 0, operand + 1); - break; - case IMM1_4: - insert (output + low_byte, BFD_RELOC_SH_IMM4, 0, operand + 1); - break; - case IMM0_8BY4: - insert (output + low_byte, BFD_RELOC_SH_IMM8BY4, 0, operand); - break; - case IMM0_8BY2: - insert (output + low_byte, BFD_RELOC_SH_IMM8BY2, 0, operand); - break; - case IMM0_8: - insert (output + low_byte, BFD_RELOC_SH_IMM8, 0, operand); - break; - case IMM1_8BY4: - insert (output + low_byte, BFD_RELOC_SH_IMM8BY4, 0, operand + 1); - break; - case IMM1_8BY2: - insert (output + low_byte, BFD_RELOC_SH_IMM8BY2, 0, operand + 1); - break; - case IMM1_8: - insert (output + low_byte, BFD_RELOC_SH_IMM8, 0, operand + 1); - break; - case PCRELIMM_8BY4: - insert (output, BFD_RELOC_SH_PCRELIMM8BY4, - operand->type != A_DISP_PC_ABS, operand); - break; - case PCRELIMM_8BY2: - insert (output, BFD_RELOC_SH_PCRELIMM8BY2, - operand->type != A_DISP_PC_ABS, operand); - break; - case REPEAT: - output = insert_loop_bounds (output, operand); - nbuf[index] = opcode->nibbles[3]; - operand += 2; - break; - default: - printf (_("failed for %d\n"), i); - } - } - } - if (!target_big_endian) - { - output[1] = (nbuf[0] << 4) | (nbuf[1]); - output[0] = (nbuf[2] << 4) | (nbuf[3]); - } - else - { - output[0] = (nbuf[0] << 4) | (nbuf[1]); - output[1] = (nbuf[2] << 4) | (nbuf[3]); - } - return size; -} - -/* Find an opcode at the start of *STR_P in the hash table, and set - *STR_P to the first character after the last one read. */ - -static sh_opcode_info * -find_cooked_opcode (str_p) - char **str_p; -{ - char *str = *str_p; - unsigned char *op_start; - unsigned char *op_end; - char name[20]; - int nlen = 0; - - /* Drop leading whitespace. */ - while (*str == ' ') - str++; - - /* Find the op code end. - The pre-processor will eliminate whitespace in front of - any '@' after the first argument; we may be called from - assemble_ppi, so the opcode might be terminated by an '@'. */ - for (op_start = op_end = (unsigned char *) (str); - *op_end - && nlen < 20 - && !is_end_of_line[*op_end] && *op_end != ' ' && *op_end != '@'; - op_end++) - { - unsigned char c = op_start[nlen]; - - /* The machine independent code will convert CMP/EQ into cmp/EQ - because it thinks the '/' is the end of the symbol. Moreover, - all but the first sub-insn is a parallel processing insn won't - be capitalized. Instead of hacking up the machine independent - code, we just deal with it here. */ - c = TOLOWER (c); - name[nlen] = c; - nlen++; - } - - name[nlen] = 0; - *str_p = op_end; - - if (nlen == 0) - as_bad (_("can't find opcode ")); - - return (sh_opcode_info *) hash_find (opcode_hash_control, name); -} - -/* Assemble a parallel processing insn. */ -#define DDT_BASE 0xf000 /* Base value for double data transfer insns */ - -static unsigned int -assemble_ppi (op_end, opcode) - char *op_end; - sh_opcode_info *opcode; -{ - int movx = 0; - int movy = 0; - int cond = 0; - int field_b = 0; - char *output; - int move_code; - unsigned int size; - - for (;;) - { - sh_operand_info operand[3]; - - /* Some insn ignore one or more register fields, e.g. psts machl,a0. - Make sure we encode a defined insn pattern. */ - reg_x = 0; - reg_y = 0; - reg_n = 0; - - if (opcode->arg[0] != A_END) - op_end = get_operands (opcode, op_end, operand); - opcode = get_specific (opcode, operand); - if (opcode == 0) - { - /* Couldn't find an opcode which matched the operands. */ - char *where = frag_more (2); - size = 2; - - where[0] = 0x0; - where[1] = 0x0; - as_bad (_("invalid operands for opcode")); - return size; - } - - if (opcode->nibbles[0] != PPI) - as_bad (_("insn can't be combined with parallel processing insn")); - - switch (opcode->nibbles[1]) - { - - case NOPX: - if (movx) - as_bad (_("multiple movx specifications")); - movx = DDT_BASE; - break; - case NOPY: - if (movy) - as_bad (_("multiple movy specifications")); - movy = DDT_BASE; - break; - - case MOVX: - if (movx) - as_bad (_("multiple movx specifications")); - if (reg_n < 4 || reg_n > 5) - as_bad (_("invalid movx address register")); - if (opcode->nibbles[2] & 8) - { - if (reg_m == A_A1_NUM) - movx = 1 << 7; - else if (reg_m != A_A0_NUM) - as_bad (_("invalid movx dsp register")); - } - else - { - if (reg_x > 1) - as_bad (_("invalid movx dsp register")); - movx = reg_x << 7; - } - movx += ((reg_n - 4) << 9) + (opcode->nibbles[2] << 2) + DDT_BASE; - break; - - case MOVY: - if (movy) - as_bad (_("multiple movy specifications")); - if (opcode->nibbles[2] & 8) - { - /* Bit 3 in nibbles[2] is intended for bit 4 of the opcode, - so add 8 more. */ - movy = 8; - if (reg_m == A_A1_NUM) - movy += 1 << 6; - else if (reg_m != A_A0_NUM) - as_bad (_("invalid movy dsp register")); - } - else - { - if (reg_y > 1) - as_bad (_("invalid movy dsp register")); - movy = reg_y << 6; - } - if (reg_n < 6 || reg_n > 7) - as_bad (_("invalid movy address register")); - movy += ((reg_n - 6) << 8) + opcode->nibbles[2] + DDT_BASE; - break; - - case PSH: - if (operand[0].immediate.X_op != O_constant) - as_bad (_("dsp immediate shift value not constant")); - field_b = ((opcode->nibbles[2] << 12) - | (operand[0].immediate.X_add_number & 127) << 4 - | reg_n); - break; - case PPI3: - if (field_b) - as_bad (_("multiple parallel processing specifications")); - field_b = ((opcode->nibbles[2] << 12) + (opcode->nibbles[3] << 8) - + (reg_x << 6) + (reg_y << 4) + reg_n); - break; - case PDC: - if (cond) - as_bad (_("multiple condition specifications")); - cond = opcode->nibbles[2] << 8; - if (*op_end) - goto skip_cond_check; - break; - case PPIC: - if (field_b) - as_bad (_("multiple parallel processing specifications")); - field_b = ((opcode->nibbles[2] << 12) + (opcode->nibbles[3] << 8) - + cond + (reg_x << 6) + (reg_y << 4) + reg_n); - cond = 0; - break; - case PMUL: - if (field_b) - { - if ((field_b & 0xef00) != 0xa100) - as_bad (_("insn cannot be combined with pmuls")); - field_b -= 0x8100; - switch (field_b & 0xf) - { - case A_X0_NUM: - field_b += 0 - A_X0_NUM; - break; - case A_Y0_NUM: - field_b += 1 - A_Y0_NUM; - break; - case A_A0_NUM: - field_b += 2 - A_A0_NUM; - break; - case A_A1_NUM: - field_b += 3 - A_A1_NUM; - break; - default: - as_bad (_("bad padd / psub pmuls output operand")); - } - /* Generate warning if the destination register for padd / psub - and pmuls is the same ( only for A0 or A1 ). - If the last nibble is 1010 then A0 is used in both - padd / psub and pmuls. If it is 1111 then A1 is used - as destination register in both padd / psub and pmuls. */ - - if ((((field_b | reg_efg) & 0x000F) == 0x000A) - || (((field_b | reg_efg) & 0x000F) == 0x000F)) - as_warn (_("destination register is same for parallel insns")); - } - field_b += 0x4000 + reg_efg; - break; - default: - abort (); - } - if (cond) - { - as_bad (_("condition not followed by conditionalizable insn")); - cond = 0; - } - if (! *op_end) - break; - skip_cond_check: - opcode = find_cooked_opcode (&op_end); - if (opcode == NULL) - { - (as_bad - (_("unrecognized characters at end of parallel processing insn"))); - break; - } - } - - move_code = movx | movy; - if (field_b) - { - /* Parallel processing insn. */ - unsigned long ppi_code = (movx | movy | 0xf800) << 16 | field_b; - - output = frag_more (4); - size = 4; - if (! target_big_endian) - { - output[3] = ppi_code >> 8; - output[2] = ppi_code; - } - else - { - output[2] = ppi_code >> 8; - output[3] = ppi_code; - } - move_code |= 0xf800; - } - else - { - /* Just a double data transfer. */ - output = frag_more (2); - size = 2; - } - if (! target_big_endian) - { - output[1] = move_code >> 8; - output[0] = move_code; - } - else - { - output[0] = move_code >> 8; - output[1] = move_code; - } - return size; -} - -/* This is the guts of the machine-dependent assembler. STR points to a - machine dependent instruction. This function is supposed to emit - the frags/bytes it assembles to. */ - -void -md_assemble (str) - char *str; -{ - unsigned char *op_end; - sh_operand_info operand[3]; - sh_opcode_info *opcode; - unsigned int size = 0; - -#ifdef HAVE_SH64 - if (sh64_isa_mode == sh64_isa_shmedia) - { - shmedia_md_assemble (str); - return; - } - else - { - /* If we've seen pseudo-directives, make sure any emitted data or - frags are marked as data. */ - if (seen_insn == false) - { - sh64_update_contents_mark (true); - sh64_set_contents_type (CRT_SH5_ISA16); - } - - seen_insn = true; - } -#endif /* HAVE_SH64 */ - - opcode = find_cooked_opcode (&str); - op_end = str; - - if (opcode == NULL) - { - as_bad (_("unknown opcode")); - return; - } - - if (sh_relax - && ! seg_info (now_seg)->tc_segment_info_data.in_code) - { - /* Output a CODE reloc to tell the linker that the following - bytes are instructions, not data. */ - fix_new (frag_now, frag_now_fix (), 2, &abs_symbol, 0, 0, - BFD_RELOC_SH_CODE); - seg_info (now_seg)->tc_segment_info_data.in_code = 1; - } - - if (opcode->nibbles[0] == PPI) - { - size = assemble_ppi (op_end, opcode); - } - else - { - if (opcode->arg[0] == A_BDISP12 - || opcode->arg[0] == A_BDISP8) - { - parse_exp (op_end + 1, &operand[0]); - build_relax (opcode, &operand[0]); - } - else - { - if (opcode->arg[0] == A_END) - { - /* Ignore trailing whitespace. If there is any, it has already - been compressed to a single space. */ - if (*op_end == ' ') - op_end++; - } - else - { - op_end = get_operands (opcode, op_end, operand); - } - opcode = get_specific (opcode, operand); - - if (opcode == 0) - { - /* Couldn't find an opcode which matched the operands. */ - char *where = frag_more (2); - size = 2; - - where[0] = 0x0; - where[1] = 0x0; - as_bad (_("invalid operands for opcode")); - } - else - { - if (*op_end) - as_bad (_("excess operands: '%s'"), op_end); - - size = build_Mytes (opcode, operand); - } - } - } - -#ifdef BFD_ASSEMBLER - dwarf2_emit_insn (size); -#endif -} - -/* This routine is called each time a label definition is seen. It - emits a BFD_RELOC_SH_LABEL reloc if necessary. */ - -void -sh_frob_label () -{ - static fragS *last_label_frag; - static int last_label_offset; - - if (sh_relax - && seg_info (now_seg)->tc_segment_info_data.in_code) - { - int offset; - - offset = frag_now_fix (); - if (frag_now != last_label_frag - || offset != last_label_offset) - { - fix_new (frag_now, offset, 2, &abs_symbol, 0, 0, BFD_RELOC_SH_LABEL); - last_label_frag = frag_now; - last_label_offset = offset; - } - } -} - -/* This routine is called when the assembler is about to output some - data. It emits a BFD_RELOC_SH_DATA reloc if necessary. */ - -void -sh_flush_pending_output () -{ - if (sh_relax - && seg_info (now_seg)->tc_segment_info_data.in_code) - { - fix_new (frag_now, frag_now_fix (), 2, &abs_symbol, 0, 0, - BFD_RELOC_SH_DATA); - seg_info (now_seg)->tc_segment_info_data.in_code = 0; - } -} - -symbolS * -md_undefined_symbol (name) - char *name ATTRIBUTE_UNUSED; -{ - return 0; -} - -#ifdef OBJ_COFF -#ifndef BFD_ASSEMBLER - -void -tc_crawl_symbol_chain (headers) - object_headers *headers ATTRIBUTE_UNUSED; -{ - printf (_("call to tc_crawl_symbol_chain \n")); -} - -void -tc_headers_hook (headers) - object_headers *headers ATTRIBUTE_UNUSED; -{ - printf (_("call to tc_headers_hook \n")); -} - -#endif -#endif - -/* Various routines to kill one day. */ -/* Equal to MAX_PRECISION in atof-ieee.c. */ -#define MAX_LITTLENUMS 6 - -/* Turn a string in input_line_pointer into a floating point constant - of type TYPE, and store the appropriate bytes in *LITP. The number - of LITTLENUMS emitted is stored in *SIZEP . An error message is - returned, or NULL on OK. */ - -char * -md_atof (type, litP, sizeP) - int type; - char *litP; - int *sizeP; -{ - int prec; - LITTLENUM_TYPE words[4]; - char *t; - int i; - - switch (type) - { - case 'f': - prec = 2; - break; - - case 'd': - prec = 4; - break; - - default: - *sizeP = 0; - return _("bad call to md_atof"); - } - - t = atof_ieee (input_line_pointer, type, words); - if (t) - input_line_pointer = t; - - *sizeP = prec * 2; - - if (! target_big_endian) - { - for (i = prec - 1; i >= 0; i--) - { - md_number_to_chars (litP, (valueT) words[i], 2); - litP += 2; - } - } - else - { - for (i = 0; i < prec; i++) - { - md_number_to_chars (litP, (valueT) words[i], 2); - litP += 2; - } - } - - return NULL; -} - -/* Handle the .uses pseudo-op. This pseudo-op is used just before a - call instruction. It refers to a label of the instruction which - loads the register which the call uses. We use it to generate a - special reloc for the linker. */ - -static void -s_uses (ignore) - int ignore ATTRIBUTE_UNUSED; -{ - expressionS ex; - - if (! sh_relax) - as_warn (_(".uses pseudo-op seen when not relaxing")); - - expression (&ex); - - if (ex.X_op != O_symbol || ex.X_add_number != 0) - { - as_bad (_("bad .uses format")); - ignore_rest_of_line (); - return; - } - - fix_new_exp (frag_now, frag_now_fix (), 2, &ex, 1, BFD_RELOC_SH_USES); - - demand_empty_rest_of_line (); -} - -const char *md_shortopts = ""; -struct option md_longopts[] = -{ -#define OPTION_RELAX (OPTION_MD_BASE) -#define OPTION_BIG (OPTION_MD_BASE + 1) -#define OPTION_LITTLE (OPTION_BIG + 1) -#define OPTION_SMALL (OPTION_LITTLE + 1) -#define OPTION_DSP (OPTION_SMALL + 1) - - {"relax", no_argument, NULL, OPTION_RELAX}, - {"big", no_argument, NULL, OPTION_BIG}, - {"little", no_argument, NULL, OPTION_LITTLE}, - {"small", no_argument, NULL, OPTION_SMALL}, - {"dsp", no_argument, NULL, OPTION_DSP}, -#ifdef HAVE_SH64 -#define OPTION_ISA (OPTION_DSP + 1) -#define OPTION_ABI (OPTION_ISA + 1) -#define OPTION_NO_MIX (OPTION_ABI + 1) -#define OPTION_SHCOMPACT_CONST_CRANGE (OPTION_NO_MIX + 1) -#define OPTION_NO_EXPAND (OPTION_SHCOMPACT_CONST_CRANGE + 1) -#define OPTION_PT32 (OPTION_NO_EXPAND + 1) - {"isa", required_argument, NULL, OPTION_ISA}, - {"abi", required_argument, NULL, OPTION_ABI}, - {"no-mix", no_argument, NULL, OPTION_NO_MIX}, - {"shcompact-const-crange", no_argument, NULL, OPTION_SHCOMPACT_CONST_CRANGE}, - {"no-expand", no_argument, NULL, OPTION_NO_EXPAND}, - {"expand-pt32", no_argument, NULL, OPTION_PT32}, -#endif /* HAVE_SH64 */ - - {NULL, no_argument, NULL, 0} -}; -size_t md_longopts_size = sizeof (md_longopts); - -int -md_parse_option (c, arg) - int c; - char *arg ATTRIBUTE_UNUSED; -{ - switch (c) - { - case OPTION_RELAX: - sh_relax = 1; - break; - - case OPTION_BIG: - target_big_endian = 1; - break; - - case OPTION_LITTLE: - target_big_endian = 0; - break; - - case OPTION_SMALL: - sh_small = 1; - break; - - case OPTION_DSP: - sh_dsp = 1; - break; - -#ifdef HAVE_SH64 - case OPTION_ISA: - if (strcasecmp (arg, "shmedia") == 0) - { - if (sh64_isa_mode == sh64_isa_shcompact) - as_bad (_("Invalid combination: --isa=SHcompact with --isa=SHmedia")); - sh64_isa_mode = sh64_isa_shmedia; - } - else if (strcasecmp (arg, "shcompact") == 0) - { - if (sh64_isa_mode == sh64_isa_shmedia) - as_bad (_("Invalid combination: --isa=SHmedia with --isa=SHcompact")); - if (sh64_abi == sh64_abi_64) - as_bad (_("Invalid combination: --abi=64 with --isa=SHcompact")); - sh64_isa_mode = sh64_isa_shcompact; - } - else - as_bad ("Invalid argument to --isa option: %s", arg); - break; - - case OPTION_ABI: - if (strcmp (arg, "32") == 0) - { - if (sh64_abi == sh64_abi_64) - as_bad (_("Invalid combination: --abi=32 with --abi=64")); - sh64_abi = sh64_abi_32; - } - else if (strcmp (arg, "64") == 0) - { - if (sh64_abi == sh64_abi_32) - as_bad (_("Invalid combination: --abi=64 with --abi=32")); - if (sh64_isa_mode == sh64_isa_shcompact) - as_bad (_("Invalid combination: --isa=SHcompact with --abi=64")); - sh64_abi = sh64_abi_64; - } - else - as_bad ("Invalid argument to --abi option: %s", arg); - break; - - case OPTION_NO_MIX: - sh64_mix = false; - break; - - case OPTION_SHCOMPACT_CONST_CRANGE: - sh64_shcompact_const_crange = true; - break; - - case OPTION_NO_EXPAND: - sh64_expand = false; - break; - - case OPTION_PT32: - sh64_pt32 = true; - break; -#endif /* HAVE_SH64 */ - - default: - return 0; - } - - return 1; -} - -void -md_show_usage (stream) - FILE *stream; -{ - fprintf (stream, _("\ -SH options:\n\ --little generate little endian code\n\ --big generate big endian code\n\ --relax alter jump instructions for long displacements\n\ --small align sections to 4 byte boundaries, not 16\n\ --dsp enable sh-dsp insns, and disable sh3e / sh4 insns.\n")); -#ifdef HAVE_SH64 - fprintf (stream, _("\ --isa=[shmedia set default instruction set for SH64\n\ - | SHmedia\n\ - | shcompact\n\ - | SHcompact]\n\ --abi=[32|64] set size of expanded SHmedia operands and object\n\ - file type\n\ --shcompact-const-crange emit code-range descriptors for constants in\n\ - SHcompact code sections\n\ --no-mix disallow SHmedia code in the same section as\n\ - constants and SHcompact code\n\ --no-expand do not expand MOVI, PT, PTA or PTB instructions\n\ --expand-pt32 with -abi=64, expand PT, PTA and PTB instructions\n\ - to 32 bits only")); -#endif /* HAVE_SH64 */ -} - -/* This struct is used to pass arguments to sh_count_relocs through - bfd_map_over_sections. */ - -struct sh_count_relocs -{ - /* Symbol we are looking for. */ - symbolS *sym; - /* Count of relocs found. */ - int count; -}; - -/* Count the number of fixups in a section which refer to a particular - symbol. When using BFD_ASSEMBLER, this is called via - bfd_map_over_sections. */ - -static void -sh_count_relocs (abfd, sec, data) - bfd *abfd ATTRIBUTE_UNUSED; - segT sec; - PTR data; -{ - struct sh_count_relocs *info = (struct sh_count_relocs *) data; - segment_info_type *seginfo; - symbolS *sym; - fixS *fix; - - seginfo = seg_info (sec); - if (seginfo == NULL) - return; - - sym = info->sym; - for (fix = seginfo->fix_root; fix != NULL; fix = fix->fx_next) - { - if (fix->fx_addsy == sym) - { - ++info->count; - fix->fx_tcbit = 1; - } - } -} - -/* Handle the count relocs for a particular section. When using - BFD_ASSEMBLER, this is called via bfd_map_over_sections. */ - -static void -sh_frob_section (abfd, sec, ignore) - bfd *abfd ATTRIBUTE_UNUSED; - segT sec; - PTR ignore ATTRIBUTE_UNUSED; -{ - segment_info_type *seginfo; - fixS *fix; - - seginfo = seg_info (sec); - if (seginfo == NULL) - return; - - for (fix = seginfo->fix_root; fix != NULL; fix = fix->fx_next) - { - symbolS *sym; - bfd_vma val; - fixS *fscan; - struct sh_count_relocs info; - - if (fix->fx_r_type != BFD_RELOC_SH_USES) - continue; - - /* The BFD_RELOC_SH_USES reloc should refer to a defined local - symbol in the same section. */ - sym = fix->fx_addsy; - if (sym == NULL - || fix->fx_subsy != NULL - || fix->fx_addnumber != 0 - || S_GET_SEGMENT (sym) != sec -#if ! defined (BFD_ASSEMBLER) && defined (OBJ_COFF) - || S_GET_STORAGE_CLASS (sym) == C_EXT -#endif - || S_IS_EXTERNAL (sym)) - { - as_warn_where (fix->fx_file, fix->fx_line, - _(".uses does not refer to a local symbol in the same section")); - continue; - } - - /* Look through the fixups again, this time looking for one - at the same location as sym. */ - val = S_GET_VALUE (sym); - for (fscan = seginfo->fix_root; - fscan != NULL; - fscan = fscan->fx_next) - if (val == fscan->fx_frag->fr_address + fscan->fx_where - && fscan->fx_r_type != BFD_RELOC_SH_ALIGN - && fscan->fx_r_type != BFD_RELOC_SH_CODE - && fscan->fx_r_type != BFD_RELOC_SH_DATA - && fscan->fx_r_type != BFD_RELOC_SH_LABEL) - break; - if (fscan == NULL) - { - as_warn_where (fix->fx_file, fix->fx_line, - _("can't find fixup pointed to by .uses")); - continue; - } - - if (fscan->fx_tcbit) - { - /* We've already done this one. */ - continue; - } - - /* The variable fscan should also be a fixup to a local symbol - in the same section. */ - sym = fscan->fx_addsy; - if (sym == NULL - || fscan->fx_subsy != NULL - || fscan->fx_addnumber != 0 - || S_GET_SEGMENT (sym) != sec -#if ! defined (BFD_ASSEMBLER) && defined (OBJ_COFF) - || S_GET_STORAGE_CLASS (sym) == C_EXT -#endif - || S_IS_EXTERNAL (sym)) - { - as_warn_where (fix->fx_file, fix->fx_line, - _(".uses target does not refer to a local symbol in the same section")); - continue; - } - - /* Now we look through all the fixups of all the sections, - counting the number of times we find a reference to sym. */ - info.sym = sym; - info.count = 0; -#ifdef BFD_ASSEMBLER - bfd_map_over_sections (stdoutput, sh_count_relocs, (PTR) &info); -#else - { - int iscan; - - for (iscan = SEG_E0; iscan < SEG_UNKNOWN; iscan++) - sh_count_relocs ((bfd *) NULL, iscan, (PTR) &info); - } -#endif - - if (info.count < 1) - abort (); - - /* Generate a BFD_RELOC_SH_COUNT fixup at the location of sym. - We have already adjusted the value of sym to include the - fragment address, so we undo that adjustment here. */ - subseg_change (sec, 0); - fix_new (fscan->fx_frag, - S_GET_VALUE (sym) - fscan->fx_frag->fr_address, - 4, &abs_symbol, info.count, 0, BFD_RELOC_SH_COUNT); - } -} - -/* This function is called after the symbol table has been completed, - but before the relocs or section contents have been written out. - If we have seen any .uses pseudo-ops, they point to an instruction - which loads a register with the address of a function. We look - through the fixups to find where the function address is being - loaded from. We then generate a COUNT reloc giving the number of - times that function address is referred to. The linker uses this - information when doing relaxing, to decide when it can eliminate - the stored function address entirely. */ - -void -sh_frob_file () -{ -#ifdef HAVE_SH64 - shmedia_frob_file_before_adjust (); -#endif - - if (! sh_relax) - return; - -#ifdef BFD_ASSEMBLER - bfd_map_over_sections (stdoutput, sh_frob_section, (PTR) NULL); -#else - { - int iseg; - - for (iseg = SEG_E0; iseg < SEG_UNKNOWN; iseg++) - sh_frob_section ((bfd *) NULL, iseg, (PTR) NULL); - } -#endif -} - -/* Called after relaxing. Set the correct sizes of the fragments, and - create relocs so that md_apply_fix3 will fill in the correct values. */ - -void -md_convert_frag (headers, seg, fragP) -#ifdef BFD_ASSEMBLER - bfd *headers ATTRIBUTE_UNUSED; -#else - object_headers *headers ATTRIBUTE_UNUSED; -#endif - segT seg; - fragS *fragP; -{ - int donerelax = 0; - - switch (fragP->fr_subtype) - { - case C (COND_JUMP, COND8): - case C (COND_JUMP_DELAY, COND8): - subseg_change (seg, 0); - fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset, - 1, BFD_RELOC_SH_PCDISP8BY2); - fragP->fr_fix += 2; - fragP->fr_var = 0; - break; - - case C (UNCOND_JUMP, UNCOND12): - subseg_change (seg, 0); - fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset, - 1, BFD_RELOC_SH_PCDISP12BY2); - fragP->fr_fix += 2; - fragP->fr_var = 0; - break; - - case C (UNCOND_JUMP, UNCOND32): - case C (UNCOND_JUMP, UNDEF_WORD_DISP): - if (fragP->fr_symbol == NULL) - as_bad_where (fragP->fr_file, fragP->fr_line, - _("displacement overflows 12-bit field")); - else if (S_IS_DEFINED (fragP->fr_symbol)) - as_bad_where (fragP->fr_file, fragP->fr_line, - _("displacement to defined symbol %s overflows 12-bit field"), - S_GET_NAME (fragP->fr_symbol)); - else - as_bad_where (fragP->fr_file, fragP->fr_line, - _("displacement to undefined symbol %s overflows 12-bit field"), - S_GET_NAME (fragP->fr_symbol)); - /* Stabilize this frag, so we don't trip an assert. */ - fragP->fr_fix += fragP->fr_var; - fragP->fr_var = 0; - break; - - case C (COND_JUMP, COND12): - case C (COND_JUMP_DELAY, COND12): - /* A bcond won't fit, so turn it into a b!cond; bra disp; nop. */ - /* I found that a relax failure for gcc.c-torture/execute/930628-1.c - was due to gas incorrectly relaxing an out-of-range conditional - branch with delay slot. It turned: - bf.s L6 (slot mov.l r12,@(44,r0)) - into: - -2c: 8f 01 a0 8b bf.s 32 <_main+32> (slot bra L6) -30: 00 09 nop -32: 10 cb mov.l r12,@(44,r0) - Therefore, branches with delay slots have to be handled - differently from ones without delay slots. */ - { - unsigned char *buffer = - (unsigned char *) (fragP->fr_fix + fragP->fr_literal); - int highbyte = target_big_endian ? 0 : 1; - int lowbyte = target_big_endian ? 1 : 0; - int delay = fragP->fr_subtype == C (COND_JUMP_DELAY, COND12); - - /* Toggle the true/false bit of the bcond. */ - buffer[highbyte] ^= 0x2; - - /* If this is a delayed branch, we may not put the bra in the - slot. So we change it to a non-delayed branch, like that: - b! cond slot_label; bra disp; slot_label: slot_insn - ??? We should try if swapping the conditional branch and - its delay-slot insn already makes the branch reach. */ - - /* Build a relocation to six / four bytes farther on. */ - subseg_change (seg, 0); - fix_new (fragP, fragP->fr_fix, 2, -#ifdef BFD_ASSEMBLER - section_symbol (seg), -#else - seg_info (seg)->dot, -#endif - fragP->fr_address + fragP->fr_fix + (delay ? 4 : 6), - 1, BFD_RELOC_SH_PCDISP8BY2); - - /* Set up a jump instruction. */ - buffer[highbyte + 2] = 0xa0; - buffer[lowbyte + 2] = 0; - fix_new (fragP, fragP->fr_fix + 2, 2, fragP->fr_symbol, - fragP->fr_offset, 1, BFD_RELOC_SH_PCDISP12BY2); - - if (delay) - { - buffer[highbyte] &= ~0x4; /* Removes delay slot from branch. */ - fragP->fr_fix += 4; - } - else - { - /* Fill in a NOP instruction. */ - buffer[highbyte + 4] = 0x0; - buffer[lowbyte + 4] = 0x9; - - fragP->fr_fix += 6; - } - fragP->fr_var = 0; - donerelax = 1; - } - break; - - case C (COND_JUMP, COND32): - case C (COND_JUMP_DELAY, COND32): - case C (COND_JUMP, UNDEF_WORD_DISP): - case C (COND_JUMP_DELAY, UNDEF_WORD_DISP): - if (fragP->fr_symbol == NULL) - as_bad_where (fragP->fr_file, fragP->fr_line, - _("displacement overflows 8-bit field")); - else if (S_IS_DEFINED (fragP->fr_symbol)) - as_bad_where (fragP->fr_file, fragP->fr_line, - _("displacement to defined symbol %s overflows 8-bit field"), - S_GET_NAME (fragP->fr_symbol)); - else - as_bad_where (fragP->fr_file, fragP->fr_line, - _("displacement to undefined symbol %s overflows 8-bit field "), - S_GET_NAME (fragP->fr_symbol)); - /* Stabilize this frag, so we don't trip an assert. */ - fragP->fr_fix += fragP->fr_var; - fragP->fr_var = 0; - break; - - default: -#ifdef HAVE_SH64 - shmedia_md_convert_frag (headers, seg, fragP, true); -#else - abort (); -#endif - } - - if (donerelax && !sh_relax) - as_warn_where (fragP->fr_file, fragP->fr_line, - _("overflow in branch to %s; converted into longer instruction sequence"), - (fragP->fr_symbol != NULL - ? S_GET_NAME (fragP->fr_symbol) - : "")); -} - -valueT -md_section_align (seg, size) - segT seg ATTRIBUTE_UNUSED; - valueT size; -{ -#ifdef BFD_ASSEMBLER -#ifdef OBJ_ELF - return size; -#else /* ! OBJ_ELF */ - return ((size + (1 << bfd_get_section_alignment (stdoutput, seg)) - 1) - & (-1 << bfd_get_section_alignment (stdoutput, seg))); -#endif /* ! OBJ_ELF */ -#else /* ! BFD_ASSEMBLER */ - return ((size + (1 << section_alignment[(int) seg]) - 1) - & (-1 << section_alignment[(int) seg])); -#endif /* ! BFD_ASSEMBLER */ -} - -/* This static variable is set by s_uacons to tell sh_cons_align that - the expession does not need to be aligned. */ - -static int sh_no_align_cons = 0; - -/* This handles the unaligned space allocation pseudo-ops, such as - .uaword. .uaword is just like .word, but the value does not need - to be aligned. */ - -static void -s_uacons (bytes) - int bytes; -{ - /* Tell sh_cons_align not to align this value. */ - sh_no_align_cons = 1; - cons (bytes); -} - -/* If a .word, et. al., pseud-op is seen, warn if the value is not - aligned correctly. Note that this can cause warnings to be issued - when assembling initialized structured which were declared with the - packed attribute. FIXME: Perhaps we should require an option to - enable this warning? */ - -void -sh_cons_align (nbytes) - int nbytes; -{ - int nalign; - char *p; - - if (sh_no_align_cons) - { - /* This is an unaligned pseudo-op. */ - sh_no_align_cons = 0; - return; - } - - nalign = 0; - while ((nbytes & 1) == 0) - { - ++nalign; - nbytes >>= 1; - } - - if (nalign == 0) - return; - - if (now_seg == absolute_section) - { - if ((abs_section_offset & ((1 << nalign) - 1)) != 0) - as_warn (_("misaligned data")); - return; - } - - p = frag_var (rs_align_test, 1, 1, (relax_substateT) 0, - (symbolS *) NULL, (offsetT) nalign, (char *) NULL); - - record_alignment (now_seg, nalign); -} - -/* When relaxing, we need to output a reloc for any .align directive - that requests alignment to a four byte boundary or larger. This is - also where we check for misaligned data. */ - -void -sh_handle_align (frag) - fragS *frag; -{ - int bytes = frag->fr_next->fr_address - frag->fr_address - frag->fr_fix; - - if (frag->fr_type == rs_align_code) - { - static const unsigned char big_nop_pattern[] = { 0x00, 0x09 }; - static const unsigned char little_nop_pattern[] = { 0x09, 0x00 }; - - char *p = frag->fr_literal + frag->fr_fix; - - if (bytes & 1) - { - *p++ = 0; - bytes--; - frag->fr_fix += 1; - } - - if (target_big_endian) - { - memcpy (p, big_nop_pattern, sizeof big_nop_pattern); - frag->fr_var = sizeof big_nop_pattern; - } - else - { - memcpy (p, little_nop_pattern, sizeof little_nop_pattern); - frag->fr_var = sizeof little_nop_pattern; - } - } - else if (frag->fr_type == rs_align_test) - { - if (bytes != 0) - as_warn_where (frag->fr_file, frag->fr_line, _("misaligned data")); - } - - if (sh_relax - && (frag->fr_type == rs_align - || frag->fr_type == rs_align_code) - && frag->fr_address + frag->fr_fix > 0 - && frag->fr_offset > 1 - && now_seg != bss_section) - fix_new (frag, frag->fr_fix, 2, &abs_symbol, frag->fr_offset, 0, - BFD_RELOC_SH_ALIGN); -} - -/* This macro decides whether a particular reloc is an entry in a - switch table. It is used when relaxing, because the linker needs - to know about all such entries so that it can adjust them if - necessary. */ - -#ifdef BFD_ASSEMBLER -#define SWITCH_TABLE_CONS(fix) (0) -#else -#define SWITCH_TABLE_CONS(fix) \ - ((fix)->fx_r_type == 0 \ - && ((fix)->fx_size == 2 \ - || (fix)->fx_size == 1 \ - || (fix)->fx_size == 4)) -#endif - -#define SWITCH_TABLE(fix) \ - ((fix)->fx_addsy != NULL \ - && (fix)->fx_subsy != NULL \ - && S_GET_SEGMENT ((fix)->fx_addsy) == text_section \ - && S_GET_SEGMENT ((fix)->fx_subsy) == text_section \ - && ((fix)->fx_r_type == BFD_RELOC_32 \ - || (fix)->fx_r_type == BFD_RELOC_16 \ - || (fix)->fx_r_type == BFD_RELOC_8 \ - || SWITCH_TABLE_CONS (fix))) - -/* See whether we need to force a relocation into the output file. - This is used to force out switch and PC relative relocations when - relaxing. */ - -int -sh_force_relocation (fix) - fixS *fix; -{ - - if (fix->fx_r_type == BFD_RELOC_VTABLE_INHERIT - || fix->fx_r_type == BFD_RELOC_VTABLE_ENTRY - || fix->fx_r_type == BFD_RELOC_SH_LOOP_START - || fix->fx_r_type == BFD_RELOC_SH_LOOP_END) - return 1; - - if (! sh_relax) - return 0; - - return (fix->fx_pcrel - || SWITCH_TABLE (fix) - || fix->fx_r_type == BFD_RELOC_SH_COUNT - || fix->fx_r_type == BFD_RELOC_SH_ALIGN - || fix->fx_r_type == BFD_RELOC_SH_CODE - || fix->fx_r_type == BFD_RELOC_SH_DATA -#ifdef HAVE_SH64 - || fix->fx_r_type == BFD_RELOC_SH_SHMEDIA_CODE -#endif - || fix->fx_r_type == BFD_RELOC_SH_LABEL); -} - -#ifdef OBJ_ELF -boolean -sh_fix_adjustable (fixP) - fixS *fixP; -{ - - if (fixP->fx_addsy == NULL) - return 1; - - if (fixP->fx_r_type == BFD_RELOC_SH_PCDISP8BY2 - || fixP->fx_r_type == BFD_RELOC_SH_PCDISP12BY2 - || fixP->fx_r_type == BFD_RELOC_SH_PCRELIMM8BY2 - || fixP->fx_r_type == BFD_RELOC_SH_PCRELIMM8BY4 - || fixP->fx_r_type == BFD_RELOC_8_PCREL - || fixP->fx_r_type == BFD_RELOC_SH_SWITCH16 - || fixP->fx_r_type == BFD_RELOC_SH_SWITCH32) - return 1; - - if (! TC_RELOC_RTSYM_LOC_FIXUP (fixP) - || fixP->fx_r_type == BFD_RELOC_RVA) - return 0; - - /* We need the symbol name for the VTABLE entries */ - if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT - || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY) - return 0; - - return 1; -} - -void -sh_elf_final_processing () -{ - int val; - - /* Set file-specific flags to indicate if this code needs - a processor with the sh-dsp / sh3e ISA to execute. */ -#ifdef HAVE_SH64 - /* SH5 and above don't know about the valid_arch arch_sh* bits defined - in sh-opc.h, so check SH64 mode before checking valid_arch. */ - if (sh64_isa_mode != sh64_isa_unspecified) - val = EF_SH5; - else -#endif /* HAVE_SH64 */ - if (valid_arch & arch_sh1) - val = EF_SH1; - else if (valid_arch & arch_sh2) - val = EF_SH2; - else if (valid_arch & arch_sh_dsp) - val = EF_SH_DSP; - else if (valid_arch & arch_sh3) - val = EF_SH3; - else if (valid_arch & arch_sh3_dsp) - val = EF_SH_DSP; - else if (valid_arch & arch_sh3e) - val = EF_SH3E; - else if (valid_arch & arch_sh4) - val = EF_SH4; - else - abort (); - - elf_elfheader (stdoutput)->e_flags &= ~EF_SH_MACH_MASK; - elf_elfheader (stdoutput)->e_flags |= val; -} -#endif - -/* Apply a fixup to the object file. */ - -void -md_apply_fix3 (fixP, valP, seg) - fixS * fixP; - valueT * valP; - segT seg ATTRIBUTE_UNUSED; -{ - char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; - int lowbyte = target_big_endian ? 1 : 0; - int highbyte = target_big_endian ? 0 : 1; - long val = (long) *valP; - long max, min; - int shift; - -#ifdef BFD_ASSEMBLER - /* A difference between two symbols, the second of which is in the - current section, is transformed in a PC-relative relocation to - the other symbol. We have to adjust the relocation type here. */ - if (fixP->fx_pcrel) - { - switch (fixP->fx_r_type) - { - default: - break; - - case BFD_RELOC_32: - fixP->fx_r_type = BFD_RELOC_32_PCREL; - break; - - /* Currently, we only support 32-bit PCREL relocations. - We'd need a new reloc type to handle 16_PCREL, and - 8_PCREL is already taken for R_SH_SWITCH8, which - apparently does something completely different than what - we need. FIXME. */ - case BFD_RELOC_16: - bfd_set_error (bfd_error_bad_value); - return; - - case BFD_RELOC_8: - bfd_set_error (bfd_error_bad_value); - return; - } - } - - /* The function adjust_reloc_syms won't convert a reloc against a weak - symbol into a reloc against a section, but bfd_install_relocation - will screw up if the symbol is defined, so we have to adjust val here - to avoid the screw up later. - - For ordinary relocs, this does not happen for ELF, since for ELF, - bfd_install_relocation uses the "special function" field of the - howto, and does not execute the code that needs to be undone, as long - as the special function does not return bfd_reloc_continue. - It can happen for GOT- and PLT-type relocs the way they are - described in elf32-sh.c as they use bfd_elf_generic_reloc, but it - doesn't matter here since those relocs don't use VAL; see below. */ - if (OUTPUT_FLAVOR != bfd_target_elf_flavour - && fixP->fx_addsy != NULL - && S_IS_WEAK (fixP->fx_addsy)) - val -= S_GET_VALUE (fixP->fx_addsy); -#endif - -#ifndef BFD_ASSEMBLER - if (fixP->fx_r_type == 0) - { - if (fixP->fx_size == 2) - fixP->fx_r_type = BFD_RELOC_16; - else if (fixP->fx_size == 4) - fixP->fx_r_type = BFD_RELOC_32; - else if (fixP->fx_size == 1) - fixP->fx_r_type = BFD_RELOC_8; - else - abort (); - } -#endif - - max = min = 0; - shift = 0; - switch (fixP->fx_r_type) - { - case BFD_RELOC_SH_IMM4: - max = 0xf; - *buf = (*buf & 0xf0) | (val & 0xf); - break; - - case BFD_RELOC_SH_IMM4BY2: - max = 0xf; - shift = 1; - *buf = (*buf & 0xf0) | ((val >> 1) & 0xf); - break; - - case BFD_RELOC_SH_IMM4BY4: - max = 0xf; - shift = 2; - *buf = (*buf & 0xf0) | ((val >> 2) & 0xf); - break; - - case BFD_RELOC_SH_IMM8BY2: - max = 0xff; - shift = 1; - *buf = val >> 1; - break; - - case BFD_RELOC_SH_IMM8BY4: - max = 0xff; - shift = 2; - *buf = val >> 2; - break; - - case BFD_RELOC_8: - case BFD_RELOC_SH_IMM8: - /* Sometimes the 8 bit value is sign extended (e.g., add) and - sometimes it is not (e.g., and). We permit any 8 bit value. - Note that adding further restrictions may invalidate - reasonable looking assembly code, such as ``and -0x1,r0''. */ - max = 0xff; - min = -0xff; - *buf++ = val; - break; - - case BFD_RELOC_SH_PCRELIMM8BY4: - /* The lower two bits of the PC are cleared before the - displacement is added in. We can assume that the destination - is on a 4 byte bounday. If this instruction is also on a 4 - byte boundary, then we want - (target - here) / 4 - and target - here is a multiple of 4. - Otherwise, we are on a 2 byte boundary, and we want - (target - (here - 2)) / 4 - and target - here is not a multiple of 4. Computing - (target - (here - 2)) / 4 == (target - here + 2) / 4 - works for both cases, since in the first case the addition of - 2 will be removed by the division. target - here is in the - variable val. */ - val = (val + 2) / 4; - if (val & ~0xff) - as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far")); - buf[lowbyte] = val; - break; - - case BFD_RELOC_SH_PCRELIMM8BY2: - val /= 2; - if (val & ~0xff) - as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far")); - buf[lowbyte] = val; - break; - - case BFD_RELOC_SH_PCDISP8BY2: - val /= 2; - if (val < -0x80 || val > 0x7f) - as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far")); - buf[lowbyte] = val; - break; - - case BFD_RELOC_SH_PCDISP12BY2: - val /= 2; - if (val < -0x800 || val > 0x7ff) - as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far")); - buf[lowbyte] = val & 0xff; - buf[highbyte] |= (val >> 8) & 0xf; - break; - - case BFD_RELOC_32: - case BFD_RELOC_32_PCREL: - md_number_to_chars (buf, val, 4); - break; - - case BFD_RELOC_16: - md_number_to_chars (buf, val, 2); - break; - - case BFD_RELOC_SH_USES: - /* Pass the value into sh_coff_reloc_mangle. */ - fixP->fx_addnumber = val; - break; - - case BFD_RELOC_SH_COUNT: - case BFD_RELOC_SH_ALIGN: - case BFD_RELOC_SH_CODE: - case BFD_RELOC_SH_DATA: - case BFD_RELOC_SH_LABEL: - /* Nothing to do here. */ - break; - - case BFD_RELOC_SH_LOOP_START: - case BFD_RELOC_SH_LOOP_END: - - case BFD_RELOC_VTABLE_INHERIT: - case BFD_RELOC_VTABLE_ENTRY: - fixP->fx_done = 0; - return; - -#ifdef OBJ_ELF - case BFD_RELOC_32_PLT_PCREL: - /* Make the jump instruction point to the address of the operand. At - runtime we merely add the offset to the actual PLT entry. */ - * valP = 0xfffffffc; - val = fixP->fx_addnumber; - if (fixP->fx_subsy) - val -= S_GET_VALUE (fixP->fx_subsy); - md_number_to_chars (buf, val, 4); - break; - - case BFD_RELOC_SH_GOTPC: - /* This is tough to explain. We end up with this one if we have - operands that look like "_GLOBAL_OFFSET_TABLE_+[.-.L284]". - The goal here is to obtain the absolute address of the GOT, - and it is strongly preferable from a performance point of - view to avoid using a runtime relocation for this. There are - cases where you have something like: - - .long _GLOBAL_OFFSET_TABLE_+[.-.L66] - - and here no correction would be required. Internally in the - assembler we treat operands of this form as not being pcrel - since the '.' is explicitly mentioned, and I wonder whether - it would simplify matters to do it this way. Who knows. In - earlier versions of the PIC patches, the pcrel_adjust field - was used to store the correction, but since the expression is - not pcrel, I felt it would be confusing to do it this way. */ - * valP -= 1; - md_number_to_chars (buf, val, 4); - break; - - case BFD_RELOC_32_GOT_PCREL: - case BFD_RELOC_SH_GOTPLT32: - * valP = 0; /* Fully resolved at runtime. No addend. */ - md_number_to_chars (buf, 0, 4); - break; - - case BFD_RELOC_32_GOTOFF: - md_number_to_chars (buf, val, 4); - break; -#endif - - default: -#ifdef HAVE_SH64 - shmedia_md_apply_fix3 (fixP, valP); - return; -#else - abort (); -#endif - } - - if (shift != 0) - { - if ((val & ((1 << shift) - 1)) != 0) - as_bad_where (fixP->fx_file, fixP->fx_line, _("misaligned offset")); - if (val >= 0) - val >>= shift; - else - val = ((val >> shift) - | ((long) -1 & ~ ((long) -1 >> shift))); - } - if (max != 0 && (val < min || val > max)) - as_bad_where (fixP->fx_file, fixP->fx_line, _("offset out of range")); - - if (fixP->fx_addsy == NULL && fixP->fx_pcrel == 0) - fixP->fx_done = 1; -} - -/* Called just before address relaxation. Return the length - by which a fragment must grow to reach it's destination. */ - -int -md_estimate_size_before_relax (fragP, segment_type) - register fragS *fragP; - register segT segment_type; -{ - int what; - - switch (fragP->fr_subtype) - { - default: -#ifdef HAVE_SH64 - return shmedia_md_estimate_size_before_relax (fragP, segment_type); -#else - abort (); -#endif - - - case C (UNCOND_JUMP, UNDEF_DISP): - /* Used to be a branch to somewhere which was unknown. */ - if (!fragP->fr_symbol) - { - fragP->fr_subtype = C (UNCOND_JUMP, UNCOND12); - } - else if (S_GET_SEGMENT (fragP->fr_symbol) == segment_type) - { - fragP->fr_subtype = C (UNCOND_JUMP, UNCOND12); - } - else - { - fragP->fr_subtype = C (UNCOND_JUMP, UNDEF_WORD_DISP); - } - break; - - case C (COND_JUMP, UNDEF_DISP): - case C (COND_JUMP_DELAY, UNDEF_DISP): - what = GET_WHAT (fragP->fr_subtype); - /* Used to be a branch to somewhere which was unknown. */ - if (fragP->fr_symbol - && S_GET_SEGMENT (fragP->fr_symbol) == segment_type) - { - /* Got a symbol and it's defined in this segment, become byte - sized - maybe it will fix up. */ - fragP->fr_subtype = C (what, COND8); - } - else if (fragP->fr_symbol) - { - /* Its got a segment, but its not ours, so it will always be long. */ - fragP->fr_subtype = C (what, UNDEF_WORD_DISP); - } - else - { - /* We know the abs value. */ - fragP->fr_subtype = C (what, COND8); - } - break; - - case C (UNCOND_JUMP, UNCOND12): - case C (UNCOND_JUMP, UNCOND32): - case C (UNCOND_JUMP, UNDEF_WORD_DISP): - case C (COND_JUMP, COND8): - case C (COND_JUMP, COND12): - case C (COND_JUMP, COND32): - case C (COND_JUMP, UNDEF_WORD_DISP): - case C (COND_JUMP_DELAY, COND8): - case C (COND_JUMP_DELAY, COND12): - case C (COND_JUMP_DELAY, COND32): - case C (COND_JUMP_DELAY, UNDEF_WORD_DISP): - /* When relaxing a section for the second time, we don't need to - do anything besides return the current size. */ - break; - } - - fragP->fr_var = md_relax_table[fragP->fr_subtype].rlx_length; - return fragP->fr_var; -} - -/* Put number into target byte order. */ - -void -md_number_to_chars (ptr, use, nbytes) - char *ptr; - valueT use; - int nbytes; -{ -#ifdef HAVE_SH64 - /* We might need to set the contents type to data. */ - sh64_flag_output (); -#endif - - if (! target_big_endian) - number_to_chars_littleendian (ptr, use, nbytes); - else - number_to_chars_bigendian (ptr, use, nbytes); -} - -/* This version is used in obj-coff.c when not using BFD_ASSEMBLER. - eg for the sh-hms target. */ - -long -md_pcrel_from (fixP) - fixS *fixP; -{ - return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address + 2; -} - -long -md_pcrel_from_section (fixP, sec) - fixS *fixP; - segT sec; -{ - if (fixP->fx_addsy != (symbolS *) NULL - && (! S_IS_DEFINED (fixP->fx_addsy) - || S_IS_EXTERN (fixP->fx_addsy) - || S_IS_WEAK (fixP->fx_addsy) - || S_GET_SEGMENT (fixP->fx_addsy) != sec)) - { - /* The symbol is undefined (or is defined but not in this section, - or we're not sure about it being the final definition). Let the - linker figure it out. We need to adjust the subtraction of a - symbol to the position of the relocated data, though. */ - return fixP->fx_subsy ? fixP->fx_where + fixP->fx_frag->fr_address : 0; - } - - return md_pcrel_from (fixP); -} - -#ifdef OBJ_COFF - -int -tc_coff_sizemachdep (frag) - fragS *frag; -{ - return md_relax_table[frag->fr_subtype].rlx_length; -} - -#endif /* OBJ_COFF */ - -#ifndef BFD_ASSEMBLER -#ifdef OBJ_COFF - -/* Map BFD relocs to SH COFF relocs. */ - -struct reloc_map -{ - bfd_reloc_code_real_type bfd_reloc; - int sh_reloc; -}; - -static const struct reloc_map coff_reloc_map[] = -{ - { BFD_RELOC_32, R_SH_IMM32 }, - { BFD_RELOC_16, R_SH_IMM16 }, - { BFD_RELOC_8, R_SH_IMM8 }, - { BFD_RELOC_SH_PCDISP8BY2, R_SH_PCDISP8BY2 }, - { BFD_RELOC_SH_PCDISP12BY2, R_SH_PCDISP }, - { BFD_RELOC_SH_IMM4, R_SH_IMM4 }, - { BFD_RELOC_SH_IMM4BY2, R_SH_IMM4BY2 }, - { BFD_RELOC_SH_IMM4BY4, R_SH_IMM4BY4 }, - { BFD_RELOC_SH_IMM8, R_SH_IMM8 }, - { BFD_RELOC_SH_IMM8BY2, R_SH_IMM8BY2 }, - { BFD_RELOC_SH_IMM8BY4, R_SH_IMM8BY4 }, - { BFD_RELOC_SH_PCRELIMM8BY2, R_SH_PCRELIMM8BY2 }, - { BFD_RELOC_SH_PCRELIMM8BY4, R_SH_PCRELIMM8BY4 }, - { BFD_RELOC_8_PCREL, R_SH_SWITCH8 }, - { BFD_RELOC_SH_SWITCH16, R_SH_SWITCH16 }, - { BFD_RELOC_SH_SWITCH32, R_SH_SWITCH32 }, - { BFD_RELOC_SH_USES, R_SH_USES }, - { BFD_RELOC_SH_COUNT, R_SH_COUNT }, - { BFD_RELOC_SH_ALIGN, R_SH_ALIGN }, - { BFD_RELOC_SH_CODE, R_SH_CODE }, - { BFD_RELOC_SH_DATA, R_SH_DATA }, - { BFD_RELOC_SH_LABEL, R_SH_LABEL }, - { BFD_RELOC_UNUSED, 0 } -}; - -/* Adjust a reloc for the SH. This is similar to the generic code, - but does some minor tweaking. */ - -void -sh_coff_reloc_mangle (seg, fix, intr, paddr) - segment_info_type *seg; - fixS *fix; - struct internal_reloc *intr; - unsigned int paddr; -{ - symbolS *symbol_ptr = fix->fx_addsy; - symbolS *dot; - - intr->r_vaddr = paddr + fix->fx_frag->fr_address + fix->fx_where; - - if (! SWITCH_TABLE (fix)) - { - const struct reloc_map *rm; - - for (rm = coff_reloc_map; rm->bfd_reloc != BFD_RELOC_UNUSED; rm++) - if (rm->bfd_reloc == (bfd_reloc_code_real_type) fix->fx_r_type) - break; - if (rm->bfd_reloc == BFD_RELOC_UNUSED) - as_bad_where (fix->fx_file, fix->fx_line, - _("Can not represent %s relocation in this object file format"), - bfd_get_reloc_code_name (fix->fx_r_type)); - intr->r_type = rm->sh_reloc; - intr->r_offset = 0; - } - else - { - know (sh_relax); - - if (fix->fx_r_type == BFD_RELOC_16) - intr->r_type = R_SH_SWITCH16; - else if (fix->fx_r_type == BFD_RELOC_8) - intr->r_type = R_SH_SWITCH8; - else if (fix->fx_r_type == BFD_RELOC_32) - intr->r_type = R_SH_SWITCH32; - else - abort (); - - /* For a switch reloc, we set r_offset to the difference between - the reloc address and the subtrahend. When the linker is - doing relaxing, it can use the determine the starting and - ending points of the switch difference expression. */ - intr->r_offset = intr->r_vaddr - S_GET_VALUE (fix->fx_subsy); - } - - /* PC relative relocs are always against the current section. */ - if (symbol_ptr == NULL) - { - switch (fix->fx_r_type) - { - case BFD_RELOC_SH_PCRELIMM8BY2: - case BFD_RELOC_SH_PCRELIMM8BY4: - case BFD_RELOC_SH_PCDISP8BY2: - case BFD_RELOC_SH_PCDISP12BY2: - case BFD_RELOC_SH_USES: - symbol_ptr = seg->dot; - break; - default: - break; - } - } - - if (fix->fx_r_type == BFD_RELOC_SH_USES) - { - /* We can't store the offset in the object file, since this - reloc does not take up any space, so we store it in r_offset. - The fx_addnumber field was set in md_apply_fix3. */ - intr->r_offset = fix->fx_addnumber; - } - else if (fix->fx_r_type == BFD_RELOC_SH_COUNT) - { - /* We can't store the count in the object file, since this reloc - does not take up any space, so we store it in r_offset. The - fx_offset field was set when the fixup was created in - sh_coff_frob_file. */ - intr->r_offset = fix->fx_offset; - /* This reloc is always absolute. */ - symbol_ptr = NULL; - } - else if (fix->fx_r_type == BFD_RELOC_SH_ALIGN) - { - /* Store the alignment in the r_offset field. */ - intr->r_offset = fix->fx_offset; - /* This reloc is always absolute. */ - symbol_ptr = NULL; - } - else if (fix->fx_r_type == BFD_RELOC_SH_CODE - || fix->fx_r_type == BFD_RELOC_SH_DATA - || fix->fx_r_type == BFD_RELOC_SH_LABEL) - { - /* These relocs are always absolute. */ - symbol_ptr = NULL; - } - - /* Turn the segment of the symbol into an offset. */ - if (symbol_ptr != NULL) - { - dot = segment_info[S_GET_SEGMENT (symbol_ptr)].dot; - if (dot != NULL) - intr->r_symndx = dot->sy_number; - else - intr->r_symndx = symbol_ptr->sy_number; - } - else - intr->r_symndx = -1; -} - -#endif /* OBJ_COFF */ -#endif /* ! BFD_ASSEMBLER */ - -#ifdef BFD_ASSEMBLER - -/* Create a reloc. */ - -arelent * -tc_gen_reloc (section, fixp) - asection *section ATTRIBUTE_UNUSED; - fixS *fixp; -{ - arelent *rel; - bfd_reloc_code_real_type r_type; - - rel = (arelent *) xmalloc (sizeof (arelent)); - rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); - *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); - rel->address = fixp->fx_frag->fr_address + fixp->fx_where; - - if (fixp->fx_subsy - && S_GET_SEGMENT (fixp->fx_subsy) == absolute_section) - { - fixp->fx_addnumber -= S_GET_VALUE (fixp->fx_subsy); - fixp->fx_subsy = 0; - } - - r_type = fixp->fx_r_type; - - if (SWITCH_TABLE (fixp)) - { - rel->addend = rel->address - S_GET_VALUE (fixp->fx_subsy); - if (r_type == BFD_RELOC_16) - r_type = BFD_RELOC_SH_SWITCH16; - else if (r_type == BFD_RELOC_8) - r_type = BFD_RELOC_8_PCREL; - else if (r_type == BFD_RELOC_32) - r_type = BFD_RELOC_SH_SWITCH32; - else - abort (); - } - else if (r_type == BFD_RELOC_SH_USES) - rel->addend = fixp->fx_addnumber; - else if (r_type == BFD_RELOC_SH_COUNT) - rel->addend = fixp->fx_offset; - else if (r_type == BFD_RELOC_SH_ALIGN) - rel->addend = fixp->fx_offset; - else if (r_type == BFD_RELOC_VTABLE_INHERIT - || r_type == BFD_RELOC_VTABLE_ENTRY) - rel->addend = fixp->fx_offset; - else if (r_type == BFD_RELOC_SH_LOOP_START - || r_type == BFD_RELOC_SH_LOOP_END) - rel->addend = fixp->fx_offset; - else if (r_type == BFD_RELOC_SH_LABEL && fixp->fx_pcrel) - { - rel->addend = 0; - rel->address = rel->addend = fixp->fx_offset; - } -#ifdef HAVE_SH64 - else if (shmedia_init_reloc (rel, fixp)) - ; -#endif - else if (fixp->fx_pcrel) - rel->addend = fixp->fx_addnumber; - else if (r_type == BFD_RELOC_32 || r_type == BFD_RELOC_32_GOTOFF) - rel->addend = fixp->fx_addnumber; - else - rel->addend = 0; - - rel->howto = bfd_reloc_type_lookup (stdoutput, r_type); - if (rel->howto == NULL || fixp->fx_subsy) - { - as_bad_where (fixp->fx_file, fixp->fx_line, - _("Cannot represent relocation type %s"), - bfd_get_reloc_code_name (r_type)); - /* Set howto to a garbage value so that we can keep going. */ - rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32); - assert (rel->howto != NULL); - } - - return rel; -} - -#ifdef OBJ_ELF -inline static char * -sh_end_of_match (cont, what) - char *cont, *what; -{ - int len = strlen (what); - - if (strncasecmp (cont, what, strlen (what)) == 0 - && ! is_part_of_name (cont[len])) - return cont + len; - - return NULL; -} - -int -sh_parse_name (name, exprP, nextcharP) - char const *name; - expressionS *exprP; - char *nextcharP; -{ - char *next = input_line_pointer; - char *next_end; - int reloc_type; - segT segment; - - exprP->X_op_symbol = NULL; - - if (strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0) - { - if (! GOT_symbol) - GOT_symbol = symbol_find_or_make (name); - - exprP->X_add_symbol = GOT_symbol; - no_suffix: - /* If we have an absolute symbol or a reg, then we know its - value now. */ - segment = S_GET_SEGMENT (exprP->X_add_symbol); - if (segment == absolute_section) - { - exprP->X_op = O_constant; - exprP->X_add_number = S_GET_VALUE (exprP->X_add_symbol); - exprP->X_add_symbol = NULL; - } - else if (segment == reg_section) - { - exprP->X_op = O_register; - exprP->X_add_number = S_GET_VALUE (exprP->X_add_symbol); - exprP->X_add_symbol = NULL; - } - else - { - exprP->X_op = O_symbol; - exprP->X_add_number = 0; - } - - return 1; - } - - exprP->X_add_symbol = symbol_find_or_make (name); - - if (*nextcharP != '@') - goto no_suffix; - else if ((next_end = sh_end_of_match (next + 1, "GOTOFF"))) - reloc_type = BFD_RELOC_32_GOTOFF; - else if ((next_end = sh_end_of_match (next + 1, "GOTPLT"))) - reloc_type = BFD_RELOC_SH_GOTPLT32; - else if ((next_end = sh_end_of_match (next + 1, "GOT"))) - reloc_type = BFD_RELOC_32_GOT_PCREL; - else if ((next_end = sh_end_of_match (next + 1, "PLT"))) - reloc_type = BFD_RELOC_32_PLT_PCREL; - else - goto no_suffix; - - *input_line_pointer = *nextcharP; - input_line_pointer = next_end; - *nextcharP = *input_line_pointer; - *input_line_pointer = '\0'; - - exprP->X_op = O_PIC_reloc; - exprP->X_add_number = 0; - exprP->X_md = reloc_type; - - return 1; -} -#endif -#endif /* BFD_ASSEMBLER */ diff --git a/contrib/binutils/gas/config/tc-sh.h b/contrib/binutils/gas/config/tc-sh.h deleted file mode 100644 index ffe948a7dd6c..000000000000 --- a/contrib/binutils/gas/config/tc-sh.h +++ /dev/null @@ -1,232 +0,0 @@ -/* This file is tc-sh.h - Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 - 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. */ - -#define TC_SH - -#define TARGET_ARCH bfd_arch_sh - -#if ANSI_PROTOTYPES -struct segment_info_struct; -struct internal_reloc; -#endif - -/* Whether -relax was used. */ -extern int sh_relax; - -/* Whether -small was used. */ -extern int sh_small; - -/* Don't try to break words. */ -#define WORKING_DOT_WORD - -/* All SH instructions are multiples of 16 bits. */ -#define DWARF2_LINE_MIN_INSN_LENGTH 2 - -/* We require .long, et. al., to be aligned correctly. */ -#define md_cons_align(nbytes) sh_cons_align (nbytes) -extern void sh_cons_align PARAMS ((int)); - -/* When relaxing, we need to generate relocations for alignment - directives. */ -#define HANDLE_ALIGN(frag) sh_handle_align (frag) -extern void sh_handle_align PARAMS ((fragS *)); - -#define MAX_MEM_FOR_RS_ALIGN_CODE (1 + 2) - -/* We need to force out some relocations when relaxing. */ -#define TC_FORCE_RELOCATION(fix) sh_force_relocation (fix) - -/* The type fixS is defined (to struct fix) in write.h, but write.h uses - definitions from this file. To avoid problems with including write.h - after the "right" definitions, don't; just forward-declare struct fix - here. */ -struct fix; -extern int sh_force_relocation PARAMS ((struct fix *)); - -#ifdef OBJ_ELF -#define obj_fix_adjustable(fixP) sh_fix_adjustable(fixP) -struct fix; -extern boolean sh_fix_adjustable PARAMS ((struct fix *)); - -/* This arranges for gas/write.c to not apply a relocation if - obj_fix_adjustable() says it is not adjustable. */ -/* ??? fixups with symbols in SEC_MERGE sections are marked with - obj_fix_adjustable and have a non-section symbol, as in - "vwxyz"+1 in execute/string-opt-6.c . Maybe the test of - (symbol_used_in_reloc_p should be done in the machine-independent code. */ -#define TC_FIX_ADJUSTABLE(fixP) \ - (! symbol_used_in_reloc_p (fixP->fx_addsy) && obj_fix_adjustable (fixP)) -#endif - -#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section (FIXP, SEC) -extern long md_pcrel_from_section PARAMS ((struct fix *, segT)); - -#define IGNORE_NONSTANDARD_ESCAPES - -#define LISTING_HEADER \ - (!target_big_endian \ - ? "Hitachi Super-H GAS Little Endian" : "Hitachi Super-H GAS Big Endian") - -#define md_operand(x) - -extern const struct relax_type md_relax_table[]; -#define TC_GENERIC_RELAX_TABLE md_relax_table - -/* We record, for each section, whether we have most recently output a - CODE reloc or a DATA reloc. */ -struct sh_segment_info_type -{ - int in_code : 1; -}; -#define TC_SEGMENT_INFO_TYPE struct sh_segment_info_type - -/* We call a routine to emit a reloc for a label, so that the linker - can align loads and stores without crossing a label. */ -extern void sh_frob_label PARAMS ((void)); -#define tc_frob_label(sym) sh_frob_label () - -/* We call a routine to flush pending output in order to output a DATA - reloc when required. */ -extern void sh_flush_pending_output PARAMS ((void)); -#define md_flush_pending_output() sh_flush_pending_output () - -#ifdef BFD_ASSEMBLER -#define tc_frob_file_before_adjust sh_frob_file -#else -#define tc_frob_file sh_frob_file -#endif -extern void sh_frob_file PARAMS ((void)); - -#ifdef OBJ_COFF -/* COFF specific definitions. */ - -#define DO_NOT_STRIP 0 - -/* This macro translates between an internal fix and an coff reloc type */ -#define TC_COFF_FIX2RTYPE(fix) ((fix)->fx_r_type) - -#define BFD_ARCH TARGET_ARCH - -#define COFF_MAGIC (!target_big_endian ? SH_ARCH_MAGIC_LITTLE : SH_ARCH_MAGIC_BIG) - -/* We need to write out relocs which have not been completed. */ -#define TC_COUNT_RELOC(fix) ((fix)->fx_addsy != NULL) - -#define TC_RELOC_MANGLE(seg, fix, int, paddr) \ - sh_coff_reloc_mangle ((seg), (fix), (int), (paddr)) -extern void sh_coff_reloc_mangle - PARAMS ((struct segment_info_struct *, struct fix *, - struct internal_reloc *, unsigned int)); - -#define tc_coff_symbol_emit_hook(a) ; /* not used */ - -#define NEED_FX_R_TYPE 1 - -#define TC_KEEP_FX_OFFSET 1 - -#define TC_COFF_SIZEMACHDEP(frag) tc_coff_sizemachdep(frag) -extern int tc_coff_sizemachdep PARAMS ((fragS *)); - -#ifdef BFD_ASSEMBLER -#define SEG_NAME(SEG) segment_name (SEG) -#else -#define SEG_NAME(SEG) obj_segment_name (SEG) -#endif - -/* We align most sections to a 16 byte boundary. */ -#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) \ - (strncmp (SEG_NAME (SEG), ".stabstr", 8) == 0 \ - ? 0 \ - : ((strncmp (SEG_NAME (SEG), ".stab", 5) == 0 \ - || strcmp (SEG_NAME (SEG), ".ctors") == 0 \ - || strcmp (SEG_NAME (SEG), ".dtors") == 0) \ - ? 2 \ - : (sh_small ? 2 : 4))) - -#endif /* OBJ_COFF */ - -#ifdef OBJ_ELF -/* ELF specific definitions. */ - -/* Whether or not the target is big endian */ -extern int target_big_endian; -#ifdef TE_LINUX -#define TARGET_FORMAT (!target_big_endian ? "elf32-sh-linux" : "elf32-shbig-linux") -#elif defined(TE_NetBSD) -#define TARGET_FORMAT (!target_big_endian ? "elf32-shl-nbsd" : "elf32-sh-nbsd") -#else -#define TARGET_FORMAT (!target_big_endian ? "elf32-shl" : "elf32-sh") -#endif - -#define elf_tc_final_processing sh_elf_final_processing -extern void sh_elf_final_processing PARAMS ((void)); - -#define DIFF_EXPR_OK /* foo-. gets turned into PC relative relocs */ - -#define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_" - -/* This is the relocation type for direct references to - GLOBAL_OFFSET_TABLE. It comes up in complicated expressions such - as _GLOBAL_OFFSET_TABLE_+[.-.L284], which cannot be expressed - normally with the regular expressions. The fixup specified here - when used at runtime implies that we should add the address of the - GOT to the specified location, and as a result we have simplified - the expression into something we can use. */ -#define TC_RELOC_GLOBAL_OFFSET_TABLE BFD_RELOC_SH_GOTPC - -/* This expression evaluates to false if the relocation is for a local object - for which we still want to do the relocation at runtime. True if we - are willing to perform this relocation while building the .o file. - This is only used for pcrel relocations, so GOTOFF does not need to be - checked here. I am not sure if some of the others are ever used with - pcrel, but it is easier to be safe than sorry. - - We can't resolve references to the GOT or the PLT when creating the - object file, since these tables are only created by the linker. - Also, if the symbol is global, weak, common or not defined, the - assembler can't compute the appropriate reloc, since its location - can only be determined at link time. */ - -#define TC_RELOC_RTSYM_LOC_FIXUP(FIX) \ - ((FIX)->fx_r_type != BFD_RELOC_32_PLT_PCREL \ - && (FIX)->fx_r_type != BFD_RELOC_32_GOT_PCREL \ - && (FIX)->fx_r_type != BFD_RELOC_SH_GOTPC \ - && ((FIX)->fx_addsy == NULL \ - || (! S_IS_EXTERNAL ((FIX)->fx_addsy) \ - && ! S_IS_WEAK ((FIX)->fx_addsy) \ - && S_IS_DEFINED ((FIX)->fx_addsy) \ - && ! S_IS_COMMON ((FIX)->fx_addsy)))) - -#define md_parse_name(name, exprP, nextcharP) \ - sh_parse_name ((name), (exprP), (nextcharP)) -int sh_parse_name PARAMS ((char const *name, - expressionS *exprP, - char *nextchar)); - -#define TC_CONS_FIX_NEW(FRAG, OFF, LEN, EXP) \ - sh_cons_fix_new ((FRAG), (OFF), (LEN), (EXP)) -void sh_cons_fix_new PARAMS ((fragS *, int, int, expressionS *)); - -/* This is used to construct expressions out of @GOTOFF, @PLT and @GOT - symbols. The relocation type is stored in X_md. */ -#define O_PIC_reloc O_md1 - -#endif /* OBJ_ELF */ diff --git a/contrib/binutils/gas/config/tc-tic30.c b/contrib/binutils/gas/config/tc-tic30.c deleted file mode 100644 index 1258b1317d54..000000000000 --- a/contrib/binutils/gas/config/tc-tic30.c +++ /dev/null @@ -1,1881 +0,0 @@ -/* tc-c30.c -- Assembly code for the Texas Instruments TMS320C30 - Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. - Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) - - 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. */ - -/* Texas Instruments TMS320C30 machine specific gas. - Written by Steven Haworth (steve@pm.cse.rmit.edu.au). - Bugs & suggestions are completely welcome. This is free software. - Please help us make it better. */ - -#include "as.h" -#include "safe-ctype.h" -#include "opcode/tic30.h" - -/* Put here all non-digit non-letter charcters that may occur in an - operand. */ -static char operand_special_chars[] = "%$-+(,)*._~/<>&^!:[@]"; -static char *ordinal_names[] = { - "first", "second", "third", "fourth", "fifth" -}; - -const int md_reloc_size = 0; - -const char comment_chars[] = ";"; -const char line_comment_chars[] = "*"; -const char line_separator_chars[] = ""; - -const char *md_shortopts = ""; -struct option md_longopts[] = { - {NULL, no_argument, NULL, 0} -}; - -size_t md_longopts_size = sizeof (md_longopts); - -/* Chars that mean this number is a floating point constant. */ -/* As in 0f12.456 */ -/* or 0d1.2345e12 */ -const char FLT_CHARS[] = "fFdDxX"; - -/* Chars that can be used to separate mant from exp in floating point - nums. */ -const char EXP_CHARS[] = "eE"; - -/* tables for lexical analysis */ -static char opcode_chars[256]; -static char register_chars[256]; -static char operand_chars[256]; -static char space_chars[256]; -static char identifier_chars[256]; -static char digit_chars[256]; - -/* lexical macros */ -#define is_opcode_char(x) (opcode_chars[(unsigned char) x]) -#define is_operand_char(x) (operand_chars[(unsigned char) x]) -#define is_register_char(x) (register_chars[(unsigned char) x]) -#define is_space_char(x) (space_chars[(unsigned char) x]) -#define is_identifier_char(x) (identifier_chars[(unsigned char) x]) -#define is_digit_char(x) (digit_chars[(unsigned char) x]) - -const pseudo_typeS md_pseudo_table[] = { - {0, 0, 0} -}; - -#undef USE_STDOUT -#define USE_STDOUT 1 - -#ifdef USE_STDARG - -#include <stdarg.h> - -int -debug (const char *string, ...) -{ - if (flag_debug) - { - va_list argptr; - char str[100]; - - va_start (argptr, string); - vsprintf (str, string, argptr); - if (str[0] == '\0') - return (0); - va_end (argptr); - fputs (str, USE_STDOUT ? stdout : stderr); - return strlen (str); - } - else - return 0; -} -#else -int -debug (string, va_alist) - const char *string; - va_dcl -{ - if (flag_debug) - { - va_list argptr; - char str[100]; - int cnt; - - va_start (argptr, string); - cnt = vsprintf (str, string, argptr); - if (str[0] == NULL) - return (0); - va_end (argptr); - fputs (str, USE_STDOUT ? stdout : stderr); - return (cnt); - } - else - return 0; -} -#endif - -/* hash table for opcode lookup */ -static struct hash_control *op_hash; -/* hash table for parallel opcode lookup */ -static struct hash_control *parop_hash; -/* hash table for register lookup */ -static struct hash_control *reg_hash; -/* hash table for indirect addressing lookup */ -static struct hash_control *ind_hash; - -void -md_begin () -{ - const char *hash_err; - debug ("In md_begin()\n"); - op_hash = hash_new (); - { - const template *current_optab = tic30_optab; - for (; current_optab < tic30_optab_end; current_optab++) - { - hash_err = hash_insert (op_hash, current_optab->name, (char *) current_optab); - if (hash_err) - as_fatal ("Internal Error: Can't Hash %s: %s", current_optab->name, hash_err); - } - } - parop_hash = hash_new (); - { - const partemplate *current_parop = tic30_paroptab; - for (; current_parop < tic30_paroptab_end; current_parop++) - { - hash_err = hash_insert (parop_hash, current_parop->name, (char *) current_parop); - if (hash_err) - as_fatal ("Internal Error: Can't Hash %s: %s", current_parop->name, hash_err); - } - } - reg_hash = hash_new (); - { - const reg *current_reg = tic30_regtab; - for (; current_reg < tic30_regtab_end; current_reg++) - { - hash_err = hash_insert (reg_hash, current_reg->name, (char *) current_reg); - if (hash_err) - as_fatal ("Internal Error: Can't Hash %s: %s", current_reg->name, hash_err); - } - } - ind_hash = hash_new (); - { - const ind_addr_type *current_ind = tic30_indaddr_tab; - for (; current_ind < tic30_indaddrtab_end; current_ind++) - { - hash_err = hash_insert (ind_hash, current_ind->syntax, (char *) current_ind); - if (hash_err) - as_fatal ("Internal Error: Can't Hash %s: %s", current_ind->syntax, hash_err); - } - } - /* fill in lexical tables: opcode_chars, operand_chars, space_chars */ - { - register int c; - register char *p; - - for (c = 0; c < 256; c++) - { - if (ISLOWER (c) || ISDIGIT (c)) - { - opcode_chars[c] = c; - register_chars[c] = c; - } - else if (ISUPPER (c)) - { - opcode_chars[c] = TOLOWER (c); - register_chars[c] = opcode_chars[c]; - } - else if (c == ')' || c == '(') - { - register_chars[c] = c; - } - if (ISUPPER (c) || ISLOWER (c) || ISDIGIT (c)) - operand_chars[c] = c; - if (ISDIGIT (c) || c == '-') - digit_chars[c] = c; - if (ISALPHA (c) || c == '_' || c == '.' || ISDIGIT (c)) - identifier_chars[c] = c; - if (c == ' ' || c == '\t') - space_chars[c] = c; - if (c == '_') - opcode_chars[c] = c; - } - for (p = operand_special_chars; *p != '\0'; p++) - operand_chars[(unsigned char) *p] = *p; - } -} - -/* Address Mode OR values */ -#define AM_Register 0x00000000 -#define AM_Direct 0x00200000 -#define AM_Indirect 0x00400000 -#define AM_Immediate 0x00600000 -#define AM_NotReq 0xFFFFFFFF - -/* PC Relative OR values */ -#define PC_Register 0x00000000 -#define PC_Relative 0x02000000 - -typedef struct { - unsigned op_type; - struct { - int resolved; - unsigned address; - char *label; - expressionS direct_expr; - } direct; - struct { - unsigned mod; - int ARnum; - unsigned char disp; - } indirect; - struct { - unsigned opcode; - } reg; - struct { - int resolved; - int decimal_found; - float f_number; - int s_number; - unsigned int u_number; - char *label; - expressionS imm_expr; - } immediate; -} operand; - -int tic30_parallel_insn PARAMS ((char *)); -operand *tic30_operand PARAMS ((char *)); -char *tic30_find_parallel_insn PARAMS ((char *, char *)); - -template *opcode; - -struct tic30_insn { - template *tm; /* Template of current instruction */ - unsigned opcode; /* Final opcode */ - int operands; /* Number of given operands */ - /* Type of operand given in instruction */ - operand *operand_type[MAX_OPERANDS]; - unsigned addressing_mode; /* Final addressing mode of instruction */ -}; - -struct tic30_insn insn; -static int found_parallel_insn; - -void -md_assemble (line) - char *line; -{ - template *opcode; - char *current_posn; - char *token_start; - char save_char; - int count; - - debug ("In md_assemble() with argument %s\n", line); - memset (&insn, '\0', sizeof (insn)); - if (found_parallel_insn) - { - debug ("Line is second part of parallel instruction\n\n"); - found_parallel_insn = 0; - return; - } - if ((current_posn = tic30_find_parallel_insn (line, input_line_pointer + 1)) == NULL) - current_posn = line; - else - found_parallel_insn = 1; - while (is_space_char (*current_posn)) - current_posn++; - token_start = current_posn; - if (!is_opcode_char (*current_posn)) - { - as_bad ("Invalid character %s in opcode", output_invalid (*current_posn)); - return; - } - /* Check if instruction is a parallel instruction by seeing if the first - character is a q. */ - if (*token_start == 'q') - { - if (tic30_parallel_insn (token_start)) - { - if (found_parallel_insn) - free (token_start); - return; - } - } - while (is_opcode_char (*current_posn)) - current_posn++; - { /* Find instruction */ - save_char = *current_posn; - *current_posn = '\0'; - opcode = (template *) hash_find (op_hash, token_start); - if (opcode) - { - debug ("Found instruction %s\n", opcode->name); - insn.tm = opcode; - } - else - { - debug ("Didn't find insn\n"); - as_bad ("Unknown TMS320C30 instruction: %s", token_start); - return; - } - *current_posn = save_char; - } - if (*current_posn != END_OF_INSN) - { /* Find operands */ - int paren_not_balanced; - int expecting_operand = 0; - int this_operand; - do - { - /* skip optional white space before operand */ - while (!is_operand_char (*current_posn) && *current_posn != END_OF_INSN) - { - if (!is_space_char (*current_posn)) - { - as_bad ("Invalid character %s before %s operand", - output_invalid (*current_posn), - ordinal_names[insn.operands]); - return; - } - current_posn++; - } - token_start = current_posn; /* after white space */ - paren_not_balanced = 0; - while (paren_not_balanced || *current_posn != ',') - { - if (*current_posn == END_OF_INSN) - { - if (paren_not_balanced) - { - as_bad ("Unbalanced parenthesis in %s operand.", - ordinal_names[insn.operands]); - return; - } - else - break; /* we are done */ - } - else if (!is_operand_char (*current_posn) && !is_space_char (*current_posn)) - { - as_bad ("Invalid character %s in %s operand", - output_invalid (*current_posn), - ordinal_names[insn.operands]); - return; - } - if (*current_posn == '(') - ++paren_not_balanced; - if (*current_posn == ')') - --paren_not_balanced; - current_posn++; - } - if (current_posn != token_start) - { /* yes, we've read in another operand */ - this_operand = insn.operands++; - if (insn.operands > MAX_OPERANDS) - { - as_bad ("Spurious operands; (%d operands/instruction max)", - MAX_OPERANDS); - return; - } - /* now parse operand adding info to 'insn' as we go along */ - save_char = *current_posn; - *current_posn = '\0'; - insn.operand_type[this_operand] = tic30_operand (token_start); - *current_posn = save_char; - if (insn.operand_type[this_operand] == NULL) - return; - } - else - { - if (expecting_operand) - { - as_bad ("Expecting operand after ','; got nothing"); - return; - } - if (*current_posn == ',') - { - as_bad ("Expecting operand before ','; got nothing"); - return; - } - } - /* now *current_posn must be either ',' or END_OF_INSN */ - if (*current_posn == ',') - { - if (*++current_posn == END_OF_INSN) - { /* just skip it, if it's \n complain */ - as_bad ("Expecting operand after ','; got nothing"); - return; - } - expecting_operand = 1; - } - } - while (*current_posn != END_OF_INSN); /* until we get end of insn */ - } - debug ("Number of operands found: %d\n", insn.operands); - /* Check that number of operands is correct */ - if (insn.operands != insn.tm->operands) - { - int i; - int numops = insn.tm->operands; - /* If operands are not the same, then see if any of the operands are not - required. Then recheck with number of given operands. If they are still not - the same, then give an error, otherwise carry on. */ - for (i = 0; i < insn.tm->operands; i++) - if (insn.tm->operand_types[i] & NotReq) - numops--; - if (insn.operands != numops) - { - as_bad ("Incorrect number of operands given"); - return; - } - } - insn.addressing_mode = AM_NotReq; - for (count = 0; count < insn.operands; count++) - { - if (insn.operand_type[count]->op_type & insn.tm->operand_types[count]) - { - debug ("Operand %d matches\n", count + 1); - /* If instruction has two operands and has an AddressMode modifier then set - addressing mode type for instruction */ - if (insn.tm->opcode_modifier == AddressMode) - { - int addr_insn = 0; - /* Store instruction uses the second operand for the address mode. */ - if ((insn.tm->operand_types[1] & (Indirect | Direct)) == (Indirect | Direct)) - addr_insn = 1; - if (insn.operand_type[addr_insn]->op_type & (AllReg)) - insn.addressing_mode = AM_Register; - else if (insn.operand_type[addr_insn]->op_type & Direct) - insn.addressing_mode = AM_Direct; - else if (insn.operand_type[addr_insn]->op_type & Indirect) - insn.addressing_mode = AM_Indirect; - else - insn.addressing_mode = AM_Immediate; - } - } - else - { - as_bad ("The %s operand doesn't match", ordinal_names[count]); - return; - } - } - /* Now set the addressing mode for 3 operand instructions. */ - if ((insn.tm->operand_types[0] & op3T1) && (insn.tm->operand_types[1] & op3T2)) - { - /* Set the addressing mode to the values used for 2 operand instructions in the - G addressing field of the opcode. */ - char *p; - switch (insn.operand_type[0]->op_type) - { - case Rn: - case ARn: - case DPReg: - case OtherReg: - if (insn.operand_type[1]->op_type & (AllReg)) - insn.addressing_mode = AM_Register; - else if (insn.operand_type[1]->op_type & Indirect) - insn.addressing_mode = AM_Direct; - else - { - /* Shouldn't make it to this stage */ - as_bad ("Incompatible first and second operands in instruction"); - return; - } - break; - case Indirect: - if (insn.operand_type[1]->op_type & (AllReg)) - insn.addressing_mode = AM_Indirect; - else if (insn.operand_type[1]->op_type & Indirect) - insn.addressing_mode = AM_Immediate; - else - { - /* Shouldn't make it to this stage */ - as_bad ("Incompatible first and second operands in instruction"); - return; - } - break; - } - /* Now make up the opcode for the 3 operand instructions. As in parallel - instructions, there will be no unresolved values, so they can be fully formed - and added to the frag table. */ - insn.opcode = insn.tm->base_opcode; - if (insn.operand_type[0]->op_type & Indirect) - { - insn.opcode |= (insn.operand_type[0]->indirect.ARnum); - insn.opcode |= (insn.operand_type[0]->indirect.mod << 3); - } - else - insn.opcode |= (insn.operand_type[0]->reg.opcode); - if (insn.operand_type[1]->op_type & Indirect) - { - insn.opcode |= (insn.operand_type[1]->indirect.ARnum << 8); - insn.opcode |= (insn.operand_type[1]->indirect.mod << 11); - } - else - insn.opcode |= (insn.operand_type[1]->reg.opcode << 8); - if (insn.operands == 3) - insn.opcode |= (insn.operand_type[2]->reg.opcode << 16); - insn.opcode |= insn.addressing_mode; - p = frag_more (INSN_SIZE); - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else - { /* Not a three operand instruction */ - char *p; - int am_insn = -1; - insn.opcode = insn.tm->base_opcode; - /* Create frag for instruction - all instructions are 4 bytes long. */ - p = frag_more (INSN_SIZE); - if ((insn.operands > 0) && (insn.tm->opcode_modifier == AddressMode)) - { - insn.opcode |= insn.addressing_mode; - if (insn.addressing_mode == AM_Indirect) - { - /* Determine which operand gives the addressing mode */ - if (insn.operand_type[0]->op_type & Indirect) - am_insn = 0; - if ((insn.operands > 1) && (insn.operand_type[1]->op_type & Indirect)) - am_insn = 1; - insn.opcode |= (insn.operand_type[am_insn]->indirect.disp); - insn.opcode |= (insn.operand_type[am_insn]->indirect.ARnum << 8); - insn.opcode |= (insn.operand_type[am_insn]->indirect.mod << 11); - if (insn.operands > 1) - insn.opcode |= (insn.operand_type[!am_insn]->reg.opcode << 16); - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else if (insn.addressing_mode == AM_Register) - { - insn.opcode |= (insn.operand_type[0]->reg.opcode); - if (insn.operands > 1) - insn.opcode |= (insn.operand_type[1]->reg.opcode << 16); - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else if (insn.addressing_mode == AM_Direct) - { - if (insn.operand_type[0]->op_type & Direct) - am_insn = 0; - if ((insn.operands > 1) && (insn.operand_type[1]->op_type & Direct)) - am_insn = 1; - if (insn.operands > 1) - insn.opcode |= (insn.operand_type[!am_insn]->reg.opcode << 16); - if (insn.operand_type[am_insn]->direct.resolved == 1) - { - /* Resolved values can be placed straight into instruction word, and output */ - insn.opcode |= (insn.operand_type[am_insn]->direct.address & 0x0000FFFF); - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else - { /* Unresolved direct addressing mode instruction */ - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - fix_new_exp (frag_now, p + 2 - (frag_now->fr_literal), 2, &insn.operand_type[am_insn]->direct.direct_expr, 0, 0); - } - } - else if (insn.addressing_mode == AM_Immediate) - { - if (insn.operand_type[0]->immediate.resolved == 1) - { - char *keeploc; - int size; - if (insn.operands > 1) - insn.opcode |= (insn.operand_type[1]->reg.opcode << 16); - switch (insn.tm->imm_arg_type) - { - case Imm_Float: - debug ("Floating point first operand\n"); - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - keeploc = input_line_pointer; - input_line_pointer = insn.operand_type[0]->immediate.label; - if (md_atof ('f', p + 2, &size) != 0) - { - as_bad ("invalid short form floating point immediate operand"); - return; - } - input_line_pointer = keeploc; - break; - case Imm_UInt: - debug ("Unsigned int first operand\n"); - if (insn.operand_type[0]->immediate.decimal_found) - as_warn ("rounding down first operand float to unsigned int"); - if (insn.operand_type[0]->immediate.u_number > 0xFFFF) - as_warn ("only lower 16-bits of first operand are used"); - insn.opcode |= (insn.operand_type[0]->immediate.u_number & 0x0000FFFFL); - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - break; - case Imm_SInt: - debug ("Int first operand\n"); - if (insn.operand_type[0]->immediate.decimal_found) - as_warn ("rounding down first operand float to signed int"); - if (insn.operand_type[0]->immediate.s_number < -32768 || - insn.operand_type[0]->immediate.s_number > 32767) - { - as_bad ("first operand is too large for 16-bit signed int"); - return; - } - insn.opcode |= (insn.operand_type[0]->immediate.s_number & 0x0000FFFFL); - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - break; - } - } - else - { /* Unresolved immediate label */ - if (insn.operands > 1) - insn.opcode |= (insn.operand_type[1]->reg.opcode << 16); - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - fix_new_exp (frag_now, p + 2 - (frag_now->fr_literal), 2, &insn.operand_type[0]->immediate.imm_expr, 0, 0); - } - } - } - else if (insn.tm->opcode_modifier == PCRel) - { - /* Conditional Branch and Call instructions */ - if ((insn.tm->operand_types[0] & (AllReg | Disp)) == (AllReg | Disp)) - { - if (insn.operand_type[0]->op_type & (AllReg)) - { - insn.opcode |= (insn.operand_type[0]->reg.opcode); - insn.opcode |= PC_Register; - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else - { - insn.opcode |= PC_Relative; - if (insn.operand_type[0]->immediate.resolved == 1) - { - insn.opcode |= (insn.operand_type[0]->immediate.s_number & 0x0000FFFF); - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else - { - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - fix_new_exp (frag_now, p + 2 - (frag_now->fr_literal), 2, &insn.operand_type[0]->immediate.imm_expr, 1, 0); - } - } - } - else if ((insn.tm->operand_types[0] & ARn) == ARn) - { - /* Decrement and Branch instructions */ - insn.opcode |= ((insn.operand_type[0]->reg.opcode - 0x08) << 22); - if (insn.operand_type[1]->op_type & (AllReg)) - { - insn.opcode |= (insn.operand_type[1]->reg.opcode); - insn.opcode |= PC_Register; - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else if (insn.operand_type[1]->immediate.resolved == 1) - { - if (insn.operand_type[0]->immediate.decimal_found) - { - as_bad ("first operand is floating point"); - return; - } - if (insn.operand_type[0]->immediate.s_number < -32768 || - insn.operand_type[0]->immediate.s_number > 32767) - { - as_bad ("first operand is too large for 16-bit signed int"); - return; - } - insn.opcode |= (insn.operand_type[1]->immediate.s_number); - insn.opcode |= PC_Relative; - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else - { - insn.opcode |= PC_Relative; - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - fix_new_exp (frag_now, p + 2 - frag_now->fr_literal, 2, &insn.operand_type[1]->immediate.imm_expr, 1, 0); - } - } - } - else if (insn.tm->operand_types[0] == IVector) - { - /* Trap instructions */ - if (insn.operand_type[0]->op_type & IVector) - insn.opcode |= (insn.operand_type[0]->immediate.u_number); - else - { /* Shouldn't get here */ - as_bad ("interrupt vector for trap instruction out of range"); - return; - } - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else if (insn.tm->opcode_modifier == StackOp || insn.tm->opcode_modifier == Rotate) - { - /* Push, Pop and Rotate instructions */ - insn.opcode |= (insn.operand_type[0]->reg.opcode << 16); - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else if ((insn.tm->operand_types[0] & (Abs24 | Direct)) == (Abs24 | Direct)) - { - /* LDP Instruction needs to be tested for before the next section */ - if (insn.operand_type[0]->op_type & Direct) - { - if (insn.operand_type[0]->direct.resolved == 1) - { - /* Direct addressing uses lower 8 bits of direct address */ - insn.opcode |= (insn.operand_type[0]->direct.address & 0x00FF0000) >> 16; - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else - { - fixS *fix; - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - fix = fix_new_exp (frag_now, p + 3 - (frag_now->fr_literal), 1, &insn.operand_type[0]->direct.direct_expr, 0, 0); - /* Ensure that the assembler doesn't complain about fitting a 24-bit - address into 8 bits. */ - fix->fx_no_overflow = 1; - } - } - else - { - if (insn.operand_type[0]->immediate.resolved == 1) - { - /* Immediate addressing uses upper 8 bits of address */ - if (insn.operand_type[0]->immediate.u_number > 0x00FFFFFF) - { - as_bad ("LDP instruction needs a 24-bit operand"); - return; - } - insn.opcode |= ((insn.operand_type[0]->immediate.u_number & 0x00FF0000) >> 16); - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else - { - fixS *fix; - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - fix = fix_new_exp (frag_now, p + 3 - (frag_now->fr_literal), 1, &insn.operand_type[0]->immediate.imm_expr, 0, 0); - fix->fx_no_overflow = 1; - } - } - } - else if (insn.tm->operand_types[0] & (Imm24)) - { - /* Unconditional Branch and Call instructions */ - if (insn.operand_type[0]->immediate.resolved == 1) - { - if (insn.operand_type[0]->immediate.u_number > 0x00FFFFFF) - as_warn ("first operand is too large for a 24-bit displacement"); - insn.opcode |= (insn.operand_type[0]->immediate.u_number & 0x00FFFFFF); - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else - { - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - fix_new_exp (frag_now, p + 1 - (frag_now->fr_literal), 3, &insn.operand_type[0]->immediate.imm_expr, 0, 0); - } - } - else if (insn.tm->operand_types[0] & NotReq) - { - /* Check for NOP instruction without arguments. */ - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - else if (insn.tm->operands == 0) - { - /* Check for instructions without operands. */ - md_number_to_chars (p, (valueT) insn.opcode, INSN_SIZE); - } - } - debug ("Addressing mode: %08X\n", insn.addressing_mode); - { - int i; - for (i = 0; i < insn.operands; i++) - { - if (insn.operand_type[i]->immediate.label) - free (insn.operand_type[i]->immediate.label); - free (insn.operand_type[i]); - } - } - debug ("Final opcode: %08X\n", insn.opcode); - debug ("\n"); -} - -struct tic30_par_insn { - partemplate *tm; /* Template of current parallel instruction */ - int operands[2]; /* Number of given operands for each insn */ - /* Type of operand given in instruction */ - operand *operand_type[2][MAX_OPERANDS]; - int swap_operands; /* Whether to swap operands around. */ - unsigned p_field; /* Value of p field in multiply add/sub instructions */ - unsigned opcode; /* Final opcode */ -}; - -struct tic30_par_insn p_insn; - -int -tic30_parallel_insn (char *token) -{ - static partemplate *p_opcode; - char *current_posn = token; - char *token_start; - char save_char; - - debug ("In tic30_parallel_insn with %s\n", token); - memset (&p_insn, '\0', sizeof (p_insn)); - while (is_opcode_char (*current_posn)) - current_posn++; - { /* Find instruction */ - save_char = *current_posn; - *current_posn = '\0'; - p_opcode = (partemplate *) hash_find (parop_hash, token); - if (p_opcode) - { - debug ("Found instruction %s\n", p_opcode->name); - p_insn.tm = p_opcode; - } - else - { - char first_opcode[6] = - {0}; - char second_opcode[6] = - {0}; - int i; - int current_opcode = -1; - int char_ptr = 0; - - for (i = 0; i < strlen (token); i++) - { - char ch = *(token + i); - if (ch == '_' && current_opcode == -1) - { - current_opcode = 0; - continue; - } - if (ch == '_' && current_opcode == 0) - { - current_opcode = 1; - char_ptr = 0; - continue; - } - switch (current_opcode) - { - case 0: - first_opcode[char_ptr++] = ch; - break; - case 1: - second_opcode[char_ptr++] = ch; - break; - } - } - debug ("first_opcode = %s\n", first_opcode); - debug ("second_opcode = %s\n", second_opcode); - sprintf (token, "q_%s_%s", second_opcode, first_opcode); - p_opcode = (partemplate *) hash_find (parop_hash, token); - if (p_opcode) - { - debug ("Found instruction %s\n", p_opcode->name); - p_insn.tm = p_opcode; - p_insn.swap_operands = 1; - } - else - return 0; - } - *current_posn = save_char; - } - { /* Find operands */ - int paren_not_balanced; - int expecting_operand = 0; - int found_separator = 0; - do - { - /* skip optional white space before operand */ - while (!is_operand_char (*current_posn) && *current_posn != END_OF_INSN) - { - if (!is_space_char (*current_posn) && *current_posn != PARALLEL_SEPARATOR) - { - as_bad ("Invalid character %s before %s operand", - output_invalid (*current_posn), - ordinal_names[insn.operands]); - return 1; - } - if (*current_posn == PARALLEL_SEPARATOR) - found_separator = 1; - current_posn++; - } - token_start = current_posn; /* after white space */ - paren_not_balanced = 0; - while (paren_not_balanced || *current_posn != ',') - { - if (*current_posn == END_OF_INSN) - { - if (paren_not_balanced) - { - as_bad ("Unbalanced parenthesis in %s operand.", - ordinal_names[insn.operands]); - return 1; - } - else - break; /* we are done */ - } - else if (*current_posn == PARALLEL_SEPARATOR) - { - while (is_space_char (*(current_posn - 1))) - current_posn--; - break; - } - else if (!is_operand_char (*current_posn) && !is_space_char (*current_posn)) - { - as_bad ("Invalid character %s in %s operand", - output_invalid (*current_posn), - ordinal_names[insn.operands]); - return 1; - } - if (*current_posn == '(') - ++paren_not_balanced; - if (*current_posn == ')') - --paren_not_balanced; - current_posn++; - } - if (current_posn != token_start) - { /* yes, we've read in another operand */ - p_insn.operands[found_separator]++; - if (p_insn.operands[found_separator] > MAX_OPERANDS) - { - as_bad ("Spurious operands; (%d operands/instruction max)", - MAX_OPERANDS); - return 1; - } - /* now parse operand adding info to 'insn' as we go along */ - save_char = *current_posn; - *current_posn = '\0'; - p_insn.operand_type[found_separator][p_insn.operands[found_separator] - 1] = - tic30_operand (token_start); - *current_posn = save_char; - if (!p_insn.operand_type[found_separator][p_insn.operands[found_separator] - 1]) - return 1; - } - else - { - if (expecting_operand) - { - as_bad ("Expecting operand after ','; got nothing"); - return 1; - } - if (*current_posn == ',') - { - as_bad ("Expecting operand before ','; got nothing"); - return 1; - } - } - /* now *current_posn must be either ',' or END_OF_INSN */ - if (*current_posn == ',') - { - if (*++current_posn == END_OF_INSN) - { /* just skip it, if it's \n complain */ - as_bad ("Expecting operand after ','; got nothing"); - return 1; - } - expecting_operand = 1; - } - } - while (*current_posn != END_OF_INSN); /* until we get end of insn */ - } - if (p_insn.swap_operands) - { - int temp_num, i; - operand *temp_op; - - temp_num = p_insn.operands[0]; - p_insn.operands[0] = p_insn.operands[1]; - p_insn.operands[1] = temp_num; - for (i = 0; i < MAX_OPERANDS; i++) - { - temp_op = p_insn.operand_type[0][i]; - p_insn.operand_type[0][i] = p_insn.operand_type[1][i]; - p_insn.operand_type[1][i] = temp_op; - } - } - if (p_insn.operands[0] != p_insn.tm->operands_1) - { - as_bad ("incorrect number of operands given in the first instruction"); - return 1; - } - if (p_insn.operands[1] != p_insn.tm->operands_2) - { - as_bad ("incorrect number of operands given in the second instruction"); - return 1; - } - debug ("Number of operands in first insn: %d\n", p_insn.operands[0]); - debug ("Number of operands in second insn: %d\n", p_insn.operands[1]); - { /* Now check if operands are correct */ - int count; - int num_rn = 0; - int num_ind = 0; - for (count = 0; count < 2; count++) - { - int i; - for (i = 0; i < p_insn.operands[count]; i++) - { - if ((p_insn.operand_type[count][i]->op_type & - p_insn.tm->operand_types[count][i]) == 0) - { - as_bad ("%s instruction, operand %d doesn't match", ordinal_names[count], i + 1); - return 1; - } - /* Get number of R register and indirect reference contained within the first - two operands of each instruction. This is required for the multiply - parallel instructions which require two R registers and two indirect - references, but not in any particular place. */ - if ((p_insn.operand_type[count][i]->op_type & Rn) && i < 2) - num_rn++; - else if ((p_insn.operand_type[count][i]->op_type & Indirect) && i < 2) - num_ind++; - } - } - if ((p_insn.tm->operand_types[0][0] & (Indirect | Rn)) == (Indirect | Rn)) - { - /* Check for the multiply instructions */ - if (num_rn != 2) - { - as_bad ("incorrect format for multiply parallel instruction"); - return 1; - } - if (num_ind != 2) - { /* Shouldn't get here */ - as_bad ("incorrect format for multiply parallel instruction"); - return 1; - } - if ((p_insn.operand_type[0][2]->reg.opcode != 0x00) && - (p_insn.operand_type[0][2]->reg.opcode != 0x01)) - { - as_bad ("destination for multiply can only be R0 or R1"); - return 1; - } - if ((p_insn.operand_type[1][2]->reg.opcode != 0x02) && - (p_insn.operand_type[1][2]->reg.opcode != 0x03)) - { - as_bad ("destination for add/subtract can only be R2 or R3"); - return 1; - } - /* Now determine the P field for the instruction */ - if (p_insn.operand_type[0][0]->op_type & Indirect) - { - if (p_insn.operand_type[0][1]->op_type & Indirect) - p_insn.p_field = 0x00000000; /* Ind * Ind, Rn +/- Rn */ - else if (p_insn.operand_type[1][0]->op_type & Indirect) - p_insn.p_field = 0x01000000; /* Ind * Rn, Ind +/- Rn */ - else - p_insn.p_field = 0x03000000; /* Ind * Rn, Rn +/- Ind */ - } - else - { - if (p_insn.operand_type[0][1]->op_type & Rn) - p_insn.p_field = 0x02000000; /* Rn * Rn, Ind +/- Ind */ - else if (p_insn.operand_type[1][0]->op_type & Indirect) - { - operand *temp; - p_insn.p_field = 0x01000000; /* Rn * Ind, Ind +/- Rn */ - /* Need to swap the two multiply operands around so that everything is in - its place for the opcode makeup ie so Ind * Rn, Ind +/- Rn */ - temp = p_insn.operand_type[0][0]; - p_insn.operand_type[0][0] = p_insn.operand_type[0][1]; - p_insn.operand_type[0][1] = temp; - } - else - { - operand *temp; - p_insn.p_field = 0x03000000; /* Rn * Ind, Rn +/- Ind */ - temp = p_insn.operand_type[0][0]; - p_insn.operand_type[0][0] = p_insn.operand_type[0][1]; - p_insn.operand_type[0][1] = temp; - } - } - } - } - debug ("P field: %08X\n", p_insn.p_field); - /* Finalise opcode. This is easier for parallel instructions as they have to be - fully resolved, there are no memory addresses allowed, except through indirect - addressing, so there are no labels to resolve. */ - { - p_insn.opcode = p_insn.tm->base_opcode; - switch (p_insn.tm->oporder) - { - case OO_4op1: - p_insn.opcode |= (p_insn.operand_type[0][0]->indirect.ARnum); - p_insn.opcode |= (p_insn.operand_type[0][0]->indirect.mod << 3); - p_insn.opcode |= (p_insn.operand_type[1][1]->indirect.ARnum << 8); - p_insn.opcode |= (p_insn.operand_type[1][1]->indirect.mod << 11); - p_insn.opcode |= (p_insn.operand_type[1][0]->reg.opcode << 16); - p_insn.opcode |= (p_insn.operand_type[0][1]->reg.opcode << 22); - break; - case OO_4op2: - p_insn.opcode |= (p_insn.operand_type[0][0]->indirect.ARnum); - p_insn.opcode |= (p_insn.operand_type[0][0]->indirect.mod << 3); - p_insn.opcode |= (p_insn.operand_type[1][0]->indirect.ARnum << 8); - p_insn.opcode |= (p_insn.operand_type[1][0]->indirect.mod << 11); - p_insn.opcode |= (p_insn.operand_type[1][1]->reg.opcode << 19); - p_insn.opcode |= (p_insn.operand_type[0][1]->reg.opcode << 22); - if (p_insn.operand_type[1][1]->reg.opcode == p_insn.operand_type[0][1]->reg.opcode) - as_warn ("loading the same register in parallel operation"); - break; - case OO_4op3: - p_insn.opcode |= (p_insn.operand_type[0][1]->indirect.ARnum); - p_insn.opcode |= (p_insn.operand_type[0][1]->indirect.mod << 3); - p_insn.opcode |= (p_insn.operand_type[1][1]->indirect.ARnum << 8); - p_insn.opcode |= (p_insn.operand_type[1][1]->indirect.mod << 11); - p_insn.opcode |= (p_insn.operand_type[1][0]->reg.opcode << 16); - p_insn.opcode |= (p_insn.operand_type[0][0]->reg.opcode << 22); - break; - case OO_5op1: - p_insn.opcode |= (p_insn.operand_type[0][0]->indirect.ARnum); - p_insn.opcode |= (p_insn.operand_type[0][0]->indirect.mod << 3); - p_insn.opcode |= (p_insn.operand_type[1][1]->indirect.ARnum << 8); - p_insn.opcode |= (p_insn.operand_type[1][1]->indirect.mod << 11); - p_insn.opcode |= (p_insn.operand_type[1][0]->reg.opcode << 16); - p_insn.opcode |= (p_insn.operand_type[0][1]->reg.opcode << 19); - p_insn.opcode |= (p_insn.operand_type[0][2]->reg.opcode << 22); - break; - case OO_5op2: - p_insn.opcode |= (p_insn.operand_type[0][1]->indirect.ARnum); - p_insn.opcode |= (p_insn.operand_type[0][1]->indirect.mod << 3); - p_insn.opcode |= (p_insn.operand_type[1][1]->indirect.ARnum << 8); - p_insn.opcode |= (p_insn.operand_type[1][1]->indirect.mod << 11); - p_insn.opcode |= (p_insn.operand_type[1][0]->reg.opcode << 16); - p_insn.opcode |= (p_insn.operand_type[0][0]->reg.opcode << 19); - p_insn.opcode |= (p_insn.operand_type[0][2]->reg.opcode << 22); - break; - case OO_PField: - p_insn.opcode |= p_insn.p_field; - if (p_insn.operand_type[0][2]->reg.opcode == 0x01) - p_insn.opcode |= 0x00800000; - if (p_insn.operand_type[1][2]->reg.opcode == 0x03) - p_insn.opcode |= 0x00400000; - switch (p_insn.p_field) - { - case 0x00000000: - p_insn.opcode |= (p_insn.operand_type[0][1]->indirect.ARnum); - p_insn.opcode |= (p_insn.operand_type[0][1]->indirect.mod << 3); - p_insn.opcode |= (p_insn.operand_type[0][0]->indirect.ARnum << 8); - p_insn.opcode |= (p_insn.operand_type[0][0]->indirect.mod << 11); - p_insn.opcode |= (p_insn.operand_type[1][1]->reg.opcode << 16); - p_insn.opcode |= (p_insn.operand_type[1][0]->reg.opcode << 19); - break; - case 0x01000000: - p_insn.opcode |= (p_insn.operand_type[1][0]->indirect.ARnum); - p_insn.opcode |= (p_insn.operand_type[1][0]->indirect.mod << 3); - p_insn.opcode |= (p_insn.operand_type[0][0]->indirect.ARnum << 8); - p_insn.opcode |= (p_insn.operand_type[0][0]->indirect.mod << 11); - p_insn.opcode |= (p_insn.operand_type[1][1]->reg.opcode << 16); - p_insn.opcode |= (p_insn.operand_type[0][1]->reg.opcode << 19); - break; - case 0x02000000: - p_insn.opcode |= (p_insn.operand_type[1][1]->indirect.ARnum); - p_insn.opcode |= (p_insn.operand_type[1][1]->indirect.mod << 3); - p_insn.opcode |= (p_insn.operand_type[1][0]->indirect.ARnum << 8); - p_insn.opcode |= (p_insn.operand_type[1][0]->indirect.mod << 11); - p_insn.opcode |= (p_insn.operand_type[0][1]->reg.opcode << 16); - p_insn.opcode |= (p_insn.operand_type[0][0]->reg.opcode << 19); - break; - case 0x03000000: - p_insn.opcode |= (p_insn.operand_type[1][1]->indirect.ARnum); - p_insn.opcode |= (p_insn.operand_type[1][1]->indirect.mod << 3); - p_insn.opcode |= (p_insn.operand_type[0][0]->indirect.ARnum << 8); - p_insn.opcode |= (p_insn.operand_type[0][0]->indirect.mod << 11); - p_insn.opcode |= (p_insn.operand_type[1][0]->reg.opcode << 16); - p_insn.opcode |= (p_insn.operand_type[0][1]->reg.opcode << 19); - break; - } - break; - } - } /* Opcode is finalised at this point for all parallel instructions. */ - { /* Output opcode */ - char *p; - p = frag_more (INSN_SIZE); - md_number_to_chars (p, (valueT) p_insn.opcode, INSN_SIZE); - } - { - int i, j; - for (i = 0; i < 2; i++) - for (j = 0; j < p_insn.operands[i]; j++) - free (p_insn.operand_type[i][j]); - } - debug ("Final opcode: %08X\n", p_insn.opcode); - debug ("\n"); - return 1; -} - -operand * -tic30_operand (token) - char *token; -{ - int count; - char ind_buffer[strlen (token)]; - operand *current_op; - - debug ("In tic30_operand with %s\n", token); - current_op = (operand *) malloc (sizeof (operand)); - memset (current_op, '\0', sizeof (operand)); - if (*token == DIRECT_REFERENCE) - { - char *token_posn = token + 1; - int direct_label = 0; - debug ("Found direct reference\n"); - while (*token_posn) - { - if (!is_digit_char (*token_posn)) - direct_label = 1; - token_posn++; - } - if (direct_label) - { - char *save_input_line_pointer; - segT retval; - debug ("Direct reference is a label\n"); - current_op->direct.label = token + 1; - save_input_line_pointer = input_line_pointer; - input_line_pointer = token + 1; - debug ("Current input_line_pointer: %s\n", input_line_pointer); - retval = expression (¤t_op->direct.direct_expr); - debug ("Expression type: %d\n", current_op->direct.direct_expr.X_op); - debug ("Expression addnum: %d\n", current_op->direct.direct_expr.X_add_number); - debug ("Segment: %d\n", retval); - input_line_pointer = save_input_line_pointer; - if (current_op->direct.direct_expr.X_op == O_constant) - { - current_op->direct.address = current_op->direct.direct_expr.X_add_number; - current_op->direct.resolved = 1; - } - } - else - { - debug ("Direct reference is a number\n"); - current_op->direct.address = atoi (token + 1); - current_op->direct.resolved = 1; - } - current_op->op_type = Direct; - } - else if (*token == INDIRECT_REFERENCE) - { /* Indirect reference operand */ - int found_ar = 0; - int found_disp = 0; - int ar_number = -1; - int disp_number = 0; - int buffer_posn = 1; - ind_addr_type *ind_addr_op; - debug ("Found indirect reference\n"); - ind_buffer[0] = *token; - for (count = 1; count < strlen (token); count++) - { /* Strip operand */ - ind_buffer[buffer_posn] = TOLOWER (*(token + count)); - if ((*(token + count - 1) == 'a' || *(token + count - 1) == 'A') && - (*(token + count) == 'r' || *(token + count) == 'R')) - { - /* AR reference is found, so get its number and remove it from the buffer - so it can pass through hash_find() */ - if (found_ar) - { - as_bad ("More than one AR register found in indirect reference"); - return NULL; - } - if (*(token + count + 1) < '0' || *(token + count + 1) > '7') - { - as_bad ("Illegal AR register in indirect reference"); - return NULL; - } - ar_number = *(token + count + 1) - '0'; - found_ar = 1; - count++; - } - if (*(token + count) == '(') - { - /* Parenthesis found, so check if a displacement value is inside. If so, get - the value and remove it from the buffer. */ - if (is_digit_char (*(token + count + 1))) - { - char disp[10]; - int disp_posn = 0; - - if (found_disp) - { - as_bad ("More than one displacement found in indirect reference"); - return NULL; - } - count++; - while (*(token + count) != ')') - { - if (!is_digit_char (*(token + count))) - { - as_bad ("Invalid displacement in indirect reference"); - return NULL; - } - disp[disp_posn++] = *(token + (count++)); - } - disp[disp_posn] = '\0'; - disp_number = atoi (disp); - count--; - found_disp = 1; - } - } - buffer_posn++; - } - ind_buffer[buffer_posn] = '\0'; - if (!found_ar) - { - as_bad ("AR register not found in indirect reference"); - return NULL; - } - ind_addr_op = (ind_addr_type *) hash_find (ind_hash, ind_buffer); - if (ind_addr_op) - { - debug ("Found indirect reference: %s\n", ind_addr_op->syntax); - if (ind_addr_op->displacement == IMPLIED_DISP) - { - found_disp = 1; - disp_number = 1; - } - else if ((ind_addr_op->displacement == DISP_REQUIRED) && !found_disp) - { - /* Maybe an implied displacement of 1 again */ - as_bad ("required displacement wasn't given in indirect reference"); - return 0; - } - } - else - { - as_bad ("illegal indirect reference"); - return NULL; - } - if (found_disp && (disp_number < 0 || disp_number > 255)) - { - as_bad ("displacement must be an unsigned 8-bit number"); - return NULL; - } - current_op->indirect.mod = ind_addr_op->modfield; - current_op->indirect.disp = disp_number; - current_op->indirect.ARnum = ar_number; - current_op->op_type = Indirect; - } - else - { - reg *regop = (reg *) hash_find (reg_hash, token); - if (regop) - { - debug ("Found register operand: %s\n", regop->name); - if (regop->regtype == REG_ARn) - current_op->op_type = ARn; - else if (regop->regtype == REG_Rn) - current_op->op_type = Rn; - else if (regop->regtype == REG_DP) - current_op->op_type = DPReg; - else - current_op->op_type = OtherReg; - current_op->reg.opcode = regop->opcode; - } - else - { - if (!is_digit_char (*token) || *(token + 1) == 'x' || strchr (token, 'h')) - { - char *save_input_line_pointer; - segT retval; - debug ("Probably a label: %s\n", token); - current_op->immediate.label = (char *) malloc (strlen (token) + 1); - strcpy (current_op->immediate.label, token); - current_op->immediate.label[strlen (token)] = '\0'; - save_input_line_pointer = input_line_pointer; - input_line_pointer = token; - debug ("Current input_line_pointer: %s\n", input_line_pointer); - retval = expression (¤t_op->immediate.imm_expr); - debug ("Expression type: %d\n", current_op->immediate.imm_expr.X_op); - debug ("Expression addnum: %d\n", current_op->immediate.imm_expr.X_add_number); - debug ("Segment: %d\n", retval); - input_line_pointer = save_input_line_pointer; - if (current_op->immediate.imm_expr.X_op == O_constant) - { - current_op->immediate.s_number = current_op->immediate.imm_expr.X_add_number; - current_op->immediate.u_number = (unsigned int) current_op->immediate.imm_expr.X_add_number; - current_op->immediate.resolved = 1; - } - } - else - { - unsigned count; - debug ("Found a number or displacement\n"); - for (count = 0; count < strlen (token); count++) - if (*(token + count) == '.') - current_op->immediate.decimal_found = 1; - current_op->immediate.label = (char *) malloc (strlen (token) + 1); - strcpy (current_op->immediate.label, token); - current_op->immediate.label[strlen (token)] = '\0'; - current_op->immediate.f_number = (float) atof (token); - current_op->immediate.s_number = (int) atoi (token); - current_op->immediate.u_number = (unsigned int) atoi (token); - current_op->immediate.resolved = 1; - } - current_op->op_type = Disp | Abs24 | Imm16 | Imm24; - if (current_op->immediate.u_number >= 0 && current_op->immediate.u_number <= 31) - current_op->op_type |= IVector; - } - } - return current_op; -} - -/* next_line points to the next line after the current instruction (current_line). - Search for the parallel bars, and if found, merge two lines into internal syntax - for a parallel instruction: - q_[INSN1]_[INSN2] [OPERANDS1] | [OPERANDS2] - By this stage, all comments are scrubbed, and only the bare lines are given. - */ - -#define NONE 0 -#define START_OPCODE 1 -#define END_OPCODE 2 -#define START_OPERANDS 3 -#define END_OPERANDS 4 - -char * -tic30_find_parallel_insn (current_line, next_line) - char *current_line; - char *next_line; -{ - int found_parallel = 0; - char first_opcode[256]; - char second_opcode[256]; - char first_operands[256]; - char second_operands[256]; - char *parallel_insn; - - debug ("In tic30_find_parallel_insn()\n"); - while (!is_end_of_line[(unsigned char) *next_line]) - { - if (*next_line == PARALLEL_SEPARATOR && *(next_line + 1) == PARALLEL_SEPARATOR) - { - found_parallel = 1; - next_line++; - break; - } - next_line++; - } - if (!found_parallel) - return NULL; - debug ("Found a parallel instruction\n"); - { - int i; - char *opcode, *operands, *line; - - for (i = 0; i < 2; i++) - { - if (i == 0) - { - opcode = &first_opcode[0]; - operands = &first_operands[0]; - line = current_line; - } - else - { - opcode = &second_opcode[0]; - operands = &second_operands[0]; - line = next_line; - } - { - int search_status = NONE; - int char_ptr = 0; - char c; - - while (!is_end_of_line[(unsigned char) (c = *line)]) - { - if (is_opcode_char (c) && search_status == NONE) - { - opcode[char_ptr++] = TOLOWER (c); - search_status = START_OPCODE; - } - else if (is_opcode_char (c) && search_status == START_OPCODE) - { - opcode[char_ptr++] = TOLOWER (c); - } - else if (!is_opcode_char (c) && search_status == START_OPCODE) - { - opcode[char_ptr] = '\0'; - char_ptr = 0; - search_status = END_OPCODE; - } - else if (is_operand_char (c) && search_status == START_OPERANDS) - { - operands[char_ptr++] = c; - } - if (is_operand_char (c) && search_status == END_OPCODE) - { - operands[char_ptr++] = c; - search_status = START_OPERANDS; - } - line++; - } - if (search_status != START_OPERANDS) - return NULL; - operands[char_ptr] = '\0'; - } - } - } - parallel_insn = (char *) malloc (strlen (first_opcode) + strlen (first_operands) + - strlen (second_opcode) + strlen (second_operands) + 8); - sprintf (parallel_insn, "q_%s_%s %s | %s", first_opcode, second_opcode, first_operands, second_operands); - debug ("parallel insn = %s\n", parallel_insn); - return parallel_insn; -} - -#undef NONE -#undef START_OPCODE -#undef END_OPCODE -#undef START_OPERANDS -#undef END_OPERANDS - -/* In order to get gas to ignore any | chars at the start of a line, - this function returns true if a | is found in a line. */ - -int -tic30_unrecognized_line (c) - int c; -{ - debug ("In tc_unrecognized_line\n"); - return (c == PARALLEL_SEPARATOR); -} - -int -md_estimate_size_before_relax (fragP, segment) - fragS *fragP; - segT segment; -{ - debug ("In md_estimate_size_before_relax()\n"); - return 0; -} - -void -md_convert_frag (abfd, sec, fragP) - bfd *abfd; - segT sec; - register fragS *fragP; -{ - debug ("In md_convert_frag()\n"); -} - -void -md_apply_fix3 (fixP, valP, seg) - fixS *fixP; - valueT *valP; - segT seg ATTRIBUTE_UNUSED; -{ - valueT value = *valP; - - debug ("In md_apply_fix() with value = %ld\n", (long) value); - debug ("Values in fixP\n"); - debug ("fx_size = %d\n", fixP->fx_size); - debug ("fx_pcrel = %d\n", fixP->fx_pcrel); - debug ("fx_where = %d\n", fixP->fx_where); - debug ("fx_offset = %d\n", (int) fixP->fx_offset); - { - char *buf = fixP->fx_frag->fr_literal + fixP->fx_where; - - value /= INSN_SIZE; - if (fixP->fx_size == 1) - /* Special fix for LDP instruction. */ - value = (value & 0x00FF0000) >> 16; - - debug ("new value = %ld\n", (long) value); - md_number_to_chars (buf, value, fixP->fx_size); - } - - if (fixP->fx_addsy == NULL && fixP->fx_pcrel == 0) - fixP->fx_done = 1; -} - -int -md_parse_option (c, arg) - int c; - char *arg; -{ - int i; - - debug ("In md_parse_option()\n"); - for (i = 0; i < c; i++) - { - printf ("%c\n", arg[c]); - } - return 0; -} - -void -md_show_usage (stream) - FILE *stream; -{ - debug ("In md_show_usage()\n"); -} - -symbolS * -md_undefined_symbol (name) - char *name; -{ - debug ("In md_undefined_symbol()\n"); - return (symbolS *) 0; -} - -valueT -md_section_align (segment, size) - segT segment; - valueT size; -{ - debug ("In md_section_align() segment = %d and size = %d\n", segment, size); - size = (size + 3) / 4; - size *= 4; - debug ("New size value = %d\n", size); - return size; -} - -long -md_pcrel_from (fixP) - fixS *fixP; -{ - int offset; - - debug ("In md_pcrel_from()\n"); - debug ("fx_where = %d\n", fixP->fx_where); - debug ("fx_size = %d\n", fixP->fx_size); - /* Find the opcode that represents the current instruction in the fr_literal - storage area, and check bit 21. Bit 21 contains whether the current instruction - is a delayed one or not, and then set the offset value appropriately. */ - if (fixP->fx_frag->fr_literal[fixP->fx_where - fixP->fx_size + 1] & 0x20) - offset = 3; - else - offset = 1; - debug ("offset = %d\n", offset); - /* PC Relative instructions have a format: - displacement = Label - (PC + offset) - This function returns PC + offset where: - fx_where - fx_size = PC - INSN_SIZE * offset = offset number of instructions - */ - return fixP->fx_where - fixP->fx_size + (INSN_SIZE * offset); -} - -char * -md_atof (what_statement_type, literalP, sizeP) - int what_statement_type; - char *literalP; - int *sizeP; -{ - int prec; - char *token; - char keepval; - unsigned long value; - /* char *atof_ieee (); */ - float float_value; - debug ("In md_atof()\n"); - debug ("precision = %c\n", what_statement_type); - debug ("literal = %s\n", literalP); - debug ("line = "); - token = input_line_pointer; - while (!is_end_of_line[(unsigned char) *input_line_pointer] - && (*input_line_pointer != ',')) - { - debug ("%c", *input_line_pointer); - input_line_pointer++; - } - keepval = *input_line_pointer; - *input_line_pointer = '\0'; - debug ("\n"); - float_value = (float) atof (token); - *input_line_pointer = keepval; - debug ("float_value = %f\n", float_value); - switch (what_statement_type) - { - case 'f': - case 'F': - case 's': - case 'S': - prec = 2; - break; - - case 'd': - case 'D': - case 'r': - case 'R': - prec = 4; - break; - - default: - *sizeP = 0; - return "Bad call to MD_ATOF()"; - } - if (float_value == 0.0) - { - value = (prec == 2) ? 0x00008000L : 0x80000000L; - } - else - { - unsigned long exp, sign, mant, tmsfloat; - tmsfloat = *((long *) &float_value); - sign = tmsfloat & 0x80000000; - mant = tmsfloat & 0x007FFFFF; - exp = tmsfloat & 0x7F800000; - exp <<= 1; - if (exp == 0xFF000000) - { - if (mant == 0) - value = 0x7F7FFFFF; - else if (sign == 0) - value = 0x7F7FFFFF; - else - value = 0x7F800000; - } - else - { - exp -= 0x7F000000; - if (sign) - { - mant = mant & 0x007FFFFF; - mant = -mant; - mant = mant & 0x00FFFFFF; - if (mant == 0) - { - mant |= 0x00800000; - exp = (long) exp - 0x01000000; - } - } - tmsfloat = exp | mant; - value = tmsfloat; - } - if (prec == 2) - { - long exp, mant; - - if (tmsfloat == 0x80000000) - { - value = 0x8000; - } - else - { - value = 0; - exp = (tmsfloat & 0xFF000000); - exp >>= 24; - mant = tmsfloat & 0x007FFFFF; - if (tmsfloat & 0x00800000) - { - mant |= 0xFF000000; - mant += 0x00000800; - mant >>= 12; - mant |= 0x00000800; - mant &= 0x0FFF; - if (exp > 7) - value = 0x7800; - } - else - { - mant |= 0x00800000; - mant += 0x00000800; - exp += (mant >> 24); - mant >>= 12; - mant &= 0x07FF; - if (exp > 7) - value = 0x77FF; - } - if (exp < -8) - value = 0x8000; - if (value == 0) - { - mant = (exp << 12) | mant; - value = mant & 0xFFFF; - } - } - } - } - md_number_to_chars (literalP, value, prec); - *sizeP = prec; - return 0; -} - -void -md_number_to_chars (buf, val, n) - char *buf; - valueT val; - int n; -{ - debug ("In md_number_to_chars()\n"); - number_to_chars_bigendian (buf, val, n); - /* number_to_chars_littleendian(buf,val,n); */ -} - -#define F(SZ,PCREL) (((SZ) << 1) + (PCREL)) -#define MAP(SZ,PCREL,TYPE) case F(SZ,PCREL): code = (TYPE); break - -arelent * -tc_gen_reloc (section, fixP) - asection *section; - fixS *fixP; -{ - arelent *rel; - bfd_reloc_code_real_type code = 0; - - debug ("In tc_gen_reloc()\n"); - debug ("fixP.size = %d\n", fixP->fx_size); - debug ("fixP.pcrel = %d\n", fixP->fx_pcrel); - debug ("addsy.name = %s\n", S_GET_NAME (fixP->fx_addsy)); - switch (F (fixP->fx_size, fixP->fx_pcrel)) - { - MAP (1, 0, BFD_RELOC_TIC30_LDP); - MAP (2, 0, BFD_RELOC_16); - MAP (3, 0, BFD_RELOC_24); - MAP (2, 1, BFD_RELOC_16_PCREL); - MAP (4, 0, BFD_RELOC_32); - default: - as_bad ("Can not do %d byte %srelocation", fixP->fx_size, - fixP->fx_pcrel ? "pc-relative " : ""); - } -#undef MAP -#undef F - - rel = (arelent *) xmalloc (sizeof (arelent)); - assert (rel != 0); - rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); - *rel->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy); - rel->address = fixP->fx_frag->fr_address + fixP->fx_where; - if (fixP->fx_pcrel) - rel->addend = fixP->fx_addnumber; - else - rel->addend = 0; - rel->howto = bfd_reloc_type_lookup (stdoutput, code); - if (!rel->howto) - { - const char *name; - name = S_GET_NAME (fixP->fx_addsy); - if (name == NULL) - name = "<unknown>"; - as_fatal ("Cannot generate relocation type for symbol %s, code %s", name, bfd_get_reloc_code_name (code)); - } - return rel; -} - -void -tc_aout_pre_write_hook () -{ - debug ("In tc_aout_pre_write_hook()\n"); -} - -void -md_operand (expressionP) - expressionS *expressionP; -{ - debug ("In md_operand()\n"); -} - -char output_invalid_buf[8]; - -char * -output_invalid (c) - char c; -{ - if (ISPRINT (c)) - sprintf (output_invalid_buf, "'%c'", c); - else - sprintf (output_invalid_buf, "(0x%x)", (unsigned) c); - return output_invalid_buf; -} diff --git a/contrib/binutils/gas/config/tc-tic30.h b/contrib/binutils/gas/config/tc-tic30.h deleted file mode 100644 index d55c8702cfe8..000000000000 --- a/contrib/binutils/gas/config/tc-tic30.h +++ /dev/null @@ -1,55 +0,0 @@ -/* tc-tic30.h -- Header file for tc-tic30.c - Copyright 1998, 2000 Free Software Foundation, Inc. - Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) - - 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. */ - -#ifndef _TC_TIC30_H_ -#define _TC_TIC30_H_ - -#define TC_TIC30 1 - -#ifdef OBJ_AOUT -#define TARGET_FORMAT "a.out-tic30" -#endif - -#define TARGET_ARCH bfd_arch_tic30 -#define TARGET_BYTES_BIG_ENDIAN 1 - -#define WORKING_DOT_WORD - -char *output_invalid PARAMS ((int c)); - -#define END_OF_INSN '\0' -#define MAX_OPERANDS 6 -#define DIRECT_REFERENCE '@' -#define INDIRECT_REFERENCE '*' -#define PARALLEL_SEPARATOR '|' -#define INSN_SIZE 4 - -/* Define this to 1 if you want the debug output to be on stdout, - otherwise stderr will be used. If stderr is used, there will be a - better synchronisation with the as_bad outputs, but you can't - capture the output. */ -#define USE_STDOUT 0 - -#define tc_unrecognized_line tic30_unrecognized_line - -extern int tic30_unrecognized_line PARAMS ((int)); - -#endif diff --git a/contrib/binutils/gas/config/tc-v850.c b/contrib/binutils/gas/config/tc-v850.c deleted file mode 100644 index e1e54758ee6d..000000000000 --- a/contrib/binutils/gas/config/tc-v850.c +++ /dev/null @@ -1,2434 +0,0 @@ -/* tc-v850.c -- Assembler code for the NEC V850 - Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 - 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. */ - -#include <stdio.h> -#include "as.h" -#include "safe-ctype.h" -#include "subsegs.h" -#include "opcode/v850.h" -#include "dwarf2dbg.h" - -/* Sign-extend a 16-bit number. */ -#define SEXT16(x) ((((x) & 0xffff) ^ (~0x7fff)) + 0x8000) - -/* Temporarily holds the reloc in a cons expression. */ -static bfd_reloc_code_real_type hold_cons_reloc = BFD_RELOC_UNUSED; - -/* Set to TRUE if we want to be pedantic about signed overflows. */ -static boolean warn_signed_overflows = FALSE; -static boolean warn_unsigned_overflows = FALSE; - -/* Indicates the target BFD machine number. */ -static int machine = -1; - -/* Indicates the target processor(s) for the assemble. */ -static int processor_mask = -1; - -/* Structure to hold information about predefined registers. */ -struct reg_name { - const char *name; - int value; -}; - -/* Generic assembler global variables which must be defined by all - targets. */ - -/* Characters which always start a comment. */ -const char comment_chars[] = "#"; - -/* Characters which start a comment at the beginning of a line. */ -const char line_comment_chars[] = ";#"; - -/* Characters which may be used to separate multiple commands on a - single line. */ -const char line_separator_chars[] = ";"; - -/* Characters which are used to indicate an exponent in a floating - point number. */ -const char EXP_CHARS[] = "eE"; - -/* Characters which mean that a number is a floating point constant, - as in 0d1.0. */ -const char FLT_CHARS[] = "dD"; - -const relax_typeS md_relax_table[] = { - /* Conditional branches. */ - {0xff, -0x100, 2, 1}, - {0x1fffff, -0x200000, 6, 0}, - /* Unconditional branches. */ - {0xff, -0x100, 2, 3}, - {0x1fffff, -0x200000, 4, 0}, -}; - -/* Fixups. */ -#define MAX_INSN_FIXUPS (5) -struct v850_fixup { - expressionS exp; - int opindex; - bfd_reloc_code_real_type reloc; -}; - -struct v850_fixup fixups[MAX_INSN_FIXUPS]; -static int fc; - -struct v850_seg_entry -{ - segT s; - const char *name; - flagword flags; -}; - -struct v850_seg_entry v850_seg_table[] = -{ - { NULL, ".sdata", - SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA | SEC_HAS_CONTENTS - | SEC_SMALL_DATA }, - { NULL, ".tdata", - SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA | SEC_HAS_CONTENTS }, - { NULL, ".zdata", - SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA | SEC_HAS_CONTENTS }, - { NULL, ".sbss", - SEC_ALLOC | SEC_SMALL_DATA }, - { NULL, ".tbss", - SEC_ALLOC }, - { NULL, ".zbss", - SEC_ALLOC}, - { NULL, ".rosdata", - SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY | SEC_DATA - | SEC_HAS_CONTENTS | SEC_SMALL_DATA }, - { NULL, ".rozdata", - SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY | SEC_DATA - | SEC_HAS_CONTENTS }, - { NULL, ".scommon", - SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA | SEC_HAS_CONTENTS - | SEC_SMALL_DATA | SEC_IS_COMMON }, - { NULL, ".tcommon", - SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA | SEC_HAS_CONTENTS - | SEC_IS_COMMON }, - { NULL, ".zcommon", - SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA | SEC_HAS_CONTENTS - | SEC_IS_COMMON }, - { NULL, ".call_table_data", - SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA | SEC_HAS_CONTENTS }, - { NULL, ".call_table_text", - SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY | SEC_CODE - | SEC_HAS_CONTENTS}, - { NULL, ".bss", - SEC_ALLOC } -}; - -#define SDATA_SECTION 0 -#define TDATA_SECTION 1 -#define ZDATA_SECTION 2 -#define SBSS_SECTION 3 -#define TBSS_SECTION 4 -#define ZBSS_SECTION 5 -#define ROSDATA_SECTION 6 -#define ROZDATA_SECTION 7 -#define SCOMMON_SECTION 8 -#define TCOMMON_SECTION 9 -#define ZCOMMON_SECTION 10 -#define CALL_TABLE_DATA_SECTION 11 -#define CALL_TABLE_TEXT_SECTION 12 -#define BSS_SECTION 13 - -static void do_v850_seg PARAMS ((int, subsegT)); - -static void -do_v850_seg (i, sub) - int i; - subsegT sub; -{ - struct v850_seg_entry *seg = v850_seg_table + i; - - obj_elf_section_change_hook (); - if (seg->s != NULL) - { - subseg_set (seg->s, sub); - } - else - { - seg->s = subseg_new (seg->name, sub); - bfd_set_section_flags (stdoutput, seg->s, seg->flags); - if ((seg->flags & SEC_LOAD) == 0) - seg_info (seg->s)->bss = 1; - } -} - -static void v850_seg PARAMS ((int i)); - -static void -v850_seg (i) - int i; -{ - subsegT sub = get_absolute_expression (); - - do_v850_seg (i, sub); - demand_empty_rest_of_line (); -} - -static void v850_offset PARAMS ((int)); - -static void -v850_offset (ignore) - int ignore ATTRIBUTE_UNUSED; -{ - int temp = get_absolute_expression (); - - temp -= frag_now_fix (); - - if (temp > 0) - (void) frag_more (temp); - - demand_empty_rest_of_line (); -} - -/* Copied from obj_elf_common() in gas/config/obj-elf.c. */ - -static void v850_comm PARAMS ((int)); - -static void -v850_comm (area) - int area; -{ - char *name; - char c; - char *p; - int temp; - unsigned int size; - symbolS *symbolP; - int have_align; - - name = input_line_pointer; - c = get_symbol_end (); - - /* Just after name is now '\0'. */ - p = input_line_pointer; - *p = c; - - SKIP_WHITESPACE (); - - if (*input_line_pointer != ',') - { - as_bad (_("Expected comma after symbol-name")); - ignore_rest_of_line (); - return; - } - - /* Skip ','. */ - input_line_pointer++; - - if ((temp = get_absolute_expression ()) < 0) - { - /* xgettext:c-format */ - as_bad (_(".COMMon length (%d.) < 0! Ignored."), temp); - ignore_rest_of_line (); - return; - } - - size = temp; - *p = 0; - symbolP = symbol_find_or_make (name); - *p = c; - - if (S_IS_DEFINED (symbolP) && ! S_IS_COMMON (symbolP)) - { - as_bad (_("Ignoring attempt to re-define symbol")); - ignore_rest_of_line (); - return; - } - - if (S_GET_VALUE (symbolP) != 0) - { - if (S_GET_VALUE (symbolP) != size) - { - /* xgettext:c-format */ - as_warn (_("Length of .comm \"%s\" is already %ld. Not changed to %d."), - S_GET_NAME (symbolP), (long) S_GET_VALUE (symbolP), size); - } - } - - know (symbol_get_frag (symbolP) == &zero_address_frag); - - if (*input_line_pointer != ',') - have_align = 0; - else - { - have_align = 1; - input_line_pointer++; - SKIP_WHITESPACE (); - } - - if (! have_align || *input_line_pointer != '"') - { - if (! have_align) - temp = 0; - else - { - temp = get_absolute_expression (); - - if (temp < 0) - { - temp = 0; - as_warn (_("Common alignment negative; 0 assumed")); - } - } - - if (symbol_get_obj (symbolP)->local) - { - segT old_sec; - int old_subsec; - char *pfrag; - int align; - flagword applicable; - - old_sec = now_seg; - old_subsec = now_subseg; - - applicable = bfd_applicable_section_flags (stdoutput); - - applicable &= SEC_ALLOC; - - switch (area) - { - case SCOMMON_SECTION: - do_v850_seg (SBSS_SECTION, 0); - break; - - case ZCOMMON_SECTION: - do_v850_seg (ZBSS_SECTION, 0); - break; - - case TCOMMON_SECTION: - do_v850_seg (TBSS_SECTION, 0); - break; - } - - if (temp) - { - /* Convert to a power of 2 alignment. */ - for (align = 0; (temp & 1) == 0; temp >>= 1, ++align) - ; - - if (temp != 1) - { - as_bad (_("Common alignment not a power of 2")); - ignore_rest_of_line (); - return; - } - } - else - align = 0; - - record_alignment (now_seg, align); - - if (align) - frag_align (align, 0, 0); - - switch (area) - { - case SCOMMON_SECTION: - if (S_GET_SEGMENT (symbolP) == v850_seg_table[SBSS_SECTION].s) - symbol_get_frag (symbolP)->fr_symbol = 0; - break; - - case ZCOMMON_SECTION: - if (S_GET_SEGMENT (symbolP) == v850_seg_table[ZBSS_SECTION].s) - symbol_get_frag (symbolP)->fr_symbol = 0; - break; - - case TCOMMON_SECTION: - if (S_GET_SEGMENT (symbolP) == v850_seg_table[TBSS_SECTION].s) - symbol_get_frag (symbolP)->fr_symbol = 0; - break; - - default: - abort (); - } - - symbol_set_frag (symbolP, frag_now); - pfrag = frag_var (rs_org, 1, 1, (relax_substateT) 0, symbolP, - (offsetT) size, (char *) 0); - *pfrag = 0; - S_SET_SIZE (symbolP, size); - - switch (area) - { - case SCOMMON_SECTION: - S_SET_SEGMENT (symbolP, v850_seg_table[SBSS_SECTION].s); - break; - - case ZCOMMON_SECTION: - S_SET_SEGMENT (symbolP, v850_seg_table[ZBSS_SECTION].s); - break; - - case TCOMMON_SECTION: - S_SET_SEGMENT (symbolP, v850_seg_table[TBSS_SECTION].s); - break; - - default: - abort (); - } - - S_CLEAR_EXTERNAL (symbolP); - obj_elf_section_change_hook (); - subseg_set (old_sec, old_subsec); - } - else - { - allocate_common: - S_SET_VALUE (symbolP, (valueT) size); - S_SET_ALIGN (symbolP, temp); - S_SET_EXTERNAL (symbolP); - - switch (area) - { - case SCOMMON_SECTION: - case ZCOMMON_SECTION: - case TCOMMON_SECTION: - do_v850_seg (area, 0); - S_SET_SEGMENT (symbolP, v850_seg_table[area].s); - break; - - default: - abort (); - } - } - } - else - { - input_line_pointer++; - - /* @@ Some use the dot, some don't. Can we get some consistency?? */ - if (*input_line_pointer == '.') - input_line_pointer++; - - /* @@ Some say data, some say bss. */ - if (strncmp (input_line_pointer, "bss\"", 4) - && strncmp (input_line_pointer, "data\"", 5)) - { - while (*--input_line_pointer != '"') - ; - input_line_pointer--; - goto bad_common_segment; - } - while (*input_line_pointer++ != '"') - ; - goto allocate_common; - } - - symbol_get_bfdsym (symbolP)->flags |= BSF_OBJECT; - - demand_empty_rest_of_line (); - return; - - { - bad_common_segment: - p = input_line_pointer; - while (*p && *p != '\n') - p++; - c = *p; - *p = '\0'; - as_bad (_("bad .common segment %s"), input_line_pointer + 1); - *p = c; - input_line_pointer = p; - ignore_rest_of_line (); - return; - } -} - -static void set_machine PARAMS ((int)); - -static void -set_machine (number) - int number; -{ - machine = number; - bfd_set_arch_mach (stdoutput, TARGET_ARCH, machine); - - switch (machine) - { - case 0: processor_mask = PROCESSOR_V850; break; - case bfd_mach_v850e: processor_mask = PROCESSOR_V850E; break; - case bfd_mach_v850ea: processor_mask = PROCESSOR_V850EA; break; - } -} - -/* The target specific pseudo-ops which we support. */ -const pseudo_typeS md_pseudo_table[] = { - { "sdata", v850_seg, SDATA_SECTION }, - { "tdata", v850_seg, TDATA_SECTION }, - { "zdata", v850_seg, ZDATA_SECTION }, - { "sbss", v850_seg, SBSS_SECTION }, - { "tbss", v850_seg, TBSS_SECTION }, - { "zbss", v850_seg, ZBSS_SECTION }, - { "rosdata", v850_seg, ROSDATA_SECTION }, - { "rozdata", v850_seg, ROZDATA_SECTION }, - { "bss", v850_seg, BSS_SECTION }, - { "offset", v850_offset, 0 }, - { "word", cons, 4 }, - { "zcomm", v850_comm, ZCOMMON_SECTION }, - { "scomm", v850_comm, SCOMMON_SECTION }, - { "tcomm", v850_comm, TCOMMON_SECTION }, - { "v850", set_machine, 0 }, - { "call_table_data", v850_seg, CALL_TABLE_DATA_SECTION }, - { "call_table_text", v850_seg, CALL_TABLE_TEXT_SECTION }, - { "v850e", set_machine, bfd_mach_v850e }, - { "v850ea", set_machine, bfd_mach_v850ea }, - { "file", dwarf2_directive_file, 0 }, - { "loc", dwarf2_directive_loc, 0 }, - { NULL, NULL, 0 } -}; - -/* Opcode hash table. */ -static struct hash_control *v850_hash; - -/* This table is sorted. Suitable for searching by a binary search. */ -static const struct reg_name pre_defined_registers[] = { - { "ep", 30 }, /* ep - element ptr */ - { "gp", 4 }, /* gp - global ptr */ - { "hp", 2 }, /* hp - handler stack ptr */ - { "lp", 31 }, /* lp - link ptr */ - { "r0", 0 }, - { "r1", 1 }, - { "r10", 10 }, - { "r11", 11 }, - { "r12", 12 }, - { "r13", 13 }, - { "r14", 14 }, - { "r15", 15 }, - { "r16", 16 }, - { "r17", 17 }, - { "r18", 18 }, - { "r19", 19 }, - { "r2", 2 }, - { "r20", 20 }, - { "r21", 21 }, - { "r22", 22 }, - { "r23", 23 }, - { "r24", 24 }, - { "r25", 25 }, - { "r26", 26 }, - { "r27", 27 }, - { "r28", 28 }, - { "r29", 29 }, - { "r3", 3 }, - { "r30", 30 }, - { "r31", 31 }, - { "r4", 4 }, - { "r5", 5 }, - { "r6", 6 }, - { "r7", 7 }, - { "r8", 8 }, - { "r9", 9 }, - { "sp", 3 }, /* sp - stack ptr */ - { "tp", 5 }, /* tp - text ptr */ - { "zero", 0 }, -}; - -#define REG_NAME_CNT \ - (sizeof (pre_defined_registers) / sizeof (struct reg_name)) - -static const struct reg_name system_registers[] = { - { "ctbp", 20 }, - { "ctpc", 16 }, - { "ctpsw", 17 }, - { "dbpc", 18 }, - { "dbpsw", 19 }, - { "ecr", 4 }, - { "eipc", 0 }, - { "eipsw", 1 }, - { "fepc", 2 }, - { "fepsw", 3 }, - { "psw", 5 }, -}; - -#define SYSREG_NAME_CNT \ - (sizeof (system_registers) / sizeof (struct reg_name)) - -static const struct reg_name system_list_registers[] = { - {"PS", 5 }, - {"SR", 0 + 1} -}; - -#define SYSREGLIST_NAME_CNT \ - (sizeof (system_list_registers) / sizeof (struct reg_name)) - -static const struct reg_name cc_names[] = { - { "c", 0x1 }, - { "e", 0x2 }, - { "ge", 0xe }, - { "gt", 0xf }, - { "h", 0xb }, - { "l", 0x1 }, - { "le", 0x7 }, - { "lt", 0x6 }, - { "n", 0x4 }, - { "nc", 0x9 }, - { "ne", 0xa }, - { "nh", 0x3 }, - { "nl", 0x9 }, - { "ns", 0xc }, - { "nv", 0x8 }, - { "nz", 0xa }, - { "p", 0xc }, - { "s", 0x4 }, - { "sa", 0xd }, - { "t", 0x5 }, - { "v", 0x0 }, - { "z", 0x2 }, -}; - -#define CC_NAME_CNT \ - (sizeof (cc_names) / sizeof (struct reg_name)) - -/* Do a binary search of the given register table to see if NAME is a - valid regiter name. Return the register number from the array on - success, or -1 on failure. */ - -static int reg_name_search - PARAMS ((const struct reg_name *, int, const char *, boolean)); - -static int -reg_name_search (regs, regcount, name, accept_numbers) - const struct reg_name *regs; - int regcount; - const char *name; - boolean accept_numbers; -{ - int middle, low, high; - int cmp; - symbolS *symbolP; - - /* If the register name is a symbol, then evaluate it. */ - if ((symbolP = symbol_find (name)) != NULL) - { - /* If the symbol is an alias for another name then use that. - If the symbol is an alias for a number, then return the number. */ - if (symbol_equated_p (symbolP)) - { - name - = S_GET_NAME (symbol_get_value_expression (symbolP)->X_add_symbol); - } - else if (accept_numbers) - { - int reg = S_GET_VALUE (symbolP); - - if (reg >= 0 && reg <= 31) - return reg; - } - - /* Otherwise drop through and try parsing name normally. */ - } - - low = 0; - high = regcount - 1; - - do - { - middle = (low + high) / 2; - cmp = strcasecmp (name, regs[middle].name); - if (cmp < 0) - high = middle - 1; - else if (cmp > 0) - low = middle + 1; - else - return regs[middle].value; - } - while (low <= high); - return -1; -} - -/* Summary of register_name(). - * - * in: Input_line_pointer points to 1st char of operand. - * - * out: An expressionS. - * The operand may have been a register: in this case, X_op == O_register, - * X_add_number is set to the register number, and truth is returned. - * Input_line_pointer->(next non-blank) char after operand, or is in - * its original state. */ - -static boolean register_name PARAMS ((expressionS *)); - -static boolean -register_name (expressionP) - expressionS *expressionP; -{ - int reg_number; - char *name; - char *start; - char c; - - /* Find the spelling of the operand. */ - start = name = input_line_pointer; - - c = get_symbol_end (); - - reg_number = reg_name_search (pre_defined_registers, REG_NAME_CNT, - name, FALSE); - - /* Put back the delimiting char. */ - *input_line_pointer = c; - - /* Look to see if it's in the register table. */ - if (reg_number >= 0) - { - expressionP->X_op = O_register; - expressionP->X_add_number = reg_number; - - /* Make the rest nice. */ - expressionP->X_add_symbol = NULL; - expressionP->X_op_symbol = NULL; - - return true; - } - else - { - /* Reset the line as if we had not done anything. */ - input_line_pointer = start; - - return false; - } -} - -/* Summary of system_register_name(). - * - * in: INPUT_LINE_POINTER points to 1st char of operand. - * EXPRESSIONP points to an expression structure to be filled in. - * ACCEPT_NUMBERS is true iff numerical register names may be used. - * ACCEPT_LIST_NAMES is true iff the special names PS and SR may be - * accepted. - * - * out: An expressionS structure in expressionP. - * The operand may have been a register: in this case, X_op == O_register, - * X_add_number is set to the register number, and truth is returned. - * Input_line_pointer->(next non-blank) char after operand, or is in - * its original state. */ - -static boolean system_register_name PARAMS ((expressionS *, boolean, boolean)); - -static boolean -system_register_name (expressionP, accept_numbers, accept_list_names) - expressionS *expressionP; - boolean accept_numbers; - boolean accept_list_names; -{ - int reg_number; - char *name; - char *start; - char c; - - /* Find the spelling of the operand. */ - start = name = input_line_pointer; - - c = get_symbol_end (); - reg_number = reg_name_search (system_registers, SYSREG_NAME_CNT, name, - accept_numbers); - - /* Put back the delimiting char. */ - *input_line_pointer = c; - - if (reg_number < 0 - && accept_numbers) - { - /* Reset input_line pointer. */ - input_line_pointer = start; - - if (ISDIGIT (*input_line_pointer)) - { - reg_number = strtol (input_line_pointer, &input_line_pointer, 10); - - /* Make sure that the register number is allowable. */ - if (reg_number < 0 - || (reg_number > 5 && reg_number < 16) - || reg_number > 20) - { - reg_number = -1; - } - } - else if (accept_list_names) - { - c = get_symbol_end (); - reg_number = reg_name_search (system_list_registers, - SYSREGLIST_NAME_CNT, name, FALSE); - - /* Put back the delimiting char. */ - *input_line_pointer = c; - } - } - - /* Look to see if it's in the register table. */ - if (reg_number >= 0) - { - expressionP->X_op = O_register; - expressionP->X_add_number = reg_number; - - /* Make the rest nice. */ - expressionP->X_add_symbol = NULL; - expressionP->X_op_symbol = NULL; - - return true; - } - else - { - /* Reset the line as if we had not done anything. */ - input_line_pointer = start; - - return false; - } -} - -/* Summary of cc_name(). - * - * in: INPUT_LINE_POINTER points to 1st char of operand. - * - * out: An expressionS. - * The operand may have been a register: in this case, X_op == O_register, - * X_add_number is set to the register number, and truth is returned. - * Input_line_pointer->(next non-blank) char after operand, or is in - * its original state. */ - -static boolean cc_name PARAMS ((expressionS *)); - -static boolean -cc_name (expressionP) - expressionS *expressionP; -{ - int reg_number; - char *name; - char *start; - char c; - - /* Find the spelling of the operand. */ - start = name = input_line_pointer; - - c = get_symbol_end (); - reg_number = reg_name_search (cc_names, CC_NAME_CNT, name, FALSE); - - /* Put back the delimiting char. */ - *input_line_pointer = c; - - /* Look to see if it's in the register table. */ - if (reg_number >= 0) - { - expressionP->X_op = O_constant; - expressionP->X_add_number = reg_number; - - /* Make the rest nice. */ - expressionP->X_add_symbol = NULL; - expressionP->X_op_symbol = NULL; - - return true; - } - else - { - /* Reset the line as if we had not done anything. */ - input_line_pointer = start; - - return false; - } -} - -static void skip_white_space PARAMS ((void)); - -static void -skip_white_space () -{ - while (*input_line_pointer == ' ' - || *input_line_pointer == '\t') - ++input_line_pointer; -} - -/* Summary of parse_register_list (). - * - * in: INPUT_LINE_POINTER points to 1st char of a list of registers. - * INSN is the partially constructed instruction. - * OPERAND is the operand being inserted. - * - * out: NULL if the parse completed successfully, otherwise a - * pointer to an error message is returned. If the parse - * completes the correct bit fields in the instruction - * will be filled in. - * - * Parses register lists with the syntax: - * - * { rX } - * { rX, rY } - * { rX - rY } - * { rX - rY, rZ } - * etc - * - * and also parses constant epxressions whoes bits indicate the - * registers in the lists. The LSB in the expression refers to - * the lowest numbered permissable register in the register list, - * and so on upwards. System registers are considered to be very - * high numbers. */ - -static char *parse_register_list - PARAMS ((unsigned long *, const struct v850_operand *)); - -static char * -parse_register_list (insn, operand) - unsigned long *insn; - const struct v850_operand *operand; -{ - static int type1_regs[32] = { - 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 29, 28, 23, 22, 21, 20, 27, 26, 25, 24 - }; - static int type2_regs[32] = { - 19, 18, 17, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 31, 29, 28, 23, 22, 21, 20, 27, 26, 25, 24 - }; - static int type3_regs[32] = { - 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 15, 13, 12, 7, 6, 5, 4, 11, 10, 9, 8 - }; - int *regs; - expressionS exp; - - /* Select a register array to parse. */ - switch (operand->shift) - { - case 0xffe00001: regs = type1_regs; break; - case 0xfff8000f: regs = type2_regs; break; - case 0xfff8001f: regs = type3_regs; break; - default: - as_bad (_("unknown operand shift: %x\n"), operand->shift); - return _("internal failure in parse_register_list"); - } - - skip_white_space (); - - /* If the expression starts with a curly brace it is a register list. - Otherwise it is a constant expression, whoes bits indicate which - registers are to be included in the list. */ - - if (*input_line_pointer != '{') - { - int reg; - int i; - - expression (&exp); - - if (exp.X_op != O_constant) - return _("constant expression or register list expected"); - - if (regs == type1_regs) - { - if (exp.X_add_number & 0xFFFFF000) - return _("high bits set in register list expression"); - - for (reg = 20; reg < 32; reg++) - if (exp.X_add_number & (1 << (reg - 20))) - { - for (i = 0; i < 32; i++) - if (regs[i] == reg) - *insn |= (1 << i); - } - } - else if (regs == type2_regs) - { - if (exp.X_add_number & 0xFFFE0000) - return _("high bits set in register list expression"); - - for (reg = 1; reg < 16; reg++) - if (exp.X_add_number & (1 << (reg - 1))) - { - for (i = 0; i < 32; i++) - if (regs[i] == reg) - *insn |= (1 << i); - } - - if (exp.X_add_number & (1 << 15)) - *insn |= (1 << 3); - - if (exp.X_add_number & (1 << 16)) - *insn |= (1 << 19); - } - else /* regs == type3_regs */ - { - if (exp.X_add_number & 0xFFFE0000) - return _("high bits set in register list expression"); - - for (reg = 16; reg < 32; reg++) - if (exp.X_add_number & (1 << (reg - 16))) - { - for (i = 0; i < 32; i++) - if (regs[i] == reg) - *insn |= (1 << i); - } - - if (exp.X_add_number & (1 << 16)) - *insn |= (1 << 19); - } - - return NULL; - } - - input_line_pointer++; - - /* Parse the register list until a terminator (closing curly brace or - new-line) is found. */ - for (;;) - { - if (register_name (&exp)) - { - int i; - - /* Locate the given register in the list, and if it is there, - insert the corresponding bit into the instruction. */ - for (i = 0; i < 32; i++) - { - if (regs[i] == exp.X_add_number) - { - *insn |= (1 << i); - break; - } - } - - if (i == 32) - { - return _("illegal register included in list"); - } - } - else if (system_register_name (&exp, true, true)) - { - if (regs == type1_regs) - { - return _("system registers cannot be included in list"); - } - else if (exp.X_add_number == 5) - { - if (regs == type2_regs) - return _("PSW cannot be included in list"); - else - *insn |= 0x8; - } - else if (exp.X_add_number < 4) - *insn |= 0x80000; - else - return _("High value system registers cannot be included in list"); - } - else if (*input_line_pointer == '}') - { - input_line_pointer++; - break; - } - else if (*input_line_pointer == ',') - { - input_line_pointer++; - continue; - } - else if (*input_line_pointer == '-') - { - /* We have encountered a range of registers: rX - rY. */ - int j; - expressionS exp2; - - /* Skip the dash. */ - ++input_line_pointer; - - /* Get the second register in the range. */ - if (! register_name (&exp2)) - { - return _("second register should follow dash in register list"); - exp2.X_add_number = exp.X_add_number; - } - - /* Add the rest of the registers in the range. */ - for (j = exp.X_add_number + 1; j <= exp2.X_add_number; j++) - { - int i; - - /* Locate the given register in the list, and if it is there, - insert the corresponding bit into the instruction. */ - for (i = 0; i < 32; i++) - { - if (regs[i] == j) - { - *insn |= (1 << i); - break; - } - } - - if (i == 32) - return _("illegal register included in list"); - } - } - else - { - break; - } - - skip_white_space (); - } - - return NULL; -} - -const char *md_shortopts = "m:"; - -struct option md_longopts[] = { - {NULL, no_argument, NULL, 0} -}; - -size_t md_longopts_size = sizeof (md_longopts); - -void -md_show_usage (stream) - FILE *stream; -{ - fprintf (stream, _(" V850 options:\n")); - fprintf (stream, _(" -mwarn-signed-overflow Warn if signed immediate values overflow\n")); - fprintf (stream, _(" -mwarn-unsigned-overflow Warn if unsigned immediate values overflow\n")); - fprintf (stream, _(" -mv850 The code is targeted at the v850\n")); - fprintf (stream, _(" -mv850e The code is targeted at the v850e\n")); - fprintf (stream, _(" -mv850ea The code is targeted at the v850ea\n")); - fprintf (stream, _(" -mv850any The code is generic, despite any processor specific instructions\n")); -} - -int -md_parse_option (c, arg) - int c; - char *arg; -{ - if (c != 'm') - { - if (c != 'a') - /* xgettext:c-format */ - fprintf (stderr, _("unknown command line option: -%c%s\n"), c, arg); - return 0; - } - - if (strcmp (arg, "warn-signed-overflow") == 0) - { - warn_signed_overflows = TRUE; - } - else if (strcmp (arg, "warn-unsigned-overflow") == 0) - { - warn_unsigned_overflows = TRUE; - } - else if (strcmp (arg, "v850") == 0) - { - machine = 0; - processor_mask = PROCESSOR_V850; - } - else if (strcmp (arg, "v850e") == 0) - { - machine = bfd_mach_v850e; - processor_mask = PROCESSOR_V850E; - } - else if (strcmp (arg, "v850ea") == 0) - { - machine = bfd_mach_v850ea; - processor_mask = PROCESSOR_V850EA; - } - else if (strcmp (arg, "v850any") == 0) - { - /* Tell the world that this is for any v850 chip. */ - machine = 0; - - /* But support instructions for the extended versions. */ - processor_mask = PROCESSOR_V850EA; - } - else - { - /* xgettext:c-format */ - fprintf (stderr, _("unknown command line option: -%c%s\n"), c, arg); - return 0; - } - - return 1; -} - -symbolS * -md_undefined_symbol (name) - char *name ATTRIBUTE_UNUSED; -{ - return 0; -} - -char * -md_atof (type, litp, sizep) - int type; - char *litp; - int *sizep; -{ - int prec; - LITTLENUM_TYPE words[4]; - char *t; - int i; - - switch (type) - { - case 'f': - prec = 2; - break; - - case 'd': - prec = 4; - break; - - default: - *sizep = 0; - return _("bad call to md_atof"); - } - - t = atof_ieee (input_line_pointer, type, words); - if (t) - input_line_pointer = t; - - *sizep = prec * 2; - - for (i = prec - 1; i >= 0; i--) - { - md_number_to_chars (litp, (valueT) words[i], 2); - litp += 2; - } - - return NULL; -} - -/* Very gross. */ - -void -md_convert_frag (abfd, sec, fragP) - bfd *abfd ATTRIBUTE_UNUSED; - asection *sec; - fragS *fragP; -{ - subseg_change (sec, 0); - - /* In range conditional or unconditional branch. */ - if (fragP->fr_subtype == 0 || fragP->fr_subtype == 2) - { - fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, - fragP->fr_offset, 1, BFD_RELOC_UNUSED + (int)fragP->fr_opcode); - fragP->fr_fix += 2; - } - /* Out of range conditional branch. Emit a branch around a jump. */ - else if (fragP->fr_subtype == 1) - { - unsigned char *buffer = - (unsigned char *) (fragP->fr_fix + fragP->fr_literal); - - /* Reverse the condition of the first branch. */ - buffer[0] ^= 0x08; - /* Mask off all the displacement bits. */ - buffer[0] &= 0x8f; - buffer[1] &= 0x07; - /* Now set the displacement bits so that we branch - around the unconditional branch. */ - buffer[0] |= 0x30; - - /* Now create the unconditional branch + fixup to the final - target. */ - md_number_to_chars (buffer + 2, 0x00000780, 4); - fix_new (fragP, fragP->fr_fix + 2, 4, fragP->fr_symbol, - fragP->fr_offset, 1, BFD_RELOC_UNUSED + - (int) fragP->fr_opcode + 1); - fragP->fr_fix += 6; - } - /* Out of range unconditional branch. Emit a jump. */ - else if (fragP->fr_subtype == 3) - { - md_number_to_chars (fragP->fr_fix + fragP->fr_literal, 0x00000780, 4); - fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol, - fragP->fr_offset, 1, BFD_RELOC_UNUSED + - (int) fragP->fr_opcode + 1); - fragP->fr_fix += 4; - } - else - abort (); -} - -valueT -md_section_align (seg, addr) - asection *seg; - valueT addr; -{ - int align = bfd_get_section_alignment (stdoutput, seg); - return ((addr + (1 << align) - 1) & (-1 << align)); -} - -void -md_begin () -{ - char *prev_name = ""; - register const struct v850_opcode *op; - - if (strncmp (TARGET_CPU, "v850ea", 6) == 0) - { - if (machine == -1) - machine = bfd_mach_v850ea; - - if (processor_mask == -1) - processor_mask = PROCESSOR_V850EA; - } - else if (strncmp (TARGET_CPU, "v850e", 5) == 0) - { - if (machine == -1) - machine = bfd_mach_v850e; - - if (processor_mask == -1) - processor_mask = PROCESSOR_V850E; - } - else if (strncmp (TARGET_CPU, "v850", 4) == 0) - { - if (machine == -1) - machine = 0; - - if (processor_mask == -1) - processor_mask = PROCESSOR_V850; - } - else - /* xgettext:c-format */ - as_bad (_("Unable to determine default target processor from string: %s"), - TARGET_CPU); - - v850_hash = hash_new (); - - /* Insert unique names into hash table. The V850 instruction set - has many identical opcode names that have different opcodes based - on the operands. This hash table then provides a quick index to - the first opcode with a particular name in the opcode table. */ - - op = v850_opcodes; - while (op->name) - { - if (strcmp (prev_name, op->name)) - { - prev_name = (char *) op->name; - hash_insert (v850_hash, op->name, (char *) op); - } - op++; - } - - v850_seg_table[BSS_SECTION].s = bss_section; - bfd_set_arch_mach (stdoutput, TARGET_ARCH, machine); -} - -static bfd_reloc_code_real_type handle_ctoff - PARAMS ((const struct v850_operand *)); - -static bfd_reloc_code_real_type -handle_ctoff (operand) - const struct v850_operand *operand; -{ - if (operand == NULL) - return BFD_RELOC_V850_CALLT_16_16_OFFSET; - - if (operand->bits != 6 - || operand->shift != 0) - { - as_bad (_("ctoff() relocation used on an instruction which does not support it")); - return BFD_RELOC_64; /* Used to indicate an error condition. */ - } - - return BFD_RELOC_V850_CALLT_6_7_OFFSET; -} - -static bfd_reloc_code_real_type handle_sdaoff - PARAMS ((const struct v850_operand *)); - -static bfd_reloc_code_real_type -handle_sdaoff (operand) - const struct v850_operand *operand; -{ - if (operand == NULL) - return BFD_RELOC_V850_SDA_16_16_OFFSET; - - if (operand->bits == 15 && operand->shift == 17) - return BFD_RELOC_V850_SDA_15_16_OFFSET; - - if (operand->bits == -1) - return BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET; - - if (operand->bits != 16 - || operand->shift != 16) - { - as_bad (_("sdaoff() relocation used on an instruction which does not support it")); - return BFD_RELOC_64; /* Used to indicate an error condition. */ - } - - return BFD_RELOC_V850_SDA_16_16_OFFSET; -} - -static bfd_reloc_code_real_type handle_zdaoff - PARAMS ((const struct v850_operand *)); - -static bfd_reloc_code_real_type -handle_zdaoff (operand) - const struct v850_operand *operand; -{ - if (operand == NULL) - return BFD_RELOC_V850_ZDA_16_16_OFFSET; - - if (operand->bits == 15 && operand->shift == 17) - return BFD_RELOC_V850_ZDA_15_16_OFFSET; - - if (operand->bits == -1) - return BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET; - - if (operand->bits != 16 - || operand->shift != 16) - { - as_bad (_("zdaoff() relocation used on an instruction which does not support it")); - /* Used to indicate an error condition. */ - return BFD_RELOC_64; - } - - return BFD_RELOC_V850_ZDA_16_16_OFFSET; -} - -static bfd_reloc_code_real_type handle_tdaoff - PARAMS ((const struct v850_operand *)); - -static bfd_reloc_code_real_type -handle_tdaoff (operand) - const struct v850_operand *operand; -{ - if (operand == NULL) - /* Data item, not an instruction. */ - return BFD_RELOC_V850_TDA_7_7_OFFSET; - - if (operand->bits == 6 && operand->shift == 1) - /* sld.w/sst.w, operand: D8_6 */ - return BFD_RELOC_V850_TDA_6_8_OFFSET; - - if (operand->bits == 4 && operand->insert != NULL) - /* sld.hu, operand: D5-4 */ - return BFD_RELOC_V850_TDA_4_5_OFFSET; - - if (operand->bits == 4 && operand->insert == NULL) - /* sld.bu, operand: D4 */ - return BFD_RELOC_V850_TDA_4_4_OFFSET; - - if (operand->bits == 16 && operand->shift == 16) - /* set1 & chums, operands: D16 */ - return BFD_RELOC_V850_TDA_16_16_OFFSET; - - if (operand->bits != 7) - { - as_bad (_("tdaoff() relocation used on an instruction which does not support it")); - /* Used to indicate an error condition. */ - return BFD_RELOC_64; - } - - return operand->insert != NULL - ? BFD_RELOC_V850_TDA_7_8_OFFSET /* sld.h/sst.h, operand: D8_7 */ - : BFD_RELOC_V850_TDA_7_7_OFFSET; /* sld.b/sst.b, opreand: D7 */ -} - -/* Warning: The code in this function relies upon the definitions - in the v850_operands[] array (defined in opcodes/v850-opc.c) - matching the hard coded values contained herein. */ - -static bfd_reloc_code_real_type v850_reloc_prefix - PARAMS ((const struct v850_operand *)); - -static bfd_reloc_code_real_type -v850_reloc_prefix (operand) - const struct v850_operand *operand; -{ - boolean paren_skipped = false; - - /* Skip leading opening parenthesis. */ - if (*input_line_pointer == '(') - { - ++input_line_pointer; - paren_skipped = true; - } - -#define CHECK_(name, reloc) \ - if (strncmp (input_line_pointer, name "(", strlen (name) + 1) == 0) \ - { \ - input_line_pointer += strlen (name); \ - return reloc; \ - } - - CHECK_ ("hi0", BFD_RELOC_HI16 ); - CHECK_ ("hi", BFD_RELOC_HI16_S ); - CHECK_ ("lo", BFD_RELOC_LO16 ); - CHECK_ ("sdaoff", handle_sdaoff (operand)); - CHECK_ ("zdaoff", handle_zdaoff (operand)); - CHECK_ ("tdaoff", handle_tdaoff (operand)); - CHECK_ ("hilo", BFD_RELOC_32 ); - CHECK_ ("ctoff", handle_ctoff (operand) ); - - /* Restore skipped parenthesis. */ - if (paren_skipped) - --input_line_pointer; - - return BFD_RELOC_UNUSED; -} - -/* Insert an operand value into an instruction. */ - -static unsigned long v850_insert_operand - PARAMS ((unsigned long, const struct v850_operand *, offsetT, char *, - unsigned int, char *)); - -static unsigned long -v850_insert_operand (insn, operand, val, file, line, str) - unsigned long insn; - const struct v850_operand *operand; - offsetT val; - char *file; - unsigned int line; - char *str; -{ - if (operand->insert) - { - const char *message = NULL; - - insn = operand->insert (insn, val, &message); - if (message != NULL) - { - if ((operand->flags & V850_OPERAND_SIGNED) - && ! warn_signed_overflows - && strstr (message, "out of range") != NULL) - { - /* Skip warning... */ - } - else if ((operand->flags & V850_OPERAND_SIGNED) == 0 - && ! warn_unsigned_overflows - && strstr (message, "out of range") != NULL) - { - /* Skip warning... */ - } - else if (str) - { - if (file == (char *) NULL) - as_warn ("%s: %s", str, message); - else - as_warn_where (file, line, "%s: %s", str, message); - } - else - { - if (file == (char *) NULL) - as_warn (message); - else - as_warn_where (file, line, message); - } - } - } - else - { - if (operand->bits != 32) - { - long min, max; - - if ((operand->flags & V850_OPERAND_SIGNED) != 0) - { - if (! warn_signed_overflows) - max = (1 << operand->bits) - 1; - else - max = (1 << (operand->bits - 1)) - 1; - - min = -(1 << (operand->bits - 1)); - } - else - { - max = (1 << operand->bits) - 1; - - if (! warn_unsigned_overflows) - min = -(1 << (operand->bits - 1)); - else - min = 0; - } - - if (val < (offsetT) min || val > (offsetT) max) - { - /* xgettext:c-format */ - const char *err = - _("operand out of range (%s not between %ld and %ld)"); - char buf[100]; - - /* Restore min and mix to expected values for decimal ranges. */ - if ((operand->flags & V850_OPERAND_SIGNED) - && ! warn_signed_overflows) - max = (1 << (operand->bits - 1)) - 1; - - if (! (operand->flags & V850_OPERAND_SIGNED) - && ! warn_unsigned_overflows) - min = 0; - - if (str) - { - sprintf (buf, "%s: ", str); - - sprint_value (buf + strlen (buf), val); - } - else - sprint_value (buf, val); - - if (file == (char *) NULL) - as_warn (err, buf, min, max); - else - as_warn_where (file, line, err, buf, min, max); - } - } - - insn |= (((long) val & ((1 << operand->bits) - 1)) << operand->shift); - } - - return insn; -} - -static char copy_of_instruction[128]; - -void -md_assemble (str) - char *str; -{ - char *s; - char *start_of_operands; - struct v850_opcode *opcode; - struct v850_opcode *next_opcode; - const unsigned char *opindex_ptr; - int next_opindex; - int relaxable = 0; - unsigned long insn; - unsigned long insn_size; - char *f; - int i; - int match; - boolean extra_data_after_insn = false; - unsigned extra_data_len = 0; - unsigned long extra_data = 0; - char *saved_input_line_pointer; - - strncpy (copy_of_instruction, str, sizeof (copy_of_instruction) - 1); - - /* Get the opcode. */ - for (s = str; *s != '\0' && ! ISSPACE (*s); s++) - continue; - - if (*s != '\0') - *s++ = '\0'; - - /* Find the first opcode with the proper name. */ - opcode = (struct v850_opcode *) hash_find (v850_hash, str); - if (opcode == NULL) - { - /* xgettext:c-format */ - as_bad (_("Unrecognized opcode: `%s'"), str); - ignore_rest_of_line (); - return; - } - - str = s; - while (ISSPACE (*str)) - ++str; - - start_of_operands = str; - - saved_input_line_pointer = input_line_pointer; - - for (;;) - { - const char *errmsg = NULL; - - match = 0; - - if ((opcode->processors & processor_mask) == 0) - { - errmsg = _("Target processor does not support this instruction."); - goto error; - } - - relaxable = 0; - fc = 0; - next_opindex = 0; - insn = opcode->opcode; - extra_data_after_insn = false; - - input_line_pointer = str = start_of_operands; - - for (opindex_ptr = opcode->operands; *opindex_ptr != 0; opindex_ptr++) - { - const struct v850_operand *operand; - char *hold; - expressionS ex; - bfd_reloc_code_real_type reloc; - - if (next_opindex == 0) - { - operand = &v850_operands[*opindex_ptr]; - } - else - { - operand = &v850_operands[next_opindex]; - next_opindex = 0; - } - - errmsg = NULL; - - while (*str == ' ' || *str == ',' || *str == '[' || *str == ']') - ++str; - - if (operand->flags & V850_OPERAND_RELAX) - relaxable = 1; - - /* Gather the operand. */ - hold = input_line_pointer; - input_line_pointer = str; - - /* lo(), hi(), hi0(), etc... */ - if ((reloc = v850_reloc_prefix (operand)) != BFD_RELOC_UNUSED) - { - /* This is a fake reloc, used to indicate an error condition. */ - if (reloc == BFD_RELOC_64) - { - match = 1; - goto error; - } - - expression (&ex); - - if (ex.X_op == O_constant) - { - switch (reloc) - { - case BFD_RELOC_V850_ZDA_16_16_OFFSET: - /* To cope with "not1 7, zdaoff(0xfffff006)[r0]" - and the like. */ - /* Fall through. */ - - case BFD_RELOC_LO16: - { - /* Truncate, then sign extend the value. */ - ex.X_add_number = SEXT16 (ex.X_add_number); - break; - } - - case BFD_RELOC_HI16: - { - /* Truncate, then sign extend the value. */ - ex.X_add_number = SEXT16 (ex.X_add_number >> 16); - break; - } - - case BFD_RELOC_HI16_S: - { - /* Truncate, then sign extend the value. */ - int temp = (ex.X_add_number >> 16) & 0xffff; - - temp += (ex.X_add_number >> 15) & 1; - - ex.X_add_number = SEXT16 (temp); - break; - } - - case BFD_RELOC_32: - if ((operand->flags & V850E_IMMEDIATE32) == 0) - { - errmsg = _("immediate operand is too large"); - goto error; - } - - extra_data_after_insn = true; - extra_data_len = 4; - extra_data = ex.X_add_number; - ex.X_add_number = 0; - break; - - default: - fprintf (stderr, "reloc: %d\n", reloc); - as_bad (_("AAARG -> unhandled constant reloc")); - break; - } - - if (fc > MAX_INSN_FIXUPS) - as_fatal (_("too many fixups")); - - fixups[fc].exp = ex; - fixups[fc].opindex = *opindex_ptr; - fixups[fc].reloc = reloc; - fc++; - } - else - { - if (reloc == BFD_RELOC_32) - { - if ((operand->flags & V850E_IMMEDIATE32) == 0) - { - errmsg = _("immediate operand is too large"); - goto error; - } - - extra_data_after_insn = true; - extra_data_len = 4; - extra_data = ex.X_add_number; - } - - if (fc > MAX_INSN_FIXUPS) - as_fatal (_("too many fixups")); - - fixups[fc].exp = ex; - fixups[fc].opindex = *opindex_ptr; - fixups[fc].reloc = reloc; - fc++; - } - } - else - { - errmsg = NULL; - - if ((operand->flags & V850_OPERAND_REG) != 0) - { - if (!register_name (&ex)) - { - errmsg = _("invalid register name"); - } - else if ((operand->flags & V850_NOT_R0) - && ex.X_add_number == 0) - { - errmsg = _("register r0 cannot be used here"); - - /* Force an error message to be generated by - skipping over any following potential matches - for this opcode. */ - opcode += 3; - } - } - else if ((operand->flags & V850_OPERAND_SRG) != 0) - { - if (!system_register_name (&ex, true, false)) - { - errmsg = _("invalid system register name"); - } - } - else if ((operand->flags & V850_OPERAND_EP) != 0) - { - char *start = input_line_pointer; - char c = get_symbol_end (); - - if (strcmp (start, "ep") != 0 && strcmp (start, "r30") != 0) - { - /* Put things back the way we found them. */ - *input_line_pointer = c; - input_line_pointer = start; - errmsg = _("expected EP register"); - goto error; - } - - *input_line_pointer = c; - str = input_line_pointer; - input_line_pointer = hold; - - while (*str == ' ' || *str == ',' - || *str == '[' || *str == ']') - ++str; - continue; - } - else if ((operand->flags & V850_OPERAND_CC) != 0) - { - if (!cc_name (&ex)) - { - errmsg = _("invalid condition code name"); - } - } - else if (operand->flags & V850E_PUSH_POP) - { - errmsg = parse_register_list (&insn, operand); - - /* The parse_register_list() function has already done - everything, so fake a dummy expression. */ - ex.X_op = O_constant; - ex.X_add_number = 0; - } - else if (operand->flags & V850E_IMMEDIATE16) - { - expression (&ex); - - if (ex.X_op != O_constant) - errmsg = _("constant expression expected"); - else if (ex.X_add_number & 0xffff0000) - { - if (ex.X_add_number & 0xffff) - errmsg = _("constant too big to fit into instruction"); - else if ((insn & 0x001fffc0) == 0x00130780) - ex.X_add_number >>= 16; - else - errmsg = _("constant too big to fit into instruction"); - } - - extra_data_after_insn = true; - extra_data_len = 2; - extra_data = ex.X_add_number; - ex.X_add_number = 0; - } - else if (operand->flags & V850E_IMMEDIATE32) - { - expression (&ex); - - if (ex.X_op != O_constant) - errmsg = _("constant expression expected"); - - extra_data_after_insn = true; - extra_data_len = 4; - extra_data = ex.X_add_number; - ex.X_add_number = 0; - } - else if (register_name (&ex) - && (operand->flags & V850_OPERAND_REG) == 0) - { - char c; - int exists = 0; - - /* It is possible that an alias has been defined that - matches a register name. For example the code may - include a ".set ZERO, 0" directive, which matches - the register name "zero". Attempt to reparse the - field as an expression, and only complain if we - cannot generate a constant. */ - - input_line_pointer = str; - - c = get_symbol_end (); - - if (symbol_find (str) != NULL) - exists = 1; - - *input_line_pointer = c; - input_line_pointer = str; - - expression (&ex); - - if (ex.X_op != O_constant) - { - /* If this register is actually occuring too early on - the parsing of the instruction, (because another - field is missing) then report this. */ - if (opindex_ptr[1] != 0 - && (v850_operands[opindex_ptr[1]].flags - & V850_OPERAND_REG)) - errmsg = _("syntax error: value is missing before the register name"); - else - errmsg = _("syntax error: register not expected"); - - /* If we created a symbol in the process of this - test then delete it now, so that it will not - be output with the real symbols... */ - if (exists == 0 - && ex.X_op == O_symbol) - symbol_remove (ex.X_add_symbol, - &symbol_rootP, &symbol_lastP); - } - } - else if (system_register_name (&ex, false, false) - && (operand->flags & V850_OPERAND_SRG) == 0) - { - errmsg = _("syntax error: system register not expected"); - } - else if (cc_name (&ex) - && (operand->flags & V850_OPERAND_CC) == 0) - { - errmsg = _("syntax error: condition code not expected"); - } - else - { - expression (&ex); - /* Special case: - If we are assembling a MOV instruction (or a CALLT.... :-) - and the immediate value does not fit into the bits - available then create a fake error so that the next MOV - instruction will be selected. This one has a 32 bit - immediate field. */ - - if (((insn & 0x07e0) == 0x0200) - && ex.X_op == O_constant - && (ex.X_add_number < (-(1 << (operand->bits - 1))) - || ex.X_add_number > ((1 << (operand->bits - 1)) - 1))) - errmsg = _("immediate operand is too large"); - } - - if (errmsg) - goto error; - -#if 0 - fprintf (stderr, - " insn: %x, operand %d, op: %d, add_number: %d\n", - insn, opindex_ptr - opcode->operands, - ex.X_op, ex.X_add_number); -#endif - - switch (ex.X_op) - { - case O_illegal: - errmsg = _("illegal operand"); - goto error; - case O_absent: - errmsg = _("missing operand"); - goto error; - case O_register: - if ((operand->flags - & (V850_OPERAND_REG | V850_OPERAND_SRG)) == 0) - { - errmsg = _("invalid operand"); - goto error; - } - insn = v850_insert_operand (insn, operand, ex.X_add_number, - (char *) NULL, 0, - copy_of_instruction); - break; - - case O_constant: - insn = v850_insert_operand (insn, operand, ex.X_add_number, - (char *) NULL, 0, - copy_of_instruction); - break; - - default: - /* We need to generate a fixup for this expression. */ - if (fc >= MAX_INSN_FIXUPS) - as_fatal (_("too many fixups")); - - fixups[fc].exp = ex; - fixups[fc].opindex = *opindex_ptr; - fixups[fc].reloc = BFD_RELOC_UNUSED; - ++fc; - break; - } - } - - str = input_line_pointer; - input_line_pointer = hold; - - while (*str == ' ' || *str == ',' || *str == '[' || *str == ']' - || *str == ')') - ++str; - } - match = 1; - - error: - if (match == 0) - { - next_opcode = opcode + 1; - if (next_opcode->name != NULL - && strcmp (next_opcode->name, opcode->name) == 0) - { - opcode = next_opcode; - - /* Skip versions that are not supported by the target - processor. */ - if ((opcode->processors & processor_mask) == 0) - goto error; - - continue; - } - - as_bad ("%s: %s", copy_of_instruction, errmsg); - - if (*input_line_pointer == ']') - ++input_line_pointer; - - ignore_rest_of_line (); - input_line_pointer = saved_input_line_pointer; - return; - } - break; - } - - while (ISSPACE (*str)) - ++str; - - if (*str != '\0') - /* xgettext:c-format */ - as_bad (_("junk at end of line: `%s'"), str); - - input_line_pointer = str; - - /* Tie dwarf2 debug info to the address at the start of the insn. - We can't do this after the insn has been output as the current - frag may have been closed off. eg. by frag_var. */ - dwarf2_emit_insn (0); - - /* Write out the instruction. */ - - if (relaxable && fc > 0) - { - insn_size = 2; - fc = 0; - - if (!strcmp (opcode->name, "br")) - { - f = frag_var (rs_machine_dependent, 4, 2, 2, - fixups[0].exp.X_add_symbol, - fixups[0].exp.X_add_number, - (char *) fixups[0].opindex); - md_number_to_chars (f, insn, insn_size); - md_number_to_chars (f + 2, 0, 2); - } - else - { - f = frag_var (rs_machine_dependent, 6, 4, 0, - fixups[0].exp.X_add_symbol, - fixups[0].exp.X_add_number, - (char *) fixups[0].opindex); - md_number_to_chars (f, insn, insn_size); - md_number_to_chars (f + 2, 0, 4); - } - } - else - { - /* Four byte insns have an opcode with the two high bits on. */ - if ((insn & 0x0600) == 0x0600) - insn_size = 4; - else - insn_size = 2; - - /* Special case: 32 bit MOV. */ - if ((insn & 0xffe0) == 0x0620) - insn_size = 2; - - f = frag_more (insn_size); - md_number_to_chars (f, insn, insn_size); - - if (extra_data_after_insn) - { - f = frag_more (extra_data_len); - md_number_to_chars (f, extra_data, extra_data_len); - - extra_data_after_insn = false; - } - } - - /* Create any fixups. At this point we do not use a - bfd_reloc_code_real_type, but instead just use the - BFD_RELOC_UNUSED plus the operand index. This lets us easily - handle fixups for any operand type, although that is admittedly - not a very exciting feature. We pick a BFD reloc type in - md_apply_fix3. */ - for (i = 0; i < fc; i++) - { - const struct v850_operand *operand; - bfd_reloc_code_real_type reloc; - - operand = &v850_operands[fixups[i].opindex]; - - reloc = fixups[i].reloc; - - if (reloc != BFD_RELOC_UNUSED) - { - reloc_howto_type *reloc_howto = - bfd_reloc_type_lookup (stdoutput, reloc); - int size; - int address; - fixS *fixP; - - if (!reloc_howto) - abort (); - - size = bfd_get_reloc_size (reloc_howto); - - /* XXX This will abort on an R_V850_8 reloc - - is this reloc actually used? */ - if (size != 2 && size != 4) - abort (); - - address = (f - frag_now->fr_literal) + insn_size - size; - - if (reloc == BFD_RELOC_32) - address += 2; - - fixP = fix_new_exp (frag_now, address, size, - &fixups[i].exp, - reloc_howto->pc_relative, - reloc); - - switch (reloc) - { - case BFD_RELOC_LO16: - case BFD_RELOC_HI16: - case BFD_RELOC_HI16_S: - fixP->fx_no_overflow = 1; - break; - default: - break; - } - } - else - { - fix_new_exp (frag_now, - f - frag_now->fr_literal, 4, - & fixups[i].exp, - 1 /* FIXME: V850_OPERAND_RELATIVE ??? */, - (bfd_reloc_code_real_type) (fixups[i].opindex - + (int) BFD_RELOC_UNUSED)); - } - } - - input_line_pointer = saved_input_line_pointer; -} - -/* If while processing a fixup, a reloc really needs to be created - then it is done here. */ - -arelent * -tc_gen_reloc (seg, fixp) - asection *seg ATTRIBUTE_UNUSED; - fixS *fixp; -{ - arelent *reloc; - - reloc = (arelent *) xmalloc (sizeof (arelent)); - reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); - *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); - reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; - reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type); - - if (reloc->howto == (reloc_howto_type *) NULL) - { - as_bad_where (fixp->fx_file, fixp->fx_line, - /* xgettext:c-format */ - _("reloc %d not supported by object file format"), - (int) fixp->fx_r_type); - - xfree (reloc); - - return NULL; - } - - if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY - || fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT) - reloc->addend = fixp->fx_offset; - else - reloc->addend = fixp->fx_addnumber; - - return reloc; -} - -/* Return current size of variable part of frag. */ - -int -md_estimate_size_before_relax (fragp, seg) - fragS *fragp; - asection *seg ATTRIBUTE_UNUSED; -{ - if (fragp->fr_subtype >= sizeof (md_relax_table) / sizeof (md_relax_table[0])) - abort (); - - return md_relax_table[fragp->fr_subtype].rlx_length; -} - -long -v850_pcrel_from_section (fixp, section) - fixS *fixp; - segT section; -{ - /* If the symbol is undefined, or in a section other than our own, - or it is weak (in which case it may well be in another section, - then let the linker figure it out. */ - if (fixp->fx_addsy != (symbolS *) NULL - && (! S_IS_DEFINED (fixp->fx_addsy) - || S_IS_WEAK (fixp->fx_addsy) - || (S_GET_SEGMENT (fixp->fx_addsy) != section))) - return 0; - - return fixp->fx_frag->fr_address + fixp->fx_where; -} - -void -md_apply_fix3 (fixP, valueP, seg) - fixS *fixP; - valueT *valueP; - segT seg ATTRIBUTE_UNUSED; -{ - valueT value = * valueP; - char *where; - - if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT - || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY) - { - fixP->fx_done = 0; - return; - } - - if (fixP->fx_addsy == (symbolS *) NULL) - fixP->fx_done = 1; - - else if (fixP->fx_pcrel) - ; - - else - { - value = fixP->fx_offset; - if (fixP->fx_subsy != (symbolS *) NULL) - { - if (S_GET_SEGMENT (fixP->fx_subsy) == absolute_section) - value -= S_GET_VALUE (fixP->fx_subsy); - else - { - /* We don't actually support subtracting a symbol. */ - as_bad_where (fixP->fx_file, fixP->fx_line, - _("expression too complex")); - } - } - } - - if ((int) fixP->fx_r_type >= (int) BFD_RELOC_UNUSED) - { - int opindex; - const struct v850_operand *operand; - unsigned long insn; - - opindex = (int) fixP->fx_r_type - (int) BFD_RELOC_UNUSED; - operand = &v850_operands[opindex]; - - /* Fetch the instruction, insert the fully resolved operand - value, and stuff the instruction back again. - - Note the instruction has been stored in little endian - format! */ - where = fixP->fx_frag->fr_literal + fixP->fx_where; - - insn = bfd_getl32 ((unsigned char *) where); - insn = v850_insert_operand (insn, operand, (offsetT) value, - fixP->fx_file, fixP->fx_line, NULL); - bfd_putl32 ((bfd_vma) insn, (unsigned char *) where); - - if (fixP->fx_done) - /* Nothing else to do here. */ - return; - - /* Determine a BFD reloc value based on the operand information. - We are only prepared to turn a few of the operands into relocs. */ - - if (operand->bits == 22) - fixP->fx_r_type = BFD_RELOC_V850_22_PCREL; - else if (operand->bits == 9) - fixP->fx_r_type = BFD_RELOC_V850_9_PCREL; - else - { -#if 0 - fprintf (stderr, "bits: %d, insn: %x\n", operand->bits, insn); -#endif - - as_bad_where (fixP->fx_file, fixP->fx_line, - _("unresolved expression that must be resolved")); - fixP->fx_done = 1; - return; - } - } - else if (fixP->fx_done) - { - /* We still have to insert the value into memory! */ - where = fixP->fx_frag->fr_literal + fixP->fx_where; - - if (fixP->fx_size == 1) - *where = value & 0xff; - else if (fixP->fx_size == 2) - bfd_putl16 (value & 0xffff, (unsigned char *) where); - else if (fixP->fx_size == 4) - bfd_putl32 (value, (unsigned char *) where); - } - - fixP->fx_addnumber = value; -} - -/* Parse a cons expression. We have to handle hi(), lo(), etc - on the v850. */ - -void -parse_cons_expression_v850 (exp) - expressionS *exp; -{ - /* See if there's a reloc prefix like hi() we have to handle. */ - hold_cons_reloc = v850_reloc_prefix (NULL); - - /* Do normal expression parsing. */ - expression (exp); -} - -/* Create a fixup for a cons expression. If parse_cons_expression_v850 - found a reloc prefix, then we use that reloc, else we choose an - appropriate one based on the size of the expression. */ - -void -cons_fix_new_v850 (frag, where, size, exp) - fragS *frag; - int where; - int size; - expressionS *exp; -{ - if (hold_cons_reloc == BFD_RELOC_UNUSED) - { - if (size == 4) - hold_cons_reloc = BFD_RELOC_32; - if (size == 2) - hold_cons_reloc = BFD_RELOC_16; - if (size == 1) - hold_cons_reloc = BFD_RELOC_8; - } - - if (exp != NULL) - fix_new_exp (frag, where, size, exp, 0, hold_cons_reloc); - else - fix_new (frag, where, size, NULL, 0, 0, hold_cons_reloc); - - hold_cons_reloc = BFD_RELOC_UNUSED; -} - -boolean -v850_fix_adjustable (fixP) - fixS *fixP; -{ - if (fixP->fx_addsy == NULL) - return 1; - - /* Prevent all adjustments to global symbols. */ - if (S_IS_EXTERN (fixP->fx_addsy)) - return 0; - - /* Similarly for weak symbols. */ - if (S_IS_WEAK (fixP->fx_addsy)) - return 0; - - /* Don't adjust function names. */ - if (S_IS_FUNCTION (fixP->fx_addsy)) - return 0; - - /* We need the symbol name for the VTABLE entries. */ - if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT - || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY) - return 0; - - return 1; -} - -int -v850_force_relocation (fixP) - struct fix *fixP; -{ - if (fixP->fx_addsy && S_IS_WEAK (fixP->fx_addsy)) - return 1; - - if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT - || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY) - return 1; - - return 0; -} diff --git a/contrib/binutils/gas/config/tc-v850.h b/contrib/binutils/gas/config/tc-v850.h deleted file mode 100644 index 8257428eabec..000000000000 --- a/contrib/binutils/gas/config/tc-v850.h +++ /dev/null @@ -1,98 +0,0 @@ -/* tc-v850.h -- Header file for tc-v850.c. - Copyright 1996, 1997, 1998, 2000, 2001, 2002 - 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. */ - -#define TC_V850 - -#include "elf/v850.h" - -#define TARGET_BYTES_BIG_ENDIAN 0 - -#ifndef BFD_ASSEMBLER - #error V850 support requires BFD_ASSEMBLER -#endif - -/* The target BFD architecture. */ -#define TARGET_ARCH bfd_arch_v850 - -/* The target BFD format. */ -#define TARGET_FORMAT "elf32-v850" - -#define md_operand(x) - -#define obj_fix_adjustable(fixP) v850_fix_adjustable(fixP) -extern boolean v850_fix_adjustable PARAMS ((struct fix *)); - -#define TC_FORCE_RELOCATION(fixp) v850_force_relocation(fixp) -extern int v850_force_relocation PARAMS ((struct fix *)); - -#ifdef OBJ_ELF -/* This arranges for gas/write.c to not apply a relocation if - obj_fix_adjustable() says it is not adjustable. */ -#define TC_FIX_ADJUSTABLE(fixP) obj_fix_adjustable (fixP) -#endif - -/* Permit temporary numeric labels. */ -#define LOCAL_LABELS_FB 1 - -#define DIFF_EXPR_OK /* foo-. gets turned into PC relative relocs. */ - -/* We don't need to handle .word strangely. */ -#define WORKING_DOT_WORD - -#define md_number_to_chars number_to_chars_littleendian - -/* We need to handle lo(), hi(), etc etc in .hword, .word, etc - directives, so we have to parse "cons" expressions ourselves. */ -#define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) parse_cons_expression_v850 (EXP) -extern void parse_cons_expression_v850 PARAMS ((expressionS *)); - -#define TC_CONS_FIX_NEW cons_fix_new_v850 -extern void cons_fix_new_v850 PARAMS ((fragS *, int, int, expressionS *)); - -#define TC_GENERIC_RELAX_TABLE md_relax_table -extern const struct relax_type md_relax_table[]; - -/* This section must be in the small data area (pointed to by GP). */ -#define SHF_V850_GPREL 0x10000000 -/* This section must be in the tiny data area (pointed to by EP). */ -#define SHF_V850_EPREL 0x20000000 -/* This section must be in the zero data area (pointed to by R0). */ -#define SHF_V850_R0REL 0x40000000 - -#define ELF_TC_SPECIAL_SECTIONS \ - { ".sdata", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_V850_GPREL }, \ - { ".rosdata", SHT_PROGBITS, SHF_ALLOC + SHF_V850_GPREL }, \ - { ".sbss", SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_V850_GPREL }, \ - { ".scommon", SHT_V850_SCOMMON, SHF_ALLOC + SHF_WRITE + SHF_V850_GPREL }, \ - { ".tdata", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_V850_EPREL }, \ - { ".tbss", SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_V850_EPREL }, \ - { ".tcommon", SHT_V850_TCOMMON, SHF_ALLOC + SHF_WRITE + SHF_V850_R0REL }, \ - { ".zdata", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_V850_R0REL }, \ - { ".rozdata", SHT_PROGBITS, SHF_ALLOC + SHF_V850_R0REL }, \ - { ".zbss", SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_V850_R0REL }, \ - { ".zcommon", SHT_V850_ZCOMMON, SHF_ALLOC + SHF_WRITE + SHF_V850_R0REL }, \ - { ".call_table_data", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, \ - { ".call_table_text", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_EXECINSTR }, - -#define MD_PCREL_FROM_SECTION(fixP,section) v850_pcrel_from_section (fixP, section) -extern long v850_pcrel_from_section PARAMS ((struct fix *, asection *)); - -#define DWARF2_LINE_MIN_INSN_LENGTH 2 diff --git a/contrib/binutils/gas/config/tc-z8k.c b/contrib/binutils/gas/config/tc-z8k.c deleted file mode 100644 index f5b05a632f9c..000000000000 --- a/contrib/binutils/gas/config/tc-z8k.c +++ /dev/null @@ -1,1566 +0,0 @@ -/* tc-z8k.c -- Assemble code for the Zilog Z800n - Copyright 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001 - 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. */ - -/* Written By Steve Chamberlain <sac@cygnus.com>. */ - -#define DEFINE_TABLE -#include <stdio.h> - -#include "as.h" -#include "bfd.h" -#include "safe-ctype.h" -#include "opcodes/z8k-opc.h" - -const char comment_chars[] = "!"; -const char line_comment_chars[] = "#"; -const char line_separator_chars[] = ";"; - -extern int machine; -extern int coff_flags; -int segmented_mode; -const int md_reloc_size; - -void cons (); - -void -s_segm () -{ - segmented_mode = 1; - machine = bfd_mach_z8001; - coff_flags = F_Z8001; -} - -void -s_unseg () -{ - segmented_mode = 0; - machine = bfd_mach_z8002; - coff_flags = F_Z8002; -} - -static void -even () -{ - frag_align (1, 0, 0); - record_alignment (now_seg, 1); -} - -void obj_coff_section (); - -int -tohex (c) - int c; -{ - if (ISDIGIT (c)) - return c - '0'; - if (ISLOWER (c)) - return c - 'a' + 10; - return c - 'A' + 10; -} - -void -sval () -{ - SKIP_WHITESPACE (); - if (*input_line_pointer == '\'') - { - int c; - input_line_pointer++; - c = *input_line_pointer++; - while (c != '\'') - { - if (c == '%') - { - c = (tohex (input_line_pointer[0]) << 4) - | tohex (input_line_pointer[1]); - input_line_pointer += 2; - } - FRAG_APPEND_1_CHAR (c); - c = *input_line_pointer++; - } - demand_empty_rest_of_line (); - } -} - -/* This table describes all the machine specific pseudo-ops the assembler - has to support. The fields are: - pseudo-op name without dot - function to call to execute this pseudo-op - Integer arg to pass to the function - */ - -const pseudo_typeS md_pseudo_table[] = { - {"int" , cons , 2}, - {"data.b" , cons , 1}, - {"data.w" , cons , 2}, - {"data.l" , cons , 4}, - {"form" , listing_psize , 0}, - {"heading", listing_title , 0}, - {"import" , s_ignore , 0}, - {"page" , listing_eject , 0}, - {"program", s_ignore , 0}, - {"z8001" , s_segm , 0}, - {"z8002" , s_unseg , 0}, - - {"segm" , s_segm , 0}, - {"unsegm" , s_unseg , 0}, - {"unseg" , s_unseg , 0}, - {"name" , s_app_file , 0}, - {"global" , s_globl , 0}, - {"wval" , cons , 2}, - {"lval" , cons , 4}, - {"bval" , cons , 1}, - {"sval" , sval , 0}, - {"rsect" , obj_coff_section, 0}, - {"sect" , obj_coff_section, 0}, - {"block" , s_space , 0}, - {"even" , even , 0}, - {0 , 0 , 0} -}; - -const char EXP_CHARS[] = "eE"; - -/* Chars that mean this number is a floating point constant. - As in 0f12.456 - or 0d1.2345e12 */ -const char FLT_CHARS[] = "rRsSfFdDxXpP"; - -/* Opcode mnemonics. */ -static struct hash_control *opcode_hash_control; - -void -md_begin () -{ - opcode_entry_type *opcode; - char *prev_name = ""; - int idx = 0; - - opcode_hash_control = hash_new (); - - for (opcode = z8k_table; opcode->name; opcode++) - { - /* Only enter unique codes into the table. */ - if (strcmp (opcode->name, prev_name)) - { - hash_insert (opcode_hash_control, opcode->name, (char *) opcode); - idx++; - } - opcode->idx = idx; - prev_name = opcode->name; - } - - /* Default to z8002. */ - s_unseg (); - - /* Insert the pseudo ops, too. */ - for (idx = 0; md_pseudo_table[idx].poc_name; idx++) - { - opcode_entry_type *fake_opcode; - fake_opcode = (opcode_entry_type *) malloc (sizeof (opcode_entry_type)); - fake_opcode->name = md_pseudo_table[idx].poc_name; - fake_opcode->func = (void *) (md_pseudo_table + idx); - fake_opcode->opcode = 250; - hash_insert (opcode_hash_control, fake_opcode->name, fake_opcode); - } - - linkrelax = 1; -} - -struct z8k_exp { - char *e_beg; - char *e_end; - expressionS e_exp; -}; - -typedef struct z8k_op { - /* 'b','w','r','q'. */ - char regsize; - - /* 0 .. 15. */ - unsigned int reg; - - int mode; - - /* Any other register associated with the mode. */ - unsigned int x_reg; - - /* Any expression. */ - expressionS exp; -} op_type; - -static expressionS *da_operand; -static expressionS *imm_operand; - -int reg[16]; -int the_cc; -int the_ctrl; -int the_flags; -int the_interrupt; - -char * -whatreg (reg, src) - int *reg; - char *src; -{ - if (ISDIGIT (src[1])) - { - *reg = (src[0] - '0') * 10 + src[1] - '0'; - return src + 2; - } - else - { - *reg = (src[0] - '0'); - return src + 1; - } -} - -/* Parse operands - - rh0-rh7, rl0-rl7 - r0-r15 - rr0-rr14 - rq0--rq12 - WREG r0,r1,r2,r3,r4,r5,r6,r7,fp,sp - r0l,r0h,..r7l,r7h - @WREG - @WREG+ - @-WREG - #const -*/ - -/* Try to parse a reg name. Return a pointer to the first character - in SRC after the reg name. */ - -char * -parse_reg (src, mode, reg) - char *src; - int *mode; - unsigned int *reg; -{ - char *res = 0; - char regno; - - if (src[0] == 's' && src[1] == 'p' && (src[2] == 0 || src[2] == ',')) - { - if (segmented_mode) - { - *mode = CLASS_REG_LONG; - *reg = 14; - } - else - { - *mode = CLASS_REG_WORD; - *reg = 15; - } - return src + 2; - } - if (src[0] == 'r') - { - if (src[1] == 'r') - { - if (src[2] < '0' || src[2] > '9') - return res; /* Assume no register name but a label starting with 'rr'. */ - *mode = CLASS_REG_LONG; - res = whatreg (reg, src + 2); - regno = *reg; - if (regno > 14) - as_warn (_("register rr%d, out of range."), regno); - } - else if (src[1] == 'h') - { - if (src[2] < '0' || src[2] > '9') - return res; /* Assume no register name but a label starting with 'rh'. */ - *mode = CLASS_REG_BYTE; - res = whatreg (reg, src + 2); - regno = *reg; - if (regno > 7) - as_warn (_("register rh%d, out of range."), regno); - } - else if (src[1] == 'l') - { - if (src[2] < '0' || src[2] > '9') - return res; /* Assume no register name but a label starting with 'rl'. */ - *mode = CLASS_REG_BYTE; - res = whatreg (reg, src + 2); - regno = *reg; - if (regno > 7) - as_warn (_("register rl%d, out of range."), regno); - *reg += 8; - } - else if (src[1] == 'q') - { - if (src[2] < '0' || src[2] > '9') - return res; /* Assume no register name but a label starting with 'rq'. */ - *mode = CLASS_REG_QUAD; - res = whatreg (reg, src + 2); - regno = *reg; - if (regno > 12) - as_warn (_("register rq%d, out of range."), regno); - } - else - { - if (src[1] < '0' || src[1] > '9') - return res; /* Assume no register name but a label starting with 'r'. */ - *mode = CLASS_REG_WORD; - res = whatreg (reg, src + 1); - regno = *reg; - if (regno > 15) - as_warn (_("register r%d, out of range."), regno); - } - } - return res; -} - -char * -parse_exp (s, op) - char *s; - expressionS *op; -{ - char *save = input_line_pointer; - char *new; - - input_line_pointer = s; - expression (op); - if (op->X_op == O_absent) - as_bad (_("missing operand")); - new = input_line_pointer; - input_line_pointer = save; - return new; -} - -/* The many forms of operand: - - <rb> - <r> - <rr> - <rq> - @r - #exp - exp - exp(r) - r(#exp) - r(r) - */ - -static char * -checkfor (ptr, what) - char *ptr; - char what; -{ - if (*ptr == what) - ptr++; - else - as_bad (_("expected %c"), what); - - return ptr; -} - -/* Make sure the mode supplied is the size of a word. */ - -static void -regword (mode, string) - int mode; - char *string; -{ - int ok; - - ok = CLASS_REG_WORD; - if (ok != mode) - { - as_bad (_("register is wrong size for a word %s"), string); - } -} - -/* Make sure the mode supplied is the size of an address. */ - -static void -regaddr (mode, string) - int mode; - char *string; -{ - int ok; - - ok = segmented_mode ? CLASS_REG_LONG : CLASS_REG_WORD; - if (ok != mode) - { - as_bad (_("register is wrong size for address %s"), string); - } -} - -struct ctrl_names { - int value; - char *name; -}; - -struct ctrl_names ctrl_table[] = { - { 0x2, "fcw" }, - { 0x3, "refresh" }, - { 0x4, "psapseg" }, - { 0x5, "psapoff" }, - { 0x5, "psap" }, - { 0x6, "nspseg" }, - { 0x7, "nspoff" }, - { 0x7, "nsp" }, - { 0 , 0 } -}; - -static void -get_ctrl_operand (ptr, mode, dst) - char **ptr; - struct z8k_op *mode; - unsigned int dst ATTRIBUTE_UNUSED; -{ - char *src = *ptr; - int i; - - while (*src == ' ') - src++; - - mode->mode = CLASS_CTRL; - for (i = 0; ctrl_table[i].name; i++) - { - int j; - - for (j = 0; ctrl_table[i].name[j]; j++) - { - if (ctrl_table[i].name[j] != src[j]) - goto fail; - } - the_ctrl = ctrl_table[i].value; - *ptr = src + j; - return; - fail: - ; - } - the_ctrl = 0; - return; -} - -struct flag_names { - int value; - char *name; - -}; - -struct flag_names flag_table[] = { - { 0x1, "p" }, - { 0x1, "v" }, - { 0x2, "s" }, - { 0x4, "z" }, - { 0x8, "c" }, - { 0x0, "+" }, - { 0, 0 } -}; - -static void -get_flags_operand (ptr, mode, dst) - char **ptr; - struct z8k_op *mode; - unsigned int dst ATTRIBUTE_UNUSED; -{ - char *src = *ptr; - int i; - int j; - - while (*src == ' ') - src++; - - mode->mode = CLASS_FLAGS; - the_flags = 0; - for (j = 0; j <= 9; j++) - { - if (!src[j]) - goto done; - for (i = 0; flag_table[i].name; i++) - { - if (flag_table[i].name[0] == src[j]) - { - the_flags = the_flags | flag_table[i].value; - goto match; - } - } - goto done; - match: - ; - } - done: - *ptr = src + j; - return; -} - -struct interrupt_names { - int value; - char *name; - -}; - -struct interrupt_names intr_table[] = { - { 0x1, "nvi" }, - { 0x2, "vi" }, - { 0x3, "both" }, - { 0x3, "all" }, - { 0, 0 } -}; - -static void -get_interrupt_operand (ptr, mode, dst) - char **ptr; - struct z8k_op *mode; - unsigned int dst ATTRIBUTE_UNUSED; -{ - char *src = *ptr; - int i; - - while (*src == ' ') - src++; - - mode->mode = CLASS_IMM; - for (i = 0; intr_table[i].name; i++) - { - int j; - - for (j = 0; intr_table[i].name[j]; j++) - { - if (intr_table[i].name[j] != src[j]) - goto fail; - } - the_interrupt = intr_table[i].value; - *ptr = src + j; - return; - fail: - ; - } - the_interrupt = 0x0; - return; -} - -struct cc_names { - int value; - char *name; - -}; - -struct cc_names table[] = { - { 0x0, "f" }, - { 0x1, "lt" }, - { 0x2, "le" }, - { 0x3, "ule" }, - { 0x4, "ov" }, - { 0x4, "pe" }, - { 0x5, "mi" }, - { 0x6, "eq" }, - { 0x6, "z" }, - { 0x7, "c" }, - { 0x7, "ult" }, - { 0x8, "t" }, - { 0x9, "ge" }, - { 0xa, "gt" }, - { 0xb, "ugt" }, - { 0xc, "nov" }, - { 0xc, "po" }, - { 0xd, "pl" }, - { 0xe, "ne" }, - { 0xe, "nz" }, - { 0xf, "nc" }, - { 0xf, "uge" }, - { 0 , 0 } -}; - -static void -get_cc_operand (ptr, mode, dst) - char **ptr; - struct z8k_op *mode; - unsigned int dst ATTRIBUTE_UNUSED; -{ - char *src = *ptr; - int i; - - while (*src == ' ') - src++; - - mode->mode = CLASS_CC; - for (i = 0; table[i].name; i++) - { - int j; - - for (j = 0; table[i].name[j]; j++) - { - if (table[i].name[j] != src[j]) - goto fail; - } - the_cc = table[i].value; - *ptr = src + j; - return; - fail: - ; - } - the_cc = 0x8; -} - -static void -get_operand (ptr, mode, dst) - char **ptr; - struct z8k_op *mode; - unsigned int dst ATTRIBUTE_UNUSED; -{ - char *src = *ptr; - char *end; - - mode->mode = 0; - - while (*src == ' ') - src++; - if (*src == '#') - { - mode->mode = CLASS_IMM; - imm_operand = &(mode->exp); - src = parse_exp (src + 1, &(mode->exp)); - } - else if (*src == '@') - { - int d; - - mode->mode = CLASS_IR; - src = parse_reg (src + 1, &d, &mode->reg); - } - else - { - int regn; - - end = parse_reg (src, &mode->mode, ®n); - - if (end) - { - int nw, nr; - - src = end; - if (*src == '(') - { - src++; - end = parse_reg (src, &nw, &nr); - if (end) - { - /* Got Ra(Rb). */ - src = end; - - if (*src != ')') - as_bad (_("Missing ) in ra(rb)")); - else - src++; - - regaddr (mode->mode, "ra(rb) ra"); -#if 0 - regword (mode->mode, "ra(rb) rb"); -#endif - mode->mode = CLASS_BX; - mode->reg = regn; - mode->x_reg = nr; - reg[ARG_RX] = nr; - } - else - { - /* Got Ra(disp). */ - if (*src == '#') - src++; - src = parse_exp (src, &(mode->exp)); - src = checkfor (src, ')'); - mode->mode = CLASS_BA; - mode->reg = regn; - mode->x_reg = 0; - imm_operand = &(mode->exp); - } - } - else - { - mode->reg = regn; - mode->x_reg = 0; - } - } - else - { - /* No initial reg. */ - src = parse_exp (src, &(mode->exp)); - if (*src == '(') - { - src++; - end = parse_reg (src, &(mode->mode), ®n); - regword (mode->mode, "addr(Ra) ra"); - mode->mode = CLASS_X; - mode->reg = regn; - mode->x_reg = 0; - da_operand = &(mode->exp); - src = checkfor (end, ')'); - } - else - { - /* Just an address. */ - mode->mode = CLASS_DA; - mode->reg = 0; - mode->x_reg = 0; - da_operand = &(mode->exp); - } - } - } - *ptr = src; -} - -static char * -get_operands (opcode, op_end, operand) - opcode_entry_type *opcode; - char *op_end; - op_type *operand; -{ - char *ptr = op_end; - char *savptr; - - switch (opcode->noperands) - { - case 0: - operand[0].mode = 0; - operand[1].mode = 0; - break; - - case 1: - ptr++; - if (opcode->arg_info[0] == CLASS_CC) - { - get_cc_operand (&ptr, operand + 0, 0); - } - else if (opcode->arg_info[0] == CLASS_FLAGS) - { - get_flags_operand (&ptr, operand + 0, 0); - } - else if (opcode->arg_info[0] == (CLASS_IMM + (ARG_IMM2))) - { - get_interrupt_operand (&ptr, operand + 0, 0); - } - else - { - get_operand (&ptr, operand + 0, 0); - } - operand[1].mode = 0; - break; - - case 2: - ptr++; - savptr = ptr; - if (opcode->arg_info[0] == CLASS_CC) - { - get_cc_operand (&ptr, operand + 0, 0); - } - else if (opcode->arg_info[0] == CLASS_CTRL) - { - get_ctrl_operand (&ptr, operand + 0, 0); - if (the_ctrl == 0) - { - ptr = savptr; - get_operand (&ptr, operand + 0, 0); - if (ptr == 0) - return NULL; - if (*ptr == ',') - ptr++; - get_ctrl_operand (&ptr, operand + 1, 1); - return ptr; - } - } - else - { - get_operand (&ptr, operand + 0, 0); - } - if (ptr == 0) - return NULL; - if (*ptr == ',') - ptr++; - get_operand (&ptr, operand + 1, 1); - break; - - case 3: - ptr++; - get_operand (&ptr, operand + 0, 0); - if (*ptr == ',') - ptr++; - get_operand (&ptr, operand + 1, 1); - if (*ptr == ',') - ptr++; - get_operand (&ptr, operand + 2, 2); - break; - - case 4: - ptr++; - get_operand (&ptr, operand + 0, 0); - if (*ptr == ',') - ptr++; - get_operand (&ptr, operand + 1, 1); - if (*ptr == ',') - ptr++; - get_operand (&ptr, operand + 2, 2); - if (*ptr == ',') - ptr++; - get_cc_operand (&ptr, operand + 3, 3); - break; - - default: - abort (); - } - - return ptr; -} - -/* Passed a pointer to a list of opcodes which use different - addressing modes. Return the opcode which matches the opcodes - provided. */ - -static opcode_entry_type * -get_specific (opcode, operands) - opcode_entry_type *opcode; - op_type *operands; - -{ - opcode_entry_type *this_try = opcode; - int found = 0; - unsigned int noperands = opcode->noperands; - - int this_index = opcode->idx; - - while (this_index == opcode->idx && !found) - { - unsigned int i; - - this_try = opcode++; - for (i = 0; i < noperands; i++) - { - unsigned int mode = operands[i].mode; - - if ((mode & CLASS_MASK) != (this_try->arg_info[i] & CLASS_MASK)) - { - /* It could be an pc rel operand, if this is a da mode - and we like disps, then insert it. */ - - if (mode == CLASS_DA && this_try->arg_info[i] == CLASS_DISP) - { - /* This is the case. */ - operands[i].mode = CLASS_DISP; - } - else if (mode == CLASS_BA && this_try->arg_info[i]) - { - /* Can't think of a way to turn what we've been - given into something that's OK. */ - goto fail; - } - else if (this_try->arg_info[i] & CLASS_PR) - { - if (mode == CLASS_REG_LONG && segmented_mode) - { - /* OK. */ - } - else if (mode == CLASS_REG_WORD && !segmented_mode) - { - /* OK. */ - } - else - goto fail; - } - else - goto fail; - } - switch (mode & CLASS_MASK) - { - default: - break; - case CLASS_X: - case CLASS_IR: - case CLASS_BA: - case CLASS_BX: - case CLASS_DISP: - case CLASS_REG: - case CLASS_REG_WORD: - case CLASS_REG_BYTE: - case CLASS_REG_QUAD: - case CLASS_REG_LONG: - case CLASS_REGN0: - reg[this_try->arg_info[i] & ARG_MASK] = operands[i].reg; - break; - } - } - - found = 1; - fail: - ; - } - if (found) - return this_try; - else - return 0; -} - -#if 0 /* Not used. */ -static void -check_operand (operand, width, string) - struct z8k_op *operand; - unsigned int width; - char *string; -{ - if (operand->exp.X_add_symbol == 0 - && operand->exp.X_op_symbol == 0) - { - - /* No symbol involved, let's look at offset, it's dangerous if - any of the high bits are not 0 or ff's, find out by oring or - anding with the width and seeing if the answer is 0 or all - fs. */ - if ((operand->exp.X_add_number & ~width) != 0 && - (operand->exp.X_add_number | width) != (~0)) - { - as_warn (_("operand %s0x%x out of range."), - string, operand->exp.X_add_number); - } - } - -} -#endif - -static char buffer[20]; - -static void -newfix (ptr, type, operand) - int ptr; - int type; - expressionS *operand; -{ - if (operand->X_add_symbol - || operand->X_op_symbol - || operand->X_add_number) - { - fix_new_exp (frag_now, - ptr, - 1, - operand, - 0, - type); - } -} - -static char * -apply_fix (ptr, type, operand, size) - char *ptr; - int type; - expressionS *operand; - int size; -{ - int n = operand->X_add_number; - - newfix ((ptr - buffer) / 2, type, operand); - switch (size) - { - case 8: /* 8 nibbles == 32 bits. */ - *ptr++ = n >> 28; - *ptr++ = n >> 24; - *ptr++ = n >> 20; - *ptr++ = n >> 16; - case 4: /* 4 nibbles == 16 bits. */ - *ptr++ = n >> 12; - *ptr++ = n >> 8; - case 2: - *ptr++ = n >> 4; - case 1: - *ptr++ = n >> 0; - break; - } - return ptr; -} - -/* Now we know what sort of opcodes it is. Let's build the bytes. */ - -#define INSERT(x,y) *x++ = y>>24; *x++ = y>> 16; *x++=y>>8; *x++ =y; - -static void -build_bytes (this_try, operand) - opcode_entry_type *this_try; - struct z8k_op *operand ATTRIBUTE_UNUSED; -{ - char *output_ptr = buffer; - int c; - int nib; - int nibble; - unsigned int *class_ptr; - - frag_wane (frag_now); - frag_new (0); - - memset (buffer, 20, 0); - class_ptr = this_try->byte_info; - - for (nibble = 0; (c = *class_ptr++); nibble++) - { - - switch (c & CLASS_MASK) - { - default: - abort (); - - case CLASS_ADDRESS: - /* Direct address, we don't cope with the SS mode right now. */ - if (segmented_mode) - { - /* da_operand->X_add_number |= 0x80000000; -- Now set at relocation time. */ - output_ptr = apply_fix (output_ptr, R_IMM32, da_operand, 8); - } - else - { - output_ptr = apply_fix (output_ptr, R_IMM16, da_operand, 4); - } - da_operand = 0; - break; - case CLASS_DISP8: - /* pc rel 8 bit */ - output_ptr = apply_fix (output_ptr, R_JR, da_operand, 2); - da_operand = 0; - break; - - case CLASS_0DISP7: - /* pc rel 7 bit */ - *output_ptr = 0; - output_ptr = apply_fix (output_ptr, R_DISP7, da_operand, 2); - da_operand = 0; - break; - - case CLASS_1DISP7: - /* pc rel 7 bit */ - *output_ptr = 0x80; - output_ptr = apply_fix (output_ptr, R_DISP7, da_operand, 2); - output_ptr[-2] = 0x8; - da_operand = 0; - break; - - case CLASS_BIT_1OR2: - *output_ptr = c & 0xf; - if (imm_operand) - { - if (imm_operand->X_add_number == 2) - *output_ptr |= 2; - else if (imm_operand->X_add_number != 1) - as_bad (_("immediate must be 1 or 2")); - } - else - as_bad (_("immediate 1 or 2 expected")); - output_ptr++; - break; - case CLASS_CC: - *output_ptr++ = the_cc; - break; - case CLASS_0CCC: - *output_ptr++ = the_ctrl; - break; - case CLASS_1CCC: - *output_ptr++ = the_ctrl | 0x8; - break; - case CLASS_00II: - *output_ptr++ = (~the_interrupt & 0x3); - break; - case CLASS_01II: - *output_ptr++ = (~the_interrupt & 0x3) | 0x4; - break; - case CLASS_FLAGS: - *output_ptr++ = the_flags; - break; - case CLASS_BIT: - *output_ptr++ = c & 0xf; - break; - case CLASS_REGN0: - if (reg[c & 0xf] == 0) - as_bad (_("can't use R0 here")); - /* Fall through. */ - case CLASS_REG: - case CLASS_REG_BYTE: - case CLASS_REG_WORD: - case CLASS_REG_LONG: - case CLASS_REG_QUAD: - /* Insert bit mattern of right reg. */ - *output_ptr++ = reg[c & 0xf]; - break; - case CLASS_DISP: - switch (c & ARG_MASK) - { - case ARG_DISP12: - output_ptr = apply_fix (output_ptr, R_CALLR, da_operand, 4); - break; - case ARG_DISP16: - output_ptr = apply_fix (output_ptr, R_REL16, da_operand, 4); - break; - default: - output_ptr = apply_fix (output_ptr, R_IMM16, da_operand, 4); - } - da_operand = 0; - break; - - case CLASS_IMM: - { - nib = 0; - switch (c & ARG_MASK) - { - case ARG_IMM4: - output_ptr = apply_fix (output_ptr, R_IMM4L, imm_operand, 1); - break; - case ARG_IMM4M1: - imm_operand->X_add_number--; - output_ptr = apply_fix (output_ptr, R_IMM4L, imm_operand, 1); - break; - case ARG_IMMNMINUS1: - imm_operand->X_add_number--; - output_ptr = apply_fix (output_ptr, R_IMM4L, imm_operand, 1); - break; - case ARG_NIM8: - imm_operand->X_add_number = -imm_operand->X_add_number; - case ARG_IMM8: - output_ptr = apply_fix (output_ptr, R_IMM8, imm_operand, 2); - break; - case ARG_IMM16: - output_ptr = apply_fix (output_ptr, R_IMM16, imm_operand, 4); - break; - - case ARG_IMM32: - output_ptr = apply_fix (output_ptr, R_IMM32, imm_operand, 8); - break; - - default: - abort (); - } - } - } - } - - /* Copy from the nibble buffer into the frag. */ - { - int length = (output_ptr - buffer) / 2; - char *src = buffer; - char *fragp = frag_more (length); - - while (src < output_ptr) - { - *fragp = (src[0] << 4) | src[1]; - src += 2; - fragp++; - } - } -} - -/* This is the guts of the machine-dependent assembler. STR points to a - machine dependent instruction. This function is supposed to emit - the frags/bytes it assembles to. */ - -void -md_assemble (str) - char *str; -{ - char c; - char *op_start; - char *op_end; - struct z8k_op operand[3]; - opcode_entry_type *opcode; - opcode_entry_type *prev_opcode; - - /* Drop leading whitespace. */ - while (*str == ' ') - str++; - - /* Find the op code end. */ - for (op_start = op_end = str; - *op_end != 0 && *op_end != ' '; - op_end++) - ; - - if (op_end == op_start) - { - as_bad (_("can't find opcode ")); - } - c = *op_end; - - *op_end = 0; - - opcode = (opcode_entry_type *) hash_find (opcode_hash_control, op_start); - - if (opcode == NULL) - { - as_bad (_("unknown opcode")); - return; - } - - if (opcode->opcode == 250) - { - /* Was really a pseudo op. */ - - pseudo_typeS *p; - char oc; - - char *old = input_line_pointer; - *op_end = c; - - input_line_pointer = op_end; - - oc = *old; - *old = '\n'; - while (*input_line_pointer == ' ') - input_line_pointer++; - p = (pseudo_typeS *) (opcode->func); - - (p->poc_handler) (p->poc_val); - input_line_pointer = old; - *old = oc; - } - else - { - input_line_pointer = get_operands (opcode, op_end, operand); - prev_opcode = opcode; - - opcode = get_specific (opcode, operand); - - if (opcode == 0) - { - /* Couldn't find an opcode which matched the operands. */ - char *where = frag_more (2); - - where[0] = 0x0; - where[1] = 0x0; - - as_bad (_("Can't find opcode to match operands")); - return; - } - - build_bytes (opcode, operand); - } -} - -void -tc_crawl_symbol_chain (headers) - object_headers *headers ATTRIBUTE_UNUSED; -{ - printf (_("call to tc_crawl_symbol_chain \n")); -} - -symbolS * -md_undefined_symbol (name) - char *name ATTRIBUTE_UNUSED; -{ - return 0; -} - -void -tc_headers_hook (headers) - object_headers *headers ATTRIBUTE_UNUSED; -{ - printf (_("call to tc_headers_hook \n")); -} - -/* Various routines to kill one day. */ -/* Equal to MAX_PRECISION in atof-ieee.c. */ -#define MAX_LITTLENUMS 6 - -/* Turn a string in input_line_pointer into a floating point constant - of type TYPE, and store the appropriate bytes in *LITP. The number - of LITTLENUMS emitted is stored in *SIZEP. An error message is - returned, or NULL on OK. */ - -char * -md_atof (type, litP, sizeP) - char type; - char *litP; - int *sizeP; -{ - int prec; - LITTLENUM_TYPE words[MAX_LITTLENUMS]; - LITTLENUM_TYPE *wordP; - char *t; - char *atof_ieee (); - - switch (type) - { - case 'f': - case 'F': - case 's': - case 'S': - prec = 2; - break; - - case 'd': - case 'D': - case 'r': - case 'R': - prec = 4; - break; - - case 'x': - case 'X': - prec = 6; - break; - - case 'p': - case 'P': - prec = 6; - break; - - default: - *sizeP = 0; - return _("Bad call to MD_ATOF()"); - } - t = atof_ieee (input_line_pointer, type, words); - if (t) - input_line_pointer = t; - - *sizeP = prec * sizeof (LITTLENUM_TYPE); - for (wordP = words; prec--;) - { - md_number_to_chars (litP, (long) (*wordP++), sizeof (LITTLENUM_TYPE)); - litP += sizeof (LITTLENUM_TYPE); - } - return 0; -} - -CONST char *md_shortopts = "z:"; - -struct option md_longopts[] = { - {NULL, no_argument, NULL, 0} -}; - -size_t md_longopts_size = sizeof (md_longopts); - -int -md_parse_option (c, arg) - int c; - char *arg; -{ - switch (c) - { - case 'z': - if (!strcmp (arg, "8001")) - s_segm (); - else if (!strcmp (arg, "8002")) - s_unseg (); - else - { - as_bad (_("invalid architecture -z%s"), arg); - return 0; - } - break; - - default: - return 0; - } - - return 1; -} - -void -md_show_usage (stream) - FILE *stream; -{ - fprintf (stream, _("\ -Z8K options:\n\ --z8001 generate segmented code\n\ --z8002 generate unsegmented code\n")); -} - -void -tc_aout_fix_to_chars () -{ - printf (_("call to tc_aout_fix_to_chars \n")); - abort (); -} - -void -md_convert_frag (headers, seg, fragP) - object_headers *headers ATTRIBUTE_UNUSED; - segT seg ATTRIBUTE_UNUSED; - fragS *fragP ATTRIBUTE_UNUSED; -{ - printf (_("call to md_convert_frag \n")); - abort (); -} - -valueT -md_section_align (seg, size) - segT seg; - valueT size; -{ - return ((size + (1 << section_alignment[(int) seg]) - 1) - & (-1 << section_alignment[(int) seg])); - -} - -void -md_apply_fix3 (fixP, valP, segment) - fixS *fixP; - valueT * valP; - segT segment ATTRIBUTE_UNUSED; -{ - long val = * (long *) valP; - char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; - - switch (fixP->fx_r_type) - { - case R_IMM4L: - buf[0] = (buf[0] & 0xf0) | ((buf[0] + val) & 0xf); - break; - - case R_JR: - - *buf++ = val; -#if 0 - if (val != 0) - abort (); -#endif - break; - - case R_DISP7: - - *buf++ += val; -#if 0 - if (val != 0) - abort (); -#endif - break; - - case R_IMM8: - buf[0] += val; - break; - case R_IMM16: - *buf++ = (val >> 8); - *buf++ = val; - break; - case R_IMM32: - *buf++ = (val >> 24); - *buf++ = (val >> 16); - *buf++ = (val >> 8); - *buf++ = val; - break; -#if 0 - case R_DA | R_SEG: - *buf++ = (val >> 16); - *buf++ = 0x00; - *buf++ = (val >> 8); - *buf++ = val; - break; -#endif - - case 0: - md_number_to_chars (buf, val, fixP->fx_size); - break; - - default: - abort (); - } - - if (fixP->fx_addsy == NULL && fixP->fx_pcrel == 0) - fixP->fx_done = 1; -} - -int -md_estimate_size_before_relax (fragP, segment_type) - register fragS *fragP ATTRIBUTE_UNUSED; - register segT segment_type ATTRIBUTE_UNUSED; -{ - printf (_("call tomd_estimate_size_before_relax \n")); - abort (); -} - -/* Put number into target byte order. */ - -void -md_number_to_chars (ptr, use, nbytes) - char *ptr; - valueT use; - int nbytes; -{ - number_to_chars_bigendian (ptr, use, nbytes); -} - -long -md_pcrel_from (fixP) - fixS *fixP ATTRIBUTE_UNUSED; -{ - abort (); -} - -void -tc_coff_symbol_emit_hook (s) - symbolS *s ATTRIBUTE_UNUSED; -{ -} - -void -tc_reloc_mangle (fix_ptr, intr, base) - fixS *fix_ptr; - struct internal_reloc *intr; - bfd_vma base; - -{ - symbolS *symbol_ptr; - - if (fix_ptr->fx_addsy - && fix_ptr->fx_subsy) - { - symbolS *add = fix_ptr->fx_addsy; - symbolS *sub = fix_ptr->fx_subsy; - - if (S_GET_SEGMENT (add) != S_GET_SEGMENT (sub)) - as_bad (_("Can't subtract symbols in different sections %s %s"), - S_GET_NAME (add), S_GET_NAME (sub)); - else - { - int diff = S_GET_VALUE (add) - S_GET_VALUE (sub); - - fix_ptr->fx_addsy = 0; - fix_ptr->fx_subsy = 0; - fix_ptr->fx_offset += diff; - } - } - symbol_ptr = fix_ptr->fx_addsy; - - /* If this relocation is attached to a symbol then it's ok - to output it. */ - if (fix_ptr->fx_r_type == 0) - { - /* cons likes to create reloc32's whatever the size of the reloc. */ - switch (fix_ptr->fx_size) - { - case 2: - intr->r_type = R_IMM16; - break; - case 1: - intr->r_type = R_IMM8; - break; - case 4: - intr->r_type = R_IMM32; - break; - default: - abort (); - } - } - else - intr->r_type = fix_ptr->fx_r_type; - - intr->r_vaddr = fix_ptr->fx_frag->fr_address + fix_ptr->fx_where + base; - intr->r_offset = fix_ptr->fx_offset; - - if (symbol_ptr) - intr->r_symndx = symbol_ptr->sy_number; - else - intr->r_symndx = -1; -} diff --git a/contrib/binutils/gas/config/tc-z8k.h b/contrib/binutils/gas/config/tc-z8k.h deleted file mode 100644 index d1899e1564fd..000000000000 --- a/contrib/binutils/gas/config/tc-z8k.h +++ /dev/null @@ -1,53 +0,0 @@ -/* This file is tc-z8k.h - Copyright 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1997, 1998, - 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. */ - -#define TC_Z8K -#define TARGET_BYTES_BIG_ENDIAN 1 - -#if ANSI_PROTOTYPES -struct internal_reloc; -#endif - -#define WORKING_DOT_WORD - -#ifndef BFD_ASSEMBLER -#define LOCAL_LABEL(x) 0 -#endif - -/* This macro translates between an internal fix and an coff reloc type */ -#define TC_COFF_FIX2RTYPE(fixP) abort (); - -#define BFD_ARCH bfd_arch_z8k -#define COFF_MAGIC 0x8000 -#define TC_COUNT_RELOC(x) (1) -#define IGNORE_NONSTANDARD_ESCAPES - -#define TC_RELOC_MANGLE(s,a,b,c) tc_reloc_mangle(a,b,c) -extern void tc_reloc_mangle - PARAMS ((struct fix *, struct internal_reloc *, bfd_vma)); - -#define DO_NOT_STRIP 0 -#define LISTING_HEADER "Zilog Z8000 GAS " -#define NEED_FX_R_TYPE 1 -#define RELOC_32 1234 - -#define md_operand(x) diff --git a/contrib/binutils/gas/config/te-multi.h b/contrib/binutils/gas/config/te-multi.h deleted file mode 100644 index b8eda4505fb7..000000000000 --- a/contrib/binutils/gas/config/te-multi.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * This file is te-generic.h and is intended to be a template for - * target environment specific header files. - * - * It is my intent that this file will evolve into a file suitable for config, - * compile, and copying as an aid for testing and porting. xoxorich. - */ - -/* Added these, because if we don't know what we're targetting we may - need an assembler version of libgcc, and that will use local - labels. */ -#define LOCAL_LABELS_DOLLAR 1 -#define LOCAL_LABELS_FB 1 - -/* these define interfaces */ -#ifdef OBJ_HEADER -#include OBJ_HEADER -#else -#include "obj-format.h" -#endif - -/* end of te-generic.h */ diff --git a/contrib/binutils/gas/doc/c-v850.texi b/contrib/binutils/gas/doc/c-v850.texi deleted file mode 100644 index 4b36461ee52b..000000000000 --- a/contrib/binutils/gas/doc/c-v850.texi +++ /dev/null @@ -1,363 +0,0 @@ -@c Copyright 1997 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. - -@node V850-Dependent -@chapter v850 Dependent Features - -@cindex V850 support -@menu -* V850 Options:: Options -* V850 Syntax:: Syntax -* V850 Floating Point:: Floating Point -* V850 Directives:: V850 Machine Directives -* V850 Opcodes:: Opcodes -@end menu - -@node V850 Options -@section Options -@cindex V850 options (none) -@cindex options for V850 (none) -@code{@value{AS}} supports the following additional command-line options -for the V850 processor family: - -@cindex command line options, V850 -@cindex V850 command line options -@table @code - -@cindex @code{-wsigned_overflow} command line option, V850 -@item -wsigned_overflow -Causes warnings to be produced when signed immediate values overflow the -space available for then within their opcodes. By default this option -is disabled as it is possible to receive spurious warnings due to using -exact bit patterns as immediate constants. - -@cindex @code{-wunsigned_overflow} command line option, V850 -@item -wunsigned_overflow -Causes warnings to be produced when unsigned immediate values overflow -the space available for then within their opcodes. By default this -option is disabled as it is possible to receive spurious warnings due to -using exact bit patterns as immediate constants. - -@cindex @code{-mv850} command line option, V850 -@item -mv850 -Specifies that the assembled code should be marked as being targeted at -the V850 processor. This allows the linker to detect attempts to link -such code with code assembled for other processors. - -@cindex @code{-mv850e} command line option, V850 -@item -mv850e -Specifies that the assembled code should be marked as being targeted at -the V850E processor. This allows the linker to detect attempts to link -such code with code assembled for other processors. - -@cindex @code{-mv850any} command line option, V850 -@item -mv850any -Specifies that the assembled code should be marked as being targeted at -the V850 processor but support instructions that are specific to the -extended variants of the process. This allows the production of -binaries that contain target specific code, but which are also intended -to be used in a generic fashion. For example libgcc.a contains generic -routines used by the code produced by GCC for all versions of the v850 -architecture, together with support routines only used by the V850E -architecture. - -@end table - - -@node V850 Syntax -@section Syntax -@menu -* V850-Chars:: Special Characters -* V850-Regs:: Register Names -@end menu - -@node V850-Chars -@subsection Special Characters - -@cindex line comment character, V850 -@cindex V850 line comment character -@samp{#} is the line comment character. -@node V850-Regs -@subsection Register Names - -@cindex V850 register names -@cindex register names, V850 -@code{@value{AS}} supports the following names for registers: -@table @code -@cindex @code{zero} register, V850 -@item general register 0 -r0, zero -@item general register 1 -r1 -@item general register 2 -r2, hp -@cindex @code{sp} register, V850 -@item general register 3 -r3, sp -@cindex @code{gp} register, V850 -@item general register 4 -r4, gp -@cindex @code{tp} register, V850 -@item general register 5 -r5, tp -@item general register 6 -r6 -@item general register 7 -r7 -@item general register 8 -r8 -@item general register 9 -r9 -@item general register 10 -r10 -@item general register 11 -r11 -@item general register 12 -r12 -@item general register 13 -r13 -@item general register 14 -r14 -@item general register 15 -r15 -@item general register 16 -r16 -@item general register 17 -r17 -@item general register 18 -r18 -@item general register 19 -r19 -@item general register 20 -r20 -@item general register 21 -r21 -@item general register 22 -r22 -@item general register 23 -r23 -@item general register 24 -r24 -@item general register 25 -r25 -@item general register 26 -r26 -@item general register 27 -r27 -@item general register 28 -r28 -@item general register 29 -r29 -@cindex @code{ep} register, V850 -@item general register 30 -r30, ep -@cindex @code{lp} register, V850 -@item general register 31 -r31, lp -@cindex @code{eipc} register, V850 -@item system register 0 -eipc -@cindex @code{eipsw} register, V850 -@item system register 1 -eipsw -@cindex @code{fepc} register, V850 -@item system register 2 -fepc -@cindex @code{fepsw} register, V850 -@item system register 3 -fepsw -@cindex @code{ecr} register, V850 -@item system register 4 -ecr -@cindex @code{psw} register, V850 -@item system register 5 -psw -@cindex @code{ctpc} register, V850 -@item system register 16 -ctpc -@cindex @code{ctpsw} register, V850 -@item system register 17 -ctpsw -@cindex @code{dbpc} register, V850 -@item system register 18 -dbpc -@cindex @code{dbpsw} register, V850 -@item system register 19 -dbpsw -@cindex @code{ctbp} register, V850 -@item system register 20 -ctbp -@end table - -@node V850 Floating Point -@section Floating Point - -@cindex floating point, V850 (@sc{ieee}) -@cindex V850 floating point (@sc{ieee}) -The V850 family uses @sc{ieee} floating-point numbers. - -@node V850 Directives -@section V850 Machine Directives - -@cindex machine directives, V850 -@cindex V850 machine directives -@table @code -@cindex @code{offset} directive, V850 -@item .offset @var{<expression>} -Moves the offset into the current section to the specified amount. - -@cindex @code{section} directive, V850 -@item .section "name", <type> -This is an extension to the standard .section directive. It sets the -current section to be <type> and creates an alias for this section -called "name". - -@cindex @code{.v850} directive, V850 -@item .v850 -Specifies that the assembled code should be marked as being targeted at -the V850 processor. This allows the linker to detect attempts to link -such code with code assembled for other processors. - -@cindex @code{.v850e} directive, V850 -@item .v850e -Specifies that the assembled code should be marked as being targeted at -the V850E processor. This allows the linker to detect attempts to link -such code with code assembled for other processors. - -@end table - -@node V850 Opcodes -@section Opcodes - -@cindex V850 opcodes -@cindex opcodes for V850 -@code{@value{AS}} implements all the standard V850 opcodes. - -@code{@value{AS}} also implements the following pseudo ops: - -@table @code - -@cindex @code{hi0} pseudo-op, V850 -@item hi0() -Computes the higher 16 bits of the given expression and stores it into -the immediate operand field of the given instruction. For example: - - @samp{mulhi hi0(here - there), r5, r6} - -computes the difference between the address of labels 'here' and -'there', takes the upper 16 bits of this difference, shifts it down 16 -bits and then mutliplies it by the lower 16 bits in register 5, putting -the result into register 6. - -@cindex @code{lo} pseudo-op, V850 -@item lo() -Computes the lower 16 bits of the given expression and stores it into -the immediate operand field of the given instruction. For example: - - @samp{addi lo(here - there), r5, r6} - -computes the difference between the address of labels 'here' and -'there', takes the lower 16 bits of this difference and adds it to -register 5, putting the result into register 6. - -@cindex @code{hi} pseudo-op, V850 -@item hi() -Computes the higher 16 bits of the given expression and then adds the -value of the most significant bit of the lower 16 bits of the expression -and stores the result into the immediate operand field of the given -instruction. For example the following code can be used to compute the -address of the label 'here' and store it into register 6: - - @samp{movhi hi(here), r0, r6} - @samp{movea lo(here), r6, r6} - -The reason for this special behaviour is that movea performs a sign -extention on its immediate operand. So for example if the address of -'here' was 0xFFFFFFFF then without the special behaviour of the hi() -pseudo-op the movhi instruction would put 0xFFFF0000 into r6, then the -movea instruction would takes its immediate operand, 0xFFFF, sign extend -it to 32 bits, 0xFFFFFFFF, and then add it into r6 giving 0xFFFEFFFF -which is wrong (the fifth nibble is E). With the hi() pseudo op adding -in the top bit of the lo() pseudo op, the movhi instruction actually -stores 0 into r6 (0xFFFF + 1 = 0x0000), so that the movea instruction -stores 0xFFFFFFFF into r6 - the right value. - -@cindex @code{hilo} pseudo-op, V850 -@item hilo() -Computes the 32 bit value of the given expression and stores it into -the immediate operand field of the given instruction (which must be a -mov instruction). For example: - - @samp{mov hilo(here), r6} - -computes the absolute address of label 'here' and puts the result into -register 6. - -@cindex @code{sdaoff} pseudo-op, V850 -@item sdaoff() -Computes the offset of the named variable from the start of the Small -Data Area (whoes address is held in register 4, the GP register) and -stores the result as a 16 bit signed value in the immediate operand -field of the given instruction. For example: - - @samp{ld.w sdaoff(_a_variable)[gp],r6} - -loads the contents of the location pointed to by the label '_a_variable' -into register 6, provided that the label is located somewhere within +/- -32K of the address held in the GP register. [Note the linker assumes -that the GP register contains a fixed address set to the address of the -label called '__gp'. This can either be set up automatically by the -linker, or specifically set by using the @samp{--defsym __gp=<value>} -command line option]. - -@cindex @code{tdaoff} pseudo-op, V850 -@item tdaoff() -Computes the offset of the named variable from the start of the Tiny -Data Area (whoes address is held in register 30, the EP register) and -stores the result as a 4,5, 7 or 8 bit unsigned value in the immediate -operand field of the given instruction. For example: - - @samp{sld.w tdaoff(_a_variable)[ep],r6} - -loads the contents of the location pointed to by the label '_a_variable' -into register 6, provided that the label is located somewhere within +256 -bytes of the address held in the EP register. [Note the linker assumes -that the EP register contains a fixed address set to the address of the -label called '__ep'. This can either be set up automatically by the -linker, or specifically set by using the @samp{--defsym __ep=<value>} -command line option]. - -@cindex @code{zdaoff} pseudo-op, V850 -@item zdaoff() -Computes the offset of the named variable from address 0 and stores the -result as a 16 bit signed value in the immediate operand field of the -given instruction. For example: - - @samp{movea zdaoff(_a_variable),zero,r6} - -puts the address of the label '_a_variable' into register 6, assuming -that the label is somewhere within the first 32K of memory. (Strictly -speaking it also possible to access the last 32K of memory as well, as -the offsets are signed). - -@cindex @code{ctoff} pseudo-op, V850 -@item ctoff() -Computes the offset of the named variable from the start of the Call -Table Area (whoes address is helg in system register 20, the CTBP -register) and stores the result a 6 or 16 bit unsigned value in the -immediate field of then given instruction or piece of data. For -example: - - @samp{callt ctoff(table_func1)} - -will put the call the function whoes address is held in the call table -at the location labeled 'table_func1'. - -@end table - - -For information on the V850 instruction set, see @cite{V850 -Family 32-/16-Bit single-Chip Microcontroller Architecture Manual} from NEC. -Ltd. - diff --git a/contrib/binutils/gas/doc/c-z8k.texi b/contrib/binutils/gas/doc/c-z8k.texi deleted file mode 100644 index d98adeaf04aa..000000000000 --- a/contrib/binutils/gas/doc/c-z8k.texi +++ /dev/null @@ -1,380 +0,0 @@ -@c Copyright 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. -@c This is part of the GAS manual. -@c For copying conditions, see the file as.texinfo. -@ifset GENERIC -@page -@node Z8000-Dependent -@chapter Z8000 Dependent Features -@end ifset -@ifclear GENERIC -@node Machine Dependencies -@chapter Z8000 Dependent Features -@end ifclear - -@cindex Z8000 support -The Z8000 @value{AS} supports both members of the Z8000 family: the -unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with -24 bit addresses. - -When the assembler is in unsegmented mode (specified with the -@code{unsegm} directive), an address takes up one word (16 bit) -sized register. When the assembler is in segmented mode (specified with -the @code{segm} directive), a 24-bit address takes up a long (32 bit) -register. @xref{Z8000 Directives,,Assembler Directives for the Z8000}, -for a list of other Z8000 specific assembler directives. - -@menu -* Z8000 Options:: No special command-line options for Z8000 -* Z8000 Syntax:: Assembler syntax for the Z8000 -* Z8000 Directives:: Special directives for the Z8000 -* Z8000 Opcodes:: Opcodes -@end menu - -@node Z8000 Options -@section Options - -@cindex Z8000 options -@cindex options, Z8000 -@code{@value{AS}} has no additional command-line options for the Zilog -Z8000 family. - -@node Z8000 Syntax -@section Syntax -@menu -* Z8000-Chars:: Special Characters -* Z8000-Regs:: Register Names -* Z8000-Addressing:: Addressing Modes -@end menu - -@node Z8000-Chars -@subsection Special Characters - -@cindex line comment character, Z8000 -@cindex Z8000 line comment character -@samp{!} is the line comment character. - -@cindex line separator, Z8000 -@cindex statement separator, Z8000 -@cindex Z8000 line separator -You can use @samp{;} instead of a newline to separate statements. - -@node Z8000-Regs -@subsection Register Names - -@cindex Z8000 registers -@cindex registers, Z8000 -The Z8000 has sixteen 16 bit registers, numbered 0 to 15. You can refer -to different sized groups of registers by register number, with the -prefix @samp{r} for 16 bit registers, @samp{rr} for 32 bit registers and -@samp{rq} for 64 bit registers. You can also refer to the contents of -the first eight (of the sixteen 16 bit registers) by bytes. They are -named @samp{r@var{n}h} and @samp{r@var{n}l}. - -@smallexample -@exdent @emph{byte registers} -r0l r0h r1h r1l r2h r2l r3h r3l -r4h r4l r5h r5l r6h r6l r7h r7l - -@exdent @emph{word registers} -r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 - -@exdent @emph{long word registers} -rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14 - -@exdent @emph{quad word registers} -rq0 rq4 rq8 rq12 -@end smallexample - -@node Z8000-Addressing -@subsection Addressing Modes - -@cindex addressing modes, Z8000 -@cindex Z800 addressing modes -@value{AS} understands the following addressing modes for the Z8000: - -@table @code -@item r@var{n} -Register direct - -@item @@r@var{n} -Indirect register - -@item @var{addr} -Direct: the 16 bit or 24 bit address (depending on whether the assembler -is in segmented or unsegmented mode) of the operand is in the instruction. - -@item address(r@var{n}) -Indexed: the 16 or 24 bit address is added to the 16 bit register to produce -the final address in memory of the operand. - -@item r@var{n}(#@var{imm}) -Base Address: the 16 or 24 bit register is added to the 16 bit sign -extended immediate displacement to produce the final address in memory -of the operand. - -@item r@var{n}(r@var{m}) -Base Index: the 16 or 24 bit register r@var{n} is added to the sign -extended 16 bit index register r@var{m} to produce the final address in -memory of the operand. - -@item #@var{xx} -Immediate data @var{xx}. -@end table - -@node Z8000 Directives -@section Assembler Directives for the Z8000 - -@cindex Z8000 directives -@cindex directives, Z8000 -The Z8000 port of @value{AS} includes these additional assembler directives, -for compatibility with other Z8000 assemblers. As shown, these do not -begin with @samp{.} (unlike the ordinary @value{AS} directives). - -@table @code -@kindex segm -@item segm -Generates code for the segmented Z8001. - -@kindex unsegm -@item unsegm -Generates code for the unsegmented Z8002. - -@kindex name -@item name -Synonym for @code{.file} - -@kindex global -@item global -Synonym for @code{.global} - -@kindex wval -@item wval -Synonym for @code{.word} - -@kindex lval -@item lval -Synonym for @code{.long} - -@kindex bval -@item bval -Synonym for @code{.byte} - -@kindex sval -@item sval -Assemble a string. @code{sval} expects one string literal, delimited by -single quotes. It assembles each byte of the string into consecutive -addresses. You can use the escape sequence @samp{%@var{xx}} (where -@var{xx} represents a two-digit hexadecimal number) to represent the -character whose @sc{ascii} value is @var{xx}. Use this feature to -describe single quote and other characters that may not appear in string -literals as themselves. For example, the C statement @w{@samp{char *a = -"he said \"it's 50% off\"";}} is represented in Z8000 assembly language -(shown with the assembler output in hex at the left) as - -@iftex -@begingroup -@let@nonarrowing=@comment -@end iftex -@smallexample -68652073 sval 'he said %22it%27s 50%25 off%22%00' -61696420 -22697427 -73203530 -25206F66 -662200 -@end smallexample -@iftex -@endgroup -@end iftex - -@kindex rsect -@item rsect -synonym for @code{.section} - -@kindex block -@item block -synonym for @code{.space} - -@kindex even -@item even -special case of @code{.align}; aligns output to even byte boundary. -@end table - -@node Z8000 Opcodes -@section Opcodes - -@cindex Z8000 opcode summary -@cindex opcode summary, Z8000 -@cindex mnemonics, Z8000 -@cindex instruction summary, Z8000 -For detailed information on the Z8000 machine instruction set, see -@cite{Z8000 Technical Manual}. - -@ifset SMALL -@c this table, due to the multi-col faking and hardcoded order, looks silly -@c except in smallbook. See comments below "@set SMALL" near top of this file. - -The following table summarizes the opcodes and their arguments: -@iftex -@begingroup -@let@nonarrowing=@comment -@end iftex -@smallexample - - rs @r{16 bit source register} - rd @r{16 bit destination register} - rbs @r{8 bit source register} - rbd @r{8 bit destination register} - rrs @r{32 bit source register} - rrd @r{32 bit destination register} - rqs @r{64 bit source register} - rqd @r{64 bit destination register} - addr @r{16/24 bit address} - imm @r{immediate data} - -adc rd,rs clrb addr cpsir @@rd,@@rs,rr,cc -adcb rbd,rbs clrb addr(rd) cpsirb @@rd,@@rs,rr,cc -add rd,@@rs clrb rbd dab rbd -add rd,addr com @@rd dbjnz rbd,disp7 -add rd,addr(rs) com addr dec @@rd,imm4m1 -add rd,imm16 com addr(rd) dec addr(rd),imm4m1 -add rd,rs com rd dec addr,imm4m1 -addb rbd,@@rs comb @@rd dec rd,imm4m1 -addb rbd,addr comb addr decb @@rd,imm4m1 -addb rbd,addr(rs) comb addr(rd) decb addr(rd),imm4m1 -addb rbd,imm8 comb rbd decb addr,imm4m1 -addb rbd,rbs comflg flags decb rbd,imm4m1 -addl rrd,@@rs cp @@rd,imm16 di i2 -addl rrd,addr cp addr(rd),imm16 div rrd,@@rs -addl rrd,addr(rs) cp addr,imm16 div rrd,addr -addl rrd,imm32 cp rd,@@rs div rrd,addr(rs) -addl rrd,rrs cp rd,addr div rrd,imm16 -and rd,@@rs cp rd,addr(rs) div rrd,rs -and rd,addr cp rd,imm16 divl rqd,@@rs -and rd,addr(rs) cp rd,rs divl rqd,addr -and rd,imm16 cpb @@rd,imm8 divl rqd,addr(rs) -and rd,rs cpb addr(rd),imm8 divl rqd,imm32 -andb rbd,@@rs cpb addr,imm8 divl rqd,rrs -andb rbd,addr cpb rbd,@@rs djnz rd,disp7 -andb rbd,addr(rs) cpb rbd,addr ei i2 -andb rbd,imm8 cpb rbd,addr(rs) ex rd,@@rs -andb rbd,rbs cpb rbd,imm8 ex rd,addr -bit @@rd,imm4 cpb rbd,rbs ex rd,addr(rs) -bit addr(rd),imm4 cpd rd,@@rs,rr,cc ex rd,rs -bit addr,imm4 cpdb rbd,@@rs,rr,cc exb rbd,@@rs -bit rd,imm4 cpdr rd,@@rs,rr,cc exb rbd,addr -bit rd,rs cpdrb rbd,@@rs,rr,cc exb rbd,addr(rs) -bitb @@rd,imm4 cpi rd,@@rs,rr,cc exb rbd,rbs -bitb addr(rd),imm4 cpib rbd,@@rs,rr,cc ext0e imm8 -bitb addr,imm4 cpir rd,@@rs,rr,cc ext0f imm8 -bitb rbd,imm4 cpirb rbd,@@rs,rr,cc ext8e imm8 -bitb rbd,rs cpl rrd,@@rs ext8f imm8 -bpt cpl rrd,addr exts rrd -call @@rd cpl rrd,addr(rs) extsb rd -call addr cpl rrd,imm32 extsl rqd -call addr(rd) cpl rrd,rrs halt -calr disp12 cpsd @@rd,@@rs,rr,cc in rd,@@rs -clr @@rd cpsdb @@rd,@@rs,rr,cc in rd,imm16 -clr addr cpsdr @@rd,@@rs,rr,cc inb rbd,@@rs -clr addr(rd) cpsdrb @@rd,@@rs,rr,cc inb rbd,imm16 -clr rd cpsi @@rd,@@rs,rr,cc inc @@rd,imm4m1 -clrb @@rd cpsib @@rd,@@rs,rr,cc inc addr(rd),imm4m1 -inc addr,imm4m1 ldb rbd,rs(rx) mult rrd,addr(rs) -inc rd,imm4m1 ldb rd(imm16),rbs mult rrd,imm16 -incb @@rd,imm4m1 ldb rd(rx),rbs mult rrd,rs -incb addr(rd),imm4m1 ldctl ctrl,rs multl rqd,@@rs -incb addr,imm4m1 ldctl rd,ctrl multl rqd,addr -incb rbd,imm4m1 ldd @@rs,@@rd,rr multl rqd,addr(rs) -ind @@rd,@@rs,ra lddb @@rs,@@rd,rr multl rqd,imm32 -indb @@rd,@@rs,rba lddr @@rs,@@rd,rr multl rqd,rrs -inib @@rd,@@rs,ra lddrb @@rs,@@rd,rr neg @@rd -inibr @@rd,@@rs,ra ldi @@rd,@@rs,rr neg addr -iret ldib @@rd,@@rs,rr neg addr(rd) -jp cc,@@rd ldir @@rd,@@rs,rr neg rd -jp cc,addr ldirb @@rd,@@rs,rr negb @@rd -jp cc,addr(rd) ldk rd,imm4 negb addr -jr cc,disp8 ldl @@rd,rrs negb addr(rd) -ld @@rd,imm16 ldl addr(rd),rrs negb rbd -ld @@rd,rs ldl addr,rrs nop -ld addr(rd),imm16 ldl rd(imm16),rrs or rd,@@rs -ld addr(rd),rs ldl rd(rx),rrs or rd,addr -ld addr,imm16 ldl rrd,@@rs or rd,addr(rs) -ld addr,rs ldl rrd,addr or rd,imm16 -ld rd(imm16),rs ldl rrd,addr(rs) or rd,rs -ld rd(rx),rs ldl rrd,imm32 orb rbd,@@rs -ld rd,@@rs ldl rrd,rrs orb rbd,addr -ld rd,addr ldl rrd,rs(imm16) orb rbd,addr(rs) -ld rd,addr(rs) ldl rrd,rs(rx) orb rbd,imm8 -ld rd,imm16 ldm @@rd,rs,n orb rbd,rbs -ld rd,rs ldm addr(rd),rs,n out @@rd,rs -ld rd,rs(imm16) ldm addr,rs,n out imm16,rs -ld rd,rs(rx) ldm rd,@@rs,n outb @@rd,rbs -lda rd,addr ldm rd,addr(rs),n outb imm16,rbs -lda rd,addr(rs) ldm rd,addr,n outd @@rd,@@rs,ra -lda rd,rs(imm16) ldps @@rs outdb @@rd,@@rs,rba -lda rd,rs(rx) ldps addr outib @@rd,@@rs,ra -ldar rd,disp16 ldps addr(rs) outibr @@rd,@@rs,ra -ldb @@rd,imm8 ldr disp16,rs pop @@rd,@@rs -ldb @@rd,rbs ldr rd,disp16 pop addr(rd),@@rs -ldb addr(rd),imm8 ldrb disp16,rbs pop addr,@@rs -ldb addr(rd),rbs ldrb rbd,disp16 pop rd,@@rs -ldb addr,imm8 ldrl disp16,rrs popl @@rd,@@rs -ldb addr,rbs ldrl rrd,disp16 popl addr(rd),@@rs -ldb rbd,@@rs mbit popl addr,@@rs -ldb rbd,addr mreq rd popl rrd,@@rs -ldb rbd,addr(rs) mres push @@rd,@@rs -ldb rbd,imm8 mset push @@rd,addr -ldb rbd,rbs mult rrd,@@rs push @@rd,addr(rs) -ldb rbd,rs(imm16) mult rrd,addr push @@rd,imm16 -push @@rd,rs set addr,imm4 subl rrd,imm32 -pushl @@rd,@@rs set rd,imm4 subl rrd,rrs -pushl @@rd,addr set rd,rs tcc cc,rd -pushl @@rd,addr(rs) setb @@rd,imm4 tccb cc,rbd -pushl @@rd,rrs setb addr(rd),imm4 test @@rd -res @@rd,imm4 setb addr,imm4 test addr -res addr(rd),imm4 setb rbd,imm4 test addr(rd) -res addr,imm4 setb rbd,rs test rd -res rd,imm4 setflg imm4 testb @@rd -res rd,rs sinb rbd,imm16 testb addr -resb @@rd,imm4 sinb rd,imm16 testb addr(rd) -resb addr(rd),imm4 sind @@rd,@@rs,ra testb rbd -resb addr,imm4 sindb @@rd,@@rs,rba testl @@rd -resb rbd,imm4 sinib @@rd,@@rs,ra testl addr -resb rbd,rs sinibr @@rd,@@rs,ra testl addr(rd) -resflg imm4 sla rd,imm8 testl rrd -ret cc slab rbd,imm8 trdb @@rd,@@rs,rba -rl rd,imm1or2 slal rrd,imm8 trdrb @@rd,@@rs,rba -rlb rbd,imm1or2 sll rd,imm8 trib @@rd,@@rs,rbr -rlc rd,imm1or2 sllb rbd,imm8 trirb @@rd,@@rs,rbr -rlcb rbd,imm1or2 slll rrd,imm8 trtdrb @@ra,@@rb,rbr -rldb rbb,rba sout imm16,rs trtib @@ra,@@rb,rr -rr rd,imm1or2 soutb imm16,rbs trtirb @@ra,@@rb,rbr -rrb rbd,imm1or2 soutd @@rd,@@rs,ra trtrb @@ra,@@rb,rbr -rrc rd,imm1or2 soutdb @@rd,@@rs,rba tset @@rd -rrcb rbd,imm1or2 soutib @@rd,@@rs,ra tset addr -rrdb rbb,rba soutibr @@rd,@@rs,ra tset addr(rd) -rsvd36 sra rd,imm8 tset rd -rsvd38 srab rbd,imm8 tsetb @@rd -rsvd78 sral rrd,imm8 tsetb addr -rsvd7e srl rd,imm8 tsetb addr(rd) -rsvd9d srlb rbd,imm8 tsetb rbd -rsvd9f srll rrd,imm8 xor rd,@@rs -rsvdb9 sub rd,@@rs xor rd,addr -rsvdbf sub rd,addr xor rd,addr(rs) -sbc rd,rs sub rd,addr(rs) xor rd,imm16 -sbcb rbd,rbs sub rd,imm16 xor rd,rs -sc imm8 sub rd,rs xorb rbd,@@rs -sda rd,rs subb rbd,@@rs xorb rbd,addr -sdab rbd,rs subb rbd,addr xorb rbd,addr(rs) -sdal rrd,rs subb rbd,addr(rs) xorb rbd,imm8 -sdl rd,rs subb rbd,imm8 xorb rbd,rbs -sdlb rbd,rs subb rbd,rbs xorb rbd,rbs -sdll rrd,rs subl rrd,@@rs -set @@rd,imm4 subl rrd,addr -set addr(rd),imm4 subl rrd,addr(rs) -@end smallexample -@iftex -@endgroup -@end iftex -@end ifset - diff --git a/contrib/binutils/gas/doc/gasp.texi b/contrib/binutils/gas/doc/gasp.texi deleted file mode 100644 index 889e997105ce..000000000000 --- 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 d1e41850486b..000000000000 --- 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-lex.l b/contrib/binutils/gas/itbl-lex.l deleted file mode 100644 index e924efc56ef0..000000000000 --- a/contrib/binutils/gas/itbl-lex.l +++ /dev/null @@ -1,114 +0,0 @@ -/* itbl-lex.l - Copyright 1997, 1998, 2001 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. */ - -%{ -#include <stdio.h> -#include <string.h> -#include <stdlib.h> - -#include <itbl-parse.h> - -#ifdef DEBUG -#define DBG(x) printf x -#define MDBG(x) printf x -#else -#define DBG(x) -#define MDBG(x) -#endif - -int insntbl_line = 1; -%} - -ALNUM [A-Za-z0-9_] -DIGIT [0-9] -ALPHA [A-Za-z_] -HEX [0-9A-Fa-f] - -%% - -"creg"|"CREG" { - return CREG; - } -"dreg"|"DREG" { - return DREG; - } -"greg"|"GREG" { - return GREG; - } -"immed"|"IMMED" { - return IMMED; - } -"addr"|"ADDR" { - return ADDR; - } -"insn"|"INSN" { - return INSN; - } -"p"{DIGIT} { - yytext[yyleng] = 0; - yylval.processor = strtoul (yytext+1, 0, 0); - return PNUM; - } -{DIGIT}+ { - yytext[yyleng] = 0; - yylval.num = strtoul (yytext, 0, 0); - return NUM; - } -"0x"{HEX}+ { - yytext[yyleng] = 0; - yylval.num = strtoul (yytext, 0, 0); - return NUM; - } -{ALPHA}{ALNUM}* { - yytext[yyleng] = 0; - yylval.str = strdup (yytext); - return ID; - } -";"|"#" { - int c; - while ((c = input ()) != EOF) - { - if (c == '\n') - { - unput (c); - break; - } - } - } -"\n" { - insntbl_line++; - MDBG (("in lex, NL = %d (x%x)\n", NL, NL)); - return NL; - } -" "|"\t" { - } -. { - MDBG (("char = %x, %d\n", yytext[0], yytext[0])); - return yytext[0]; - } -%% - -#ifndef yywrap -int -yywrap () - { - return 1; - } -#endif diff --git a/contrib/binutils/gas/itbl-parse.y b/contrib/binutils/gas/itbl-parse.y deleted file mode 100644 index 9a0b7c3ccbd0..000000000000 --- a/contrib/binutils/gas/itbl-parse.y +++ /dev/null @@ -1,460 +0,0 @@ -/* itbl-parse.y - Copyright 1997 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. */ - -%{ - -/* - -Yacc grammar for instruction table entries. - -======================================================================= -Original Instruction table specification document: - - MIPS Coprocessor Table Specification - ==================================== - -This document describes the format of the MIPS coprocessor table. The -table specifies a list of valid functions, data registers and control -registers that can be used in coprocessor instructions. This list, -together with the coprocessor instruction classes listed below, -specifies the complete list of coprocessor instructions that will -be recognized and assembled by the GNU assembler. In effect, -this makes the GNU assembler table-driven, where the table is -specified by the programmer. - -The table is an ordinary text file that the GNU assembler reads when -it starts. Using the information in the table, the assembler -generates an internal list of valid coprocessor registers and -functions. The assembler uses this internal list in addition to the -standard MIPS registers and instructions which are built-in to the -assembler during code generation. - -To specify the coprocessor table when invoking the GNU assembler, use -the command line option "--itbl file", where file is the -complete name of the table, including path and extension. - -Examples: - - gas -t cop.tbl test.s -o test.o - gas -t /usr/local/lib/cop.tbl test.s -o test.o - gas --itbl d:\gnu\data\cop.tbl test.s -o test.o - -Only one table may be supplied during a single invocation of -the assembler. - - -Instruction classes -=================== - -Below is a list of the valid coprocessor instruction classes for -any given coprocessor "z". These instructions are already recognized -by the assembler, and are listed here only for reference. - -Class format instructions -------------------------------------------------- -Class1: - op base rt offset - LWCz rt,offset (base) - SWCz rt,offset (base) -Class2: - COPz sub rt rd 0 - MTCz rt,rd - MFCz rt,rd - CTCz rt,rd - CFCz rt,rd -Class3: - COPz CO cofun - COPz cofun -Class4: - COPz BC br offset - BCzT offset - BCzF offset -Class5: - COPz sub rt rd 0 - DMFCz rt,rd - DMTCz rt,rd -Class6: - op base rt offset - LDCz rt,offset (base) - SDCz rt,offset (base) -Class7: - COPz BC br offset - BCzTL offset - BCzFL offset - -The coprocessor table defines coprocessor-specific registers that can -be used with all of the above classes of instructions, where -appropriate. It also defines additional coprocessor-specific -functions for Class3 (COPz cofun) instructions, Thus, the table allows -the programmer to use convenient mnemonics and operands for these -functions, instead of the COPz mmenmonic and cofun operand. - -The names of the MIPS general registers and their aliases are defined -by the assembler and will be recognized as valid register names by the -assembler when used (where allowed) in coprocessor instructions. -However, the names and values of all coprocessor data and control -register mnemonics must be specified in the coprocessor table. - - -Table Grammar -============= - -Here is the grammar for the coprocessor table: - - table -> entry* - - entry -> [z entrydef] [comment] '\n' - - entrydef -> type name val - entrydef -> 'insn' name val funcdef ; type of entry (instruction) - - z -> 'p'['0'..'3'] ; processor number - type -> ['dreg' | 'creg' | 'greg' ] ; type of entry (register) - ; 'dreg', 'creg' or 'greg' specifies a data, control, or general - ; register mnemonic, respectively - name -> [ltr|dec]* ; mnemonic of register/function - val -> [dec|hex] ; register/function number (integer constant) - - funcdef -> frange flags fields - ; bitfield range for opcode - ; list of fields' formats - fields -> field* - field -> [','] ftype frange flags - flags -> ['*' flagexpr] - flagexpr -> '[' flagexpr ']' - flagexpr -> val '|' flagexpr - ftype -> [ type | 'immed' | 'addr' ] - ; 'immed' specifies an immediate value; see grammar for "val" above - ; 'addr' specifies a C identifier; name of symbol to be resolved at - ; link time - frange -> ':' val '-' val ; starting to ending bit positions, where - ; where 0 is least significant bit - frange -> (null) ; default range of 31-0 will be assumed - - comment -> [';'|'#'] [char]* - 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 - - -Examples -======== - -Example 1: - -The table: - - p1 dreg d1 1 ; data register "d1" for COP1 has value 1 - p1 creg c3 3 ; ctrl register "c3" for COP1 has value 3 - p3 func fill 0x1f:24-20 ; function "fill" for COP3 has value 31 and - ; no fields - -will allow the assembler to accept the following coprocessor instructions: - - LWC1 d1,0x100 ($2) - fill - -Here, the general purpose register "$2", and instruction "LWC1", are standard -mnemonics built-in to the MIPS assembler. - - -Example 2: - -The table: - - p3 dreg d3 3 ; data register "d3" for COP3 has value 3 - p3 creg c2 22 ; control register "c2" for COP3 has value 22 - p3 func fee 0x1f:24-20 dreg:17-13 creg:12-8 immed:7-0 - ; function "fee" for COP3 has value 31, and 3 fields - ; consisting of a data register, a control register, - ; and an immediate value. - -will allow the assembler to accept the following coprocessor instruction: - - fee d3,c2,0x1 - -and will emit the object code: - - 31-26 25 24-20 19-18 17-13 12-8 7-0 - COPz CO fun dreg creg immed - 010011 1 11111 00 00011 10110 00000001 - - 0x4ff07601 - - -Example 3: - -The table: - - p3 dreg d3 3 ; data register "d3" for COP3 has value 3 - p3 creg c2 22 ; control register "c2" for COP3 has value 22 - p3 func fuu 0x01f00001 dreg:17-13 creg:12-8 - -will allow the assembler to accept the following coprocessor -instruction: - - fuu d3,c2 - -and will emit the object code: - - 31-26 25 24-20 19-18 17-13 12-8 7-0 - COPz CO fun dreg creg - 010011 1 11111 00 00011 10110 00000001 - - 0x4ff07601 - -In this way, the programmer can force arbitrary bits of an instruction -to have predefined values. - -======================================================================= -Additional notes: - -Encoding of ranges: -To handle more than one bit position range within an instruction, -use 0s to mask out the ranges which don't apply. -May decide to modify the syntax to allow commas separate multiple -ranges within an instruction (range','range). - -Changes in grammar: - The number of parms argument to the function entry -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. -Currently function names or mnemonics may be incorrectly parsed as keywords - -FIXME! hex is ambiguous with any digit - -*/ - -#include <stdio.h> -#include "itbl-ops.h" - -/* #define DEBUG */ - -#ifdef DEBUG -#ifndef DBG_LVL -#define DBG_LVL 1 -#endif -#else -#define DBG_LVL 0 -#endif - -#if DBG_LVL >= 1 -#define DBG(x) printf x -#else -#define DBG(x) -#endif - -#if DBG_LVL >= 2 -#define DBGL2(x) printf x -#else -#define DBGL2(x) -#endif - -static int sbit, ebit; -static struct itbl_entry *insn=0; -extern int insntbl_line; -int yyparse PARAMS ((void)); -int yylex PARAMS ((void)); -static int yyerror PARAMS ((const char *)); - -%} - -%union - { - char *str; - int num; - int processor; - unsigned long val; - } - -%token DREG CREG GREG IMMED ADDR INSN NUM ID NL PNUM -%type <val> value flags flagexpr -%type <num> number NUM ftype regtype pnum PNUM -%type <str> ID name - -%start insntbl - -%% - -insntbl: - entrys - ; - -entrys: - entry entrys - | - ; - -entry: - pnum regtype name value NL - { - DBG (("line %d: entry pnum=%d type=%d name=%s value=x%x\n", - insntbl_line, $1, $2, $3, $4)); - itbl_add_reg ($1, $2, $3, $4); - } - | pnum INSN name value range flags - { - DBG (("line %d: entry pnum=%d type=INSN name=%s value=x%x", - insntbl_line, $1, $3, $4)); - DBG ((" sbit=%d ebit=%d flags=0x%x\n", sbit, ebit, $6)); - insn=itbl_add_insn ($1, $3, $4, sbit, ebit, $6); - } - fieldspecs NL - {} - | NL - | error NL - ; - -fieldspecs: - ',' fieldspec fieldspecs - | fieldspec fieldspecs - | - ; - -ftype: - regtype - { - DBGL2 (("ftype\n")); - $$ = $1; - } - | ADDR - { - DBGL2 (("addr\n")); - $$ = ADDR; - } - | IMMED - { - DBGL2 (("immed\n")); - $$ = IMMED; - } - ; - -fieldspec: - ftype range flags - { - DBG (("line %d: field type=%d sbit=%d ebit=%d, flags=0x%x\n", - insntbl_line, $1, sbit, ebit, $3)); - itbl_add_operand (insn, $1, sbit, ebit, $3); - } - ; - -flagexpr: - NUM '|' flagexpr - { - $$ = $1 | $3; - } - | '[' flagexpr ']' - { - $$ = $2; - } - | NUM - { - $$ = $1; - } - ; - -flags: - '*' flagexpr - { - DBGL2 (("flags=%d\n", $2)); - $$ = $2; - } - | - { - $$ = 0; - } - ; - -range: - ':' NUM '-' NUM - { - DBGL2 (("range %d %d\n", $2, $4)); - sbit = $2; - ebit = $4; - } - | - { - sbit = 31; - ebit = 0; - } - ; - -pnum: - PNUM - { - DBGL2 (("pnum=%d\n",$1)); - $$ = $1; - } - ; - -regtype: - DREG - { - DBGL2 (("dreg\n")); - $$ = DREG; - } - | CREG - { - DBGL2 (("creg\n")); - $$ = CREG; - } - | GREG - { - DBGL2 (("greg\n")); - $$ = GREG; - } - ; - -name: - ID - { - DBGL2 (("name=%s\n",$1)); - $$ = $1; - } - ; - -number: - NUM - { - DBGL2 (("num=%d\n",$1)); - $$ = $1; - } - ; - -value: - NUM - { - DBGL2 (("val=x%x\n",$1)); - $$ = $1; - } - ; -%% - -static int -yyerror (msg) - const char *msg; -{ - printf ("line %d: %s\n", insntbl_line, msg); - return 0; -} diff --git a/contrib/binutils/gas/tc.h b/contrib/binutils/gas/tc.h index 5d7b44d66457..f4a2826ae07f 100644 --- a/contrib/binutils/gas/tc.h +++ b/contrib/binutils/gas/tc.h @@ -24,6 +24,25 @@ extern const pseudo_typeS md_pseudo_table[]; +/* JF moved this here from as.h under the theory that nobody except MACHINE.c + and write.c care about it anyway. */ + +struct relax_type +{ + /* Forward reach. Signed number. > 0. */ + long rlx_forward; + /* Backward reach. Signed number. < 0. */ + long rlx_backward; + + /* Bytes length of this address. */ + unsigned char rlx_length; + + /* Next longer relax-state. 0 means there is no 'next' relax-state. */ + relax_substateT rlx_more; +}; + +typedef struct relax_type relax_typeS; + extern const int md_reloc_size; /* Size of a relocation record */ char *md_atof (int what_statement_type, char *literalP, int *sizeP); diff --git a/contrib/binutils/gprof/po/Make-in b/contrib/binutils/gprof/po/Make-in deleted file mode 100644 index 833d418224cb..000000000000 --- a/contrib/binutils/gprof/po/Make-in +++ /dev/null @@ -1,253 +0,0 @@ -# Makefile for program source directory in GNU NLS utilities package. -# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu> -# -# This file file be copied and used freely without restrictions. It can -# be used in projects which are not available under the GNU Public License -# but which still want to provide support for the GNU gettext functionality. -# Please note that the actual code is *not* freely available. - -PACKAGE = @PACKAGE@ -VERSION = @VERSION@ - -SHELL = /bin/sh -@SET_MAKE@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -exec_prefix = @exec_prefix@ -datadir = $(prefix)/@DATADIRNAME@ -localedir = $(datadir)/locale -gnulocaledir = $(prefix)/share/locale -gettextsrcdir = $(prefix)/share/gettext/po -subdir = po - -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -MKINSTALLDIRS = @MKINSTALLDIRS@ - -CC = @CC@ -GENCAT = @GENCAT@ -GMSGFMT = PATH=../src:$$PATH @GMSGFMT@ -MSGFMT = @MSGFMT@ -XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ -MSGMERGE = PATH=../src:$$PATH msgmerge - -DEFS = @DEFS@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ - -INCLUDES = -I.. -I$(top_srcdir)/intl - -COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) - -SOURCES = cat-id-tbl.c -POFILES = @POFILES@ -GMOFILES = @GMOFILES@ -DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \ -stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES) - -POTFILES = \ - -CATALOGS = @CATALOGS@ -CATOBJEXT = @CATOBJEXT@ -INSTOBJEXT = @INSTOBJEXT@ - -.SUFFIXES: -.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat - -.c.o: - $(COMPILE) $< - -.po.pox: - $(MAKE) $(PACKAGE).pot - $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox - -.po.mo: - $(MSGFMT) -o $@ $< - -.po.gmo: - file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ - && test -w $$file \ - && (rm -f $$file && $(GMSGFMT) -o $$file $< ) \ - || echo "$$file is not writable" - -.po.cat: - sed -f ../intl/po2msg.sed < $< > $*.msg \ - && rm -f $@ && $(GENCAT) $@ $*.msg - - -all: all-@USE_NLS@ - -all-yes: $(CATALOGS) @MAINT@ $(PACKAGE).pot -all-no: - -$(srcdir)/$(PACKAGE).pot: $(POTFILES) - $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ - --add-comments --keyword=_ --keyword=N_ \ - --files-from=$(srcdir)/POTFILES.in - rm -f $(srcdir)/$(PACKAGE).pot - mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot - -$(srcdir)/cat-id-tbl.c: stamp-cat-id; @: -$(srcdir)/stamp-cat-id: $(PACKAGE).pot - rm -f cat-id-tbl.tmp - sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \ - | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp - if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \ - rm cat-id-tbl.tmp; \ - else \ - echo cat-id-tbl.c changed; \ - rm -f $(srcdir)/cat-id-tbl.c; \ - mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \ - fi - cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id - - -install: install-exec install-data -install-exec: -install-info: -install-data: install-data-@USE_NLS@ -install-data-no: all -install-data-yes: all - if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $(datadir); \ - else \ - $(top_srcdir)/mkinstalldirs $(datadir); \ - fi - @catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - case "$$cat" in \ - *.gmo) destdir=$(gnulocaledir);; \ - *) destdir=$(localedir);; \ - esac; \ - lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - dir=$$destdir/$$lang/LC_MESSAGES; \ - if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $$dir; \ - else \ - $(top_srcdir)/mkinstalldirs $$dir; \ - fi; \ - if test -r $$cat; then \ - $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ - echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ - else \ - $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ - echo "installing $(srcdir)/$$cat as" \ - "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ - fi; \ - if test -r $$cat.m; then \ - $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ - echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ - else \ - if test -r $(srcdir)/$$cat.m ; then \ - $(INSTALL_DATA) $(srcdir)/$$cat.m \ - $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ - echo "installing $(srcdir)/$$cat as" \ - "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ - else \ - true; \ - fi; \ - fi; \ - done - if test "$(PACKAGE)" = "gettext"; then \ - if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $(gettextsrcdir); \ - else \ - $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ - fi; \ - $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ - $(gettextsrcdir)/Makefile.in.in; \ - else \ - : ; \ - fi - -# Define this as empty until I found a useful application. -installcheck: - -uninstall: - catalogs='$(CATALOGS)'; \ - 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; \ - done - rm -f $(gettextsrcdir)/po-Makefile.in.in - -check: all - -cat-id-tbl.o: ../intl/libgettext.h - -dvi info tags TAGS ID: - -mostlyclean: - rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp - rm -fr *.o - -clean: mostlyclean - -distclean: clean - rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m - -maintainer-clean: distclean - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - rm -f $(GMOFILES) - -distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) -dist distdir: update-po $(DISTFILES) - dists="$(DISTFILES)"; \ - for file in $$dists; do \ - ln $(srcdir)/$$file $(distdir) 2> /dev/null \ - || cp -p $(srcdir)/$$file $(distdir); \ - done - -update-po: Makefile - $(MAKE) $(PACKAGE).pot - PATH=`pwd`/../src:$$PATH; \ - cd $(srcdir); \ - catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - mv $$lang.po $$lang.old.po; \ - echo "$$lang:"; \ - if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ - rm -f $$lang.old.po; \ - else \ - echo "msgmerge for $$cat failed!"; \ - rm -f $$lang.po; \ - mv $$lang.old.po $$lang.po; \ - fi; \ - done - -POTFILES: POTFILES.in - ( if test 'x$(srcdir)' != 'x.'; then \ - posrcprefix='$(top_srcdir)/'; \ - else \ - posrcprefix="../"; \ - fi; \ - rm -f $@-t $@ \ - && (sed -e '/^#/d' -e '/^[ ]*$$/d' \ - -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ - | sed -e '$$s/\\$$//') > $@-t \ - && chmod a-w $@-t \ - && mv $@-t $@ ) - -POTFILES.in: @MAINT@ ../Makefile - cd .. && $(MAKE) po/POTFILES.in - -Makefile: Make-in ../config.status POTFILES - cd .. \ - && CONFIG_FILES=$(subdir)/Makefile.in:$(subdir)/Make-in \ - CONFIG_HEADERS= $(SHELL) ./config.status - -# Tell versions [3.59,3.63) of GNU make not to export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/contrib/binutils/gprof/po/POTFILES.in b/contrib/binutils/gprof/po/POTFILES.in deleted file mode 100644 index 6ea40f18244c..000000000000 --- a/contrib/binutils/gprof/po/POTFILES.in +++ /dev/null @@ -1,38 +0,0 @@ -alpha.c -basic_blocks.c -basic_blocks.h -call_graph.c -call_graph.h -cg_arcs.c -cg_arcs.h -cg_dfn.c -cg_dfn.h -cg_print.c -cg_print.h -corefile.c -corefile.h -gmon.h -gmon_io.c -gmon_io.h -gmon_out.h -gprof.c -gprof.h -hertz.c -hertz.h -hist.c -hist.h -i386.c -mips.c -search_list.c -search_list.h -source.c -source.h -sparc.c -sym_ids.c -sym_ids.h -symtab.c -symtab.h -tahoe.c -utils.c -utils.h -vax.c diff --git a/contrib/binutils/gprof/po/gprof.pot b/contrib/binutils/gprof/po/gprof.pot deleted file mode 100644 index ab103f4007e0..000000000000 --- a/contrib/binutils/gprof/po/gprof.pot +++ /dev/null @@ -1,507 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2002-10-30 10:08-0500\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" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: alpha.c:103 mips.c:57 -msgid "<indirect child>" -msgstr "" - -#: alpha.c:120 mips.c:74 -#, c-format -msgid "[find_call] %s: 0x%lx to 0x%lx\n" -msgstr "" - -#: alpha.c:142 -#, c-format -msgid "[find_call] 0x%lx: jsr%s <indirect_child>\n" -msgstr "" - -#: alpha.c:152 -#, c-format -msgid "[find_call] 0x%lx: bsr" -msgstr "" - -#: basic_blocks.c:134 call_graph.c:94 hist.c:98 -#, c-format -msgid "%s: %s: unexpected end of file\n" -msgstr "" - -#: basic_blocks.c:202 -#, c-format -msgid "%s: warning: ignoring basic-block exec counts (use -l or --line)\n" -msgstr "" - -#. FIXME: This only works if bfd_vma is unsigned long. -#: basic_blocks.c:295 basic_blocks.c:305 -#, c-format -msgid "%s:%d: (%s:0x%lx) %lu executions\n" -msgstr "" - -#: basic_blocks.c:296 basic_blocks.c:306 -msgid "<unknown>" -msgstr "" - -#: basic_blocks.c:553 -#, c-format -msgid "" -"\n" -"\n" -"Top %d Lines:\n" -"\n" -" Line Count\n" -"\n" -msgstr "" - -#: basic_blocks.c:577 -msgid "" -"\n" -"Execution Summary:\n" -"\n" -msgstr "" - -#: basic_blocks.c:578 -#, c-format -msgid "%9ld Executable lines in this file\n" -msgstr "" - -#: basic_blocks.c:580 -#, c-format -msgid "%9ld Lines executed\n" -msgstr "" - -#: basic_blocks.c:581 -#, c-format -msgid "%9.2f Percent of the file executed\n" -msgstr "" - -#: basic_blocks.c:585 -#, c-format -msgid "" -"\n" -"%9lu Total number of line executions\n" -msgstr "" - -#: basic_blocks.c:587 -#, c-format -msgid "%9.2f Average executions per line\n" -msgstr "" - -#: call_graph.c:71 -#, c-format -msgid "[cg_tally] arc from %s to %s traversed %lu times\n" -msgstr "" - -#: cg_print.c:73 -msgid "" -"\t\t Call graph (explanation follows)\n" -"\n" -msgstr "" - -#: cg_print.c:75 -msgid "" -"\t\t\tCall graph\n" -"\n" -msgstr "" - -#: cg_print.c:78 hist.c:363 -#, c-format -msgid "" -"\n" -"granularity: each sample hit covers %ld byte(s)" -msgstr "" - -#: cg_print.c:82 -#, c-format -msgid "" -" for %.2f%% of %.2f seconds\n" -"\n" -msgstr "" - -#: cg_print.c:86 -msgid "" -" no time propagated\n" -"\n" -msgstr "" - -#: cg_print.c:95 cg_print.c:98 cg_print.c:100 -msgid "called" -msgstr "" - -#: cg_print.c:95 cg_print.c:100 -msgid "total" -msgstr "" - -#: cg_print.c:95 -msgid "parents" -msgstr "" - -#: cg_print.c:97 cg_print.c:98 -msgid "index" -msgstr "" - -#: cg_print.c:97 -#, c-format -msgid "%time" -msgstr "" - -#: cg_print.c:97 cg_print.c:98 -msgid "self" -msgstr "" - -#: cg_print.c:97 -msgid "descendants" -msgstr "" - -#: cg_print.c:98 hist.c:389 -msgid "name" -msgstr "" - -#: cg_print.c:100 -msgid "children" -msgstr "" - -#: cg_print.c:105 -#, c-format -msgid "index %% time self children called name\n" -msgstr "" - -#: cg_print.c:129 -#, c-format -msgid " <cycle %d as a whole> [%d]\n" -msgstr "" - -#: cg_print.c:363 -#, c-format -msgid "%6.6s %5.5s %7.7s %11.11s %7.7s %7.7s <spontaneous>\n" -msgstr "" - -#: cg_print.c:364 -#, c-format -msgid "%6.6s %5.5s %7.7s %7.7s %7.7s %7.7s <spontaneous>\n" -msgstr "" - -#: cg_print.c:604 -msgid "" -"Index by function name\n" -"\n" -msgstr "" - -#: cg_print.c:661 cg_print.c:670 -#, c-format -msgid "<cycle %d>" -msgstr "" - -#: corefile.c:64 -#, c-format -msgid "%s: could not open %s.\n" -msgstr "" - -#: corefile.c:78 corefile.c:112 -#, c-format -msgid "%s: unable to parse mapping file %s.\n" -msgstr "" - -#: corefile.c:155 -#, c-format -msgid "%s: %s: not in a.out format\n" -msgstr "" - -#: corefile.c:166 -#, c-format -msgid "%s: can't find .text section in %s\n" -msgstr "" - -#: corefile.c:225 -#, c-format -msgid "%s: ran out room for %lu bytes of text space\n" -msgstr "" - -#: corefile.c:239 -#, c-format -msgid "%s: can't do -c\n" -msgstr "" - -#: corefile.c:276 -#, c-format -msgid "%s: -c not supported on architecture %s\n" -msgstr "" - -#: corefile.c:447 -#, c-format -msgid "%s: file `%s' has no symbols\n" -msgstr "" - -#: corefile.c:748 -#, 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 -#, c-format -msgid "%s: bits per address has unexpected value of %u\n" -msgstr "" - -#: gmon_io.c:288 gmon_io.c:383 -#, c-format -msgid "%s: file too short to be a gmon file\n" -msgstr "" - -#: gmon_io.c:298 gmon_io.c:432 -#, c-format -msgid "%s: file `%s' has bad magic cookie\n" -msgstr "" - -#: gmon_io.c:309 -#, c-format -msgid "%s: file `%s' has unsupported version %d\n" -msgstr "" - -#: gmon_io.c:339 -#, c-format -msgid "%s: %s: found bad tag %d (file corrupted?)\n" -msgstr "" - -#: gmon_io.c:405 -#, c-format -msgid "%s: profiling rate incompatible with first gmon file\n" -msgstr "" - -#: gmon_io.c:465 -#, c-format -msgid "%s: incompatible with first gmon file\n" -msgstr "" - -#: gmon_io.c:493 -#, c-format -msgid "%s: file '%s' does not appear to be in gmon.out format\n" -msgstr "" - -#: gmon_io.c:514 -#, c-format -msgid "%s: unexpected EOF after reading %d/%d bins\n" -msgstr "" - -#: gmon_io.c:547 -msgid "time is in ticks, not seconds\n" -msgstr "" - -#: gmon_io.c:553 gmon_io.c:742 -#, c-format -msgid "%s: don't know how to deal with file format %d\n" -msgstr "" - -#: gmon_io.c:560 -#, c-format -msgid "File `%s' (version %d) contains:\n" -msgstr "" - -#: gmon_io.c:563 -#, c-format -msgid "\t%d histogram record\n" -msgstr "" - -#: gmon_io.c:564 -#, c-format -msgid "\t%d histogram records\n" -msgstr "" - -#: gmon_io.c:566 -#, c-format -msgid "\t%d call-graph record\n" -msgstr "" - -#: gmon_io.c:567 -#, c-format -msgid "\t%d call-graph records\n" -msgstr "" - -#: gmon_io.c:569 -#, c-format -msgid "\t%d basic-block count record\n" -msgstr "" - -#: gmon_io.c:570 -#, c-format -msgid "\t%d basic-block count records\n" -msgstr "" - -#: gprof.c:163 -#, c-format -msgid "" -"Usage: %s [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\n" -"\t[-d[num]] [-k from/to] [-m min-count] [-t table-length]\n" -"\t[--[no-]annotated-source[=name]] [--[no-]exec-counts[=name]]\n" -"\t[--[no-]flat-profile[=name]] [--[no-]graph[=name]]\n" -"\t[--[no-]time=name] [--all-lines] [--brief] [--debug[=level]]\n" -"\t[--function-ordering] [--file-ordering]\n" -"\t[--directory-path=dirs] [--display-unused-functions]\n" -"\t[--file-format=name] [--file-info] [--help] [--line] [--min-count=n]\n" -"\t[--no-static] [--print-path] [--separate-files]\n" -"\t[--static-call-graph] [--sum] [--table-length=len] [--traditional]\n" -"\t[--version] [--width=n] [--ignore-non-functions]\n" -"\t[--demangle[=STYLE]] [--no-demangle]\n" -"\t[image-file] [profile-file...]\n" -msgstr "" - -#: gprof.c:179 -#, c-format -msgid "Report bugs to %s\n" -msgstr "" - -#: gprof.c:253 -#, c-format -msgid "%s: debugging not supported; -d ignored\n" -msgstr "" - -#: gprof.c:333 -#, c-format -msgid "%s: unknown file format %s\n" -msgstr "" - -#. This output is intended to follow the GNU standards document. -#: gprof.c:417 -#, c-format -msgid "GNU gprof %s\n" -msgstr "" - -#: gprof.c:418 -msgid "" -"Based on BSD gprof, copyright 1983 Regents of the University of California.\n" -msgstr "" - -#: gprof.c:419 -msgid "" -"This program is free software. This program has absolutely no warranty.\n" -msgstr "" - -#: gprof.c:460 -#, c-format -msgid "%s: unknown demangling style `%s'\n" -msgstr "" - -#: gprof.c:480 -#, c-format -msgid "" -"%s: Only one of --function-ordering and --file-ordering may be specified.\n" -msgstr "" - -#: gprof.c:578 -#, c-format -msgid "%s: sorry, file format `prof' is not yet supported\n" -msgstr "" - -#: gprof.c:639 -#, c-format -msgid "%s: gmon.out file is missing histogram\n" -msgstr "" - -#: gprof.c:646 -#, c-format -msgid "%s: gmon.out file is missing call-graph data\n" -msgstr "" - -#: hist.c:127 -#, c-format -msgid "%s: `%s' is incompatible with first gmon file\n" -msgstr "" - -#: hist.c:143 -#, c-format -msgid "%s: %s: unexpected EOF after reading %d of %d samples\n" -msgstr "" - -#: hist.c:359 -#, c-format -msgid "%c%c/call" -msgstr "" - -#: hist.c:367 -#, c-format -msgid "" -" for %.2f%% of %.2f %s\n" -"\n" -msgstr "" - -#: hist.c:373 -#, c-format -msgid "" -"\n" -"Each sample counts as %g %s.\n" -msgstr "" - -#: hist.c:378 -msgid "" -" no time accumulated\n" -"\n" -msgstr "" - -#: hist.c:385 -msgid "cumulative" -msgstr "" - -#: hist.c:385 -msgid "self " -msgstr "" - -#: hist.c:385 -msgid "total " -msgstr "" - -#: hist.c:388 -msgid "time" -msgstr "" - -#: hist.c:388 -msgid "calls" -msgstr "" - -#: hist.c:481 -msgid "" -"\n" -"\n" -"\n" -"flat profile:\n" -msgstr "" - -#: hist.c:487 -msgid "Flat profile:\n" -msgstr "" - -#: mips.c:85 -#, c-format -msgid "[find_call] 0x%lx: jal" -msgstr "" - -#: mips.c:110 -#, c-format -msgid "[find_call] 0x%lx: jalr\n" -msgstr "" - -#: source.c:166 -#, c-format -msgid "%s: could not locate `%s'\n" -msgstr "" - -#: source.c:241 -#, c-format -msgid "*** File %s:\n" -msgstr "" - -#: utils.c:109 -#, c-format -msgid " <cycle %d>" -msgstr "" diff --git a/contrib/binutils/include/callback.h b/contrib/binutils/include/callback.h deleted file mode 100644 index 30752842ed90..000000000000 --- 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/elf/arm-oabi.h b/contrib/binutils/include/elf/arm-oabi.h deleted file mode 100644 index da5e7316eed6..000000000000 --- a/contrib/binutils/include/elf/arm-oabi.h +++ /dev/null @@ -1,88 +0,0 @@ -/* ARM ELF support for BFD. - Copyright (C) 1998, 1999, 2000 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. */ - -#ifndef _ELF_ARM_H -#define _ELF_ARM_H - -#include "elf/reloc-macros.h" - -/* Processor specific flags for the ELF header e_flags field. */ -#define EF_ARM_RELEXEC 0x01 -#define EF_ARM_HASENTRY 0x02 -#define EF_INTERWORK 0x04 -#define EF_APCS_26 0x08 -#define EF_APCS_FLOAT 0x10 -#define EF_PIC 0x20 -#define EF_ALIGN8 0x40 /* 8-bit structure alignment is in use. */ -#define EF_NEW_ABI 0x80 -#define EF_OLD_ABI 0x100 - -/* Local aliases for some flags to match names used by COFF port. */ -#define F_INTERWORK EF_INTERWORK -#define F_APCS26 EF_APCS_26 -#define F_APCS_FLOAT EF_APCS_FLOAT -#define F_PIC EF_PIC - -/* Additional symbol types for Thumb. */ -#define STT_ARM_TFUNC STT_LOPROC /* A Thumb function. */ -#define STT_ARM_16BIT STT_HIPROC /* A Thumb label. */ - -/* ARM-specific values for sh_flags. */ -#define SHF_ENTRYSECT 0x10000000 /* Section contains an entry point. */ -#define SHF_COMDEF 0x80000000 /* Section may be multiply defined in the input to a link step. */ - -/* ARM-specific program header flags. */ -#define PF_ARM_SB 0x10000000 /* Segment contains the location addressed by the static base. */ - -/* Relocation types. */ -START_RELOC_NUMBERS (elf_arm_reloc_type) - RELOC_NUMBER (R_ARM_NONE, 0) - RELOC_NUMBER (R_ARM_PC24, 1) - RELOC_NUMBER (R_ARM_ABS32, 2) - RELOC_NUMBER (R_ARM_REL32, 3) - RELOC_NUMBER (R_ARM_ABS8, 4) - RELOC_NUMBER (R_ARM_ABS16, 5) - RELOC_NUMBER (R_ARM_ABS12, 6) - RELOC_NUMBER (R_ARM_THM_ABS5, 7) - RELOC_NUMBER (R_ARM_THM_PC22, 8) - RELOC_NUMBER (R_ARM_SBREL32, 9) - RELOC_NUMBER (R_ARM_AMP_VCALL9, 10) - RELOC_NUMBER (R_ARM_THM_PC11, 11) /* Cygnus extension to abi: Thumb unconditional branch. */ - RELOC_NUMBER (R_ARM_THM_PC9, 12) /* Cygnus extension to abi: Thumb conditional branch. */ - RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 13) - RELOC_NUMBER (R_ARM_GNU_VTENTRY, 14) - RELOC_NUMBER (R_ARM_COPY, 20) /* Copy symbol at runtime. */ - RELOC_NUMBER (R_ARM_GLOB_DAT, 21) /* Create GOT entry. */ - RELOC_NUMBER (R_ARM_JUMP_SLOT, 22) /* Create PLT entry. */ - RELOC_NUMBER (R_ARM_RELATIVE, 23) /* Adjust by program base. */ - RELOC_NUMBER (R_ARM_GOTOFF, 24) /* 32 bit offset to GOT. */ - RELOC_NUMBER (R_ARM_GOTPC, 25) /* 32 bit PC relative offset to GOT. */ - RELOC_NUMBER (R_ARM_GOT32, 26) /* 32 bit GOT entry. */ - RELOC_NUMBER (R_ARM_PLT32, 27) /* 32 bit PLT address. */ - FAKE_RELOC (FIRST_INVALID_RELOC, 28) - FAKE_RELOC (LAST_INVALID_RELOC, 249) - RELOC_NUMBER (R_ARM_RSBREL32, 250) - RELOC_NUMBER (R_ARM_THM_RPC22, 251) - RELOC_NUMBER (R_ARM_RREL32, 252) - RELOC_NUMBER (R_ARM_RABS32, 253) - RELOC_NUMBER (R_ARM_RPC24, 254) - RELOC_NUMBER (R_ARM_RBASE, 255) -END_RELOC_NUMBERS - -#endif diff --git a/contrib/binutils/include/elf/po/Make-in b/contrib/binutils/include/elf/po/Make-in deleted file mode 100644 index 0552db1feef3..000000000000 --- a/contrib/binutils/include/elf/po/Make-in +++ /dev/null @@ -1,251 +0,0 @@ -# Makefile for program source directory in GNU NLS utilities package. -# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu> -# -# This file file be copied and used freely without restrictions. It can -# be used in projects which are not available under the GNU Public License -# but which still want to provide support for the GNU gettext functionality. -# Please note that the actual code is *not* freely available. - -PACKAGE = @PACKAGE@ -VERSION = @VERSION@ - -SHELL = /bin/sh -@SET_MAKE@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -exec_prefix = @exec_prefix@ -datadir = $(prefix)/@DATADIRNAME@ -localedir = $(datadir)/locale -gnulocaledir = $(prefix)/share/locale -gettextsrcdir = $(prefix)/share/gettext/po -subdir = po - -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -MKINSTALLDIRS = @MKINSTALLDIRS@ - -CC = @CC@ -GENCAT = @GENCAT@ -GMSGFMT = PATH=../src:$$PATH @GMSGFMT@ -MSGFMT = @MSGFMT@ -XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ -MSGMERGE = PATH=../src:$$PATH msgmerge - -DEFS = @DEFS@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ - -INCLUDES = -I.. -I$(top_srcdir)/intl - -COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) - -SOURCES = cat-id-tbl.c -POFILES = @POFILES@ -GMOFILES = @GMOFILES@ -DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \ -stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES) - -POTFILES = \ - -CATALOGS = @CATALOGS@ -CATOBJEXT = @CATOBJEXT@ -INSTOBJEXT = @INSTOBJEXT@ - -.SUFFIXES: -.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat - -.c.o: - $(COMPILE) $< - -.po.pox: - $(MAKE) $(PACKAGE).pot - $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox - -.po.mo: - $(MSGFMT) -o $@ $< - -.po.gmo: - file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ - && rm -f $$file && $(GMSGFMT) -o $$file $< - -.po.cat: - sed -f ../intl/po2msg.sed < $< > $*.msg \ - && rm -f $@ && $(GENCAT) $@ $*.msg - - -all: all-@USE_NLS@ - -all-yes: $(CATALOGS) @MAINT@ $(PACKAGE).pot -all-no: - -$(srcdir)/$(PACKAGE).pot: $(POTFILES) - $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ - --add-comments --keyword=_ --keyword=N_ \ - --files-from=$(srcdir)/POTFILES.in - rm -f $(srcdir)/$(PACKAGE).pot - mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot - -$(srcdir)/cat-id-tbl.c: stamp-cat-id; @: -$(srcdir)/stamp-cat-id: $(PACKAGE).pot - rm -f cat-id-tbl.tmp - sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \ - | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp - if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \ - rm cat-id-tbl.tmp; \ - else \ - echo cat-id-tbl.c changed; \ - rm -f $(srcdir)/cat-id-tbl.c; \ - mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \ - fi - cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id - - -install: install-exec install-data -install-exec: -install-info: -install-data: install-data-@USE_NLS@ -install-data-no: all -install-data-yes: all - if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $(datadir); \ - else \ - $(top_srcdir)/mkinstalldirs $(datadir); \ - fi - @catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - case "$$cat" in \ - *.gmo) destdir=$(gnulocaledir);; \ - *) destdir=$(localedir);; \ - esac; \ - lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - dir=$$destdir/$$lang/LC_MESSAGES; \ - if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $$dir; \ - else \ - $(top_srcdir)/mkinstalldirs $$dir; \ - fi; \ - if test -r $$cat; then \ - $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ - echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ - else \ - $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ - echo "installing $(srcdir)/$$cat as" \ - "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ - fi; \ - if test -r $$cat.m; then \ - $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ - echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ - else \ - if test -r $(srcdir)/$$cat.m ; then \ - $(INSTALL_DATA) $(srcdir)/$$cat.m \ - $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ - echo "installing $(srcdir)/$$cat as" \ - "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ - else \ - true; \ - fi; \ - fi; \ - done - if test "$(PACKAGE)" = "gettext"; then \ - if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $(gettextsrcdir); \ - else \ - $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ - fi; \ - $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ - $(gettextsrcdir)/Makefile.in.in; \ - else \ - : ; \ - fi - -# Define this as empty until I found a useful application. -installcheck: - -uninstall: - catalogs='$(CATALOGS)'; \ - 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; \ - done - rm -f $(gettextsrcdir)/po-Makefile.in.in - -check: all - -cat-id-tbl.o: ../intl/libgettext.h - -dvi info tags TAGS ID: - -mostlyclean: - rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp - rm -fr *.o - -clean: mostlyclean - -distclean: clean - rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m - -maintainer-clean: distclean - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - rm -f $(GMOFILES) - -distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) -dist distdir: update-po $(DISTFILES) - dists="$(DISTFILES)"; \ - for file in $$dists; do \ - ln $(srcdir)/$$file $(distdir) 2> /dev/null \ - || cp -p $(srcdir)/$$file $(distdir); \ - done - -update-po: Makefile - $(MAKE) $(PACKAGE).pot - PATH=`pwd`/../src:$$PATH; \ - cd $(srcdir); \ - catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - mv $$lang.po $$lang.old.po; \ - echo "$$lang:"; \ - if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ - rm -f $$lang.old.po; \ - else \ - echo "msgmerge for $$cat failed!"; \ - rm -f $$lang.po; \ - mv $$lang.old.po $$lang.po; \ - fi; \ - done - -POTFILES: POTFILES.in - ( if test 'x$(srcdir)' != 'x.'; then \ - posrcprefix='$(top_srcdir)/'; \ - else \ - posrcprefix="../"; \ - fi; \ - rm -f $@-t $@ \ - && (sed -e '/^#/d' -e '/^[ ]*$$/d' \ - -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ - | sed -e '$$s/\\$$//') > $@-t \ - && chmod a-w $@-t \ - && mv $@-t $@ ) - -POTFILES.in: @MAINT@ ../Makefile - cd .. && $(MAKE) po/POTFILES.in - -Makefile: Make-in ../config.status POTFILES - cd .. \ - && CONFIG_FILES=$(subdir)/Makefile.in:$(subdir)/Make-in \ - CONFIG_HEADERS= $(SHELL) ./config.status - -# Tell versions [3.59,3.63) of GNU make not to export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/contrib/binutils/include/elf/po/POTFILES.in b/contrib/binutils/include/elf/po/POTFILES.in deleted file mode 100644 index a3a05867fb25..000000000000 --- a/contrib/binutils/include/elf/po/POTFILES.in +++ /dev/null @@ -1,55 +0,0 @@ -addr2line.c -ar.c -arsup.c -arsup.h -bucomm.c -bucomm.h -budbg.h -coffdump.c -coffgrok.c -coffgrok.h -debug.c -debug.c -debug.h -dlltool.c -dlltool.h -dllwrap.c -dyn-string.c -dyn-string.h -filemode.c -ieee.c -ieee.c -is-ranlib.c -is-strip.c -maybe-ranlib.c -maybe-strip.c -nlmconv.c -nlmconv.h -nm.c -not-ranlib.c -not-strip.c -objcopy.c -objdump.c -prdbg.c -rdcoff.c -rdcoff.c -rddbg.c -rddbg.c -readelf.c -rename.c -resbin.c -rescoff.c -resrc.c -resres.c -size.c -srconv.c -stabs.c -stabs.c -strings.c -sysdump.c -version.c -windres.c -windres.h -winduni.c -winduni.h -wrstabs.c diff --git a/contrib/binutils/include/elf/po/binutils.pot b/contrib/binutils/include/elf/po/binutils.pot deleted file mode 100644 index ed7ba0c4282b..000000000000 --- a/contrib/binutils/include/elf/po/binutils.pot +++ /dev/null @@ -1,3756 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Free Software Foundation, Inc. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2000-04-05 14:09+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" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: ENCODING\n" - -#: addr2line.c:76 -#, c-format -msgid "" -"Usage: %s [-CfsHV] [-b bfdname] [--target=bfdname]\n" -" [-e executable] [--exe=executable] [--demangle]\n" -" [--basenames] [--functions] [addr addr ...]\n" -msgstr "" - -#: addr2line.c:83 ar.c:286 nlmconv.c:1141 nm.c:306 objcopy.c:358 objcopy.c:390 -#: objdump.c:277 readelf.c:1703 size.c:89 strings.c:512 windres.c:737 -#, c-format -msgid "Report bugs to %s\n" -msgstr "" - -#: addr2line.c:243 -#, c-format -msgid "%s: can not get addresses from archive" -msgstr "" - -#: ar.c:235 -#, c-format -msgid "no entry %s in archive\n" -msgstr "" - -#: ar.c:252 -#, c-format -msgid "" -"Usage: %s [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file " -"file...\n" -msgstr "" - -#: ar.c:255 -#, c-format -msgid " %s -M [<mri-script]\n" -msgstr "" - -#: ar.c:256 -msgid " commands:\n" -msgstr "" - -#: ar.c:257 -msgid " d - delete file(s) from the archive\n" -msgstr "" - -#: ar.c:258 -msgid " m[ab] - move file(s) in the archive\n" -msgstr "" - -#: ar.c:259 -msgid " p - print file(s) found in the archive\n" -msgstr "" - -#: ar.c:260 -msgid " q[f] - quick append file(s) to the archive\n" -msgstr "" - -#: ar.c:261 -msgid "" -" r[ab][f][u] - replace existing or insert new file(s) into the archive\n" -msgstr "" - -#: ar.c:262 -msgid " t - display contents of archive\n" -msgstr "" - -#: ar.c:263 -msgid " x[o] - extract file(s) from the archive\n" -msgstr "" - -#: ar.c:264 -msgid " command specific modifiers:\n" -msgstr "" - -#: ar.c:265 -msgid " [a] - put file(s) after [member-name]\n" -msgstr "" - -#: ar.c:266 -msgid " [b] - put file(s) before [member-name] (same as [i])\n" -msgstr "" - -#: ar.c:267 -msgid " [N] - use instance [count] of name\n" -msgstr "" - -#: ar.c:268 -msgid " [f] - truncate inserted file names\n" -msgstr "" - -#: ar.c:269 -msgid " [P] - use full path names when matching\n" -msgstr "" - -#: ar.c:270 -msgid " [o] - preserve original dates\n" -msgstr "" - -#: ar.c:271 -msgid "" -" [u] - only replace files that are newer than current archive " -"contents\n" -msgstr "" - -#: ar.c:272 -msgid " generic modifiers:\n" -msgstr "" - -#: ar.c:273 -msgid " [c] - do not warn if the library had to be created\n" -msgstr "" - -#: ar.c:274 -msgid " [s] - create an archive index (cf. ranlib)\n" -msgstr "" - -#: ar.c:275 -msgid " [S] - do not build a symbol table\n" -msgstr "" - -#: ar.c:276 -msgid " [v] - be verbose\n" -msgstr "" - -#: ar.c:277 -msgid " [V] - display the version number\n" -msgstr "" - -#: ar.c:281 -#, c-format -msgid "Usage: %s [-vV] archive\n" -msgstr "" - -#: ar.c:466 -msgid "two different operation options specified" -msgstr "" - -#: ar.c:541 -#, c-format -msgid "%s: illegal option -- %c\n" -msgstr "" - -#: ar.c:573 -msgid "no operation specified" -msgstr "" - -#: ar.c:576 -msgid "`u' is only meaningful with the `r' option." -msgstr "" - -#: ar.c:586 -msgid "`N' is only meaningful with the `x' and 'd' options." -msgstr "" - -#: ar.c:589 -msgid "Value for `N' must be positive." -msgstr "" - -#: ar.c:672 -#, c-format -msgid "%s: internal error -- this option not implemented\n" -msgstr "" - -#: ar.c:790 ar.c:841 ar.c:1283 objcopy.c:1104 -#, c-format -msgid "internal stat error on %s" -msgstr "" - -#: ar.c:810 ar.c:878 -#, c-format -msgid "%s is not a valid archive" -msgstr "" - -#: ar.c:846 -#, c-format -msgid "stat returns negative size for %s" -msgstr "" - -#: ar.c:967 -#, c-format -msgid "%s is not an archive" -msgstr "" - -#: ar.c:974 -#, c-format -msgid "%s: creating %s\n" -msgstr "" - -#: ar.c:1181 -#, c-format -msgid "No member named `%s'\n" -msgstr "" - -#: ar.c:1233 -#, c-format -msgid "%s: no entry %s in archive %s!\n" -msgstr "" - -#: ar.c:1395 -#, c-format -msgid "%s: no archive map to update" -msgstr "" - -#: arsup.c:87 -#, c-format -msgid "No entry %s in archive.\n" -msgstr "" - -#: arsup.c:119 -#, c-format -msgid "Can't open file %s\n" -msgstr "" - -#: arsup.c:167 -#, c-format -msgid "%s: Can't open output archive %s\n" -msgstr "" - -#: arsup.c:179 -#, c-format -msgid "%s: Can't open input archive %s\n" -msgstr "" - -#: arsup.c:185 -#, c-format -msgid "%s: file %s is not an archive\n" -msgstr "" - -#: arsup.c:226 -#, c-format -msgid "%s: no output archive specified yet\n" -msgstr "" - -#: arsup.c:246 arsup.c:281 arsup.c:317 arsup.c:337 arsup.c:395 -#, c-format -msgid "%s: no open output archive\n" -msgstr "" - -#: arsup.c:254 arsup.c:355 arsup.c:375 -#, c-format -msgid "%s: can't open file %s\n" -msgstr "" - -#: arsup.c:302 arsup.c:371 arsup.c:450 -#, c-format -msgid "%s: can't find module file %s\n" -msgstr "" - -#: arsup.c:402 -#, c-format -msgid "Current open archive is %s\n" -msgstr "" - -#: arsup.c:429 -#, c-format -msgid "%s: no open archive\n" -msgstr "" - -#: bucomm.c:139 -#, c-format -msgid "can't set BFD default target to `%s': %s" -msgstr "" - -#: bucomm.c:151 -#, c-format -msgid "%s: Matching formats:" -msgstr "" - -#: bucomm.c:168 -msgid "Supported targets:" -msgstr "" - -#: bucomm.c:170 -#, c-format -msgid "%s: supported targets:" -msgstr "" - -#: bucomm.c:263 -#, c-format -msgid "%s: bad number: %s" -msgstr "" - -#: coffdump.c:94 -#, c-format -msgid "#lines %d " -msgstr "" - -#: coffdump.c:456 sysdump.c:719 -#, c-format -msgid "%s: Print a human readable interpretation of a SYSROFF object file\n" -msgstr "" - -#: coffdump.c:498 srconv.c:1940 sysdump.c:755 -#, c-format -msgid "GNU %s version %s\n" -msgstr "" - -#: coffdump.c:516 srconv.c:1977 sysdump.c:775 -#, c-format -msgid "%s: no input file specified\n" -msgstr "" - -#: debug.c:653 -msgid "debug_add_to_current_namespace: no current file" -msgstr "" - -#: debug.c:736 -msgid "debug_start_source: no debug_set_filename call" -msgstr "" - -#: debug.c:795 -msgid "debug_record_function: no debug_set_filename call" -msgstr "" - -#: debug.c:851 -msgid "debug_record_parameter: no current function" -msgstr "" - -#: debug.c:885 -msgid "debug_end_function: no current function" -msgstr "" - -#: debug.c:891 -msgid "debug_end_function: some blocks were not closed" -msgstr "" - -#: debug.c:921 -msgid "debug_start_block: no current block" -msgstr "" - -#: debug.c:959 -msgid "debug_end_block: no current block" -msgstr "" - -#: debug.c:966 -msgid "debug_end_block: attempt to close top level block" -msgstr "" - -#: debug.c:992 -msgid "debug_record_line: no current unit" -msgstr "" - -#. FIXME -#: debug.c:1046 -msgid "debug_start_common_block: not implemented" -msgstr "" - -#. FIXME -#: debug.c:1058 -msgid "debug_end_common_block: not implemented" -msgstr "" - -#. FIXME. -#: debug.c:1152 -msgid "debug_record_label not implemented" -msgstr "" - -#: debug.c:1178 -msgid "debug_record_variable: no current file" -msgstr "" - -#: debug.c:1194 -msgid "debug_record_variable: no current block" -msgstr "" - -#: debug.c:1764 -msgid "debug_make_undefined_type: unsupported kind" -msgstr "" - -#: debug.c:1970 -msgid "debug_name_type: no current file" -msgstr "" - -#: debug.c:2018 -msgid "debug_tag_type: no current file" -msgstr "" - -#: debug.c:2026 -msgid "debug_tag_type: extra tag attempted" -msgstr "" - -#: debug.c:2066 -#, c-format -msgid "Warning: changing type size from %d to %d\n" -msgstr "" - -#: debug.c:2090 -msgid "debug_find_named_type: no current compilation unit" -msgstr "" - -#: debug.c:2197 -#, c-format -msgid "debug_get_real_type: circular debug information for %s\n" -msgstr "" - -#: debug.c:2662 -msgid "debug_write_type: illegal type encountered" -msgstr "" - -#: dlltool.c:770 dlltool.c:794 dlltool.c:819 -#, c-format -msgid "Internal error: Unknown machine type: %d\n" -msgstr "" - -#: dlltool.c:856 -#, c-format -msgid "Can't open def file: %s" -msgstr "" - -#: dlltool.c:861 -#, c-format -msgid "Processing def file: %s" -msgstr "" - -#: dlltool.c:865 -msgid "Processed def file" -msgstr "" - -#: dlltool.c:890 -#, c-format -msgid "Syntax error in def file %s:%d\n" -msgstr "" - -#: dlltool.c:923 -#, c-format -msgid "NAME: %s base: %x" -msgstr "" - -#: dlltool.c:926 -msgid "Can't have LIBRARY and NAME\n" -msgstr "" - -#: dlltool.c:942 -#, c-format -msgid "LIBRARY: %s base: %x" -msgstr "" - -#: dlltool.c:945 -#, c-format -msgid "%s: Can't have LIBRARY and NAME\n" -msgstr "" - -#: dlltool.c:1200 resrc.c:271 -#, c-format -msgid "wait: %s" -msgstr "" - -#: dlltool.c:1205 resrc.c:276 -#, c-format -msgid "subprocess got fatal signal %d" -msgstr "" - -#: dlltool.c:1211 -#, c-format -msgid "%s exited with status %d\n" -msgstr "" - -#: dlltool.c:1243 -#, c-format -msgid "Sucking in info from %s section in %s\n" -msgstr "" - -#: dlltool.c:1367 -#, c-format -msgid "Excluding symbol: %s\n" -msgstr "" - -#: dlltool.c:1462 dlltool.c:1473 nm.c:904 nm.c:915 objdump.c:444 objdump.c:461 -#, c-format -msgid "%s: no symbols\n" -msgstr "" - -#. FIXME: we ought to read in and block out the base relocations -#: dlltool.c:1500 -#, c-format -msgid "Done reading %s\n" -msgstr "" - -#: dlltool.c:1511 -#, c-format -msgid "Unable to open object file: %s" -msgstr "" - -#: dlltool.c:1514 -#, c-format -msgid "Scanning object file %s" -msgstr "" - -#: dlltool.c:1529 -#, c-format -msgid "Cannot produce mcore-elf dll from archive file: %s" -msgstr "" - -#: dlltool.c:1621 -msgid "Adding exports to output file" -msgstr "" - -#: dlltool.c:1666 -msgid "Added exports to output file" -msgstr "" - -#: dlltool.c:1790 -#, c-format -msgid "Generating export file: %s\n" -msgstr "" - -#: dlltool.c:1795 -#, c-format -msgid "Unable to open temporary assembler file: %s" -msgstr "" - -#: dlltool.c:1798 -#, c-format -msgid "Opened temporary file: %s" -msgstr "" - -#: dlltool.c:2012 -msgid "Generated exports file" -msgstr "" - -#: dlltool.c:2267 -#, c-format -msgid "bfd_open failed open stub file: %s" -msgstr "" - -#: dlltool.c:2270 -#, c-format -msgid "Creating stub file: %s" -msgstr "" - -#: dlltool.c:2657 -#, c-format -msgid "failed to open temporary head file: %s" -msgstr "" - -#: dlltool.c:2716 -#, c-format -msgid "failed to open temporary tail file: %s" -msgstr "" - -#: dlltool.c:2784 -#, c-format -msgid "Can't open .lib file: %s" -msgstr "" - -#: dlltool.c:2787 -#, c-format -msgid "Creating library file: %s\n" -msgstr "" - -#: dlltool.c:2846 -#, c-format -msgid "cannot delete %s: %s\n" -msgstr "" - -#: dlltool.c:2850 -msgid "Created lib file" -msgstr "" - -#: dlltool.c:2955 -#, c-format -msgid "Warning, ignoring duplicate EXPORT %s %d,%d\n" -msgstr "" - -#: dlltool.c:2961 -#, c-format -msgid "Error, duplicate EXPORT with oridinals: %s" -msgstr "" - -#: dlltool.c:3088 -msgid "Processing definitions" -msgstr "" - -#: dlltool.c:3126 -msgid "Processed definitions" -msgstr "" - -#. xgetext:c-format -#: dlltool.c:3137 -#, c-format -msgid "Usage %s <options> <object-files>\n" -msgstr "" - -#. xgetext:c-format -#: dlltool.c:3139 -#, c-format -msgid "" -" -m --machine <machine> Create as DLL for <machine>. [default: %s]\n" -msgstr "" - -#: dlltool.c:3140 -msgid "" -" possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, " -"ppc, thumb\n" -msgstr "" - -#: dlltool.c:3141 -msgid " -e --output-exp <outname> Generate an export file.\n" -msgstr "" - -#: dlltool.c:3142 -msgid " -l --output-lib <outname> Generate an interface library.\n" -msgstr "" - -#: dlltool.c:3143 -msgid " -a --add-indirect Add dll indirects to export file.\n" -msgstr "" - -#: dlltool.c:3144 -msgid "" -" -D --dllname <name> Name of input dll to put into interface lib.\n" -msgstr "" - -#: dlltool.c:3145 -msgid " -d --input-def <deffile> Name of .def file to be read in.\n" -msgstr "" - -#: dlltool.c:3146 -msgid " -z --output-def <deffile> Name of .def file to be created.\n" -msgstr "" - -#: dlltool.c:3147 -msgid " --export-all-symbols Export all symbols to .def\n" -msgstr "" - -#: dlltool.c:3148 -msgid " --no-export-all-symbols Only export listed symbols\n" -msgstr "" - -#: dlltool.c:3149 -msgid " --exclude-symbols <list> Don't export <list>\n" -msgstr "" - -#: dlltool.c:3150 -msgid " --no-default-excludes Clear default exclude symbols\n" -msgstr "" - -#: dlltool.c:3151 -msgid " -b --base-file <basefile> Read linker generated base file.\n" -msgstr "" - -#: dlltool.c:3152 -msgid " -x --no-idata4 Don't generate idata$4 section.\n" -msgstr "" - -#: dlltool.c:3153 -msgid " -c --no-idata5 Don't generate idata$5 section.\n" -msgstr "" - -#: dlltool.c:3154 -msgid "" -" -U --add-underscore Add underscores to symbols in interface " -"library.\n" -msgstr "" - -#: dlltool.c:3155 -msgid " -k --kill-at Kill @<n> from exported names.\n" -msgstr "" - -#: dlltool.c:3156 -msgid " -A --add-stdcall-alias Add aliases without @<n>.\n" -msgstr "" - -#: dlltool.c:3157 -msgid " -S --as <name> Use <name> for assembler.\n" -msgstr "" - -#: dlltool.c:3158 -msgid " -f --as-flags <flags> Pass <flags> to the assembler.\n" -msgstr "" - -#: dlltool.c:3159 -msgid "" -" -C --compat-implib Create backward compatible import library.\n" -msgstr "" - -#: dlltool.c:3160 -msgid "" -" -n --no-delete Keep temp files (repeat for extra " -"preservation).\n" -msgstr "" - -#: dlltool.c:3161 -msgid " -v --verbose Be verbose.\n" -msgstr "" - -#: dlltool.c:3162 -msgid " -V --version Display the program version.\n" -msgstr "" - -#: dlltool.c:3163 -msgid " -h --help Display this information.\n" -msgstr "" - -#: dlltool.c:3165 -msgid "" -" -M --mcore-elf <outname> Process mcore-elf object files into <outname>.\n" -msgstr "" - -#: dlltool.c:3166 -msgid " -L --linker <name> Use <name> as the linker.\n" -msgstr "" - -#: dlltool.c:3167 -msgid " -F --linker-flags <flags> Pass <flags> to the linker.\n" -msgstr "" - -#: dlltool.c:3311 -#, c-format -msgid "Unable to open base-file: %s" -msgstr "" - -#: dlltool.c:3340 -#, c-format -msgid "Machine '%s' not supported" -msgstr "" - -#: dlltool.c:3443 dllwrap.c:215 -#, c-format -msgid "Tried file: %s" -msgstr "" - -#: dlltool.c:3450 dllwrap.c:222 -#, c-format -msgid "Using file: %s" -msgstr "" - -#: ieee.c:316 -msgid "unexpected end of debugging information" -msgstr "" - -#: ieee.c:411 -msgid "invalid number" -msgstr "" - -#: ieee.c:470 -msgid "invalid string length" -msgstr "" - -#: ieee.c:527 ieee.c:568 -msgid "expression stack overflow" -msgstr "" - -#: ieee.c:547 -msgid "unsupported IEEE expression operator" -msgstr "" - -#: ieee.c:562 -msgid "unknown section" -msgstr "" - -#: ieee.c:583 -msgid "expression stack underflow" -msgstr "" - -#: ieee.c:597 -msgid "expression stack mismatch" -msgstr "" - -#: ieee.c:636 -msgid "unknown builtin type" -msgstr "" - -#: ieee.c:781 -msgid "BCD float type not supported" -msgstr "" - -#: ieee.c:927 -msgid "unexpected number" -msgstr "" - -#: ieee.c:934 -msgid "unexpected record type" -msgstr "" - -#: ieee.c:967 -msgid "blocks left on stack at end" -msgstr "" - -#: ieee.c:1232 -msgid "unknown BB type" -msgstr "" - -#: ieee.c:1241 -msgid "stack overflow" -msgstr "" - -#: ieee.c:1266 -msgid "stack underflow" -msgstr "" - -#: ieee.c:1380 ieee.c:1452 ieee.c:2151 -msgid "illegal variable index" -msgstr "" - -#: ieee.c:1430 -msgid "illegal type index" -msgstr "" - -#: ieee.c:1440 ieee.c:1477 -msgid "unknown TY code" -msgstr "" - -#: ieee.c:1459 -msgid "undefined variable in TY" -msgstr "" - -#. Pascal file name. FIXME. -#: ieee.c:1870 -msgid "Pascal file name not supported" -msgstr "" - -#: ieee.c:1918 -msgid "unsupported qualifer" -msgstr "" - -#: ieee.c:2189 -msgid "undefined variable in ATN" -msgstr "" - -#: ieee.c:2232 -msgid "unknown ATN type" -msgstr "" - -#. Reserved for FORTRAN common. -#: ieee.c:2354 -msgid "unsupported ATN11" -msgstr "" - -#. We have no way to record this information. FIXME. -#: ieee.c:2381 -msgid "unsupported ATN12" -msgstr "" - -#: ieee.c:2441 -msgid "unexpected string in C++ misc" -msgstr "" - -#: ieee.c:2454 -msgid "bad misc record" -msgstr "" - -#: ieee.c:2497 -msgid "unrecognized C++ misc record" -msgstr "" - -#: ieee.c:2614 -msgid "undefined C++ object" -msgstr "" - -#: ieee.c:2648 -msgid "unrecognized C++ object spec" -msgstr "" - -#: ieee.c:2684 -msgid "unsupported C++ object type" -msgstr "" - -#: ieee.c:2694 -msgid "C++ base class not defined" -msgstr "" - -#: ieee.c:2706 ieee.c:2811 -msgid "C++ object has no fields" -msgstr "" - -#: ieee.c:2725 -msgid "C++ base class not found in container" -msgstr "" - -#: ieee.c:2832 -msgid "C++ data member not found in container" -msgstr "" - -#: ieee.c:2873 ieee.c:3023 -msgid "unknown C++ visibility" -msgstr "" - -#: ieee.c:2907 -msgid "bad C++ field bit pos or size" -msgstr "" - -#: ieee.c:2999 -msgid "bad type for C++ method function" -msgstr "" - -#: ieee.c:3009 -msgid "no type information for C++ method function" -msgstr "" - -#: ieee.c:3048 -msgid "C++ static virtual method" -msgstr "" - -#: ieee.c:3143 -msgid "unrecognized C++ object overhead spec" -msgstr "" - -#: ieee.c:3182 -msgid "undefined C++ vtable" -msgstr "" - -#: ieee.c:3253 -msgid "C++ default values not in a function" -msgstr "" - -#: ieee.c:3293 -msgid "unrecognized C++ default type" -msgstr "" - -#: ieee.c:3324 -msgid "reference parameter is not a pointer" -msgstr "" - -#: ieee.c:3409 -msgid "unrecognized C++ reference type" -msgstr "" - -#: ieee.c:3491 -msgid "C++ reference not found" -msgstr "" - -#: ieee.c:3499 -msgid "C++ reference is not pointer" -msgstr "" - -#: ieee.c:3528 ieee.c:3536 -msgid "missing required ASN" -msgstr "" - -#: ieee.c:3566 ieee.c:3574 -msgid "missing required ATN65" -msgstr "" - -#: ieee.c:3588 -msgid "bad ATN65 record" -msgstr "" - -#: ieee.c:4235 -msgid "IEEE numeric overflow: 0x" -msgstr "" - -#: ieee.c:4281 -#, c-format -msgid "IEEE string length overflow: %u\n" -msgstr "" - -#: ieee.c:5315 -#, c-format -msgid "IEEE unsupported integer type size %u\n" -msgstr "" - -#: ieee.c:5351 -#, c-format -msgid "IEEE unsupported float type size %u\n" -msgstr "" - -#: ieee.c:5387 -#, c-format -msgid "IEEE unsupported complex type size %u\n" -msgstr "" - -#: nlmconv.c:275 srconv.c:1966 -#, c-format -msgid "%s: input and output files must be different\n" -msgstr "" - -#: nlmconv.c:325 -#, c-format -msgid "%s: input file named both on command line and with INPUT\n" -msgstr "" - -#: nlmconv.c:336 -#, c-format -msgid "%s: no input file\n" -msgstr "" - -#: nlmconv.c:366 -#, c-format -msgid "%s: no name for output file\n" -msgstr "" - -#: nlmconv.c:381 -#, c-format -msgid "%s: warning:input and output formats are not compatible\n" -msgstr "" - -#: nlmconv.c:411 -msgid "make .bss section" -msgstr "" - -#: nlmconv.c:420 -msgid "make .nlmsections section" -msgstr "" - -#: nlmconv.c:422 -msgid "set .nlmsections flags" -msgstr "" - -#: nlmconv.c:450 -msgid "set .bss vma" -msgstr "" - -#: nlmconv.c:457 -msgid "set .data size" -msgstr "" - -#: nlmconv.c:638 -#, c-format -msgid "%s: warning: symbol %s imported but not in import list\n" -msgstr "" - -#: nlmconv.c:658 -msgid "set start address" -msgstr "" - -#: nlmconv.c:707 -#, c-format -msgid "%s: warning: START procedure %s not defined\n" -msgstr "" - -#: nlmconv.c:710 -#, c-format -msgid "%s: warning: EXIT procedure %s not defined\n" -msgstr "" - -#: nlmconv.c:714 -#, c-format -msgid "%s: warning: CHECK procedure %s not defined\n" -msgstr "" - -#: nlmconv.c:736 nlmconv.c:928 -msgid "custom section" -msgstr "" - -#: nlmconv.c:757 nlmconv.c:960 -msgid "help section" -msgstr "" - -#: nlmconv.c:779 nlmconv.c:979 -msgid "message section" -msgstr "" - -#: nlmconv.c:795 nlmconv.c:1012 -msgid "module section" -msgstr "" - -#: nlmconv.c:815 nlmconv.c:1029 -msgid "rpc section" -msgstr "" - -#: nlmconv.c:852 -#, c-format -msgid "%s:%s: warning: shared libraries can not have uninitialized data\n" -msgstr "" - -#: nlmconv.c:873 nlmconv.c:1049 -msgid "shared section" -msgstr "" - -#: nlmconv.c:881 -#, c-format -msgid "%s: warning: No version number given\n" -msgstr "" - -#: nlmconv.c:922 nlmconv.c:954 nlmconv.c:973 nlmconv.c:1023 nlmconv.c:1043 -#, c-format -msgid "%s:%s: read: %s\n" -msgstr "" - -#: nlmconv.c:946 -#, c-format -msgid "%s: warning: MAP and FULLMAP are not supported; try ld -M\n" -msgstr "" - -#: nlmconv.c:1121 -#, c-format -msgid "%s: Convert an object file into a NetWare Loadable Module\n" -msgstr "" - -#: nlmconv.c:1133 -#, c-format -msgid "" -"Usage: %s [-dhV] [-I bfdname] [-O bfdname] [-T header-file] [-l linker]\n" -" [--input-target=bfdname] [--output-target=bfdname]\n" -" [--header-file=file] [--linker=linker] [--debug]\n" -" [--help] [--version]\n" -" [in-file [out-file]]\n" -msgstr "" - -#: nlmconv.c:1173 -#, c-format -msgid "%s: support not compiled in for %s\n" -msgstr "" - -#: nlmconv.c:1216 -msgid "make section" -msgstr "" - -#: nlmconv.c:1230 -msgid "set section size" -msgstr "" - -#: nlmconv.c:1236 -msgid "set section alignment" -msgstr "" - -#: nlmconv.c:1240 -msgid "set section flags" -msgstr "" - -#: nlmconv.c:1251 -msgid "set .nlmsections size" -msgstr "" - -#: nlmconv.c:1339 nlmconv.c:1347 nlmconv.c:1356 nlmconv.c:1361 -msgid "set .nlmsection contents" -msgstr "" - -#: nlmconv.c:1864 -msgid "stub section sizes" -msgstr "" - -#: nlmconv.c:1913 -msgid "writing stub" -msgstr "" - -#: nlmconv.c:2003 -#, c-format -msgid "%s: unresolved PC relative reloc against %s\n" -msgstr "" - -#: nlmconv.c:2068 -#, c-format -msgid "%s: overflow when adjusting relocation against %s\n" -msgstr "" - -#: nlmconv.c:2191 -#, c-format -msgid "%s: execution of %s failed: " -msgstr "" - -#: nlmconv.c:2206 -#, c-format -msgid "%s: Execution of %s failed\n" -msgstr "" - -#: nm.c:294 -#, c-format -msgid "" -"Usage: %s [-aABCDglnopPrsuvV] [-t radix] [--radix=radix] [--target=bfdname]\n" -" [--debug-syms] [--extern-only] [--print-armap] [--print-file-name]\n" -" [--numeric-sort] [--no-sort] [--reverse-sort] [--size-sort]\n" -" [--undefined-only] [--portability] [-f {bsd,sysv,posix}]\n" -" [--format={bsd,sysv,posix}] [--demangle] [--no-demangle] [--dynamic]\n" -" [--defined-only] [--line-numbers]\n" -" [--version] [--help]\n" -" [file...]\n" -msgstr "" - -#: nm.c:339 -#, c-format -msgid "%s: %s: invalid radix\n" -msgstr "" - -#: nm.c:365 -#, c-format -msgid "%s: %s: invalid output format\n" -msgstr "" - -#: nm.c:492 -#, c-format -msgid "%s: data size %ld\n" -msgstr "" - -#: nm.c:1283 -#, c-format -msgid "" -"\n" -"\n" -"Undefined symbols from %s:\n" -"\n" -msgstr "" - -#: nm.c:1285 -#, c-format -msgid "" -"\n" -"\n" -"Symbols from %s:\n" -"\n" -msgstr "" - -#: nm.c:1286 nm.c:1340 -msgid "" -"Name Value Class Type Size Line " -"Section\n" -"\n" -msgstr "" - -#: nm.c:1337 -#, c-format -msgid "" -"\n" -"\n" -"Undefined symbols from %s[%s]:\n" -"\n" -msgstr "" - -#: nm.c:1339 -#, c-format -msgid "" -"\n" -"\n" -"Symbols from %s[%s]:\n" -"\n" -msgstr "" - -#: nm.c:1510 -msgid "" -"\n" -"Archive index:\n" -msgstr "" - -#: objcopy.c:309 -#, c-format -msgid "Usage: %s <switches> in-file [out-file]\n" -msgstr "" - -#: objcopy.c:310 objcopy.c:368 -msgid " The switches are:\n" -msgstr "" - -#: objcopy.c:311 -msgid "" -" -I --input-target <bfdname> Assume input file is in format <bfdname>\n" -" -O --output-target <bfdname> Create an output file in format " -"<bfdname>\n" -" -F --target <bfdname> Set both input and output format to " -"<bfdname>\n" -" --debugging Convert debugging information, if " -"possible\n" -" -p --preserve-dates Copy modified/access timestamps to the " -"output\n" -" -j --only-section <name> Only copy section <name> into the output\n" -" -R --remove-section <name> Remove section <name> from the output\n" -" -S --strip-all Remove all symbol and relocation " -"information\n" -" -g --strip-debug Remove all debugging symbols\n" -" --strip-unneeded Remove all symbols not needed by " -"relocations\n" -" -N --strip-symbol <name> Do not copy symbol <name>\n" -" -K --keep-symbol <name> Only copy symbol <name>\n" -" -L --localize-symbol <name> Force symbol <name> to be marked as a " -"local\n" -" -W --weaken-symbol <name> Force symbol <name> to be marked as a " -"weak\n" -" --weaken Force all global symbols to be marked as " -"weak\n" -" -x --discard-all Remove all non-global symbols\n" -" -X --discard-locals Remove any compiler-generated symbols\n" -" -i --interleave <number> Only copy one out of every <number> " -"bytes\n" -" -b --byte <num> Select byte <num> in every interleaved " -"block\n" -" --gap-fill <val> Fill gaps between sections with <val>\n" -" --pad-to <addr> Pad the last section up to address " -"<addr>\n" -" --set-start <addr> Set the start address to <addr>\n" -" {--change-start|--adjust-start} <incr>\n" -" Add <incr> to the start address\n" -" {--change-addresses|--adjust-vma} <incr>\n" -" Add <incr> to LMA, VMA and start " -"addresses\n" -" {--change-section-address|--adjust-section-vma} <name>{=|+|-}<val>\n" -" Change LMA and VMA of section <name> by " -"<val>\n" -" --change-section-lma <name>{=|+|-}<val>\n" -" Change the LMA of section <name> by " -"<val>\n" -" --change-section-vma <name>{=|+|-}<val>\n" -" Change the VMA of section <name> by " -"<val>\n" -" {--[no-]change-warnings|--[no-]adjust-warnings}\n" -" Warn if a named section does not exist\n" -" --set-section-flags <name>=<flags>\n" -" Set section <name>'s properties to " -"<flags>\n" -" --add-section <name>=<file> Add section <name> found in <file> to " -"output\n" -" --change-leading-char Force output format's leading character " -"style\n" -" --remove-leading-char Remove leading character from global " -"symbols\n" -" --redefine-sym <old>=<new> Redefine symbol name <old> to <new>\n" -" -v --verbose List all object files modified\n" -" -V --version Display this program's version number\n" -" -h --help Display this output\n" -msgstr "" - -#: objcopy.c:367 -#, c-format -msgid "Usage: %s <switches> in-file(s)\n" -msgstr "" - -#: objcopy.c:369 -msgid "" -" -I --input-target <bfdname> Assume input file is in format <bfdname>\n" -" -O --output-target <bfdname> Create an output file in format " -"<bfdname>\n" -" -F --target <bfdname> Set both input and output format to " -"<bfdname>\n" -" -p --preserve-dates Copy modified/access timestamps to the " -"output\n" -" -R --remove-section <name> Remove section <name> from the output\n" -" -s --strip-all Remove all symbol and relocation " -"information\n" -" -g -S --strip-debug Remove all debugging symbols\n" -" --strip-unneeded Remove all symbols not needed by " -"relocations\n" -" -N --strip-symbol <name> Do not copy symbol <name>\n" -" -K --keep-symbol <name> Only copy symbol <name>\n" -" -x --discard-all Remove all non-global symbols\n" -" -X --discard-locals Remove any compiler-generated symbols\n" -" -v --verbose List all object files modified\n" -" -V --version Display this program's version number\n" -" -h --help Display this output\n" -" -o <file> Place stripped output into <file>\n" -msgstr "" - -#: objcopy.c:439 -#, c-format -msgid "unrecognized section flag `%s'" -msgstr "" - -#: objcopy.c:440 -#, c-format -msgid "supported flags: %s" -msgstr "" - -#: objcopy.c:692 -#, c-format -msgid "%s: Multiple redefinition of symbol \"%s\"" -msgstr "" - -#: objcopy.c:699 -#, c-format -msgid "%s: Symbol \"%s\" is target of more than one redefinition" -msgstr "" - -#: objcopy.c:753 -#, c-format -msgid "copy from %s(%s) to %s(%s)\n" -msgstr "" - -#: objcopy.c:772 -#, c-format -msgid "Warning: Output file cannot represent architecture %s" -msgstr "" - -#: objcopy.c:799 -#, c-format -msgid "can't create section `%s': %s" -msgstr "" - -#: objcopy.c:885 -#, c-format -msgid "Can't fill gap after %s: %s" -msgstr "" - -#: objcopy.c:910 -#, c-format -msgid "Can't add padding to %s: %s" -msgstr "" - -#: objcopy.c:1048 -#, c-format -msgid "%s: error copying private BFD data: %s" -msgstr "" - -#: objcopy.c:1082 -#, c-format -msgid "cannot mkdir %s for archive copying (error: %s)" -msgstr "" - -#: objcopy.c:1351 -#, c-format -msgid "%s: section `%s': error in %s: %s" -msgstr "" - -#: objcopy.c:1625 -#, c-format -msgid "%s: can't create debugging section: %s" -msgstr "" - -#: objcopy.c:1640 -#, c-format -msgid "%s: can't set debugging section contents: %s" -msgstr "" - -#: objcopy.c:1649 -#, c-format -msgid "%s: don't know how to write debugging information for %s" -msgstr "" - -#: objcopy.c:1754 -#, c-format -msgid "%s: cannot stat: %s" -msgstr "" - -#: objcopy.c:1804 -msgid "byte number must be non-negative" -msgstr "" - -#: objcopy.c:1810 -msgid "interleave must be positive" -msgstr "" - -#: objcopy.c:1830 objcopy.c:1838 -#, c-format -msgid "%s both copied and removed" -msgstr "" - -#: objcopy.c:1907 objcopy.c:1977 objcopy.c:2078 objcopy.c:2106 -#, c-format -msgid "bad format for %s" -msgstr "" - -#: objcopy.c:1910 -#, c-format -msgid "cannot stat: %s: %s" -msgstr "" - -#: objcopy.c:1928 -#, c-format -msgid "cannot open: %s: %s" -msgstr "" - -#: objcopy.c:1932 -#, c-format -msgid "%s: fread failed" -msgstr "" - -#: objcopy.c:2046 -#, c-format -msgid "Warning: truncating gap-fill from 0x%s to 0x%x" -msgstr "" - -#: objcopy.c:2140 -msgid "byte number must be less than interleave" -msgstr "" - -#: objcopy.c:2159 -#, c-format -msgid "Cannot stat: %s: %s" -msgstr "" - -#: objcopy.c:2199 objcopy.c:2213 -#, c-format -msgid "%s %s%c0x%s never used" -msgstr "" - -#: objdump.c:229 -#, c-format -msgid "Usage: %s <switches> file(s)\n" -msgstr "" - -#: objdump.c:230 -msgid " At least one of the following switches must be given:\n" -msgstr "" - -#: objdump.c:231 -msgid "" -" -a --archive-headers Display archive header information\n" -" -f --file-headers Display the contents of the overall file header\n" -" -p --private-headers Display object format specific file header " -"contents\n" -" -h --[section-]headers Display the contents of the section headers\n" -" -x --all-headers Display the contents of all headers\n" -" -d --disassemble Display assembler contents of executable " -"sections\n" -" -D --disassemble-all Display assembler contents of all sections\n" -" -S --source Intermix source code with disassembly\n" -" -s --full-contents Display the full contents of all sections " -"requested\n" -" -g --debugging Display debug information in object file\n" -" -G --stabs Display the STABS contents of an ELF format file\n" -" -t --syms Display the contents of the symbol table(s)\n" -" -T --dynamic-syms Display the contents of the dynamic symbol table\n" -" -r --reloc Display the relocation entries in the file\n" -" -R --dynamic-reloc Display the dynamic relocation entries in the " -"file\n" -" -V --version Display this program's version number\n" -" -i --info List object formats and architectures supported\n" -" -H --help Display this information\n" -msgstr "" - -#: objdump.c:253 -msgid "" -"\n" -" The following switches are optional:\n" -msgstr "" - -#: objdump.c:254 -msgid "" -" -b --target <bfdname> Specify the target object format as " -"<bfdname>\n" -" -m --architecture <machine> Specify the target architecture as " -"<machine>\n" -" -j --section <name> Only display information for section " -"<name>\n" -" -M --disassembler-options <o> Pass text <o> on to the disassembler\n" -" -EB --endian=big Assume big endian format when " -"disassembling\n" -" -EL --endian=little Assume little endian format when " -"disassembling\n" -" --file-start-context Include context from start of file (with " -"-S)\n" -" -l --line-numbers Include line numbers and filenames in " -"output\n" -" -C --demangle Decode mangled/processed symbol names\n" -" -w --wide Format output for more than 80 columns\n" -" -z --disassemble-zeroes Do not skip blocks of zeroes when " -"disassembling\n" -" --start-address <addr> Only process data whoes address is >= " -"<addr>\n" -" --stop-address <addr> Only process data whoes address is <= " -"<addr>\n" -" --prefix-addresses Print complete address alongside " -"disassembly\n" -" --[no-]show-raw-insn Display hex alongside symbolic disassembly\n" -" --adjust-vma <offset> Add <offset> to all displayed section " -"addresses\n" -"\n" -msgstr "" - -#: objdump.c:420 -msgid "Sections:\n" -msgstr "" - -#: objdump.c:423 -msgid "Idx Name Size VMA LMA File off Algn" -msgstr "" - -#: objdump.c:425 -msgid "" -"Idx Name Size VMA LMA File off " -"Algn" -msgstr "" - -#: objdump.c:429 -msgid " Flags" -msgstr "" - -#: objdump.c:479 -#, c-format -msgid "%s: %s: not a dynamic object\n" -msgstr "" - -#: objdump.c:496 -#, c-format -msgid "%s: %s: No dynamic symbols\n" -msgstr "" - -#: objdump.c:1200 -msgid "Out of virtual memory\n" -msgstr "" - -#: objdump.c:1611 -#, c-format -msgid "%s: Can't use supplied machine %s\n" -msgstr "" - -#: objdump.c:1632 -#, c-format -msgid "%s: Can't disassemble for architecture %s\n" -msgstr "" - -#: objdump.c:1709 -#, c-format -msgid "Disassembly of section %s:\n" -msgstr "" - -#: objdump.c:1883 -#, c-format -msgid "" -"No %s section present\n" -"\n" -msgstr "" - -#: objdump.c:1890 -#, c-format -msgid "%s: %s has no %s section\n" -msgstr "" - -#: objdump.c:1904 objdump.c:1916 -#, c-format -msgid "%s: Reading %s section of %s failed: %s\n" -msgstr "" - -#: objdump.c:1959 -#, c-format -msgid "" -"Contents of %s section:\n" -"\n" -msgstr "" - -#: objdump.c:2059 -#, c-format -msgid "architecture: %s, " -msgstr "" - -#: objdump.c:2062 -#, c-format -msgid "flags 0x%08x:\n" -msgstr "" - -#: objdump.c:2075 -msgid "" -"\n" -"start address 0x" -msgstr "" - -#: objdump.c:2107 -#, c-format -msgid "" -"\n" -"%s: file format %s\n" -msgstr "" - -#: objdump.c:2150 -#, c-format -msgid "%s: printing debugging information failed\n" -msgstr "" - -#: objdump.c:2227 -#, c-format -msgid "In archive %s:\n" -msgstr "" - -#: objdump.c:2279 -#, c-format -msgid "Contents of section %s:\n" -msgstr "" - -#: objdump.c:2788 -#, c-format -msgid "BFD header file version %s\n" -msgstr "" - -#: objdump.c:2861 -#, c-format -msgid "%s: unrecognized -E option\n" -msgstr "" - -#: objdump.c:2873 -#, c-format -msgid "%s: unrecognized --endian type `%s'\n" -msgstr "" - -#: rdcoff.c:204 -#, c-format -msgid "%s: parse_coff_type: Bad type code 0x%x\n" -msgstr "" - -#: rdcoff.c:423 rdcoff.c:531 rdcoff.c:712 -#, c-format -msgid "%s: bfd_coff_get_syment failed: %s\n" -msgstr "" - -#: rdcoff.c:439 rdcoff.c:732 -#, c-format -msgid "%s: bfd_coff_get_auxent failed: %s\n" -msgstr "" - -#: rdcoff.c:798 -#, c-format -msgid "%s: %ld: .bf without preceding function\n" -msgstr "" - -#: rdcoff.c:848 -#, c-format -msgid "%s: %ld: unexpected .ef\n" -msgstr "" - -#: rddbg.c:87 -#, c-format -msgid "%s: no recognized debugging information\n" -msgstr "" - -#: rddbg.c:410 -msgid "Last stabs entries before error:\n" -msgstr "" - -#: readelf.c:303 readelf.c:329 -#, c-format -msgid "%s: Error: " -msgstr "" - -#: readelf.c:315 readelf.c:344 -#, c-format -msgid "%s: Warning: " -msgstr "" - -#: readelf.c:394 readelf.c:532 -#, c-format -msgid "Unhandled data length: %d\n" -msgstr "" - -#: readelf.c:591 -msgid "Don't know about relocations on this machine architecture\n" -msgstr "" - -#: readelf.c:631 readelf.c:660 readelf.c:692 readelf.c:720 -msgid "out of memory parsing relocs" -msgstr "" - -#: readelf.c:738 -msgid "" -" Offset Info Type Symbol's Value Symbol's Name " -"Addend\n" -msgstr "" - -#: readelf.c:741 -msgid " Offset Info Type Symbol's Value Symbol's Name\n" -msgstr "" - -#: readelf.c:885 readelf.c:887 -#, c-format -msgid "unrecognised: %-7lx" -msgstr "" - -#: readelf.c:912 -#, c-format -msgid "<string table index %3ld>" -msgstr "" - -#: readelf.c:1119 -#, c-format -msgid "Processor Specific: %lx" -msgstr "" - -#: readelf.c:1138 -#, c-format -msgid "Operating System specific: %lx" -msgstr "" - -#: readelf.c:1141 readelf.c:1506 -#, c-format -msgid "<unknown>: %lx" -msgstr "" - -#: readelf.c:1155 -msgid "NONE (None)" -msgstr "" - -#: readelf.c:1156 -msgid "REL (Relocatable file)" -msgstr "" - -#: readelf.c:1157 -msgid "EXEC (Executable file)" -msgstr "" - -#: readelf.c:1158 -msgid "DYN (Shared object file)" -msgstr "" - -#: readelf.c:1159 -msgid "CORE (Core file)" -msgstr "" - -#: readelf.c:1163 -#, c-format -msgid "Processor Specific: (%x)" -msgstr "" - -#: readelf.c:1165 -#, c-format -msgid "OS Specific: (%x)" -msgstr "" - -#: readelf.c:1167 readelf.c:1244 readelf.c:1638 -#, c-format -msgid "<unknown>: %x" -msgstr "" - -#: readelf.c:1180 -msgid "None" -msgstr "" - -#: readelf.c:1676 -msgid "Usage: readelf {options} elf-file(s)\n" -msgstr "" - -#: readelf.c:1677 -msgid " Options are:\n" -msgstr "" - -#: readelf.c:1678 -msgid " -a or --all Equivalent to: -h -l -S -s -r -d -V -A -I\n" -msgstr "" - -#: readelf.c:1679 -msgid " -h or --file-header Display the ELF file header\n" -msgstr "" - -#: readelf.c:1680 -msgid " -l or --program-headers or --segments\n" -msgstr "" - -#: readelf.c:1681 -msgid " Display the program headers\n" -msgstr "" - -#: readelf.c:1682 -msgid " -S or --section-headers or --sections\n" -msgstr "" - -#: readelf.c:1683 -msgid " Display the sections' header\n" -msgstr "" - -#: readelf.c:1684 -msgid " -e or --headers Equivalent to: -h -l -S\n" -msgstr "" - -#: readelf.c:1685 -msgid " -s or --syms or --symbols Display the symbol table\n" -msgstr "" - -#: readelf.c:1686 -msgid " -n or --notes Display the core notes (if present)\n" -msgstr "" - -#: readelf.c:1687 -msgid " -r or --relocs Display the relocations (if present)\n" -msgstr "" - -#: readelf.c:1688 -msgid " -d or --dynamic Display the dynamic segment (if present)\n" -msgstr "" - -#: readelf.c:1689 -msgid " -V or --version-info Display the version sections (if present)\n" -msgstr "" - -#: readelf.c:1690 -msgid "" -" -A or --arch-specific Display architecture specific information (if " -"any).\n" -msgstr "" - -#: readelf.c:1691 -msgid "" -" -D or --use-dynamic Use the dynamic section info when displaying " -"symbols\n" -msgstr "" - -#: readelf.c:1692 -msgid " -x <number> or --hex-dump=<number>\n" -msgstr "" - -#: readelf.c:1693 -msgid " Dump the contents of section <number>\n" -msgstr "" - -#: readelf.c:1694 -msgid " -w[liapr] or --debug-dump[=line,=info,=abbrev,=pubnames,=ranges]\n" -msgstr "" - -#: readelf.c:1695 -msgid "" -" Display the contents of DWARF2 debug sections\n" -msgstr "" - -#: readelf.c:1697 -msgid " -i <number> or --instruction-dump=<number>\n" -msgstr "" - -#: readelf.c:1698 -msgid "" -" Disassemble the contents of section <number>\n" -msgstr "" - -#: readelf.c:1700 -msgid " -I or --histogram Display histogram of bucket list lengths\n" -msgstr "" - -#: readelf.c:1701 -msgid " -v or --version Display the version number of readelf\n" -msgstr "" - -#: readelf.c:1702 -msgid " -H or --help Display this information\n" -msgstr "" - -#: readelf.c:1720 -msgid "Out of memory allocating dump request table." -msgstr "" - -#: readelf.c:1855 -#, c-format -msgid "Unrecognised debug option '%s'\n" -msgstr "" - -#: readelf.c:1880 -#, c-format -msgid "Invalid option '-%c'\n" -msgstr "" - -#: readelf.c:1893 -msgid "Nothing to do.\n" -msgstr "" - -#: readelf.c:1906 readelf.c:1923 readelf.c:3493 -msgid "none" -msgstr "" - -#: readelf.c:1907 -msgid "ELF32" -msgstr "" - -#: readelf.c:1908 -msgid "ELF64" -msgstr "" - -#: readelf.c:1910 readelf.c:1927 readelf.c:1946 -#, c-format -msgid "<unknown: %x>" -msgstr "" - -#: readelf.c:1924 -msgid "2's complement, little endian" -msgstr "" - -#: readelf.c:1925 -msgid "2's complement, big endian" -msgstr "" - -#: readelf.c:1940 -msgid "UNIX - System V" -msgstr "" - -#: readelf.c:1941 -msgid "UNIX - HP-UX" -msgstr "" - -#: readelf.c:1942 -msgid "UNIX - Linux" -msgstr "" - -#: readelf.c:1943 -msgid "Standalone App" -msgstr "" - -#: readelf.c:1944 -msgid "ARM" -msgstr "" - -#: readelf.c:1961 -msgid "Not an ELF file - it has the wrong magic bytes at the start\n" -msgstr "" - -#: readelf.c:1969 -msgid "ELF Header:\n" -msgstr "" - -#: readelf.c:1970 -msgid " Magic: " -msgstr "" - -#: readelf.c:1974 -#, c-format -msgid " Class: %s\n" -msgstr "" - -#: readelf.c:1976 -#, c-format -msgid " Data: %s\n" -msgstr "" - -#: readelf.c:1978 -#, c-format -msgid " Version: %d %s\n" -msgstr "" - -#: readelf.c:1985 -#, c-format -msgid " OS/ABI: %s\n" -msgstr "" - -#: readelf.c:1987 -#, c-format -msgid " ABI Version: %d\n" -msgstr "" - -#: readelf.c:1989 -#, c-format -msgid " Type: %s\n" -msgstr "" - -#: readelf.c:1991 -#, c-format -msgid " Machine: %s\n" -msgstr "" - -#: readelf.c:1993 -#, c-format -msgid " Version: 0x%lx\n" -msgstr "" - -#: readelf.c:1996 -msgid " Entry point address: " -msgstr "" - -#: readelf.c:1998 -msgid "" -"\n" -" Start of program headers: " -msgstr "" - -#: readelf.c:2000 -msgid "" -" (bytes into file)\n" -" Start of section headers: " -msgstr "" - -#: readelf.c:2002 -msgid " (bytes into file)\n" -msgstr "" - -#: readelf.c:2004 -#, c-format -msgid " Flags: 0x%lx%s\n" -msgstr "" - -#: readelf.c:2007 -#, c-format -msgid " Size of this header: %ld (bytes)\n" -msgstr "" - -#: readelf.c:2009 -#, c-format -msgid " Size of program headers: %ld (bytes)\n" -msgstr "" - -#: readelf.c:2011 -#, c-format -msgid " Number of program headers: %ld\n" -msgstr "" - -#: readelf.c:2013 -#, c-format -msgid " Size of section headers: %ld (bytes)\n" -msgstr "" - -#: readelf.c:2015 -#, c-format -msgid " Number of section headers: %ld\n" -msgstr "" - -#: readelf.c:2017 -#, c-format -msgid " Section header string table index: %ld\n" -msgstr "" - -#: readelf.c:2102 -msgid "" -"\n" -"There are no program headers in this file.\n" -msgstr "" - -#: readelf.c:2108 -#, c-format -msgid "" -"\n" -"Elf file type is %s\n" -msgstr "" - -#: readelf.c:2109 -msgid "Entry point " -msgstr "" - -#: readelf.c:2111 -#, c-format -msgid "" -"\n" -"There are %d program headers, starting at offset " -msgstr "" - -#: readelf.c:2122 readelf.c:2298 readelf.c:2340 readelf.c:2383 readelf.c:2424 -#: readelf.c:2932 readelf.c:2973 readelf.c:3149 readelf.c:4111 readelf.c:4125 -#: readelf.c:7023 readelf.c:7063 -msgid "Out of memory\n" -msgstr "" - -#: readelf.c:2140 -#, c-format -msgid "" -"\n" -"Program Header%s:\n" -msgstr "" - -#: readelf.c:2144 -msgid "" -" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" -msgstr "" - -#: readelf.c:2148 -msgid " Type Offset VirtAddr PhysAddr\n" -msgstr "" - -#: readelf.c:2150 -msgid " FileSiz MemSiz Flags Align\n" -msgstr "" - -#: readelf.c:2208 -msgid "more than one dynamic segment\n" -msgstr "" - -#: readelf.c:2216 -msgid "Unable to find program interpreter name\n" -msgstr "" - -#: readelf.c:2223 -#, c-format -msgid "" -"\n" -" [Requesting program interpreter: %s]" -msgstr "" - -#: readelf.c:2241 -msgid "" -"\n" -" Section to Segment mapping:\n" -msgstr "" - -#: readelf.c:2242 -msgid " Segment Sections...\n" -msgstr "" - -#: readelf.c:2505 -msgid "" -"\n" -"There are no sections in this file.\n" -msgstr "" - -#: readelf.c:2511 -#, c-format -msgid "There are %d section headers, starting at offset 0x%lx:\n" -msgstr "" - -#: readelf.c:2551 -msgid "File contains multiple dynamic symbol tables\n" -msgstr "" - -#: readelf.c:2564 -msgid "File contains multiple dynamic string tables\n" -msgstr "" - -#: readelf.c:2591 -#, c-format -msgid "" -"\n" -"Section Header%s:\n" -msgstr "" - -#: readelf.c:2595 -msgid "" -" [Nr] Name Type Addr Off Size ES Flg Lk " -"Inf Al\n" -msgstr "" - -#: readelf.c:2598 -msgid " [Nr] Name Type Address Offset\n" -msgstr "" - -#: readelf.c:2599 -msgid " Size EntSize Flags Link Info Align\n" -msgstr "" - -#: readelf.c:2646 -msgid "" -"Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings)\n" -msgstr "" - -#: readelf.c:2647 -msgid "" -" I (info), L (link order), O (extra OS processing required)\n" -msgstr "" - -#: readelf.c:2648 -msgid " o (os specific), p (processor specific) x (unknown)\n" -msgstr "" - -#: readelf.c:2706 -#, c-format -msgid "" -"\n" -"Relocation section at offset 0x%lx contains %ld bytes:\n" -msgstr "" - -#: readelf.c:2713 -msgid "" -"\n" -"There are no dynamic relocations in this file.\n" -msgstr "" - -#: readelf.c:2741 -msgid "" -"\n" -"Relocation section " -msgstr "" - -#: readelf.c:2748 -#, c-format -msgid " at offset 0x%lx contains %lu entries:\n" -msgstr "" - -#: readelf.c:2776 -msgid "" -"\n" -"There are no relocations in this file.\n" -msgstr "" - -#: readelf.c:3026 -msgid "" -"\n" -"There is no dynamic segment in this file.\n" -msgstr "" - -#: readelf.c:3060 -msgid "Unable to seek to end of file!" -msgstr "" - -#: readelf.c:3069 -msgid "Unable to determine the number of symbols to load\n" -msgstr "" - -#: readelf.c:3099 -msgid "Unable to seek to end of file\n" -msgstr "" - -#: readelf.c:3105 -msgid "Unable to determine the length of the dynamic string table\n" -msgstr "" - -#: readelf.c:3166 -#, c-format -msgid "" -"\n" -"Dynamic segment at offset 0x%x contains %ld entries:\n" -msgstr "" - -#: readelf.c:3169 -msgid " Tag Type Name/Value\n" -msgstr "" - -#: readelf.c:3200 -msgid "Auxiliary library" -msgstr "" - -#: readelf.c:3202 -msgid "Filter library" -msgstr "" - -#: readelf.c:3218 readelf.c:3239 readelf.c:3265 -msgid "Flags:" -msgstr "" - -#: readelf.c:3220 readelf.c:3241 readelf.c:3267 -msgid " None\n" -msgstr "" - -#: readelf.c:3370 -#, c-format -msgid "Shared library: [%s]" -msgstr "" - -#: readelf.c:3373 -msgid " program interpreter" -msgstr "" - -#: readelf.c:3377 -#, c-format -msgid "Library soname: [%s]" -msgstr "" - -#: readelf.c:3381 -#, c-format -msgid "Library rpath: [%s]" -msgstr "" - -#: readelf.c:3442 -#, c-format -msgid "Not needed object: [%s]\n" -msgstr "" - -#: readelf.c:3539 -#, c-format -msgid "" -"\n" -"Version definition section '%s' contains %ld entries:\n" -msgstr "" - -#: readelf.c:3542 -msgid " Addr: 0x" -msgstr "" - -#: readelf.c:3544 readelf.c:3732 -#, c-format -msgid " Offset: %#08lx Link: %lx (%s)\n" -msgstr "" - -#: readelf.c:3574 -#, c-format -msgid " %#06x: Rev: %d Flags: %s" -msgstr "" - -#: readelf.c:3577 -#, c-format -msgid " Index: %d Cnt: %d " -msgstr "" - -#: readelf.c:3588 -#, c-format -msgid "Name: %s\n" -msgstr "" - -#: readelf.c:3590 -#, c-format -msgid "Name index: %ld\n" -msgstr "" - -#: readelf.c:3605 -#, c-format -msgid " %#06x: Parent %d: %s\n" -msgstr "" - -#: readelf.c:3608 -#, c-format -msgid " %#06x: Parent %d, name index: %ld\n" -msgstr "" - -#: readelf.c:3627 -#, c-format -msgid "" -"\n" -"Version needs section '%s' contains %ld entries:\n" -msgstr "" - -#: readelf.c:3630 -msgid " Addr: 0x" -msgstr "" - -#: readelf.c:3632 -#, c-format -msgid " Offset: %#08lx Link to section: %ld (%s)\n" -msgstr "" - -#: readelf.c:3658 -#, c-format -msgid " %#06x: Version: %d" -msgstr "" - -#: readelf.c:3661 -#, c-format -msgid " File: %s" -msgstr "" - -#: readelf.c:3663 -#, c-format -msgid " File: %lx" -msgstr "" - -#: readelf.c:3665 -#, c-format -msgid " Cnt: %d\n" -msgstr "" - -#: readelf.c:3683 -#, c-format -msgid " %#06x: Name: %s" -msgstr "" - -#: readelf.c:3686 -#, c-format -msgid " %#06x: Name index: %lx" -msgstr "" - -#: readelf.c:3689 -#, c-format -msgid " Flags: %s Version: %d\n" -msgstr "" - -#: readelf.c:3727 -#, c-format -msgid "" -"\n" -"Version symbols section '%s' contains %d entries:\n" -msgstr "" - -#: readelf.c:3730 -msgid " Addr: " -msgstr "" - -#: readelf.c:3760 -msgid " 0 (*local*) " -msgstr "" - -#: readelf.c:3764 -msgid " 1 (*global*) " -msgstr "" - -#: readelf.c:3986 -msgid "" -"\n" -"No version information found in this file.\n" -msgstr "" - -#: readelf.c:4004 readelf.c:4039 -#, c-format -msgid "<processor specific>: %d" -msgstr "" - -#: readelf.c:4006 readelf.c:4051 -#, c-format -msgid "<OS specific>: %d" -msgstr "" - -#: readelf.c:4008 readelf.c:4054 -#, c-format -msgid "<unknown>: %d" -msgstr "" - -#: readelf.c:4117 -msgid "Unable to read in dynamic data\n" -msgstr "" - -#: readelf.c:4159 -msgid "Unable to seek to start of dynamic information" -msgstr "" - -#: readelf.c:4165 -msgid "Failed to read in number of buckets\n" -msgstr "" - -#: readelf.c:4171 -msgid "Failed to read in number of chains\n" -msgstr "" - -#: readelf.c:4191 -msgid "" -"\n" -"Symbol table for image:\n" -msgstr "" - -#: readelf.c:4193 -msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" -msgstr "" - -#: readelf.c:4195 -msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" -msgstr "" - -#: readelf.c:4239 -#, c-format -msgid "" -"\n" -"Symbol table '%s' contains %lu entries:\n" -msgstr "" - -#: readelf.c:4243 -msgid " Num: Value Size Type Bind Vis Ndx Name\n" -msgstr "" - -#: readelf.c:4245 -msgid " Num: Value Size Type Bind Vis Ndx Name\n" -msgstr "" - -#: readelf.c:4354 -msgid "bad dynamic symbol" -msgstr "" - -#: readelf.c:4413 -msgid "" -"\n" -"Dynamic symbol information is not available for displaying symbols.\n" -msgstr "" - -#: readelf.c:4425 -#, c-format -msgid "" -"\n" -"Histogram for bucket list length (total of %d buckets):\n" -msgstr "" - -#: readelf.c:4427 -msgid " Length Number %% of total Coverage\n" -msgstr "" - -#: readelf.c:4432 readelf.c:4451 readelf.c:6704 readelf.c:6897 -msgid "Out of memory" -msgstr "" - -#: readelf.c:4500 -#, c-format -msgid "" -"\n" -"Dynamic info segment at offset 0x%lx contains %d entries:\n" -msgstr "" - -#: readelf.c:4503 -msgid " Num: Name BoundTo Flags\n" -msgstr "" - -#: readelf.c:4551 -#, c-format -msgid "" -"\n" -"Assembly dump of section %s\n" -msgstr "" - -#: readelf.c:4574 -#, c-format -msgid "" -"\n" -"Section '%s' has no data to dump.\n" -msgstr "" - -#: readelf.c:4579 -#, c-format -msgid "" -"\n" -"Hex dump of section '%s':\n" -msgstr "" - -#: readelf.c:4731 -msgid "badly formed extended line op encountered!" -msgstr "" - -#: readelf.c:4738 -#, c-format -msgid " Extended opcode %d: " -msgstr "" - -#: readelf.c:4743 -msgid "" -"End of Sequence\n" -"\n" -msgstr "" - -#: readelf.c:4749 -#, c-format -msgid "set Address to 0x%lx\n" -msgstr "" - -#: readelf.c:4754 -msgid " define new File Table entry\n" -msgstr "" - -#: readelf.c:4755 readelf.c:4877 -msgid " Entry\tDir\tTime\tSize\tName\n" -msgstr "" - -#: readelf.c:4757 -#, c-format -msgid " %d\t" -msgstr "" - -#: readelf.c:4760 readelf.c:4762 readelf.c:4764 readelf.c:4889 readelf.c:4891 -#: readelf.c:4893 -#, c-format -msgid "%lu\t" -msgstr "" - -#: readelf.c:4765 -#, c-format -msgid "" -"%s\n" -"\n" -msgstr "" - -#: readelf.c:4769 -#, c-format -msgid "UNKNOWN: length %d\n" -msgstr "" - -#: readelf.c:4795 -#, c-format -msgid "" -"\n" -"Dump of debug contents of section %s:\n" -"\n" -msgstr "" - -#: readelf.c:4807 -msgid "The line info appears to be corrupt - the section is too small\n" -msgstr "" - -#: readelf.c:4815 -msgid "Only DWARF version 2 line info is currently supported.\n" -msgstr "" - -#: readelf.c:4830 -#, c-format -msgid " Length: %ld\n" -msgstr "" - -#: readelf.c:4831 -#, c-format -msgid " DWARF Version: %d\n" -msgstr "" - -#: readelf.c:4832 -#, c-format -msgid " Prolgue Length: %d\n" -msgstr "" - -#: readelf.c:4833 -#, c-format -msgid " Minimum Instruction Length: %d\n" -msgstr "" - -#: readelf.c:4834 -#, c-format -msgid " Initial value of 'is_stmt': %d\n" -msgstr "" - -#: readelf.c:4835 -#, c-format -msgid " Line Base: %d\n" -msgstr "" - -#: readelf.c:4836 -#, c-format -msgid " Line Range: %d\n" -msgstr "" - -#: readelf.c:4837 -#, c-format -msgid " Opcode Base: %d\n" -msgstr "" - -#: readelf.c:4846 -msgid "" -"\n" -" Opcodes:\n" -msgstr "" - -#: readelf.c:4849 -#, c-format -msgid " Opcode %d has %d args\n" -msgstr "" - -#: readelf.c:4855 -msgid "" -"\n" -" The Directory Table is empty.\n" -msgstr "" - -#: readelf.c:4858 -msgid "" -"\n" -" The Directory Table:\n" -msgstr "" - -#: readelf.c:4862 -#, c-format -msgid " %s\n" -msgstr "" - -#: readelf.c:4873 -msgid "" -"\n" -" The File Name Table is empty.\n" -msgstr "" - -#: readelf.c:4876 -msgid "" -"\n" -" The File Name Table:\n" -msgstr "" - -#: readelf.c:4884 -#, c-format -msgid " %d\t" -msgstr "" - -#: readelf.c:4895 -#, c-format -msgid "%s\n" -msgstr "" - -#. Now display the statements. -#: readelf.c:4903 -msgid "" -"\n" -" Line Number Statements:\n" -msgstr "" - -#: readelf.c:4922 -msgid " Copy\n" -msgstr "" - -#: readelf.c:4929 -#, c-format -msgid " Advance PC by %d to %lx\n" -msgstr "" - -#: readelf.c:4937 -#, c-format -msgid " Advance Line by %d to %d\n" -msgstr "" - -#: readelf.c:4944 -#, c-format -msgid " Set File Name to entry %d in the File Name Table\n" -msgstr "" - -#: readelf.c:4952 -#, c-format -msgid " Set column to %d\n" -msgstr "" - -#: readelf.c:4959 -#, c-format -msgid " Set is_stmt to %d\n" -msgstr "" - -#: readelf.c:4964 -msgid " Set basic block\n" -msgstr "" - -#: readelf.c:4972 -#, c-format -msgid " Advance PC by constant %d to 0x%lx\n" -msgstr "" - -#: readelf.c:4980 -#, c-format -msgid " Advance PC by fixed size amount %d to 0x%lx\n" -msgstr "" - -#: readelf.c:4988 -#, c-format -msgid " Special opcode %d: advance Address by %d to 0x%lx" -msgstr "" - -#: readelf.c:4992 -#, c-format -msgid " and Line by %d to %d\n" -msgstr "" - -#: readelf.c:5015 readelf.c:5437 -#, c-format -msgid "" -"Contents of the %s section:\n" -"\n" -msgstr "" - -#: readelf.c:5034 -msgid "Only DWARF 2 pubnames are currently supported" -msgstr "" - -#: readelf.c:5038 -#, c-format -msgid " Length: %ld\n" -msgstr "" - -#: readelf.c:5040 -#, c-format -msgid " Version: %d\n" -msgstr "" - -#: readelf.c:5042 -#, c-format -msgid " Offset into .debug_info section: %ld\n" -msgstr "" - -#: readelf.c:5044 -#, c-format -msgid " Size of area in .debug_info section: %ld\n" -msgstr "" - -#: readelf.c:5047 -msgid "" -"\n" -" Offset\tName\n" -msgstr "" - -#: readelf.c:5129 -#, c-format -msgid "Unknown TAG value: %lx" -msgstr "" - -#: readelf.c:5224 -#, c-format -msgid "Unknown AT value: %lx" -msgstr "" - -#: readelf.c:5261 -#, c-format -msgid "Unknown FORM value: %lx" -msgstr "" - -#: readelf.c:5443 -msgid " Number TAG\n" -msgstr "" - -#: readelf.c:5449 -#, c-format -msgid " %ld %s [%s]\n" -msgstr "" - -#: readelf.c:5452 -msgid "has children" -msgstr "" - -#: readelf.c:5452 -msgid "no children" -msgstr "" - -#: readelf.c:5456 -#, c-format -msgid " %-18s %s\n" -msgstr "" - -#: readelf.c:5475 -#, c-format -msgid " %lu byte block: " -msgstr "" - -#: readelf.c:5939 -msgid "(User defined location op)" -msgstr "" - -#: readelf.c:5941 -msgid "(Unknown location op)" -msgstr "" - -#: readelf.c:6058 -#, c-format -msgid "Unable to handle FORM: %d" -msgstr "" - -#: readelf.c:6062 -#, c-format -msgid "Unrecognised form: %d" -msgstr "" - -#: readelf.c:6075 -msgid "(not inlined)" -msgstr "" - -#: readelf.c:6076 -msgid "(inlined)" -msgstr "" - -#: readelf.c:6077 -msgid "(declared as inline but ignored)" -msgstr "" - -#: readelf.c:6078 -msgid "(declared as inline and inlined)" -msgstr "" - -#: readelf.c:6079 -#, c-format -msgid " (Unknown inline attribute value: %lx)" -msgstr "" - -#: readelf.c:6209 readelf.c:6333 -#, c-format -msgid "" -"The section %s contains:\n" -"\n" -msgstr "" - -#: readelf.c:6231 -msgid "Only version 2 DWARF debug information is currently supported.\n" -msgstr "" - -#: readelf.c:6235 -msgid " Compilation Unit:\n" -msgstr "" - -#: readelf.c:6236 -#, c-format -msgid " Length: %ld\n" -msgstr "" - -#: readelf.c:6237 -#, c-format -msgid " Version: %d\n" -msgstr "" - -#: readelf.c:6238 -#, c-format -msgid " Abbrev Offset: %ld\n" -msgstr "" - -#: readelf.c:6239 -#, c-format -msgid " Pointer Size: %d\n" -msgstr "" - -#: readelf.c:6259 -msgid "Unable to locate .debug_abbrev section!\n" -msgstr "" - -#: readelf.c:6299 -#, c-format -msgid "Unable to locate entry %lu in the abbreviation table\n" -msgstr "" - -#: readelf.c:6304 -#, c-format -msgid " <%d><%x>: Abbrev Number: %lu (%s)\n" -msgstr "" - -#: readelf.c:6352 -#, c-format -msgid " Length: %ld\n" -msgstr "" - -#: readelf.c:6353 -#, c-format -msgid " Version: %d\n" -msgstr "" - -#: readelf.c:6354 -#, c-format -msgid " Offset into .debug_info: %lx\n" -msgstr "" - -#: readelf.c:6355 -#, c-format -msgid " Pointer Size: %d\n" -msgstr "" - -#: readelf.c:6356 -#, c-format -msgid " Segment Size: %d\n" -msgstr "" - -#: readelf.c:6358 -msgid "" -"\n" -" Address Length\n" -msgstr "" - -#: readelf.c:6399 -#, c-format -msgid "Displaying the debug contents of section %s is not yet supported.\n" -msgstr "" - -#: readelf.c:6461 -#, c-format -msgid "" -"\n" -"Section '%s' has no debugging data.\n" -msgstr "" - -#: readelf.c:6477 -#, c-format -msgid "Unrecognised debug section: %s\n" -msgstr "" - -#: readelf.c:6549 -msgid "Some sections were not dumped because they do not exist!\n" -msgstr "" - -#: readelf.c:6728 -#, c-format -msgid "" -"\n" -"Section '%s' contains %d entries:\n" -msgstr "" - -#: readelf.c:6890 -msgid "conflict list with without table" -msgstr "" - -#: readelf.c:6918 -#, c-format -msgid "" -"\n" -"Section '.conflict' contains %d entries:\n" -msgstr "" - -#: readelf.c:6919 -msgid " Num: Index Value Name" -msgstr "" - -#: readelf.c:6944 -msgid "NT_PRSTATUS (prstatus structure)" -msgstr "" - -#: readelf.c:6945 -msgid "NT_FPREGSET (floating point registers)" -msgstr "" - -#: readelf.c:6946 -msgid "NT_PRPSINFO (prpsinfo structure)" -msgstr "" - -#: readelf.c:6947 -msgid "NT_TASKSTRUCT (task structure)" -msgstr "" - -#: readelf.c:6948 -msgid "NT_PRXFPREG (user_xfpregs structure)" -msgstr "" - -#: readelf.c:6949 -msgid "NT_PSTATUS (pstatus structure)" -msgstr "" - -#: readelf.c:6950 -msgid "NT_FPREGS (floating point registers)" -msgstr "" - -#: readelf.c:6951 -msgid "NT_PSINFO (psinfo structure)" -msgstr "" - -#: readelf.c:6952 -msgid "NT_LWPSTATUS (lwpstatus_t structure)" -msgstr "" - -#: readelf.c:6953 -msgid "NT_LWPSINFO (lwpsinfo_t structure)" -msgstr "" - -#: readelf.c:6954 -msgid "NT_WIN32PSTATUS (win32_pstatus strcuture)" -msgstr "" - -#: readelf.c:6956 -#, c-format -msgid "Unknown note type: (0x%08x)" -msgstr "" - -#: readelf.c:6994 -#, c-format -msgid "" -"\n" -"Notes at offset 0x%08lx with length 0x%08lx:\n" -msgstr "" - -#: readelf.c:6997 -msgid " Owner\t\tData size\tDescription\n" -msgstr "" - -#: readelf.c:7108 -msgid "No note segments present in the core file.\n" -msgstr "" - -#: readelf.c:7186 -msgid "This instance of readelf has been built without support for a\n" -msgstr "" - -#: readelf.c:7187 -msgid "64 bit data type and so it cannot read 64 bit ELF files.\n" -msgstr "" - -#: readelf.c:7222 -#, c-format -msgid "Cannot stat input file %s.\n" -msgstr "" - -#: readelf.c:7229 -#, c-format -msgid "Input file %s not found.\n" -msgstr "" - -#: readelf.c:7235 -#, c-format -msgid "%s: Failed to read file header\n" -msgstr "" - -#: readelf.c:7249 -#, c-format -msgid "" -"\n" -"File: %s\n" -msgstr "" - -#: rename.c:131 -#, c-format -msgid "%s: cannot set time: %s" -msgstr "" - -#. We have to clean up here. -#: rename.c:170 rename.c:203 -#, c-format -msgid "%s: rename: %s" -msgstr "" - -#: rename.c:211 -#, c-format -msgid "%s: simple_copy: %s" -msgstr "" - -#: resbin.c:130 -#, c-format -msgid "%s: not enough binary data" -msgstr "" - -#: resbin.c:149 -msgid "null terminated unicode string" -msgstr "" - -#: resbin.c:179 resbin.c:185 -msgid "resource ID" -msgstr "" - -#: resbin.c:229 -msgid "cursor" -msgstr "" - -#: resbin.c:263 resbin.c:270 -msgid "menu header" -msgstr "" - -#: resbin.c:280 -msgid "menuex header" -msgstr "" - -#: resbin.c:284 -msgid "menuex offset" -msgstr "" - -#: resbin.c:291 -#, c-format -msgid "unsupported menu version %d" -msgstr "" - -#: resbin.c:319 resbin.c:334 resbin.c:400 -msgid "menuitem header" -msgstr "" - -#: resbin.c:430 -msgid "menuitem" -msgstr "" - -#: resbin.c:471 resbin.c:499 -msgid "dialog header" -msgstr "" - -#: resbin.c:489 -#, c-format -msgid "unexpected dialog signature %d" -msgstr "" - -#: resbin.c:531 -msgid "dialog font point size" -msgstr "" - -#: resbin.c:539 -msgid "dialogex font information" -msgstr "" - -#: resbin.c:564 resbin.c:582 -msgid "dialog control" -msgstr "" - -#: resbin.c:574 -msgid "dialogex control" -msgstr "" - -#: resbin.c:603 -msgid "dialog control end" -msgstr "" - -#: resbin.c:615 -msgid "dialog control data" -msgstr "" - -#: resbin.c:658 -msgid "stringtable string length" -msgstr "" - -#: resbin.c:668 -msgid "stringtable string" -msgstr "" - -#: resbin.c:701 -msgid "fontdir header" -msgstr "" - -#: resbin.c:714 -msgid "fontdir" -msgstr "" - -#: resbin.c:730 -msgid "fontdir device name" -msgstr "" - -#: resbin.c:736 -msgid "fontdir face name" -msgstr "" - -#: resbin.c:779 -msgid "accelerator" -msgstr "" - -#: resbin.c:843 -msgid "group cursor header" -msgstr "" - -#: resbin.c:847 -#, c-format -msgid "unexpected group cursor type %d" -msgstr "" - -#: resbin.c:862 -msgid "group cursor" -msgstr "" - -#: resbin.c:901 -msgid "group icon header" -msgstr "" - -#: resbin.c:905 -#, c-format -msgid "unexpected group icon type %d" -msgstr "" - -#: resbin.c:920 -msgid "group icon" -msgstr "" - -#: resbin.c:991 resbin.c:1210 -msgid "unexpected version string" -msgstr "" - -#: resbin.c:1025 -#, c-format -msgid "version length %d does not match resource length %lu" -msgstr "" - -#: resbin.c:1029 -#, c-format -msgid "unexpected version type %d" -msgstr "" - -#: resbin.c:1041 -#, c-format -msgid "unexpected fixed version information length %d" -msgstr "" - -#: resbin.c:1044 -msgid "fixed version info" -msgstr "" - -#: resbin.c:1048 -#, c-format -msgid "unexpected fixed version signature %lu" -msgstr "" - -#: resbin.c:1052 -#, c-format -msgid "unexpected fixed version info version %lu" -msgstr "" - -#: resbin.c:1081 -msgid "version var info" -msgstr "" - -#: resbin.c:1098 -#, c-format -msgid "unexpected stringfileinfo value length %d" -msgstr "" - -#: resbin.c:1108 -#, c-format -msgid "unexpected version stringtable value length %d" -msgstr "" - -#: resbin.c:1142 -#, c-format -msgid "unexpected version string length %d != %d + %d" -msgstr "" - -#: resbin.c:1153 -#, c-format -msgid "unexpected version string length %d < %d" -msgstr "" - -#: resbin.c:1170 -#, c-format -msgid "unexpected varfileinfo value length %d" -msgstr "" - -#: resbin.c:1189 -msgid "version varfileinfo" -msgstr "" - -#: resbin.c:1204 -#, c-format -msgid "unexpected version value length %d" -msgstr "" - -#: rescoff.c:128 -msgid "filename required for COFF input" -msgstr "" - -#: rescoff.c:145 -#, c-format -msgid "%s: %s: no resource section\n" -msgstr "" - -#: rescoff.c:154 -msgid "can't read resource section" -msgstr "" - -#: rescoff.c:180 -#, c-format -msgid "%s: %s: address out of bounds" -msgstr "" - -#: rescoff.c:199 -msgid "directory" -msgstr "" - -#: rescoff.c:227 -msgid "named directory entry" -msgstr "" - -#: rescoff.c:236 -msgid "directory entry name" -msgstr "" - -#: rescoff.c:256 -msgid "named subdirectory" -msgstr "" - -#: rescoff.c:264 -msgid "named resource" -msgstr "" - -#: rescoff.c:279 -msgid "ID directory entry" -msgstr "" - -#: rescoff.c:296 -msgid "ID subdirectory" -msgstr "" - -#: rescoff.c:304 -msgid "ID resource" -msgstr "" - -#: rescoff.c:330 -msgid "resource type unknown" -msgstr "" - -#: rescoff.c:333 -msgid "data entry" -msgstr "" - -#: rescoff.c:341 -msgid "resource data" -msgstr "" - -#: rescoff.c:346 -msgid "resource data size" -msgstr "" - -#: rescoff.c:441 -msgid "filename required for COFF output" -msgstr "" - -#: rescoff.c:740 -msgid "can't get BFD_RELOC_RVA relocation type" -msgstr "" - -#: resrc.c:240 resrc.c:312 -#, c-format -msgid "can't open temporary file `%s': %s" -msgstr "" - -#: resrc.c:246 -#, c-format -msgid "can't redirect stdout: `%s': %s" -msgstr "" - -#: resrc.c:262 -#, c-format -msgid "%s %s: %s" -msgstr "" - -#: resrc.c:283 -#, c-format -msgid "%s exited with status %d" -msgstr "" - -#: resrc.c:308 -#, c-format -msgid "can't execute `%s': %s" -msgstr "" - -#: resrc.c:317 -#, c-format -msgid "Using temporary file `%s' to read preprocessor output\n" -msgstr "" - -#: resrc.c:324 -#, c-format -msgid "can't popen `%s': %s" -msgstr "" - -#: resrc.c:326 -msgid "Using popen to read preprocessor output\n" -msgstr "" - -#: resrc.c:369 -#, c-format -msgid "Tried `%s'\n" -msgstr "" - -#: resrc.c:380 -#, c-format -msgid "Using `%s'\n" -msgstr "" - -#: resrc.c:544 -#, c-format -msgid "%s:%d: %s\n" -msgstr "" - -#: resrc.c:553 -#, c-format -msgid "%s: unexpected EOF" -msgstr "" - -#: resrc.c:610 -#, c-format -msgid "%s: read of %lu returned %lu" -msgstr "" - -#: resrc.c:652 resrc.c:883 resrc.c:1156 resrc.c:1310 -#, c-format -msgid "stat failed on bitmap file `%s': %s" -msgstr "" - -#: resrc.c:705 -#, c-format -msgid "cursor file `%s' does not contain cursor data" -msgstr "" - -#: resrc.c:737 resrc.c:1027 -#, c-format -msgid "%s: fseek to %lu failed: %s" -msgstr "" - -#: resrc.c:996 -#, c-format -msgid "icon file `%s' does not contain icon data" -msgstr "" - -#: resrc.c:1515 -#, c-format -msgid "can't open `%s' for output: %s" -msgstr "" - -#: size.c:79 -#, c-format -msgid "" -"Usage: %s [-ABdoxV] [--format=berkeley|sysv] [--radix=8|10|16]\n" -" [--target=bfdname] [--version] [--help] [file...]\n" -msgstr "" - -#: size.c:83 -msgid "default is --format=berkeley\n" -msgstr "" - -#: size.c:85 -msgid "default is --format=sysv\n" -msgstr "" - -#: size.c:139 -#, c-format -msgid "invalid argument to --format: %s\n" -msgstr "" - -#: size.c:166 -#, c-format -msgid "Invalid radix: %s\n" -msgstr "" - -#: srconv.c:1879 -#, c-format -msgid "Usage: %s [-dhVq] in-file [out-file]\n" -msgstr "" - -#: srconv.c:1886 -#, c-format -msgid "%s: Convert a COFF object file into a SYSROFF object file\n" -msgstr "" - -#: srconv.c:2024 -#, c-format -msgid "%s: unable to open output file %s\n" -msgstr "" - -#: stabs.c:349 stabs.c:1769 -msgid "numeric overflow" -msgstr "" - -#: stabs.c:360 -#, c-format -msgid "Bad stab: %s\n" -msgstr "" - -#: stabs.c:370 -#, c-format -msgid "Warning: %s: %s\n" -msgstr "" - -#: stabs.c:492 -msgid "N_LBRAC not within function\n" -msgstr "" - -#: stabs.c:531 -msgid "Too many N_RBRACs\n" -msgstr "" - -#: stabs.c:780 -msgid "unknown C++ encoded name" -msgstr "" - -#. Complain and keep going, so compilers can invent new -#. cross-reference types. -#: stabs.c:1306 -msgid "unrecognized cross reference type" -msgstr "" - -#. Does this actually ever happen? Is that why we are worrying -#. about dealing with it rather than just calling error_type? -#: stabs.c:1861 -msgid "missing index type" -msgstr "" - -#: stabs.c:2188 -msgid "unknown virtual character for baseclass" -msgstr "" - -#: stabs.c:2206 -msgid "unknown visibility character for baseclass" -msgstr "" - -#: stabs.c:2398 -msgid "unnamed $vb type" -msgstr "" - -#: stabs.c:2404 -msgid "unrecognized C++ abbreviation" -msgstr "" - -#: stabs.c:2484 -msgid "unknown visibility character for field" -msgstr "" - -#: stabs.c:2740 -msgid "const/volatile indicator missing" -msgstr "" - -#: stabs.c:2980 -#, c-format -msgid "No mangling for \"%s\"\n" -msgstr "" - -#: stabs.c:3293 -msgid "Undefined N_EXCL" -msgstr "" - -#: stabs.c:3381 -#, c-format -msgid "Type file number %d out of range\n" -msgstr "" - -#: stabs.c:3386 -#, c-format -msgid "Type index number %d out of range\n" -msgstr "" - -#: stabs.c:3473 -#, c-format -msgid "Unrecognized XCOFF type %d\n" -msgstr "" - -#: stabs.c:3772 -#, c-format -msgid "bad mangled name `%s'\n" -msgstr "" - -#: stabs.c:3868 -msgid "no argument types in mangled string\n" -msgstr "" - -#: strings.c:159 -#, c-format -msgid "%s: invalid number %s\n" -msgstr "" - -#: strings.c:494 -#, c-format -msgid "%s: invalid integer argument %s\n" -msgstr "" - -#: strings.c:505 -#, c-format -msgid "" -"Usage: %s [-afov] [-n min-len] [-min-len] [-t {o,x,d}] [-]\n" -" [--all] [--print-file-name] [--bytes=min-len] [--radix={o,x,d}]\n" -" [--target=bfdname] [--help] [--version] file...\n" -msgstr "" - -#: sysdump.c:712 -#, c-format -msgid "Usage: %s [-hV] in-file\n" -msgstr "" - -#: sysdump.c:783 -#, c-format -msgid "%s: cannot open input file %s\n" -msgstr "" - -#: version.c:39 -msgid "Copyright 1997, 1998, 1999 Free Software Foundation, Inc.\n" -msgstr "" - -#: version.c:40 -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 "" - -#: windres.c:237 -#, c-format -msgid "can't open %s `%s': %s" -msgstr "" - -#: windres.c:416 -msgid ": expected to be a directory\n" -msgstr "" - -#: windres.c:428 -msgid ": expected to be a leaf\n" -msgstr "" - -#: windres.c:437 -#, c-format -msgid "%s: warning: " -msgstr "" - -#: windres.c:439 -msgid ": duplicate value\n" -msgstr "" - -#: windres.c:602 -#, c-format -msgid "%s: unknown format type `%s'\n" -msgstr "" - -#: windres.c:603 -#, c-format -msgid "%s: supported formats:" -msgstr "" - -#. Otherwise, we give up. -#: windres.c:690 -#, c-format -msgid "can not determine type of file `%s'; use the -I option" -msgstr "" - -#: windres.c:704 -#, c-format -msgid "Usage: %s [options] [input-file] [output-file]\n" -msgstr "" - -#: windres.c:706 -msgid "" -"Options:\n" -" -i FILE, --input FILE Name input file\n" -" -o FILE, --output FILE Name output file\n" -" -I FORMAT, --input-format FORMAT\n" -" Specify input format\n" -" -O FORMAT, --output-format FORMAT\n" -" Specify output format\n" -" -F TARGET, --target TARGET Specify COFF target\n" -" --preprocessor PROGRAM Program to use to preprocess rc file\n" -" --include-dir DIR Include directory when preprocessing rc file\n" -" -DSYM[=VAL], --define SYM[=VAL]\n" -" Define SYM when preprocessing rc file\n" -" -v Verbose - tells you what it's doing\n" -" --language VAL Set language when reading rc file\n" -" --use-temp-file Use a temporary file instead of popen to read\n" -" the preprocessor output\n" -" --no-use-temp-file Use popen (default)\n" -msgstr "" - -#: windres.c:725 -msgid " --yydebug Turn on parser debugging\n" -msgstr "" - -#: windres.c:728 -msgid "" -" --help Print this help message\n" -" --version Print version information\n" -msgstr "" - -#: windres.c:731 -msgid "" -"FORMAT is one of rc, res, or coff, and is deduced from the file name\n" -"extension if not specified. A single file name is an input file.\n" -"No input-file is stdin, default rc. No output-file is stdout, default rc.\n" -msgstr "" - -#: windres.c:980 -msgid "no resources" -msgstr "" - -#: wrstabs.c:366 wrstabs.c:2028 -#, c-format -msgid "string_hash_lookup failed: %s\n" -msgstr "" - -#: wrstabs.c:666 -#, c-format -msgid "stab_int_type: bad size %u\n" -msgstr "" - -#: wrstabs.c:1468 -#, c-format -msgid "%s: warning: unknown size for field `%s' in struct\n" -msgstr "" diff --git a/contrib/binutils/include/regs/ChangeLog b/contrib/binutils/include/regs/ChangeLog deleted file mode 100644 index e69de29bb2d1..000000000000 --- 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 726ec623fbdf..000000000000 --- 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/include/wait.h b/contrib/binutils/include/wait.h deleted file mode 100644 index fa3c9ccb1d7e..000000000000 --- a/contrib/binutils/include/wait.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Define how to access the int that the wait system call stores. - This has been compatible in all Unix systems since time immemorial, - but various well-meaning people have defined various different - words for the same old bits in the same old int (sometimes claimed - to be a struct). We just know it's an int and we use these macros - to access the bits. */ - -/* The following macros are defined equivalently to their definitions - in POSIX.1. We fail to define WNOHANG and WUNTRACED, which POSIX.1 - <sys/wait.h> defines, since our code does not use waitpid(). We - also fail to declare wait() and waitpid(). */ - -#ifndef WIFEXITED -#define WIFEXITED(w) (((w)&0377) == 0) -#endif - -#ifndef WIFSIGNALED -#define WIFSIGNALED(w) (((w)&0377) != 0177 && ((w)&~0377) == 0) -#endif - -#ifndef WIFSTOPPED -#ifdef IBM6000 - -/* Unfortunately, the above comment (about being compatible in all Unix - systems) is not quite correct for AIX, sigh. And AIX 3.2 can generate - status words like 0x57c (sigtrap received after load), and gdb would - choke on it. */ - -#define WIFSTOPPED(w) ((w)&0x40) - -#else -#define WIFSTOPPED(w) (((w)&0377) == 0177) -#endif -#endif - -#ifndef WEXITSTATUS -#define WEXITSTATUS(w) (((w) >> 8) & 0377) /* same as WRETCODE */ -#endif - -#ifndef WTERMSIG -#define WTERMSIG(w) ((w) & 0177) -#endif - -#ifndef WSTOPSIG -#define WSTOPSIG WEXITSTATUS -#endif - -/* These are not defined in POSIX, but are used by our programs. */ - -#define WAITTYPE int - -#ifndef WCOREDUMP -#define WCOREDUMP(w) (((w)&0200) != 0) -#endif - -#ifndef WSETEXIT -#define WSETEXIT(w,status) ((w) = (0 | ((status) << 8))) -#endif - -#ifndef WSETSTOP -#define WSETSTOP(w,sig) ((w) = (0177 | ((sig) << 8))) -#endif - diff --git a/contrib/binutils/install.sh b/contrib/binutils/install.sh deleted file mode 100755 index 4b883b386de2..000000000000 --- a/contrib/binutils/install.sh +++ /dev/null @@ -1,247 +0,0 @@ -#!/bin/sh -# -# install - install a program, script, or datafile -# This comes from X11R5 (mit/util/scripts/install.sh). -# -# Copyright 1991 by the Massachusetts Institute of Technology -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of M.I.T. not be used in advertising or -# publicity pertaining to distribution of the software without specific, -# written prior permission. M.I.T. makes no representations about the -# suitability of this software for any purpose. It is provided "as is" -# without express or implied warranty. -# -# This script is compatible with the BSD install script, but was written -# from scratch. -# - - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -transformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; - esac -done - -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -else - true -fi - -if [ x"$dir_arg" != x ]; then - dst=$src - src="" - - if [ -d $dst ]; then - instcmd=: - chmodcmd="" - else - instcmd=mkdir - fi -else - -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f $src -o -d $src ] - then - true - else - echo "install: $src does not exist" - exit 1 - fi - - if [ x"$dst" = x ] - then - echo "install: no destination specified" - exit 1 - else - true - fi - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - - if [ -d $dst ] - then - dst="$dst"/`basename $src` - else - true - fi -fi - -## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` - -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script - -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' -' -IFS="${IFS-${defaultIFS}}" - -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift - - if [ ! -d "${pathcomp}" ] ; - then - $mkdirprog "${pathcomp}" - else - true - fi - - pathcomp="${pathcomp}/" -done -fi - -if [ x"$dir_arg" != x ] -then - $doit $instcmd $dst && - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi -else - -# If we're going to rename the final executable, determine the name now. - - if [ x"$transformarg" = x ] - then - dstfile=`basename $dst` - else - dstfile=`basename $dst $transformbasename | - sed $transformarg`$transformbasename - fi - -# don't allow the sed command to completely eliminate the filename - - if [ x"$dstfile" = x ] - then - dstfile=`basename $dst` - else - true - fi - -# Make a temp file name in the proper directory. - - dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - - $doit $instcmd $src $dsttmp && - - trap "rm -f ${dsttmp}" 0 && - -# and set any options; do chmod last to preserve setuid bits - -# If any of these fail, we abort the whole thing. If we want to -# ignore errors from any of these, just make sure not to ignore -# errors from the above "$doit $instcmd $src $dsttmp" command. - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && - -# Now rename the file to the real destination. - - $doit $rmcmd -f $dstdir/$dstfile && - $doit $mvcmd $dsttmp $dstdir/$dstfile - -fi && - - -exit 0 diff --git a/contrib/binutils/ld/acconfig.h b/contrib/binutils/ld/acconfig.h deleted file mode 100644 index c627d7faa97a..000000000000 --- a/contrib/binutils/ld/acconfig.h +++ /dev/null @@ -1,22 +0,0 @@ - -/* Name of package. */ -#undef PACKAGE - -/* Version of package. */ -#undef VERSION - -/* Whether strstr must be declared even if <string.h> is included. */ -#undef NEED_DECLARATION_STRSTR - -/* Whether free must be declared even if <stdlib.h> is included. */ -#undef NEED_DECLARATION_FREE - -/* Whether sbrk must be declared even if <unistd.h> is included. */ -#undef NEED_DECLARATION_SBRK - -/* Whether getenv must be declared even if <stdlib.h> is included. */ -#undef NEED_DECLARATION_GETENV -@TOP@ - -/* Do we need to use the b modifier when opening binary files? */ -#undef USE_BINARY_FOPEN diff --git a/contrib/binutils/ld/configdoc.texi b/contrib/binutils/ld/configdoc.texi deleted file mode 100644 index 8d1acad1ef16..000000000000 --- a/contrib/binutils/ld/configdoc.texi +++ /dev/null @@ -1,14 +0,0 @@ -@c ------------------------------ CONFIGURATION VARS: -@c 1. Inclusiveness of this manual -@set GENERIC - -@c 2. Specific target machines -@set H8300 -@set I960 -@set TICOFF - -@c 3. Properties of this configuration -@clear SingleFormat -@set UsesEnvVars -@c ------------------------------ end CONFIGURATION VARS - diff --git a/contrib/binutils/ld/emulparams/armelf_linux26.sh b/contrib/binutils/ld/emulparams/armelf_linux26.sh deleted file mode 100644 index 36d1b0ec5c7a..000000000000 --- a/contrib/binutils/ld/emulparams/armelf_linux26.sh +++ /dev/null @@ -1,20 +0,0 @@ -ARCH=arm -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-littlearm" -BIG_OUTPUT_FORMAT="elf32-bigarm" -LITTLE_OUTPUT_FORMAT="elf32-littlearm" -MAXPAGESIZE=0x8000 -TEMPLATE_NAME=armelf -GENERATE_SHLIB_SCRIPT=yes - -DATA_START_SYMBOLS='__data_start = . ;'; -OTHER_BSS_SYMBOLS='__bss_start__ = .;' -OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;' - -# This needs to be high enough so that we can load ld.so below it, -# yet low enough to stay away from the mmap area at 0x01100000. -# Also, it is small enough so that relocs which are pointing -# at absolute 0 will still be fixed up. -# These values give us about 0.5MB for ld.so, 16.5MB for user -# programs, and 15MB for mmap which seems a reasonable compromise. -TEXT_START_ADDR=0x00080000 diff --git a/contrib/binutils/ld/emultempl/stringify.sed b/contrib/binutils/ld/emultempl/stringify.sed deleted file mode 100644 index a526d3ffc4c5..000000000000 --- a/contrib/binutils/ld/emultempl/stringify.sed +++ /dev/null @@ -1,4 +0,0 @@ -s/["\\]/\\&/g -s/$/\\n\\/ -1 s/^/"/ -$ s/$/n"/ diff --git a/contrib/binutils/ld/po/Make-in b/contrib/binutils/ld/po/Make-in deleted file mode 100644 index 4291090c0009..000000000000 --- a/contrib/binutils/ld/po/Make-in +++ /dev/null @@ -1,251 +0,0 @@ -# Makefile for program source directory in GNU NLS utilities package. -# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu> -# -# This file file be copied and used freely without restrictions. It can -# be used in projects which are not available under the GNU Public License -# but which still want to provide support for the GNU gettext functionality. -# Please note that the actual code is *not* freely available. - -PACKAGE = @PACKAGE@ -VERSION = @VERSION@ - -SHELL = /bin/sh -@SET_MAKE@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -exec_prefix = @exec_prefix@ -datadir = $(prefix)/@DATADIRNAME@ -localedir = $(datadir)/locale -gnulocaledir = $(prefix)/share/locale -gettextsrcdir = $(prefix)/share/gettext/po -subdir = po - -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -MKINSTALLDIRS = @MKINSTALLDIRS@ - -CC = @CC@ -GENCAT = @GENCAT@ -GMSGFMT = PATH=../src:$$PATH @GMSGFMT@ -MSGFMT = @MSGFMT@ -XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ -MSGMERGE = PATH=../src:$$PATH msgmerge - -DEFS = @DEFS@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ - -INCLUDES = -I.. -I$(top_srcdir)/intl - -COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) - -SOURCES = cat-id-tbl.c -POFILES = @POFILES@ -GMOFILES = @GMOFILES@ -DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \ -stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES) - -POTFILES = \ - -CATALOGS = @CATALOGS@ -CATOBJEXT = @CATOBJEXT@ -INSTOBJEXT = @INSTOBJEXT@ - -.SUFFIXES: -.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat - -.c.o: - $(COMPILE) $< - -.po.pox: - $(MAKE) $(PACKAGE).pot - $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox - -.po.mo: - $(MSGFMT) -o $@ $< - -.po.gmo: - file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ - && rm -f $$file && $(GMSGFMT) -o $$file $< - -.po.cat: - sed -f ../intl/po2msg.sed < $< > $*.msg \ - && rm -f $@ && $(GENCAT) $@ $*.msg - - -all: all-@USE_NLS@ - -all-yes: $(CATALOGS) @MAINT@ $(PACKAGE).pot -all-no: - -$(srcdir)/$(PACKAGE).pot: $(POTFILES) - $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ - --add-comments -C --keyword=_ --keyword=N_ \ - --files-from=$(srcdir)/POTFILES.in - rm -f $(srcdir)/$(PACKAGE).pot - mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot - -$(srcdir)/cat-id-tbl.c: stamp-cat-id; @: -$(srcdir)/stamp-cat-id: $(PACKAGE).pot - rm -f cat-id-tbl.tmp - sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \ - | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp - if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \ - rm cat-id-tbl.tmp; \ - else \ - echo cat-id-tbl.c changed; \ - rm -f $(srcdir)/cat-id-tbl.c; \ - mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \ - fi - cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id - - -install: install-exec install-data -install-exec: -install-info: -install-data: install-data-@USE_NLS@ -install-data-no: all -install-data-yes: all - if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $(datadir); \ - else \ - $(top_srcdir)/mkinstalldirs $(datadir); \ - fi - @catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - case "$$cat" in \ - *.gmo) destdir=$(gnulocaledir);; \ - *) destdir=$(localedir);; \ - esac; \ - lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - dir=$$destdir/$$lang/LC_MESSAGES; \ - if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $$dir; \ - else \ - $(top_srcdir)/mkinstalldirs $$dir; \ - fi; \ - if test -r $$cat; then \ - $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ - echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ - else \ - $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ - echo "installing $(srcdir)/$$cat as" \ - "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ - fi; \ - if test -r $$cat.m; then \ - $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ - echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ - else \ - if test -r $(srcdir)/$$cat.m ; then \ - $(INSTALL_DATA) $(srcdir)/$$cat.m \ - $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ - echo "installing $(srcdir)/$$cat as" \ - "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ - else \ - true; \ - fi; \ - fi; \ - done - if test "$(PACKAGE)" = "gettext"; then \ - if test -r $(MKINSTALLDIRS); then \ - $(MKINSTALLDIRS) $(gettextsrcdir); \ - else \ - $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ - fi; \ - $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ - $(gettextsrcdir)/Makefile.in.in; \ - else \ - : ; \ - fi - -# Define this as empty until I found a useful application. -installcheck: - -uninstall: - catalogs='$(CATALOGS)'; \ - 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; \ - done - rm -f $(gettextsrcdir)/po-Makefile.in.in - -check: all - -cat-id-tbl.o: ../intl/libgettext.h - -dvi info tags TAGS ID: - -mostlyclean: - rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp - rm -fr *.o - -clean: mostlyclean - -distclean: clean - rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m - -maintainer-clean: distclean - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - rm -f $(GMOFILES) - -distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) -dist distdir: update-po $(DISTFILES) - dists="$(DISTFILES)"; \ - for file in $$dists; do \ - ln $(srcdir)/$$file $(distdir) 2> /dev/null \ - || cp -p $(srcdir)/$$file $(distdir); \ - done - -update-po: Makefile - $(MAKE) $(PACKAGE).pot - PATH=`pwd`/../src:$$PATH; \ - cd $(srcdir); \ - catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - mv $$lang.po $$lang.old.po; \ - echo "$$lang:"; \ - if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ - rm -f $$lang.old.po; \ - else \ - echo "msgmerge for $$cat failed!"; \ - rm -f $$lang.po; \ - mv $$lang.old.po $$lang.po; \ - fi; \ - done - -POTFILES: POTFILES.in - ( if test 'x$(srcdir)' != 'x.'; then \ - posrcprefix='$(top_srcdir)/'; \ - else \ - posrcprefix="../"; \ - fi; \ - rm -f $@-t $@ \ - && (sed -e '/^#/d' -e '/^[ ]*$$/d' \ - -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ - | sed -e '$$s/\\$$//') > $@-t \ - && chmod a-w $@-t \ - && mv $@-t $@ ) - -POTFILES.in: @MAINT@ ../Makefile - cd .. && $(MAKE) po/POTFILES.in - -Makefile: Make-in ../config.status POTFILES - cd .. \ - && CONFIG_FILES=$(subdir)/Makefile.in:$(subdir)/Make-in \ - CONFIG_HEADERS= $(SHELL) ./config.status - -# Tell versions [3.59,3.63) of GNU make not to export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/contrib/binutils/ld/po/POTFILES.in b/contrib/binutils/ld/po/POTFILES.in deleted file mode 100644 index f7a614d82d92..000000000000 --- a/contrib/binutils/ld/po/POTFILES.in +++ /dev/null @@ -1,29 +0,0 @@ -deffile.h -emultempl/armcoff.em -emultempl/pe.em -ld.h -ldcref.c -ldctor.c -ldctor.h -ldemul.c -ldemul.h -ldexp.c -ldexp.h -ldfile.c -ldfile.h -ldlang.c -ldlang.h -ldlex.h -ldmain.c -ldmain.h -ldmisc.c -ldmisc.h -ldver.c -ldver.h -ldwrite.c -ldwrite.h -lexsup.c -mri.c -mri.h -pe-dll.c -pe-dll.h diff --git a/contrib/binutils/ld/po/ld.pot b/contrib/binutils/ld/po/ld.pot deleted file mode 100644 index 87119b59134b..000000000000 --- a/contrib/binutils/ld/po/ld.pot +++ /dev/null @@ -1,1693 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2002-10-30 10:08-0500\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" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: emultempl/armcoff.em:71 -msgid " --support-old-code Support interworking with old code\n" -msgstr "" - -#: emultempl/armcoff.em:72 -msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n" -msgstr "" - -#: emultempl/armcoff.em:141 -#, c-format -msgid "Errors encountered processing file %s" -msgstr "" - -#: emultempl/armcoff.em:207 emultempl/pe.em:1422 -msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n" -msgstr "" - -#: emultempl/armcoff.em:212 emultempl/pe.em:1427 -msgid "%P: warning: connot find thumb start symbol %s\n" -msgstr "" - -#: emultempl/pe.em:317 -msgid "" -" --base_file <basefile> Generate a base file for relocatable " -"DLLs\n" -msgstr "" - -#: emultempl/pe.em:318 -msgid "" -" --dll Set image base to the default for DLLs\n" -msgstr "" - -#: emultempl/pe.em:319 -msgid " --file-alignment <size> Set file alignment\n" -msgstr "" - -#: emultempl/pe.em:320 -msgid " --heap <size> Set initial size of the heap\n" -msgstr "" - -#: emultempl/pe.em:321 -msgid "" -" --image-base <address> Set start address of the executable\n" -msgstr "" - -#: emultempl/pe.em:322 -msgid "" -" --major-image-version <number> Set version number of the executable\n" -msgstr "" - -#: emultempl/pe.em:323 -msgid " --major-os-version <number> Set minimum required OS version\n" -msgstr "" - -#: emultempl/pe.em:324 -msgid "" -" --major-subsystem-version <number> Set minimum required OS subsystem " -"version\n" -msgstr "" - -#: emultempl/pe.em:325 -msgid "" -" --minor-image-version <number> Set revision number of the executable\n" -msgstr "" - -#: emultempl/pe.em:326 -msgid " --minor-os-version <number> Set minimum required OS revision\n" -msgstr "" - -#: emultempl/pe.em:327 -msgid "" -" --minor-subsystem-version <number> Set minimum required OS subsystem " -"revision\n" -msgstr "" - -#: emultempl/pe.em:328 -msgid " --section-alignment <size> Set section alignment\n" -msgstr "" - -#: emultempl/pe.em:329 -msgid " --stack <size> Set size of the initial stack\n" -msgstr "" - -#: emultempl/pe.em:330 -msgid "" -" --subsystem <name>[:<version>] Set required OS subsystem [& version]\n" -msgstr "" - -#: emultempl/pe.em:331 -msgid "" -" --support-old-code Support interworking with old code\n" -msgstr "" - -#: emultempl/pe.em:332 -msgid "" -" --thumb-entry=<symbol> Set the entry point to be Thumb " -"<symbol>\n" -msgstr "" - -#: emultempl/pe.em:334 -msgid "" -" --add-stdcall-alias Export symbols with and without @nn\n" -msgstr "" - -#: emultempl/pe.em:335 -msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n" -msgstr "" - -#: emultempl/pe.em:336 -msgid "" -" --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n" -msgstr "" - -#: emultempl/pe.em:337 -msgid "" -" --exclude-symbols sym,sym,... Exclude symbols from automatic export\n" -msgstr "" - -#: emultempl/pe.em:338 -msgid "" -" --exclude-libs lib,lib,... Exclude libraries from automatic " -"export\n" -msgstr "" - -#: emultempl/pe.em:339 -msgid "" -" --export-all-symbols Automatically export all globals to " -"DLL\n" -msgstr "" - -#: emultempl/pe.em:340 -msgid " --kill-at Remove @nn from exported symbols\n" -msgstr "" - -#: emultempl/pe.em:341 -msgid " --out-implib <file> Generate import library\n" -msgstr "" - -#: emultempl/pe.em:342 -msgid "" -" --output-def <file> Generate a .DEF file for the built DLL\n" -msgstr "" - -#: emultempl/pe.em:343 -msgid " --warn-duplicate-exports Warn about duplicate exports.\n" -msgstr "" - -#: emultempl/pe.em:344 -msgid "" -" --compat-implib Create backward compatible import " -"libs;\n" -" create __imp_<SYMBOL> as well.\n" -msgstr "" - -#: emultempl/pe.em:346 -msgid "" -" --enable-auto-image-base Automatically choose image base for " -"DLLs\n" -" unless user specifies one\n" -msgstr "" - -#: emultempl/pe.em:348 -msgid "" -" --disable-auto-image-base Do not auto-choose image base. " -"(default)\n" -msgstr "" - -#: emultempl/pe.em:349 -msgid "" -" --dll-search-prefix=<string> When linking dynamically to a dll " -"without an\n" -" importlib, use <string><basename>." -"dll \n" -" in preference to lib<basename>.dll \n" -msgstr "" - -#: emultempl/pe.em:352 -msgid "" -" --enable-auto-import Do sophistcated linking of _sym to \n" -" __imp_sym for DATA references\n" -msgstr "" - -#: emultempl/pe.em:354 -msgid "" -" --disable-auto-import Do not auto-import DATA items from " -"DLLs\n" -msgstr "" - -#: emultempl/pe.em:355 -msgid "" -" --enable-extra-pe-debug Enable verbose debug output when " -"building\n" -" or linking to DLLs (esp. auto-" -"import)\n" -msgstr "" - -#: emultempl/pe.em:424 -msgid "%P: warning: bad version number in -subsystem option\n" -msgstr "" - -#: emultempl/pe.em:460 -msgid "%P%F: invalid subsystem type %s\n" -msgstr "" - -#: emultempl/pe.em:475 -msgid "%P%F: invalid hex number for PE parameter '%s'\n" -msgstr "" - -#: emultempl/pe.em:493 -msgid "%P%F: strange hex info for PE parameter '%s'\n" -msgstr "" - -#: emultempl/pe.em:532 -#, c-format -msgid "%s: Can't open base file %s\n" -msgstr "" - -#: emultempl/pe.em:738 -msgid "%P: warning, file alignment > section alignment.\n" -msgstr "" - -#: emultempl/pe.em:822 emultempl/pe.em:848 -#, c-format -msgid "Warning: resolving %s by linking to %s\n" -msgstr "" - -#: emultempl/pe.em:827 emultempl/pe.em:853 -msgid "Use --enable-stdcall-fixup to disable these warnings\n" -msgstr "" - -#: emultempl/pe.em:828 emultempl/pe.em:854 -msgid "Use --disable-stdcall-fixup to disable these fixups\n" -msgstr "" - -#: emultempl/pe.em:879 -#, 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 -#, c-format -msgid "Info: resolving %s by linking to %s (auto-import)\n" -msgstr "" - -#: emultempl/pe.em:997 -msgid "%F%P: PE operations on non PE file.\n" -msgstr "" - -#: emultempl/pe.em:1226 -#, c-format -msgid "Errors encountered processing file %s\n" -msgstr "" - -#: emultempl/pe.em:1249 -#, 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 -msgid "%P%F: bfd_link_hash_lookup failed: %E\n" -msgstr "" - -#: ldcref.c:158 -msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n" -msgstr "" - -#: ldcref.c:164 -msgid "%X%P: cref_hash_lookup failed: %E\n" -msgstr "" - -#: ldcref.c:235 -msgid "" -"\n" -"Cross Reference Table\n" -"\n" -msgstr "" - -#: ldcref.c:236 -msgid "Symbol" -msgstr "" - -#: ldcref.c:244 -msgid "File\n" -msgstr "" - -#: ldcref.c:248 -msgid "No symbols\n" -msgstr "" - -#: ldcref.c:400 -msgid "%P: symbol `%T' missing from main hash table\n" -msgstr "" - -#: ldcref.c:465 -msgid "%B%F: could not read symbols; %E\n" -msgstr "" - -#: ldcref.c:469 ldmain.c:1128 ldmain.c:1132 -msgid "%B%F: could not read symbols: %E\n" -msgstr "" - -#: ldcref.c:537 ldcref.c:544 ldmain.c:1178 ldmain.c:1185 -msgid "%B%F: could not read relocs: %E\n" -msgstr "" - -#. We found a reloc for the symbol. The symbol is defined -#. 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 -msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n" -msgstr "" - -#: ldctor.c:88 -msgid "%P%X: Different relocs used in set %s\n" -msgstr "" - -#: ldctor.c:106 -msgid "%P%X: Different object file formats composing set %s\n" -msgstr "" - -#: ldctor.c:288 ldctor.c:302 -msgid "%P%X: %s does not support reloc %s for set %s\n" -msgstr "" - -#: ldctor.c:323 -msgid "%P%X: Unsupported size %d for set %s\n" -msgstr "" - -#: ldctor.c:344 -msgid "" -"\n" -"Set Symbol\n" -"\n" -msgstr "" - -#: ldemul.c:225 -#, c-format -msgid "%S SYSLIB ignored\n" -msgstr "" - -#: ldemul.c:232 -#, c-format -msgid "%S HLL ignored\n" -msgstr "" - -#: ldemul.c:253 -msgid "%P: unrecognised emulation mode: %s\n" -msgstr "" - -#: ldemul.c:254 -msgid "Supported emulations: " -msgstr "" - -#: ldemul.c:298 -msgid " no emulation specific options.\n" -msgstr "" - -#: ldexp.c:184 -msgid "%F%P: %s uses undefined section %s\n" -msgstr "" - -#: ldexp.c:186 -msgid "%F%P: %s forward reference of section %s\n" -msgstr "" - -#: ldexp.c:400 -#, c-format -msgid "%F%S %% by zero\n" -msgstr "" - -#: ldexp.c:407 -#, c-format -msgid "%F%S / by zero\n" -msgstr "" - -#: ldexp.c:581 -#, c-format -msgid "%X%S: unresolvable symbol `%s' referenced in expression\n" -msgstr "" - -#: ldexp.c:601 -#, c-format -msgid "%F%S: undefined symbol `%s' referenced in expression\n" -msgstr "" - -#: ldexp.c:726 -#, c-format -msgid "%F%S can not PROVIDE assignment to location counter\n" -msgstr "" - -#: ldexp.c:736 -#, c-format -msgid "%F%S invalid assignment to location counter\n" -msgstr "" - -#: ldexp.c:740 -#, c-format -msgid "%F%S assignment to location counter invalid outside of SECTION\n" -msgstr "" - -#: ldexp.c:749 -msgid "%F%S cannot move location counter backwards (from %V to %V)\n" -msgstr "" - -#: ldexp.c:776 -msgid "%P%F:%s: hash creation failed\n" -msgstr "" - -#: ldexp.c:1078 ldexp.c:1112 -#, c-format -msgid "%F%S nonconstant expression for %s\n" -msgstr "" - -#: ldexp.c:1167 -#, c-format -msgid "%F%S non constant expression for %s\n" -msgstr "" - -#: ldfile.c:105 -#, c-format -msgid "attempt to open %s failed\n" -msgstr "" - -#: ldfile.c:107 -#, c-format -msgid "attempt to open %s succeeded\n" -msgstr "" - -#: ldfile.c:113 -msgid "%F%P: invalid BFD target `%s'\n" -msgstr "" - -#: ldfile.c:218 ldfile.c:234 -msgid "%P: skipping incompatible %s when searching for %s\n" -msgstr "" - -#: ldfile.c:326 -msgid "%F%P: cannot open %s for %s: %E\n" -msgstr "" - -#: ldfile.c:329 -msgid "%F%P: cannot open %s: %E\n" -msgstr "" - -#: ldfile.c:359 -msgid "%F%P: cannot find %s\n" -msgstr "" - -#: ldfile.c:378 ldfile.c:394 -#, c-format -msgid "cannot find script file %s\n" -msgstr "" - -#: ldfile.c:380 ldfile.c:396 -#, c-format -msgid "opened script file %s\n" -msgstr "" - -#: ldfile.c:445 -msgid "%P%F: cannot open linker script file %s: %E\n" -msgstr "" - -#: ldfile.c:483 -msgid "%P%F: unknown architecture: %s\n" -msgstr "" - -#: ldfile.c:499 -msgid "%P%F: target architecture respecified\n" -msgstr "" - -#: ldfile.c:553 -msgid "%P%F: cannot represent machine `%s'\n" -msgstr "" - -#: ldlang.c:784 -msgid "" -"\n" -"Memory Configuration\n" -"\n" -msgstr "" - -#: ldlang.c:786 -msgid "Name" -msgstr "" - -#: ldlang.c:786 -msgid "Origin" -msgstr "" - -#: ldlang.c:786 -msgid "Length" -msgstr "" - -#: ldlang.c:786 -msgid "Attributes" -msgstr "" - -#: ldlang.c:828 -msgid "" -"\n" -"Linker script and memory map\n" -"\n" -msgstr "" - -#: ldlang.c:845 -msgid "%P%F: Illegal use of `%s' section\n" -msgstr "" - -#: ldlang.c:855 -msgid "%P%F: output format %s cannot represent section called %s\n" -msgstr "" - -#: ldlang.c:1016 -msgid "%P: %B: warning: ignoring duplicate section `%s'\n" -msgstr "" - -#: ldlang.c:1019 -msgid "%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n" -msgstr "" - -#: ldlang.c:1033 -msgid "%P: %B: warning: duplicate section `%s' has different size\n" -msgstr "" - -#: ldlang.c:1084 -msgid "%P%F: Failed to create hash table\n" -msgstr "" - -#: ldlang.c:1503 -msgid "%B: file not recognized: %E\n" -msgstr "" - -#: ldlang.c:1504 -msgid "%B: matching formats:" -msgstr "" - -#: ldlang.c:1511 -msgid "%F%B: file not recognized: %E\n" -msgstr "" - -#: ldlang.c:1567 -msgid "%F%B: member %B in archive is not an object\n" -msgstr "" - -#: ldlang.c:1578 ldlang.c:1592 -msgid "%F%B: could not read symbols: %E\n" -msgstr "" - -#: ldlang.c:1859 -msgid "" -"%P: warning: could not find any targets that match endianness requirement\n" -msgstr "" - -#: ldlang.c:1872 -msgid "%P%F: target %s not found\n" -msgstr "" - -#: ldlang.c:1874 -msgid "%P%F: cannot open output file %s: %E\n" -msgstr "" - -#: ldlang.c:1884 -msgid "%P%F:%s: can not make object file: %E\n" -msgstr "" - -#: ldlang.c:1888 -msgid "%P%F:%s: can not set architecture: %E\n" -msgstr "" - -#: ldlang.c:1892 -msgid "%P%F: can not create link hash table: %E\n" -msgstr "" - -#: ldlang.c:2241 -msgid " load address 0x%V" -msgstr "" - -#: ldlang.c:2381 -msgid "%W (size before relaxing)\n" -msgstr "" - -#: ldlang.c:2468 -#, c-format -msgid "Address of section %s set to " -msgstr "" - -#: ldlang.c:2629 -#, c-format -msgid "Fail with %d\n" -msgstr "" - -#: ldlang.c:2874 -msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n" -msgstr "" - -#: ldlang.c:2903 -msgid "%X%P: address 0x%v of %B section %s is not within region %s\n" -msgstr "" - -#: ldlang.c:2911 -msgid "%X%P: region %s is full (%B section %s)\n" -msgstr "" - -#: ldlang.c:2961 -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" -msgstr "" - -#: ldlang.c:3020 -msgid "%P: warning: changing start of section %s by %u bytes\n" -msgstr "" - -#: ldlang.c:3033 -#, c-format -msgid "%F%S: non constant address expression for section %s\n" -msgstr "" - -#: ldlang.c:3208 -msgid "%P%F: can't relax section: %E\n" -msgstr "" - -#: ldlang.c:3403 -msgid "%F%P: invalid data statement\n" -msgstr "" - -#: ldlang.c:3440 -msgid "%F%P: invalid reloc statement\n" -msgstr "" - -#: ldlang.c:3579 -msgid "%P%F:%s: can't set start address\n" -msgstr "" - -#: ldlang.c:3592 ldlang.c:3610 -msgid "%P%F: can't set start address\n" -msgstr "" - -#: ldlang.c:3604 -msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n" -msgstr "" - -#: ldlang.c:3615 -msgid "%P: warning: cannot find entry symbol %s; not setting start address\n" -msgstr "" - -#: ldlang.c:3665 -msgid "" -"%P%F: Relocatable linking with relocations from format %s (%B) to format %s " -"(%B) is not supported\n" -msgstr "" - -#: ldlang.c:3674 -msgid "" -"%P: warning: %s architecture of input file `%B' is incompatible with %s " -"output\n" -msgstr "" - -#: ldlang.c:3695 -msgid "%E%X: failed to merge target specific data of file %B\n" -msgstr "" - -#: ldlang.c:3784 -msgid "" -"\n" -"Allocating common symbols\n" -msgstr "" - -#: ldlang.c:3785 -msgid "" -"Common symbol size file\n" -"\n" -msgstr "" - -#. This message happens when using the -#. svr3.ifile linker script, so I have -#. disabled it. -#: ldlang.c:3863 -msgid "%P: no [COMMON] command, defaulting to .bss\n" -msgstr "" - -#: ldlang.c:3922 -msgid "%P%F: invalid syntax in flags\n" -msgstr "" - -#: ldlang.c:4537 -msgid "%P%Fmultiple STARTUP files\n" -msgstr "" - -#: ldlang.c:4580 -msgid "%X%P:%S: section has both a load address and a load region\n" -msgstr "" - -#: ldlang.c:4830 -msgid "%F%P: bfd_record_phdr failed: %E\n" -msgstr "" - -#: ldlang.c:4849 -msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n" -msgstr "" - -#: ldlang.c:5150 -msgid "%X%P: unknown language `%s' in version information\n" -msgstr "" - -#: ldlang.c:5202 -msgid "" -"%X%P: anonymous version tag cannot be combined with other version tags\n" -msgstr "" - -#: ldlang.c:5209 -msgid "%X%P: duplicate version tag `%s'\n" -msgstr "" - -#: ldlang.c:5222 ldlang.c:5235 -msgid "%X%P: duplicate expression `%s' in version information\n" -msgstr "" - -#: ldlang.c:5277 -msgid "%X%P: unable to find version dependency `%s'\n" -msgstr "" - -#: ldlang.c:5299 -msgid "%X%P: unable to read .exports section contents\n" -msgstr "" - -#: ldmain.c:198 -msgid "%X%P: can't set BFD default target to `%s': %E\n" -msgstr "" - -#: ldmain.c:291 -msgid "%P%F: -r and --mpc860c0 may not be used together\n" -msgstr "" - -#: ldmain.c:293 -msgid "%P%F: --relax and -r may not be used together\n" -msgstr "" - -#: ldmain.c:295 -msgid "%P%F: -r and -shared may not be used together\n" -msgstr "" - -#: ldmain.c:301 -msgid "%P%F: -F may not be used without -shared\n" -msgstr "" - -#: ldmain.c:303 -msgid "%P%F: -f may not be used without -shared\n" -msgstr "" - -#: ldmain.c:342 -msgid "using external linker script:" -msgstr "" - -#: ldmain.c:344 -msgid "using internal linker script:" -msgstr "" - -#: ldmain.c:378 -msgid "%P%F: no input files\n" -msgstr "" - -#: ldmain.c:383 -msgid "%P: mode %s\n" -msgstr "" - -#: ldmain.c:400 -msgid "%P%F: cannot open map file %s: %E\n" -msgstr "" - -#: ldmain.c:433 -msgid "%P: link errors found, deleting executable `%s'\n" -msgstr "" - -#: ldmain.c:444 -msgid "%F%B: final close failed: %E\n" -msgstr "" - -#: ldmain.c:468 -msgid "%X%P: unable to open for source of copy `%s'\n" -msgstr "" - -#: ldmain.c:470 -msgid "%X%P: unable to open for destination of copy `%s'\n" -msgstr "" - -#: ldmain.c:476 -msgid "%P: Error writing file `%s'\n" -msgstr "" - -#: ldmain.c:482 pe-dll.c:1465 -#, c-format -msgid "%P: Error closing file `%s'\n" -msgstr "" - -#: ldmain.c:499 -#, c-format -msgid "%s: total time in link: %ld.%06ld\n" -msgstr "" - -#: ldmain.c:502 -#, c-format -msgid "%s: data size %ld\n" -msgstr "" - -#: ldmain.c:543 -msgid "%P%F: missing argument to -m\n" -msgstr "" - -#: ldmain.c:671 ldmain.c:692 ldmain.c:723 -msgid "%P%F: bfd_hash_table_init failed: %E\n" -msgstr "" - -#: ldmain.c:676 ldmain.c:695 -msgid "%P%F: bfd_hash_lookup failed: %E\n" -msgstr "" - -#: ldmain.c:710 -msgid "%X%P: error: duplicate retain-symbols-file\n" -msgstr "" - -#: ldmain.c:754 -msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n" -msgstr "" - -#: ldmain.c:759 -msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n" -msgstr "" - -#: ldmain.c:835 -msgid "" -"Archive member included because of file (symbol)\n" -"\n" -msgstr "" - -#: ldmain.c:906 -msgid "%X%C: multiple definition of `%T'\n" -msgstr "" - -#: ldmain.c:909 -msgid "%D: first defined here\n" -msgstr "" - -#: ldmain.c:913 -msgid "%P: Disabling relaxation: it will not work with multiple definitions\n" -msgstr "" - -#: ldmain.c:944 -msgid "%B: warning: definition of `%T' overriding common\n" -msgstr "" - -#: ldmain.c:947 -msgid "%B: warning: common is here\n" -msgstr "" - -#: ldmain.c:954 -msgid "%B: warning: common of `%T' overridden by definition\n" -msgstr "" - -#: ldmain.c:957 -msgid "%B: warning: defined here\n" -msgstr "" - -#: ldmain.c:964 -msgid "%B: warning: common of `%T' overridden by larger common\n" -msgstr "" - -#: ldmain.c:967 -msgid "%B: warning: larger common is here\n" -msgstr "" - -#: ldmain.c:971 -msgid "%B: warning: common of `%T' overriding smaller common\n" -msgstr "" - -#: ldmain.c:974 -msgid "%B: warning: smaller common is here\n" -msgstr "" - -#: ldmain.c:978 -msgid "%B: warning: multiple common of `%T'\n" -msgstr "" - -#: ldmain.c:980 -msgid "%B: warning: previous common is here\n" -msgstr "" - -#: ldmain.c:1001 ldmain.c:1040 -msgid "%P: warning: global constructor %s used\n" -msgstr "" - -#: ldmain.c:1050 -msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n" -msgstr "" - -#: ldmain.c:1234 -msgid "%F%P: bfd_hash_table_init failed: %E\n" -msgstr "" - -#: ldmain.c:1241 -msgid "%F%P: bfd_hash_lookup failed: %E\n" -msgstr "" - -#: ldmain.c:1261 -msgid "%C: undefined reference to `%T'\n" -msgstr "" - -#: ldmain.c:1267 -msgid "%D: more undefined references to `%T' follow\n" -msgstr "" - -#: ldmain.c:1274 -msgid "%B: undefined reference to `%T'\n" -msgstr "" - -#: ldmain.c:1280 -msgid "%B: more undefined references to `%T' follow\n" -msgstr "" - -#: ldmain.c:1300 ldmain.c:1321 ldmain.c:1340 -msgid "%P%X: generated" -msgstr "" - -#: ldmain.c:1303 -msgid " relocation truncated to fit: %s %T" -msgstr "" - -#: ldmain.c:1324 -#, c-format -msgid "dangerous relocation: %s\n" -msgstr "" - -#: ldmain.c:1343 -msgid " reloc refers to symbol `%T' which is not being output\n" -msgstr "" - -#: ldmisc.c:157 -msgid "no symbol" -msgstr "" - -#: ldmisc.c:221 -#, c-format -msgid "built in linker script:%u" -msgstr "" - -#: ldmisc.c:271 ldmisc.c:275 -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" -msgstr "" - -#: ldmisc.c:463 -msgid "%F%P: internal error %s %d\n" -msgstr "" - -#: ldmisc.c:513 -msgid "%P: internal error: aborting at %s line %d in %s\n" -msgstr "" - -#: ldmisc.c:516 -msgid "%P: internal error: aborting at %s line %d\n" -msgstr "" - -#: ldmisc.c:518 -msgid "%P%F: please report this bug\n" -msgstr "" - -#. Output for noisy == 2 is intended to follow the GNU standards. -#: ldver.c:38 -#, c-format -msgid "GNU ld version %s\n" -msgstr "" - -#: ldver.c:42 -msgid "Copyright 2002 Free Software Foundation, Inc.\n" -msgstr "" - -#: ldver.c:43 -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 -msgid " Supported emulations:\n" -msgstr "" - -#: ldwrite.c:59 ldwrite.c:195 -msgid "%P%F: bfd_new_link_order failed\n" -msgstr "" - -#: ldwrite.c:325 -msgid "%F%P: clone section failed: %E\n" -msgstr "" - -#: ldwrite.c:364 -#, c-format -msgid "%8x something else\n" -msgstr "" - -#: ldwrite.c:547 -msgid "%F%P: final link failed: %E\n" -msgstr "" - -#: lexsup.c:173 lexsup.c:268 -msgid "KEYWORD" -msgstr "" - -#: lexsup.c:173 -msgid "Shared library control for HP/UX compatibility" -msgstr "" - -#: lexsup.c:176 -msgid "ARCH" -msgstr "" - -#: lexsup.c:176 -msgid "Set architecture" -msgstr "" - -#: lexsup.c:178 lexsup.c:339 -msgid "TARGET" -msgstr "" - -#: lexsup.c:178 -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 -msgid "FILE" -msgstr "" - -#: lexsup.c:180 -msgid "Read MRI format linker script" -msgstr "" - -#: lexsup.c:182 -msgid "Force common symbols to be defined" -msgstr "" - -#: lexsup.c:186 lexsup.c:376 lexsup.c:378 lexsup.c:380 -msgid "ADDRESS" -msgstr "" - -#: lexsup.c:186 -msgid "Set start address" -msgstr "" - -#: lexsup.c:188 -msgid "Export all dynamic symbols" -msgstr "" - -#: lexsup.c:190 -msgid "Link big-endian objects" -msgstr "" - -#: lexsup.c:192 -msgid "Link little-endian objects" -msgstr "" - -#: lexsup.c:194 lexsup.c:197 -msgid "SHLIB" -msgstr "" - -#: lexsup.c:194 -msgid "Auxiliary filter for shared object symbol table" -msgstr "" - -#: lexsup.c:197 -msgid "Filter for shared object symbol table" -msgstr "" - -#: lexsup.c:199 -msgid "Ignored" -msgstr "" - -#: lexsup.c:201 -msgid "SIZE" -msgstr "" - -#: lexsup.c:201 -msgid "Small data size (if no size, same as --shared)" -msgstr "" - -#: lexsup.c:204 -msgid "FILENAME" -msgstr "" - -#: lexsup.c:204 -msgid "Set internal name of shared library" -msgstr "" - -#: lexsup.c:206 -msgid "PROGRAM" -msgstr "" - -#: lexsup.c:206 -msgid "Set PROGRAM as the dynamic linker to use" -msgstr "" - -#: lexsup.c:208 -msgid "LIBNAME" -msgstr "" - -#: lexsup.c:208 -msgid "Search for library LIBNAME" -msgstr "" - -#: lexsup.c:210 -msgid "DIRECTORY" -msgstr "" - -#: lexsup.c:210 -msgid "Add DIRECTORY to library search path" -msgstr "" - -#: lexsup.c:212 -msgid "EMULATION" -msgstr "" - -#: lexsup.c:212 -msgid "Set emulation" -msgstr "" - -#: lexsup.c:214 -msgid "Print map file on standard output" -msgstr "" - -#: lexsup.c:216 -msgid "Do not page align data" -msgstr "" - -#: lexsup.c:218 -msgid "Do not page align data, do not make text readonly" -msgstr "" - -#: lexsup.c:221 -msgid "Set output file name" -msgstr "" - -#: lexsup.c:223 -msgid "Optimize output file" -msgstr "" - -#: lexsup.c:225 -msgid "Ignored for SVR4 compatibility" -msgstr "" - -#: lexsup.c:229 -msgid "Generate relocateable output" -msgstr "" - -#: lexsup.c:233 -msgid "Just link symbols (if directory, same as --rpath)" -msgstr "" - -#: lexsup.c:236 -msgid "Strip all symbols" -msgstr "" - -#: lexsup.c:238 -msgid "Strip debugging symbols" -msgstr "" - -#: lexsup.c:240 -msgid "Trace file opens" -msgstr "" - -#: lexsup.c:242 -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 -msgid "SYMBOL" -msgstr "" - -#: lexsup.c:244 -msgid "Start with undefined reference to SYMBOL" -msgstr "" - -#: lexsup.c:246 -msgid "[=SECTION]" -msgstr "" - -#: lexsup.c:246 -msgid "Don't merge input [SECTION | orphan] sections" -msgstr "" - -#: lexsup.c:248 -msgid "Build global constructor/destructor tables" -msgstr "" - -#: lexsup.c:250 -msgid "Print version information" -msgstr "" - -#: lexsup.c:252 -msgid "Print version and emulation information" -msgstr "" - -#: lexsup.c:254 -msgid "Discard all local symbols" -msgstr "" - -#: lexsup.c:256 -msgid "Discard temporary local symbols (default)" -msgstr "" - -#: lexsup.c:258 -msgid "Don't discard any local symbols" -msgstr "" - -#: lexsup.c:260 -msgid "Trace mentions of SYMBOL" -msgstr "" - -#: lexsup.c:262 lexsup.c:348 lexsup.c:350 -msgid "PATH" -msgstr "" - -#: lexsup.c:262 -msgid "Default search path for Solaris compatibility" -msgstr "" - -#: lexsup.c:264 -msgid "Start a group" -msgstr "" - -#: lexsup.c:266 -msgid "End a group" -msgstr "" - -#: lexsup.c:268 -msgid "Ignored for SunOS compatibility" -msgstr "" - -#: lexsup.c:270 -msgid "Link against shared libraries" -msgstr "" - -#: lexsup.c:276 -msgid "Do not link against shared libraries" -msgstr "" - -#: lexsup.c:284 -msgid "Bind global references locally" -msgstr "" - -#: lexsup.c:286 -msgid "Check section addresses for overlaps (default)" -msgstr "" - -#: lexsup.c:288 -msgid "Do not check section addresses for overlaps" -msgstr "" - -#: lexsup.c:291 -msgid "Output cross reference table" -msgstr "" - -#: lexsup.c:293 -msgid "SYMBOL=EXPRESSION" -msgstr "" - -#: lexsup.c:293 -msgid "Define a symbol" -msgstr "" - -#: lexsup.c:295 -msgid "[=STYLE]" -msgstr "" - -#: lexsup.c:295 -msgid "Demangle symbol names [using STYLE]" -msgstr "" - -#: lexsup.c:297 -msgid "Generate embedded relocs" -msgstr "" - -#: lexsup.c:299 -msgid "Call SYMBOL at unload-time" -msgstr "" - -#: lexsup.c:301 -msgid "Force generation of file with .exe suffix" -msgstr "" - -#: lexsup.c:303 -msgid "Remove unused sections (on some targets)" -msgstr "" - -#: lexsup.c:306 -msgid "Don't remove unused sections (default)" -msgstr "" - -#: lexsup.c:309 -msgid "Print option help" -msgstr "" - -#: lexsup.c:311 -msgid "Call SYMBOL at load-time" -msgstr "" - -#: lexsup.c:313 -msgid "Write a map file" -msgstr "" - -#: lexsup.c:315 -msgid "Do not define Common storage" -msgstr "" - -#: lexsup.c:317 -msgid "Do not demangle symbol names" -msgstr "" - -#: lexsup.c:319 -msgid "Use less memory and more disk I/O" -msgstr "" - -#: lexsup.c:321 -msgid "Allow no undefined symbols" -msgstr "" - -#: lexsup.c:323 -msgid "Allow undefined symbols in shared objects" -msgstr "" - -#: lexsup.c:325 -msgid "Allow multiple definitions" -msgstr "" - -#: lexsup.c:327 -msgid "Disallow undefined version" -msgstr "" - -#: lexsup.c:329 -msgid "Don't warn about mismatched input files" -msgstr "" - -#: lexsup.c:331 -msgid "Turn off --whole-archive" -msgstr "" - -#: lexsup.c:333 -msgid "Create an output file even if errors occur" -msgstr "" - -#: lexsup.c:337 -msgid "" -"Only use library directories specified on\n" -"\t\t\t\tthe command line" -msgstr "" - -#: lexsup.c:339 -msgid "Specify target of output file" -msgstr "" - -#: lexsup.c:341 -msgid "Ignored for Linux compatibility" -msgstr "" - -#: lexsup.c:343 -msgid "Relax branches on certain targets" -msgstr "" - -#: lexsup.c:346 -msgid "Keep only symbols listed in FILE" -msgstr "" - -#: lexsup.c:348 -msgid "Set runtime shared library search path" -msgstr "" - -#: lexsup.c:350 -msgid "Set link time shared library search path" -msgstr "" - -#: lexsup.c:352 -msgid "Create a shared library" -msgstr "" - -#: lexsup.c:356 -msgid "Sort common symbols by size" -msgstr "" - -#: lexsup.c:360 -msgid "COUNT" -msgstr "" - -#: lexsup.c:360 -msgid "How many tags to reserve in .dynamic section" -msgstr "" - -#: lexsup.c:362 -msgid "[=SIZE]" -msgstr "" - -#: lexsup.c:362 -msgid "Split output sections every SIZE octets" -msgstr "" - -#: lexsup.c:364 -msgid "[=COUNT]" -msgstr "" - -#: lexsup.c:364 -msgid "Split output sections every COUNT relocs" -msgstr "" - -#: lexsup.c:366 -msgid "Print memory usage statistics" -msgstr "" - -#: lexsup.c:368 -msgid "Display target specific options" -msgstr "" - -#: lexsup.c:370 -msgid "Do task level linking" -msgstr "" - -#: lexsup.c:372 -msgid "Use same format as native linker" -msgstr "" - -#: lexsup.c:374 -msgid "SECTION=ADDRESS" -msgstr "" - -#: lexsup.c:374 -msgid "Set address of named section" -msgstr "" - -#: lexsup.c:376 -msgid "Set address of .bss section" -msgstr "" - -#: lexsup.c:378 -msgid "Set address of .data section" -msgstr "" - -#: lexsup.c:380 -msgid "Set address of .text section" -msgstr "" - -#: lexsup.c:382 -msgid "Output lots of information during link" -msgstr "" - -#: lexsup.c:386 -msgid "Read version information script" -msgstr "" - -#: lexsup.c:389 -msgid "" -"Take export symbols list from .exports, using\n" -"\t\t\t\tSYMBOL as the version." -msgstr "" - -#: lexsup.c:392 -msgid "Warn about duplicate common symbols" -msgstr "" - -#: lexsup.c:394 -msgid "Warn if global constructors/destructors are seen" -msgstr "" - -#: lexsup.c:397 -msgid "Warn if the multiple GP values are used" -msgstr "" - -#: lexsup.c:399 -msgid "Warn only once per undefined symbol" -msgstr "" - -#: lexsup.c:401 -msgid "Warn if start of section changes due to alignment" -msgstr "" - -#: lexsup.c:404 -msgid "Treat warnings as errors" -msgstr "" - -#: lexsup.c:407 -msgid "Include all objects from following archives" -msgstr "" - -#: lexsup.c:409 -msgid "Use wrapper functions for SYMBOL" -msgstr "" - -#: lexsup.c:411 -msgid "[=WORDS]" -msgstr "" - -#: lexsup.c:411 -msgid "" -"Modify problematic branches in last WORDS (1-10,\n" -"\t\t\t\tdefault 5) words of a page" -msgstr "" - -#: lexsup.c:577 -msgid "%P: unrecognized option '%s'\n" -msgstr "" - -#: lexsup.c:579 -msgid "%P%F: use the --help option for usage information\n" -msgstr "" - -#: lexsup.c:598 -msgid "%P%F: unrecognized -a option `%s'\n" -msgstr "" - -#: lexsup.c:611 -msgid "%P%F: unrecognized -assert option `%s'\n" -msgstr "" - -#: lexsup.c:654 -msgid "%F%P: unknown demangling style `%s'" -msgstr "" - -#: lexsup.c:714 -msgid "%P%F: invalid number `%s'\n" -msgstr "" - -#. This can happen if the user put "-rpath,a" on the command -#. line. (Or something similar. The comma is important). -#. Getopt becomes confused and thinks that this is a -r option -#. but it cannot parse the text after the -r so it refuses to -#. increment the optind counter. Detect this case and issue -#. 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 -msgid "%P%F: bad -rpath option\n" -msgstr "" - -#: lexsup.c:916 -msgid "%P%F: -shared not supported\n" -msgstr "" - -#: lexsup.c:948 -msgid "%P%F: invalid argument to option \"--section-start\"\n" -msgstr "" - -#: lexsup.c:954 -msgid "%P%F: missing argument(s) to option \"--section-start\"\n" -msgstr "" - -#: lexsup.c:1103 -msgid "%P%F: may not nest groups (--help for usage)\n" -msgstr "" - -#: lexsup.c:1110 -msgid "%P%F: group ended before it began (--help for usage)\n" -msgstr "" - -#: lexsup.c:1124 -msgid "%P%F: invalid argument to option \"mpc860c0\"\n" -msgstr "" - -#: lexsup.c:1179 -msgid "%P%F: invalid hex number `%s'\n" -msgstr "" - -#: lexsup.c:1191 -#, c-format -msgid "Usage: %s [options] file...\n" -msgstr "" - -#: lexsup.c:1193 -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 -#, c-format -msgid "%s: supported targets:" -msgstr "" - -#: lexsup.c:1284 -#, c-format -msgid "%s: supported emulations: " -msgstr "" - -#: lexsup.c:1289 -#, c-format -msgid "%s: emulation specific options:\n" -msgstr "" - -#: lexsup.c:1293 -#, c-format -msgid "Report bugs to %s\n" -msgstr "" - -#: mri.c:334 -msgid "%P%F: unknown format type %s\n" -msgstr "" - -#: pe-dll.c:323 -#, c-format -msgid "%XUnsupported PEI architecture: %s\n" -msgstr "" - -#: pe-dll.c:673 -#, c-format -msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n" -msgstr "" - -#: pe-dll.c:680 -#, c-format -msgid "Warning, duplicate EXPORT: %s\n" -msgstr "" - -#: pe-dll.c:744 -#, c-format -msgid "%XCannot export %s: symbol not defined\n" -msgstr "" - -#: pe-dll.c:750 -#, c-format -msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n" -msgstr "" - -#: pe-dll.c:757 -#, c-format -msgid "%XCannot export %s: symbol not found\n" -msgstr "" - -#: pe-dll.c:872 -#, c-format -msgid "%XError, ordinal used twice: %d (%s vs %s)\n" -msgstr "" - -#: pe-dll.c:1183 -#, c-format -msgid "%XError: %d-bit reloc in dll\n" -msgstr "" - -#: pe-dll.c:1318 -#, c-format -msgid "%s: Can't open output def file %s\n" -msgstr "" - -#: pe-dll.c:1461 -msgid "; no contents available\n" -msgstr "" - -#: pe-dll.c:2137 -#, c-format -msgid "%XCan't open .lib file: %s\n" -msgstr "" - -#: pe-dll.c:2142 -#, c-format -msgid "Creating library file: %s\n" -msgstr "" diff --git a/contrib/binutils/ld/scripttempl/elfppc.sc b/contrib/binutils/ld/scripttempl/elfppc.sc deleted file mode 100644 index ddab8f80f814..000000000000 --- a/contrib/binutils/ld/scripttempl/elfppc.sc +++ /dev/null @@ -1,288 +0,0 @@ -# -# Unusual variables checked by this code: -# NOP - two byte opcode for no-op (defaults to 0) -# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start -# OTHER_READONLY_SECTIONS - other than .text .init .rodata ... -# (e.g., .PARISC.milli) -# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ... -# (e.g., .PARISC.global) -# OTHER_SECTIONS - at the end -# EXECUTABLE_SYMBOLS - symbols that must be defined for an -# executable (e.g., _DYNAMIC_LINK) -# TEXT_START_SYMBOLS - symbols that appear at the start of the -# .text section. -# DATA_START_SYMBOLS - symbols that appear at the start of the -# .data section. -# OTHER_BSS_SYMBOLS - symbols that appear at the start of the -# .bss section besides __bss_start. -# -# When adding sections, do note that the names of some sections are used -# when specifying the start address of the next. -# -test -z "$ENTRY" && ENTRY=_start -test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT} -test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} -test "$LD_FLAG" = "N" && DATA_ADDR=. -SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2) }" -SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2) }" -INTERP=".interp ${RELOCATING-0} : { *(.interp) }" -PLT=".plt ${RELOCATING-0} : { *(.plt) }" -CTOR=".ctors ${CONSTRUCTING-0} : - { - ${CONSTRUCTING+${CTOR_START}} - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - - KEEP (*crtbegin.o(.ctors)) - - /* We don't want to include the .ctor section from - from the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - - KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - ${CONSTRUCTING+${CTOR_END}} - }" - -DTOR=" .dtors ${CONSTRUCTING-0} : - { - ${CONSTRUCTING+${DTOR_START}} - KEEP (*crtbegin.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - ${CONSTRUCTING+${DTOR_END}} - }" - -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}", - "${LITTLE_OUTPUT_FORMAT}") -OUTPUT_ARCH(${ARCH}) -ENTRY(${ENTRY}) - -${RELOCATING+${LIB_SEARCH_DIRS}} -${RELOCATING+/* Do we need any of these for elf? - __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */} -${RELOCATING+${EXECUTABLE_SYMBOLS}} -${RELOCATING- /* For some reason, the Solaris linker makes bad executables - if gld -r is used and the intermediate file has sections starting - at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld - bug. But for now assigning the zero vmas works. */} - -${RELOCATING+PROVIDE (__stack = 0);} -${RELOCATING+PROVIDE (___stack = 0);} -SECTIONS -{ - /* Read-only sections, merged into text segment: */ - ${CREATE_SHLIB-${RELOCATING+. = ${TEXT_START_ADDR} + SIZEOF_HEADERS;}} - ${CREATE_SHLIB+${RELOCATING+. = SIZEOF_HEADERS;}} - ${CREATE_SHLIB-${INTERP}} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) } - .rela.text ${RELOCATING-0} : - { - *(.rela.text) - ${RELOCATING+*(.rela.text.*)} - ${RELOCATING+*(.rela.gnu.linkonce.t*)} - } - .rela.data ${RELOCATING-0} : - { - *(.rela.data) - ${RELOCATING+*(.rela.data.*)} - ${RELOCATING+*(.rela.gnu.linkonce.d*)} - } - .rela.rodata ${RELOCATING-0} : - { - *(.rela.rodata) - ${RELOCATING+*(.rela.rodata.*)} - ${RELOCATING+*(.rela.gnu.linkonce.r*)} - } - .rela.got ${RELOCATING-0} : { *(.rela.got) } - .rela.got1 ${RELOCATING-0} : { *(.rela.got1) } - .rela.got2 ${RELOCATING-0} : { *(.rela.got2) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } - .rela.sdata ${RELOCATING-0} : { *(.rela.sdata) } - .rela.sbss ${RELOCATING-0} : { *(.rela.sbss) } - .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2) } - .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2) } - .text ${RELOCATING-0} : - { - ${RELOCATING+${TEXT_START_SYMBOLS}} - *(.text) - ${RELOCATING+*(.text.*)} - /* .gnu.warning sections are handled specially by elf32.em. */ - *(.gnu.warning) - ${RELOCATING+*(.gnu.linkonce.t*)} - } =${NOP-0} - .init ${RELOCATING-0} : { KEEP (*(.init)) } =${NOP-0} - .fini ${RELOCATING-0} : { KEEP (*(.fini)) } =${NOP-0} - .rodata ${RELOCATING-0} : - { - *(.rodata) - ${RELOCATING+*(.rodata.*)} - ${RELOCATING+*(.gnu.linkonce.r*)} - } - .rodata1 ${RELOCATING-0} : { *(.rodata1) } - ${RELOCATING+_etext = .;} - ${RELOCATING+PROVIDE (etext = .);} - ${RELOCATING+PROVIDE (__etext = .);} - ${CREATE_SHLIB-${SDATA2}} - ${CREATE_SHLIB-${SBSS2}} - ${RELOCATING+${OTHER_READONLY_SECTIONS}} - - /* Adjust the address for the data segment. We want to adjust up to - the same address within the page on the next page up. It would - be more correct to do this: - ${RELOCATING+. = ${DATA_ADDR-ALIGN(${MAXPAGESIZE}) + (ALIGN(8) & (${MAXPAGESIZE} - 1))};} - The current expression does not correctly handle the case of a - text segment ending precisely at the end of a page; it causes the - data segment to skip a page. The above expression does not have - this problem, but it will currently (2/95) cause BFD to allocate - a single segment, combining both text and data, for this case. - This will prevent the text segment from being shared among - multiple executions of the program; I think that is more - important than losing a page of the virtual address space (note - that no actual memory is lost; the page which is skipped can not - be referenced). */ - ${RELOCATING+. = ${DATA_ADDR- ALIGN(8) + ${MAXPAGESIZE}};} - - .data ${RELOCATING-0} : - { - ${RELOCATING+${DATA_START_SYMBOLS}} - *(.data) - ${RELOCATING+*(.data.*)} - ${RELOCATING+*(.gnu.linkonce.d*)} - ${CONSTRUCTING+CONSTRUCTORS} - } - .data1 ${RELOCATING-0} : { *(.data1) } - ${RELOCATING+${OTHER_READWRITE_SECTIONS}} - - .got1 ${RELOCATING-0} : { *(.got1) } - .dynamic ${RELOCATING-0} : { *(.dynamic) } - - /* Put .ctors and .dtors next to the .got2 section, so that the pointers - get relocated with -mrelocatable. Also put in the .fixup pointers. - The current compiler no longer needs this, but keep it around for 2.7.2 */ - - ${RELOCATING+PROVIDE (_GOT2_START_ = .);} - ${RELOCATING+PROVIDE (__GOT2_START_ = .);} - .got2 ${RELOCATING-0} : { *(.got2) } - - ${RELOCATING+PROVIDE (__CTOR_LIST__ = .);} - ${RELOCATING+PROVIDE (___CTOR_LIST__ = .);} - ${RELOCATING+${CTOR}} - ${RELOCATING+PROVIDE (__CTOR_END__ = .);} - ${RELOCATING+PROVIDE (___CTOR_END__ = .);} - - ${RELOCATING+PROVIDE (__DTOR_LIST__ = .);} - ${RELOCATING+PROVIDE (___DTOR_LIST__ = .);} - ${RELOCATING+${DTOR}} - ${RELOCATING+PROVIDE (__DTOR_END__ = .);} - ${RELOCATING+PROVIDE (___DTOR_END__ = .);} - - ${RELOCATING+PROVIDE (_FIXUP_START_ = .);} - ${RELOCATING+PROVIDE (__FIXUP_START_ = .);} - .fixup ${RELOCATING-0} : { *(.fixup) } - ${RELOCATING+PROVIDE (_FIXUP_END_ = .);} - ${RELOCATING+PROVIDE (__FIXUP_END_ = .);} - ${RELOCATING+PROVIDE (_GOT2_END_ = .);} - ${RELOCATING+PROVIDE (__GOT2_END_ = .);} - - ${RELOCATING+PROVIDE (_GOT_START_ = .);} - ${RELOCATING+PROVIDE (__GOT_START_ = .);} - .got ${RELOCATING-0} : { *(.got) } - .got.plt ${RELOCATING-0} : { *(.got.plt) } - ${CREATE_SHLIB+${SDATA2}} - ${CREATE_SHLIB+${SBSS2}} - ${RELOCATING+PROVIDE (_GOT_END_ = .);} - ${RELOCATING+PROVIDE (__GOT_END_ = .);} - - /* We want the small data sections together, so single-instruction offsets - can access them all, and initialized data all before uninitialized, so - we can shorten the on-disk segment size. */ - .sdata ${RELOCATING-0} : { *(.sdata) } - ${RELOCATING+_edata = .;} - ${RELOCATING+PROVIDE (edata = .);} - ${RELOCATING+PROVIDE (__edata = .);} - .sbss ${RELOCATING-0} : - { - ${RELOCATING+PROVIDE (__sbss_start = .);} - ${RELOCATING+PROVIDE (___sbss_start = .);} - *(.sbss) - *(.scommon) - *(.dynsbss) - ${RELOCATING+PROVIDE (__sbss_end = .);} - ${RELOCATING+PROVIDE (___sbss_end = .);} - } - ${PLT} - .bss ${RELOCATING-0} : - { - ${RELOCATING+${OTHER_BSS_SYMBOLS}} - ${RELOCATING+PROVIDE (__bss_start = .);} - ${RELOCATING+PROVIDE (___bss_start = .);} - *(.dynbss) - *(.bss) - *(COMMON) - } - ${RELOCATING+_end = . ;} - ${RELOCATING+PROVIDE (end = .);} - ${RELOCATING+PROVIDE (__end = .);} - - /* These are needed for ELF backends which have not yet been - converted to the new style linker. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - - /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to the beginning - of the section so we begin them at 0. */ - - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - - /* SGI/MIPS DWARF 2 extensions */ - .debug_weaknames 0 : { *(.debug_weaknames) } - .debug_funcnames 0 : { *(.debug_funcnames) } - .debug_typenames 0 : { *(.debug_typenames) } - .debug_varnames 0 : { *(.debug_varnames) } - - /* These must appear regardless of ${RELOCATING}. */ - ${OTHER_SECTIONS} -} -EOF diff --git a/contrib/binutils/ld/scripttempl/tic30aout.sc b/contrib/binutils/ld/scripttempl/tic30aout.sc deleted file mode 100644 index 28baed37e614..000000000000 --- a/contrib/binutils/ld/scripttempl/tic30aout.sc +++ /dev/null @@ -1,34 +0,0 @@ -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}") -OUTPUT_ARCH(${ARCH}) - -${STACKZERO+${RELOCATING+${STACKZERO}}} -${RELOCATING+PROVIDE (__stack = 0);} -SECTIONS -{ - ${RELOCATING+. = ${TEXT_START_ADDR};} - .text : - { - CREATE_OBJECT_SYMBOLS - *(.text) - ${RELOCATING+_etext = .;} - ${RELOCATING+__etext = .;} - ${PAD_TEXT+${RELOCATING+. = ${DATA_ALIGNMENT};}} - } - ${RELOCATING+. = ${DATA_ALIGNMENT};} - .data : - { - *(.data) - ${RELOCATING+_edata = .;} - ${RELOCATING+__edata = .;} - } - .bss : - { - ${RELOCATING+ __bss_start = .}; - *(.bss) - *(COMMON) - ${RELOCATING+_end = ALIGN(4) }; - ${RELOCATING+__end = ALIGN(4) }; - } -} -EOF diff --git a/contrib/binutils/ld/scripttempl/tic30coff.sc b/contrib/binutils/ld/scripttempl/tic30coff.sc deleted file mode 100644 index df2d4f737cd3..000000000000 --- a/contrib/binutils/ld/scripttempl/tic30coff.sc +++ /dev/null @@ -1,58 +0,0 @@ -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}") -OUTPUT_ARCH("${OUTPUT_ARCH}") - -MEMORY -{ - rom : ORIGIN = 0x00000300, LENGTH = 16k - ram : ORIGIN = 0x00000300 + 16k, LENGTH = 16k - ramblk0 : ORIGIN = 0x02026000, LENGTH = 0x1000 - ramblk1 : ORIGIN = 0x02027000, LENGTH = 0x1000 -} - -SECTIONS -{ -.vectors 0x00000000 : -{ - *(vectors) -} - -.text : -{ - *(.text) -} > rom - -.const : -{ - *(.const) - __etext = . ; -} > rom - -.mdata : AT( ADDR(.const) + SIZEOF(.const) ) -{ - __data = . ; - *(.data); - __edata = . ; -} > ram - -.bss : -{ - __bss = . ; - *(.bss); - *(COMMON); - __ebss = . ; -} > ram - -.ram0 : -{ - *(ram0) -} > ramblk0 - -.ram1 : -{ - *(ram1) -} > ramblk1 - -} - -EOF diff --git a/contrib/binutils/ld/scripttempl/v850.sc b/contrib/binutils/ld/scripttempl/v850.sc deleted file mode 100644 index 8958321b2b95..000000000000 --- a/contrib/binutils/ld/scripttempl/v850.sc +++ /dev/null @@ -1,230 +0,0 @@ -cat << EOF -OUTPUT_FORMAT("elf32-v850", "elf32-v850", - "elf32-v850") -OUTPUT_ARCH(v850) -ENTRY(_start) -SEARCH_DIR(.); -SECTIONS -{ - /* This saves a little space in the ELF file, since the zda starts - at a higher location that the ELF headers take up. */ - - .zdata ${ZDATA_START_ADDR} : - { - *(.zdata) - *(.zbss) - *(reszdata) - *(.zcommon) - } - - /* This is the read only part of the zero data area. - Having it as a seperate section prevents its - attributes from being inherited by the zdata - section. Specifically it prevents the zdata - section from being marked READONLY. */ - - .rozdata ${ROZDATA_START_ADDR} : - { - *(.rozdata) - *(romzdata) - *(romzbss) - } - - /* Read-only sections, merged into text segment. */ - . = ${TEXT_START_ADDR}; - .interp : { *(.interp) } - .hash : { *(.hash) } - .dynsym : { *(.dynsym) } - .dynstr : { *(.dynstr) } - .rel.text : { *(.rel.text) } - .rela.text : { *(.rela.text) } - .rel.data : { *(.rel.data) } - .rela.data : { *(.rela.data) } - .rel.rodata : { *(.rel.rodata) } - .rela.rodata : { *(.rela.rodata) } - .rel.gcc_except_table : { *(.rel.gcc_except_table) } - .rela.gcc_except_table : { *(.rela.gcc_except_table) } - .rel.got : { *(.rel.got) } - .rela.got : { *(.rela.got) } - .rel.ctors : { *(.rel.ctors) } - .rela.ctors : { *(.rela.ctors) } - .rel.dtors : { *(.rel.dtors) } - .rela.dtors : { *(.rela.dtors) } - .rel.init : { *(.rel.init) } - .rela.init : { *(.rela.init) } - .rel.fini : { *(.rel.fini) } - .rela.fini : { *(.rela.fini) } - .rel.bss : { *(.rel.bss) } - .rela.bss : { *(.rela.bss) } - .rel.plt : { *(.rel.plt) } - .rela.plt : { *(.rela.plt) } - .init : { KEEP (*(.init)) } =0 - .plt : { *(.plt) } - - .text : - { - *(.text) - ${RELOCATING+*(.text.*)} - - /* .gnu.warning sections are handled specially by elf32.em. */ - *(.gnu.warning) - *(.gnu.linkonce.t*) - } =0 - - ${RELOCATING+_etext = .;} - ${RELOCATING+PROVIDE (etext = .);} - - /* This is special code area at the end of the normal text section. - It contains a small lookup table at the start followed by the - code pointed to by entries in the lookup table. */ - - .call_table_data ${CALL_TABLE_START_ADDR} : - { - ${RELOCATING+PROVIDE(__ctbp = .);} - *(.call_table_data) - } = 0xff /* Fill gaps with 0xff. */ - - .call_table_text : - { - *(.call_table_text) - } - - .fini : { KEEP (*(.fini)) } =0 - .rodata : { *(.rodata) ${RELOCATING+*(.rodata.*)} *(.gnu.linkonce.r*) } - .rodata1 : { *(.rodata1) } - - .data : - { - *(.data) - ${RELOCATING+*(.data.*)} - *(.gnu.linkonce.d*) - CONSTRUCTORS - } - .data1 : { *(.data1) } - .ctors : - { - ${CONSTRUCTING+___ctors = .;} - KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*crtend(.ctors)) - ${CONSTRUCTING+___ctors_end = .;} - } - .dtors : - { - ${CONSTRUCTING+___dtors = .;} - KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*crtend.o(.dtors)) - ${CONSTRUCTING+___dtors_end = .;} - } - .jcr : - { - KEEP (*(.jcr)) - } - - .gcc_except_table : { *(.gcc_except_table) } - - .got : { *(.got.plt) *(.got) } - .dynamic : { *(.dynamic) } - - .tdata ${TDATA_START_ADDR} : - { - ${RELOCATING+PROVIDE (__ep = .);} - *(.tbyte) - *(.tcommon_byte) - *(.tdata) - *(.tbss) - *(.tcommon) - } - - /* We want the small data sections together, so single-instruction offsets - can access them all, and initialized data all before uninitialized, so - we can shorten the on-disk segment size. */ - - .sdata ${SDATA_START_ADDR} : - { - ${RELOCATING+PROVIDE (__gp = . + 0x8000);} - *(.sdata) - } - - /* See comment about .rozdata. */ - .rosdata ${ROSDATA_START_ADDR} : - { - *(.rosdata) - } - - /* We place the .sbss data section AFTER the .rosdata section, so that - it can directly preceed the .bss section. This allows runtime startup - code to initialise all the zero-data sections by simply taking the - value of '_edata' and zeroing until it reaches '_end'. */ - - .sbss : - { - ${RELOCATING+__sbss_start = .;} - *(.sbss) - *(.scommon) - } - - ${RELOCATING+_edata = DEFINED (__sbss_start) ? __sbss_start : . ;} - ${RELOCATING+PROVIDE (edata = _edata);} - - .bss : - { - ${RELOCATING+__bss_start = DEFINED (__sbss_start) ? __sbss_start : . ;} - ${RELOCATING+__real_bss_start = . ;} - *(.dynbss) - *(.bss) - *(COMMON) - } - - ${RELOCATING+_end = . ;} - ${RELOCATING+PROVIDE (end = .);} - - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } - - /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to the beginning - of the section so we begin them at 0. */ - - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - - /* SGI/MIPS DWARF 2 extensions. */ - .debug_weaknames 0 : { *(.debug_weaknames) } - .debug_funcnames 0 : { *(.debug_funcnames) } - .debug_typenames 0 : { *(.debug_typenames) } - .debug_varnames 0 : { *(.debug_varnames) } - - /* User stack. */ - .stack 0x200000 : - { - ${RELOCATING+__stack = .;} - *(.stack) - } -} -EOF diff --git a/contrib/binutils/ld/scripttempl/z8000.sc b/contrib/binutils/ld/scripttempl/z8000.sc deleted file mode 100644 index 646c88080a9a..000000000000 --- a/contrib/binutils/ld/scripttempl/z8000.sc +++ /dev/null @@ -1,57 +0,0 @@ -cat <<EOF -OUTPUT_FORMAT("${OUTPUT_FORMAT}") -OUTPUT_ARCH("${OUTPUT_ARCH}") -ENTRY(_start) - -SECTIONS -{ -.text ${BIG+ ${RELOCATING+ 0x0000000}} : - { - *(.text) - *(.strings) - *(.rdata) - } - -.ctors ${BIG+ ${RELOCATING+ 0x2000000}} : - { - ${CONSTRUCTING+ ___ctors = . ; } - *(.ctors); - ${CONSTRUCTING+ ___ctors_end = . ; } - ___dtors = . ; - *(.dtors); - ${CONSTRUCTING+ ___dtors_end = . ; } - } - -.data ${BIG+ ${RELOCATING+ 0x3000000}} : - { - *(.data) - } - -.bss ${BIG+ ${RELOCATING+ 0x4000000}} : - { - ${RELOCATING+ __start_bss = . ; } - *(.bss); - *(COMMON); - ${RELOCATING+ __end_bss = . ; } - } - -.heap ${BIG+ ${RELOCATING+ 0x5000000}} : - { - ${RELOCATING+ __start_heap = . ; } - ${RELOCATING+ . = . + 20k ; } - ${RELOCATING+ __end_heap = . ; } - } - -.stack ${RELOCATING+ 0xf000 } : - { - ${RELOCATING+ _stack = . ; } - *(.stack) - ${RELOCATING+ __stack_top = . ; } - } - -} -EOF - - - - diff --git a/contrib/binutils/libiberty/acconfig.h b/contrib/binutils/libiberty/acconfig.h deleted file mode 100644 index f7c599df7ac6..000000000000 --- a/contrib/binutils/libiberty/acconfig.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Define if you have the sys_errlist variable. */ -#undef HAVE_SYS_ERRLIST - -/* Define if you have the sys_nerr variable. */ -#undef HAVE_SYS_NERR - -/* Define if you have the sys_siglist variable. */ -#undef HAVE_SYS_SIGLIST - -/* Define if you have the strerror function. */ -#undef HAVE_STRERROR diff --git a/contrib/binutils/libiberty/alloca-botch.h b/contrib/binutils/libiberty/alloca-botch.h deleted file mode 100644 index c909573f58c6..000000000000 --- a/contrib/binutils/libiberty/alloca-botch.h +++ /dev/null @@ -1,5 +0,0 @@ -/* RS/6000 AIX botched alloca and requires a pragma, which ordinary compilers - throw up about, so we have to put it in a specially-configured file. - Like this one. */ - -#pragma alloca diff --git a/contrib/binutils/libiberty/alloca-conf.h b/contrib/binutils/libiberty/alloca-conf.h deleted file mode 100644 index 9c3eea396c19..000000000000 --- a/contrib/binutils/libiberty/alloca-conf.h +++ /dev/null @@ -1,24 +0,0 @@ -#include "config.h" - -#if defined(__GNUC__) && !defined(C_ALLOCA) -# ifndef alloca -# define alloca __builtin_alloca -# endif -#else /* ! defined (__GNUC__) */ -# ifdef _AIX - #pragma alloca -# else -# if defined(HAVE_ALLOCA_H) && !defined(C_ALLOCA) -# include <alloca.h> -# else /* ! defined (HAVE_ALLOCA_H) */ -# ifdef __STDC__ -extern PTR alloca (size_t); -# else /* ! defined (__STDC__) */ -extern PTR alloca (); -# endif /* ! defined (__STDC__) */ -# endif /* ! defined (HAVE_ALLOCA_H) */ -# ifdef _WIN32 -# include <malloc.h> -# endif -# endif /* ! defined (_AIX) */ -#endif /* ! defined (__GNUC__) */ diff --git a/contrib/binutils/libiberty/alloca-norm.h b/contrib/binutils/libiberty/alloca-norm.h deleted file mode 100644 index bda4fc049adf..000000000000 --- a/contrib/binutils/libiberty/alloca-norm.h +++ /dev/null @@ -1,25 +0,0 @@ -/* "Normal" configuration for alloca. */ - -#ifdef __GNUC__ -#ifndef alloca -#define alloca __builtin_alloca -#endif -#else /* ! defined (__GNUC__) */ -#if defined (sparc) && defined (sun) -#include <alloca.h> -#ifdef __STDC__ -extern void *__builtin_alloca(); -#else /* ! defined (__STDC__) */ -extern char *__builtin_alloca(); /* Stupid include file doesn't declare it */ -#endif /* ! defined (__STDC__) */ -#else /* ! defined (sparc) || ! defined (sun) */ -#ifdef __STDC__ -PTR alloca (size_t); -#else /* ! defined (__STDC__) */ -PTR alloca (); /* must agree with functions.def */ -#endif /* ! defined (__STDC__) */ -#endif /* ! defined (sparc) || ! defined (sun) */ -#ifdef _WIN32 -#include <malloc.h> -#endif -#endif /* ! defined (__GNUC__) */ diff --git a/contrib/binutils/libiberty/config/mh-sysv b/contrib/binutils/libiberty/config/mh-sysv deleted file mode 100644 index eb102d550108..000000000000 --- a/contrib/binutils/libiberty/config/mh-sysv +++ /dev/null @@ -1 +0,0 @@ -RANLIB=true diff --git a/contrib/binutils/libiberty/config/mh-sysv4 b/contrib/binutils/libiberty/config/mh-sysv4 deleted file mode 100644 index 4d1aa3cd61d5..000000000000 --- a/contrib/binutils/libiberty/config/mh-sysv4 +++ /dev/null @@ -1,3 +0,0 @@ -HDEFINES = -DHAVE_SYSCONF -RANLIB=true -INSTALL = cp diff --git a/contrib/binutils/libiberty/config/mt-mingw32 b/contrib/binutils/libiberty/config/mt-mingw32 deleted file mode 100644 index 2fb17d783d03..000000000000 --- a/contrib/binutils/libiberty/config/mt-mingw32 +++ /dev/null @@ -1,27 +0,0 @@ -# Mingw32 target Makefile fragment. -# The autoconfiguration fails for a Mingw32 target, because of an -# incompatible definition of sys_errlist, which is imported from a DLL. -# Therefore, we compute the dependencies by hand. - -HDEFINES = -DNO_SYS_PARAM_H -DNO_SYS_FILE_H -CONFIG_H = mgconfig.h -NEEDED_LIST = mgneeded-list - -mgconfig.h: Makefile - if [ -f ../newlib/Makefile ]; then \ - $(MAKE) $(FLAGS_TO_PASS) xconfig.h; \ - cp xconfig.h mgconfig.h; \ - else \ - echo "#define NEED_sys_siglist 1" >>mgconfig.h; \ - echo "#define NEED_strsignal 1" >>mgconfig.h; \ - echo "#define NEED_psignal 1" >>mgconfig.h; \ - echo "#define NEED_basename 1" >>mgconfig.h; \ - fi - -mgneeded-list: Makefile - if [ -f ../newlib/Makefile ]; then \ - $(MAKE) $(FLAGS_TO_PASS) xneeded-list; \ - cp xneeded-list mgneeded-list; \ - else \ - echo getopt.o vasprintf.o >mgneeded-list; \ - fi diff --git a/contrib/binutils/libiberty/configure.in b/contrib/binutils/libiberty/configure.in deleted file mode 100644 index a8dc66fa83c3..000000000000 --- 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/cp-demangle.c b/contrib/binutils/libiberty/cp-demangle.c index bb543fa0c2fb..19f191ed8b8b 100644 --- a/contrib/binutils/libiberty/cp-demangle.c +++ b/contrib/binutils/libiberty/cp-demangle.c @@ -2396,8 +2396,6 @@ d_expr_primary (di) const char *s; type = cplus_demangle_type (di); - if (type == NULL) - return NULL; /* If we have a type we know how to print, we aren't going to print the type name itself. */ diff --git a/contrib/binutils/libiberty/dummy.c b/contrib/binutils/libiberty/dummy.c deleted file mode 100644 index 08da647e30eb..000000000000 --- a/contrib/binutils/libiberty/dummy.c +++ /dev/null @@ -1,49 +0,0 @@ -#include <ansidecl.h> - -#ifdef __STDC__ -#include <stddef.h> -#define clock_t unsigned long -#define DEF(NAME, RETURN_TYPE, ARGLIST, ARGS) extern RETURN_TYPE NAME (ARGS); -#define DEFFUNC(NAME, RETURN_TYPE, ARGLIST, ARGS) extern RETURN_TYPE NAME (ARGS); -#else -#define void int -#define size_t unsigned long -#define clock_t unsigned long -#define DEF(NAME, RETURN_TYPE, ARGLIST, ARGS) extern RETURN_TYPE NAME (); -#define DEFFUNC(NAME, RETURN_TYPE, ARGLIST, ARGS) extern RETURN_TYPE NAME (); -#endif - -#define DEFVAR(NAME,DECL,USE) extern DECL; - -#define NOTHING /*nothing*/ - -#include "alloca-conf.h" -#include "functions.def" - -/* Always use our: getopt.o getopt1.o obstack.o spaces.o */ - -int -main (argc, argv) - int argc; char **argv; -{ - -/* Create a dummy function call for each DEF-defined function. */ - -#undef DEF -#undef DEFVAR -#undef DEFFUNC -#undef AND -#define AND = 0; -/* ARGS expands into a set of declaration. NAME ARG_LIST expands - info a function call that uses those variables as actual parameters. - If the function has been DEF'ed correctly, we can pass the right - number and types of parameters, which is nice. (E.g. gcc may - otherwise complain about the wrong number of parameters to certain - builtins.) */ -#define DEF(NAME, RETURN_TYPE, ARG_LIST, ARGS) { ARGS; NAME ARG_LIST; } -#define DEFVAR(NAME, DECL, USE) { USE; } -#define DEFFUNC(NAME, RETURN_TYPE, ARG_LIST, ARGS) { ARGS; NAME ARG_LIST; } -#include "functions.def" - - return (0); -} diff --git a/contrib/binutils/libiberty/functions.def b/contrib/binutils/libiberty/functions.def deleted file mode 100644 index 0f13f107868e..000000000000 --- a/contrib/binutils/libiberty/functions.def +++ /dev/null @@ -1,70 +0,0 @@ -/* - * List of function definitions that may *optionally* be included - * in libiberty.a. The function names must match the filenames, - * e.g. bzero() is defined in bzero.c. (While each file can contain - * extra functions, do not list them.) - * - * In the default libiberty configuration, these object files - * (e.g bzero.o) are included if and only if cc fails to find - * the corresponding function in libc. - */ - -DEF(asprintf, int, (), NOTHING) -DEF(atexit, int, (f), void (*f)()) -DEF(bcmp, int, (s1, s2, length), char *s1 AND char *s2 AND int length ) -DEF(bcopy, void, (s1, s2, length), char *s1 AND char *s2 AND int length ) -DEF(bzero, void, (s, length), char *s AND int length) -DEF(clock, clock_t, (), NOTHING) -DEF(getopt, int, (argc, argv, optstring), - int argc AND char **argv AND CONST char *optstring) -DEF(getpagesize, int , (), NOTHING) -DEF(getcwd, char*, (buf, len), char *buf AND int len) -DEF(index, char*, (s, c), char *s AND int c) -DEF(insque, void, (), NOTHING) -DEF(memchr, PTR, (s, c, length), CONST PTR s AND int c AND size_t length) -DEF(memcmp, int, (s1, s2, length), - CONST PTR s1 AND CONST PTR s2 AND size_t length) -DEF(memcpy, PTR, (s1, s2, length), PTR s1 AND CONST PTR s2 AND size_t length) -DEF(memmove, PTR, (s1, s2, length), PTR s1 AND CONST PTR s2 AND size_t length) -DEF(memset, PTR, (s, val, length), PTR s AND int val AND size_t length ) -DEF(random, long int, (), NOTHING) -DEF(rename, int, (f, t), char *f AND char *t) -DEF(rindex, char*, (s, c), char *s AND int c) -DEF(strcasecmp, int, (s1, s2), char *s1 AND char *s2) -DEF(strncasecmp, int, (s1, s2, n), char *s1 AND char *s2 AND int n) -DEF(strchr, char*, (s, c), CONST char *s AND int c) -DEF(strdup, char*, (s1), char * s1) -DEF(strrchr, char*, (s, c), CONST char *s AND int c) -DEF(strstr, char*, (), NOTHING) -DEF(strtod, double, (), NOTHING) -DEF(strtol, long, (), NOTHING) -DEF(strtoul, unsigned long, (), NOTHING) -DEF(tmpnam, char *, (s), char * s) -DEF(vfork, int, (), NOTHING) -DEF(vfprintf, int, (), NOTHING) -DEF(vprintf, int, (), NOTHING) -DEF(vsprintf, int, (), NOTHING) -DEF(sigsetmask, int, (), NOTHING) -DEF(alloca, PTR, (size), size_t size) -DEF(waitpid, int, (pid, statp, opts), int pid AND int* statp AND int opts ) -DEF(vasprintf, int, (), NOTHING) - -/* List of global variables that we want to look for in the host - environment, and to generate an entry NEED_<variable> in config.h - if they are not found. The first arg is the variable name, the - second arg is how to declare the variable, and the third is how to - use it. */ - -DEFVAR(sys_nerr, int sys_nerr, sys_nerr = 0) -DEFVAR(sys_errlist, char *sys_errlist[], sys_errlist[0] = 0) -DEFVAR(sys_siglist, char *sys_siglist[], sys_siglist[0] = 0) - -/* List of global functions that we want to look for in the host - environment, and to generate an entry NEED_<funcname> in config.h - if they are not found. */ - -DEFFUNC(strerror, char*, (errnoval), int errnoval) -DEFFUNC(psignal, void, (signo, message), unsigned signo AND char *message) -DEFFUNC(basename, char *, (name), CONST char *name) -DEFFUNC(on_exit, void, (f, arg), void (*f)() AND char *arg) -DEFFUNC(strsignal, const char *, (signo), int signo) diff --git a/contrib/binutils/libiberty/pexecute.c b/contrib/binutils/libiberty/pexecute.c deleted file mode 100644 index 347c4db10924..000000000000 --- 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 c62704f18f90..000000000000 --- 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 diff --git a/contrib/binutils/opcodes/acconfig.h b/contrib/binutils/opcodes/acconfig.h deleted file mode 100644 index ef2f4966c1bd..000000000000 --- a/contrib/binutils/opcodes/acconfig.h +++ /dev/null @@ -1,6 +0,0 @@ - -/* Name of package. */ -#undef PACKAGE - -/* Version of package. */ -#undef VERSION diff --git a/contrib/binutils/opcodes/sparc-opc.c b/contrib/binutils/opcodes/sparc-opc.c index 94708988eafa..22f18fadb5d1 100644 --- a/contrib/binutils/opcodes/sparc-opc.c +++ b/contrib/binutils/opcodes/sparc-opc.c @@ -1273,72 +1273,110 @@ cond ("bz", "tz", CONDZ, F_CONDBR|F_ALIAS), /* for e */ #define FM_DF 2 /* v9 */ #define FM_QF 3 /* v9 */ -#define fmoviccx(opcode, fpsize, args, cond, flags) /* v9 */ \ -{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z," args, flags, v9 }, \ -{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z," args, flags, v9 } +#define fmovicc(opcode, fpsize, cond, flags) /* v9 */ \ +{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z,f,g", flags, v9 }, \ +{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z,f,g", flags, v9 } -#define fmovfccx(opcode, fpsize, args, fcond, flags) /* v9 */ \ -{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6," args, flags, v9 }, \ -{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7," args, flags, v9 }, \ -{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8," args, flags, v9 }, \ -{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9," args, flags, v9 } +#define fmovfcc(opcode, fpsize, fcond, flags) /* v9 */ \ +{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags, v9 }, \ +{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags, v9 }, \ +{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags, v9 }, \ +{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags, v9 } /* FIXME: use fmovicc/fmovfcc? */ /* v9 */ -#define fmovccx(opcode, fpsize, args, cond, fcond, flags) /* v9 */ \ -{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z," args, flags | F_FLOAT, v9 }, \ -{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6," args, flags | F_FLOAT, v9 }, \ -{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z," args, flags | F_FLOAT, v9 }, \ -{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7," args, flags | F_FLOAT, v9 }, \ -{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8," args, flags | F_FLOAT, v9 }, \ -{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9," args, flags | F_FLOAT, v9 } - -#define fmovicc(suffix, cond, flags) /* v9 */ \ -fmoviccx("fmovd" suffix, FM_DF, "B,H", cond, flags), \ -fmoviccx("fmovq" suffix, FM_QF, "R,J", cond, flags), \ -fmoviccx("fmovs" suffix, FM_SF, "f,g", cond, flags) - -#define fmovfcc(suffix, fcond, flags) /* v9 */ \ -fmovfccx("fmovd" suffix, FM_DF, "B,H", fcond, flags), \ -fmovfccx("fmovq" suffix, FM_QF, "R,J", fcond, flags), \ -fmovfccx("fmovs" suffix, FM_SF, "f,g", fcond, flags) - -#define fmovcc(suffix, cond, fcond, flags) /* v9 */ \ -fmovccx("fmovd" suffix, FM_DF, "B,H", cond, fcond, flags), \ -fmovccx("fmovq" suffix, FM_QF, "R,J", cond, fcond, flags), \ -fmovccx("fmovs" suffix, FM_SF, "f,g", cond, fcond, flags) - -/* v9 */ fmovcc ("a", CONDA, FCONDA, 0), -/* v9 */ fmovicc ("cc", CONDCC, 0), -/* v9 */ fmovicc ("cs", CONDCS, 0), -/* v9 */ fmovcc ("e", CONDE, FCONDE, 0), -/* v9 */ fmovcc ("g", CONDG, FCONDG, 0), -/* v9 */ fmovcc ("ge", CONDGE, FCONDGE, 0), -/* v9 */ fmovicc ("geu", CONDGEU, F_ALIAS), -/* v9 */ fmovicc ("gu", CONDGU, 0), -/* v9 */ fmovcc ("l", CONDL, FCONDL, 0), -/* v9 */ fmovcc ("le", CONDLE, FCONDLE, 0), -/* v9 */ fmovicc ("leu", CONDLEU, 0), -/* v9 */ fmovfcc ("lg", FCONDLG, 0), -/* v9 */ fmovicc ("lu", CONDLU, F_ALIAS), -/* v9 */ fmovcc ("n", CONDN, FCONDN, 0), -/* v9 */ fmovcc ("ne", CONDNE, FCONDNE, 0), -/* v9 */ fmovicc ("neg", CONDNEG, 0), -/* v9 */ fmovcc ("nz", CONDNZ, FCONDNZ, F_ALIAS), -/* v9 */ fmovfcc ("o", FCONDO, 0), -/* v9 */ fmovicc ("pos", CONDPOS, 0), -/* v9 */ fmovfcc ("u", FCONDU, 0), -/* v9 */ fmovfcc ("ue", FCONDUE, 0), -/* v9 */ fmovfcc ("ug", FCONDUG, 0), -/* v9 */ fmovfcc ("uge", FCONDUGE, 0), -/* v9 */ fmovfcc ("ul", FCONDUL, 0), -/* v9 */ fmovfcc ("ule", FCONDULE, 0), -/* v9 */ fmovicc ("vc", CONDVC, 0), -/* v9 */ fmovicc ("vs", CONDVS, 0), -/* v9 */ fmovcc ("z", CONDZ, FCONDZ, F_ALIAS), - -#undef fmoviccx /* v9 */ -#undef fmovfccx /* v9 */ -#undef fmovccx /* v9 */ +#define fmovcc(opcode, fpsize, cond, fcond, flags) /* v9 */ \ +{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z,f,g", flags | F_FLOAT, v9 }, \ +{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags | F_FLOAT, v9 }, \ +{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z,f,g", flags | F_FLOAT, v9 }, \ +{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags | F_FLOAT, v9 }, \ +{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags | F_FLOAT, v9 }, \ +{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags | F_FLOAT, v9 } + +/* v9 */ fmovcc ("fmovda", FM_DF, CONDA, FCONDA, 0), +/* v9 */ fmovcc ("fmovqa", FM_QF, CONDA, FCONDA, 0), +/* v9 */ fmovcc ("fmovsa", FM_SF, CONDA, FCONDA, 0), +/* v9 */ fmovicc ("fmovdcc", FM_DF, CONDCC, 0), +/* v9 */ fmovicc ("fmovqcc", FM_QF, CONDCC, 0), +/* v9 */ fmovicc ("fmovscc", FM_SF, CONDCC, 0), +/* v9 */ fmovicc ("fmovdcs", FM_DF, CONDCS, 0), +/* v9 */ fmovicc ("fmovqcs", FM_QF, CONDCS, 0), +/* v9 */ fmovicc ("fmovscs", FM_SF, CONDCS, 0), +/* v9 */ fmovcc ("fmovde", FM_DF, CONDE, FCONDE, 0), +/* v9 */ fmovcc ("fmovqe", FM_QF, CONDE, FCONDE, 0), +/* v9 */ fmovcc ("fmovse", FM_SF, CONDE, FCONDE, 0), +/* v9 */ fmovcc ("fmovdg", FM_DF, CONDG, FCONDG, 0), +/* v9 */ fmovcc ("fmovqg", FM_QF, CONDG, FCONDG, 0), +/* v9 */ fmovcc ("fmovsg", FM_SF, CONDG, FCONDG, 0), +/* v9 */ fmovcc ("fmovdge", FM_DF, CONDGE, FCONDGE, 0), +/* v9 */ fmovcc ("fmovqge", FM_QF, CONDGE, FCONDGE, 0), +/* v9 */ fmovcc ("fmovsge", FM_SF, CONDGE, FCONDGE, 0), +/* v9 */ fmovicc ("fmovdgeu", FM_DF, CONDGEU, F_ALIAS), +/* v9 */ fmovicc ("fmovqgeu", FM_QF, CONDGEU, F_ALIAS), +/* v9 */ fmovicc ("fmovsgeu", FM_SF, CONDGEU, F_ALIAS), +/* v9 */ fmovicc ("fmovdgu", FM_DF, CONDGU, 0), +/* v9 */ fmovicc ("fmovqgu", FM_QF, CONDGU, 0), +/* v9 */ fmovicc ("fmovsgu", FM_SF, CONDGU, 0), +/* v9 */ fmovcc ("fmovdl", FM_DF, CONDL, FCONDL, 0), +/* v9 */ fmovcc ("fmovql", FM_QF, CONDL, FCONDL, 0), +/* v9 */ fmovcc ("fmovsl", FM_SF, CONDL, FCONDL, 0), +/* v9 */ fmovcc ("fmovdle", FM_DF, CONDLE, FCONDLE, 0), +/* v9 */ fmovcc ("fmovqle", FM_QF, CONDLE, FCONDLE, 0), +/* v9 */ fmovcc ("fmovsle", FM_SF, CONDLE, FCONDLE, 0), +/* v9 */ fmovicc ("fmovdleu", FM_DF, CONDLEU, 0), +/* v9 */ fmovicc ("fmovqleu", FM_QF, CONDLEU, 0), +/* v9 */ fmovicc ("fmovsleu", FM_SF, CONDLEU, 0), +/* v9 */ fmovfcc ("fmovdlg", FM_DF, FCONDLG, 0), +/* v9 */ fmovfcc ("fmovqlg", FM_QF, FCONDLG, 0), +/* v9 */ fmovfcc ("fmovslg", FM_SF, FCONDLG, 0), +/* v9 */ fmovicc ("fmovdlu", FM_DF, CONDLU, F_ALIAS), +/* v9 */ fmovicc ("fmovqlu", FM_QF, CONDLU, F_ALIAS), +/* v9 */ fmovicc ("fmovslu", FM_SF, CONDLU, F_ALIAS), +/* v9 */ fmovcc ("fmovdn", FM_DF, CONDN, FCONDN, 0), +/* v9 */ fmovcc ("fmovqn", FM_QF, CONDN, FCONDN, 0), +/* v9 */ fmovcc ("fmovsn", FM_SF, CONDN, FCONDN, 0), +/* v9 */ fmovcc ("fmovdne", FM_DF, CONDNE, FCONDNE, 0), +/* v9 */ fmovcc ("fmovqne", FM_QF, CONDNE, FCONDNE, 0), +/* v9 */ fmovcc ("fmovsne", FM_SF, CONDNE, FCONDNE, 0), +/* v9 */ fmovicc ("fmovdneg", FM_DF, CONDNEG, 0), +/* v9 */ fmovicc ("fmovqneg", FM_QF, CONDNEG, 0), +/* v9 */ fmovicc ("fmovsneg", FM_SF, CONDNEG, 0), +/* v9 */ fmovcc ("fmovdnz", FM_DF, CONDNZ, FCONDNZ, F_ALIAS), +/* v9 */ fmovcc ("fmovqnz", FM_QF, CONDNZ, FCONDNZ, F_ALIAS), +/* v9 */ fmovcc ("fmovsnz", FM_SF, CONDNZ, FCONDNZ, F_ALIAS), +/* v9 */ fmovfcc ("fmovdo", FM_DF, FCONDO, 0), +/* v9 */ fmovfcc ("fmovqo", FM_QF, FCONDO, 0), +/* v9 */ fmovfcc ("fmovso", FM_SF, FCONDO, 0), +/* v9 */ fmovicc ("fmovdpos", FM_DF, CONDPOS, 0), +/* v9 */ fmovicc ("fmovqpos", FM_QF, CONDPOS, 0), +/* v9 */ fmovicc ("fmovspos", FM_SF, CONDPOS, 0), +/* v9 */ fmovfcc ("fmovdu", FM_DF, FCONDU, 0), +/* v9 */ fmovfcc ("fmovqu", FM_QF, FCONDU, 0), +/* v9 */ fmovfcc ("fmovsu", FM_SF, FCONDU, 0), +/* v9 */ fmovfcc ("fmovdue", FM_DF, FCONDUE, 0), +/* v9 */ fmovfcc ("fmovque", FM_QF, FCONDUE, 0), +/* v9 */ fmovfcc ("fmovsue", FM_SF, FCONDUE, 0), +/* v9 */ fmovfcc ("fmovdug", FM_DF, FCONDUG, 0), +/* v9 */ fmovfcc ("fmovqug", FM_QF, FCONDUG, 0), +/* v9 */ fmovfcc ("fmovsug", FM_SF, FCONDUG, 0), +/* v9 */ fmovfcc ("fmovduge", FM_DF, FCONDUGE, 0), +/* v9 */ fmovfcc ("fmovquge", FM_QF, FCONDUGE, 0), +/* v9 */ fmovfcc ("fmovsuge", FM_SF, FCONDUGE, 0), +/* v9 */ fmovfcc ("fmovdul", FM_DF, FCONDUL, 0), +/* v9 */ fmovfcc ("fmovqul", FM_QF, FCONDUL, 0), +/* v9 */ fmovfcc ("fmovsul", FM_SF, FCONDUL, 0), +/* v9 */ fmovfcc ("fmovdule", FM_DF, FCONDULE, 0), +/* v9 */ fmovfcc ("fmovqule", FM_QF, FCONDULE, 0), +/* v9 */ fmovfcc ("fmovsule", FM_SF, FCONDULE, 0), +/* v9 */ fmovicc ("fmovdvc", FM_DF, CONDVC, 0), +/* v9 */ fmovicc ("fmovqvc", FM_QF, CONDVC, 0), +/* v9 */ fmovicc ("fmovsvc", FM_SF, CONDVC, 0), +/* v9 */ fmovicc ("fmovdvs", FM_DF, CONDVS, 0), +/* v9 */ fmovicc ("fmovqvs", FM_QF, CONDVS, 0), +/* v9 */ fmovicc ("fmovsvs", FM_SF, CONDVS, 0), +/* v9 */ fmovcc ("fmovdz", FM_DF, CONDZ, FCONDZ, F_ALIAS), +/* v9 */ fmovcc ("fmovqz", FM_QF, CONDZ, FCONDZ, F_ALIAS), +/* v9 */ fmovcc ("fmovsz", FM_SF, CONDZ, FCONDZ, F_ALIAS), + #undef fmovicc /* v9 */ #undef fmovfcc /* v9 */ #undef fmovcc /* v9 */ |