This commit was manufactured by cvs2svn to create branch 'msnyder-
reverse-20060502-branch'.
Sprout from readline_5_1-import-branch 2006-04-20 20:13:22 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'readline_5_1'
Cherrypick from master 2006-05-01 19:36:27 UTC DJ Delorie <dj@redhat.com> '* bfd-in.h (bfd_hash_table): Add count field.':
bfd/ChangeLog
bfd/bfd-in.h
bfd/bfd-in2.h
bfd/coff-rs6000.c
bfd/elf.c
bfd/elf32-arm.c
bfd/elfxx-target.h
bfd/hash.c
bfd/libbfd-in.h
bfd/libbfd.h
bfd/opncls.c
bfd/tekhex.c
bfd/version.h
gdb/ChangeLog
gdb/MAINTAINERS
gdb/Makefile.in
gdb/NEWS
gdb/breakpoint.c
gdb/config/m32c/m32c.mt
gdb/configure.tgt
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/doc/gdbint.texinfo
gdb/dwarf2read.c
gdb/linux-fork.c
gdb/m32c-tdep.c
gdb/mingw-hdep.c
gdb/mips-mdebug-tdep.c
gdb/ppcnbsd-tdep.c
gdb/remote.c
gdb/rs6000-tdep.c
gdb/ser-mingw.c
gdb/serial.c
gdb/serial.h
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.asm/asm-source.exp
gdb/testsuite/gdb.asm/m32c.inc
gdb/testsuite/gdb.base/multi-forks.exp
gdb/testsuite/gdb.base/sigbpt.exp
gdb/testsuite/gdb.base/siginfo.exp
gdb/testsuite/gdb.base/sigstep.exp
gdb/version.in
include/ChangeLog
include/opcode/ChangeLog
include/opcode/arm.h
include/opcode/mips.h
libiberty/ChangeLog
libiberty/floatformat.c
opcodes/ChangeLog
opcodes/arm-dis.c
opcodes/m68k-dis.c
opcodes/mips-dis.c
opcodes/mips-opc.c
sim/ppc/ChangeLog
sim/ppc/Makefile.in
Delete:
readline/examples/rlfe/ChangeLog
readline/examples/rlfe/Makefile.in
readline/examples/rlfe/README
readline/examples/rlfe/config.h.in
readline/examples/rlfe/configure
readline/examples/rlfe/configure.in
readline/examples/rlfe/extern.h
readline/examples/rlfe/os.h
readline/examples/rlfe/pty.c
readline/examples/rlfe/rlfe.c
readline/examples/rlfe/screen.h
sim/testsuite/sim/cris/hw/rv-n-cris/host1.ms
sim/testsuite/sim/cris/hw/rv-n-cris/irq1.ms
sim/testsuite/sim/cris/hw/rv-n-cris/irq2.ms
sim/testsuite/sim/cris/hw/rv-n-cris/irq3.ms
sim/testsuite/sim/cris/hw/rv-n-cris/irq4.ms
sim/testsuite/sim/cris/hw/rv-n-cris/irq5.ms
sim/testsuite/sim/cris/hw/rv-n-cris/irq6.ms
sim/testsuite/sim/cris/hw/rv-n-cris/mbox1.ms
sim/testsuite/sim/cris/hw/rv-n-cris/mem1.ms
sim/testsuite/sim/cris/hw/rv-n-cris/mem2.ms
sim/testsuite/sim/cris/hw/rv-n-cris/poll1.ms
sim/testsuite/sim/cris/hw/rv-n-cris/quit.s
sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp
sim/testsuite/sim/cris/hw/rv-n-cris/std.dev
sim/testsuite/sim/cris/hw/rv-n-cris/testutils.inc
sim/testsuite/sim/cris/hw/rv-n-cris/trivial1.ms
sim/testsuite/sim/cris/hw/rv-n-cris/trivial2.ms
sim/testsuite/sim/cris/hw/rv-n-cris/trivial3.ms
sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.ms
sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.r
sim/testsuite/sim/cris/hw/rv-n-cris/trivial5.ms
sim/testsuite/sim/cris/hw/rv-n-cris/wd1.ms
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 1ea6061..dcfe713 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,72 @@
+2006-05-01 DJ Delorie <dj@redhat.com>
+
+ * bfd-in.h (bfd_hash_table): Add count field.
+ * bfd-in2.h: Regenerate.
+ * hash.c (higher_prime_number): New.
+ (bfd_hash_table_inint_n): Init count field.
+ (bfd_hash_lookup): Grow table as needed.
+
+2006-04-27 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ PR binutils/2584
+ * tekhex.c (getvalue): Change return type to bfd_boolean and
+ add the new parameter. Return false if the unexpected character
+ is found.
+ (getsym): Likewise.
+ (first_phase): Change return type to bfd_boolean and return
+ false if the unexpected character is found. Replace abort
+ with returning false.
+ (pass_over): Change return type to bfd_boolean and the type of
+ the second argument to bfd_boolean (*) (bfd *, int, char *).
+ Return false if FUNC returns false.
+ (tekhex_object_p): Return NULL if pass_over fails.
+
+2006-04-27 Alan Modra <amodra@bigpond.net.au>
+
+ * coff-rs6000.c (xcoff_write_archive_contents_old): Warning fix.
+
+2006-04-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2593
+ * elf.c (_bfd_elf_new_section_hook): Don't set section ELF type
+ and flags if its BFD flags have been set.
+ (_bfd_elf_init_private_section_data): Don't copy the output ELF
+ section type from input if it has been set to something
+ different.
+
+2006-04-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/2467
+ * elf.c (_bfd_elf_close_and_cleanup): Check elf_tdata (abfd)
+ is NULL first.
+
+ * elf32-arm.c (elf32_arm_close_and_cleanup): Check if
+ abfd->sections is NULL.
+ (elf32_arm_bfd_free_cached_info): New.
+ (bfd_elf32_bfd_free_cached_info): Defined.
+
+ * elfxx-target.h (bfd_elfNN_bfd_free_cached_info): Default it
+ to _bfd_free_cached_info.
+
+ * libbfd-in.h (_bfd_free_cached_info): New.
+ * libbfd: Regenerated.
+
+ * opncls.c (_bfd_delete_bfd): Check if abfd->memory is NULL.
+ (_bfd_free_cached_info): New.
+
+2006-04-21 Alan Modra <amodra@bigpond.net.au>
+
+ * elf.c (assign_file_positions_except_relocs): Move code setting
+ file position of non-loaded sections..
+ (assign_file_positions_for_segments): ..to here.
+
+2006-04-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/2537
+ * elf.c (bfd_section_from_shdr): Allow sections reserved for
+ applications. Issue an error on sections we don't know how
+ to handle.
+
2006-04-19 Alan Modra <amodra@bigpond.net.au>
* Makefile.am: Run "make dep-am".
@@ -278,6 +347,24 @@
bfd_get_compatible to set the new bfd architecture. Rely on it
to detect incompatibilities.
+2006-03-23 Michael Matz <matz@suse.de>
+
+ * reloc.c: Add BFD_RELOC_X86_64_GOT64, BFD_RELOC_X86_64_GOTPCREL64,
+ BFD_RELOC_X86_64_GOTPC64, BFD_RELOC_X86_64_GOTPLT64,
+ BFD_RELOC_X86_64_PLTOFF64.
+ * bfd-in2.h: Regenerated.
+ * libbfd.h: Regenerated.
+ * elf64-x86-64.c (x86_64_elf_howto_table): Correct comment.
+ Add howtos for above relocs.
+ (x86_64_reloc_map): Add mappings for new relocs.
+ (elf64_x86_64_check_relocs): R_X86_64_GOT64, R_X86_64_GOTPCREL64,
+ R_X86_64_GOTPLT64 need a got entry. R_X86_64_GOTPLT64 also a PLT
+ entry. R_X86_64_GOTPC64 needs a .got section. R_X86_64_PLTOFF64
+ needs a PLT entry.
+ (elf64_x86_64_gc_sweep_hook): Reflect changes from
+ elf64_x86_64_check_relocs for the new relocs.
+ (elf64_x86_64_relocate_section): Handle new relocs.
+
2006-03-22 Bob Wilson <bob.wilson@acm.org>
* elf32-xtensa.c (xtensa_read_table_entries): Remove assertion that
diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h
index 9daa578..5c2f05d 100644
--- a/bfd/bfd-in.h
+++ b/bfd/bfd-in.h
@@ -376,6 +376,8 @@
struct bfd_hash_entry **table;
/* The number of slots in the hash table. */
unsigned int size;
+ /* The number of entries in the hash table. */
+ unsigned int count;
/* The size of elements. */
unsigned int entsize;
/* A function used to create new elements in the hash table. The
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 63fb521..0e921baa 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -383,6 +383,8 @@
struct bfd_hash_entry **table;
/* The number of slots in the hash table. */
unsigned int size;
+ /* The number of entries in the hash table. */
+ unsigned int count;
/* The size of elements. */
unsigned int entsize;
/* A function used to create new elements in the hash table. The
diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
index 220edf8..951587f 100644
--- a/bfd/coff-rs6000.c
+++ b/bfd/coff-rs6000.c
@@ -1,5 +1,5 @@
/* BFD back-end for IBM RS/6000 "XCOFF" files.
- Copyright 1990-1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1990-1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
FIXME: Can someone provide a transliteration of this name into ASCII?
Using the following chars caused a compiler warning on HIUX (so I replaced
@@ -2083,7 +2083,7 @@
char decbuf[XCOFFARMAG_ELEMENT_SIZE + 1];
memset (&fhdr, 0, sizeof fhdr);
- strncpy (fhdr.magic, XCOFFARMAG, SXCOFFARMAG);
+ (void) strncpy (fhdr.magic, XCOFFARMAG, SXCOFFARMAG);
sprintf (fhdr.firstmemoff, "%d", SIZEOF_AR_FILE_HDR);
sprintf (fhdr.freeoff, "%d", 0);
diff --git a/bfd/elf.c b/bfd/elf.c
index 9e48f66..e697722 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -2159,8 +2159,43 @@
default:
/* Check for any processor-specific section types. */
- return bed->elf_backend_section_from_shdr (abfd, hdr, name,
- shindex);
+ if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex))
+ return TRUE;
+
+ if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER)
+ {
+ if ((hdr->sh_flags & SHF_ALLOC) != 0)
+ /* FIXME: How to properly handle allocated section reserved
+ for applications? */
+ (*_bfd_error_handler)
+ (_("%B: don't know how to handle allocated, application "
+ "specific section `%s' [0x%8x]"),
+ abfd, name, hdr->sh_type);
+ else
+ /* Allow sections reserved for applications. */
+ return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
+ shindex);
+ }
+ else if (hdr->sh_type >= SHT_LOPROC
+ && hdr->sh_type <= SHT_HIPROC)
+ /* FIXME: We should handle this section. */
+ (*_bfd_error_handler)
+ (_("%B: don't know how to handle processor specific section "
+ "`%s' [0x%8x]"),
+ abfd, name, hdr->sh_type);
+ else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS)
+ /* FIXME: We should handle this section. */
+ (*_bfd_error_handler)
+ (_("%B: don't know how to handle OS specific section "
+ "`%s' [0x%8x]"),
+ abfd, name, hdr->sh_type);
+ else
+ /* FIXME: We should handle this section. */
+ (*_bfd_error_handler)
+ (_("%B: don't know how to handle section `%s' [0x%8x]"),
+ abfd, name, hdr->sh_type);
+
+ return FALSE;
}
return TRUE;
@@ -2452,10 +2487,13 @@
bed = get_elf_backend_data (abfd);
sec->use_rela_p = bed->default_use_rela_p;
- /* When we read a file, we don't need section type and flags unless
- it is a linker created section. They will be overridden in
- _bfd_elf_make_section_from_shdr anyway. */
- if (abfd->direction != read_direction
+ /* When we read a file, we don't need to set ELF section type and
+ flags. They will be overridden in _bfd_elf_make_section_from_shdr
+ anyway. We will set ELF section type and flags for all linker
+ created sections. If user specifies BFD section flags, we will
+ set ELF section type and flags based on BFD section flags in
+ elf_fake_sections. */
+ if ((!sec->flags && abfd->direction != read_direction)
|| (sec->flags & SEC_LINKER_CREATED) != 0)
{
ssect = (*bed->get_sec_type_attr) (abfd, sec);
@@ -4084,6 +4122,10 @@
bfd_vma filehdr_vaddr, filehdr_paddr;
bfd_vma phdrs_vaddr, phdrs_paddr;
Elf_Internal_Phdr *p;
+ Elf_Internal_Shdr **i_shdrpp;
+ Elf_Internal_Shdr **hdrpp;
+ unsigned int i;
+ unsigned int num_sec;
if (elf_tdata (abfd)->segment_map == NULL)
{
@@ -4101,7 +4143,6 @@
m = m->next)
{
unsigned int new_count;
- unsigned int i;
new_count = 0;
for (i = 0; i < m->count; i ++)
@@ -4175,7 +4216,6 @@
m != NULL;
m = m->next, p++)
{
- unsigned int i;
asection **secpp;
/* If elf_segment_map is not from map_sections_to_segments, the
@@ -4500,6 +4540,51 @@
}
}
+ /* Assign file positions for the other sections. */
+ i_shdrpp = elf_elfsections (abfd);
+ num_sec = elf_numsections (abfd);
+ for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
+ {
+ struct elf_obj_tdata *tdata = elf_tdata (abfd);
+ Elf_Internal_Shdr *hdr;
+
+ hdr = *hdrpp;
+ if (hdr->bfd_section != NULL
+ && hdr->bfd_section->filepos != 0)
+ hdr->sh_offset = hdr->bfd_section->filepos;
+ else if ((hdr->sh_flags & SHF_ALLOC) != 0)
+ {
+ ((*_bfd_error_handler)
+ (_("%B: warning: allocated section `%s' not in segment"),
+ abfd,
+ (hdr->bfd_section == NULL
+ ? "*unknown*"
+ : hdr->bfd_section->name)));
+ if ((abfd->flags & D_PAGED) != 0)
+ off += vma_page_aligned_bias (hdr->sh_addr, off,
+ bed->maxpagesize);
+ else
+ off += vma_page_aligned_bias (hdr->sh_addr, off,
+ hdr->sh_addralign);
+ off = _bfd_elf_assign_file_position_for_section (hdr, off,
+ FALSE);
+ }
+ else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
+ && hdr->bfd_section == NULL)
+ || hdr == i_shdrpp[tdata->symtab_section]
+ || hdr == i_shdrpp[tdata->symtab_shndx_section]
+ || hdr == i_shdrpp[tdata->strtab_section])
+ hdr->sh_offset = -1;
+ else
+ off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
+
+ if (i == SHN_LORESERVE - 1)
+ {
+ i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
+ hdrpp += SHN_HIRESERVE + 1 - SHN_LORESERVE;
+ }
+ }
+
/* Now that we have set the section file positions, we can set up
the file positions for the non PT_LOAD segments. */
for (m = elf_tdata (abfd)->segment_map, p = phdrs;
@@ -4515,7 +4600,6 @@
PT_LOAD segment, so it will not be processed above. */
if (p->p_type == PT_DYNAMIC && m->sections[0]->filepos == 0)
{
- unsigned int i;
Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
i = 1;
@@ -4718,16 +4802,16 @@
assign_file_positions_except_relocs (bfd *abfd,
struct bfd_link_info *link_info)
{
- struct elf_obj_tdata * const tdata = elf_tdata (abfd);
- Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
- Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
- unsigned int num_sec = elf_numsections (abfd);
+ struct elf_obj_tdata *tdata = elf_tdata (abfd);
+ Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
file_ptr off;
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
&& bfd_get_format (abfd) != bfd_core)
{
+ Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
+ unsigned int num_sec = elf_numsections (abfd);
Elf_Internal_Shdr **hdrpp;
unsigned int i;
@@ -4762,57 +4846,12 @@
}
else
{
- unsigned int i;
- Elf_Internal_Shdr **hdrpp;
-
/* Assign file positions for the loaded sections based on the
assignment of sections to segments. */
if (! assign_file_positions_for_segments (abfd, link_info))
return FALSE;
- /* Assign file positions for the other sections. */
-
- off = elf_tdata (abfd)->next_file_pos;
- for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
- {
- Elf_Internal_Shdr *hdr;
-
- hdr = *hdrpp;
- if (hdr->bfd_section != NULL
- && hdr->bfd_section->filepos != 0)
- hdr->sh_offset = hdr->bfd_section->filepos;
- else if ((hdr->sh_flags & SHF_ALLOC) != 0)
- {
- ((*_bfd_error_handler)
- (_("%B: warning: allocated section `%s' not in segment"),
- abfd,
- (hdr->bfd_section == NULL
- ? "*unknown*"
- : hdr->bfd_section->name)));
- if ((abfd->flags & D_PAGED) != 0)
- off += vma_page_aligned_bias (hdr->sh_addr, off,
- bed->maxpagesize);
- else
- off += vma_page_aligned_bias (hdr->sh_addr, off,
- hdr->sh_addralign);
- off = _bfd_elf_assign_file_position_for_section (hdr, off,
- FALSE);
- }
- else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
- && hdr->bfd_section == NULL)
- || hdr == i_shdrpp[tdata->symtab_section]
- || hdr == i_shdrpp[tdata->symtab_shndx_section]
- || hdr == i_shdrpp[tdata->strtab_section])
- hdr->sh_offset = -1;
- else
- off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
-
- if (i == SHN_LORESERVE - 1)
- {
- i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
- hdrpp += SHN_HIRESERVE + 1 - SHN_LORESERVE;
- }
- }
+ off = tdata->next_file_pos;
}
/* Place the section headers. */
@@ -4820,7 +4859,7 @@
i_ehdrp->e_shoff = off;
off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
- elf_tdata (abfd)->next_file_pos = off;
+ tdata->next_file_pos = off;
return TRUE;
}
@@ -5870,9 +5909,11 @@
|| obfd->xvec->flavour != bfd_target_elf_flavour)
return TRUE;
- /* FIXME: What if the output ELF section type has been set to
- something different? */
- if (elf_section_type (osec) == SHT_NULL)
+ /* Don't copy the output ELF section type from input if the
+ output BFD section flags has been set to something different.
+ elf_fake_sections will set ELF section type based on BFD
+ section flags. */
+ if (osec->flags == isec->flags || !osec->flags)
elf_section_type (osec) = elf_section_type (isec);
/* Set things up for objcopy and relocatable link. The output
@@ -7171,7 +7212,7 @@
{
if (bfd_get_format (abfd) == bfd_object)
{
- if (elf_shstrtab (abfd) != NULL)
+ if (elf_tdata (abfd) != NULL && elf_shstrtab (abfd) != NULL)
_bfd_elf_strtab_free (elf_shstrtab (abfd));
_bfd_dwarf2_cleanup_debug_info (abfd);
}
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index ca33121..bd3c4e3 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -7936,11 +7936,25 @@
static bfd_boolean
elf32_arm_close_and_cleanup (bfd * abfd)
{
- bfd_map_over_sections (abfd, unrecord_section_via_map_over_sections, NULL);
+ if (abfd->sections)
+ bfd_map_over_sections (abfd,
+ unrecord_section_via_map_over_sections,
+ NULL);
return _bfd_elf_close_and_cleanup (abfd);
}
+static bfd_boolean
+elf32_arm_bfd_free_cached_info (bfd * abfd)
+{
+ if (abfd->sections)
+ bfd_map_over_sections (abfd,
+ unrecord_section_via_map_over_sections,
+ NULL);
+
+ return _bfd_free_cached_info (abfd);
+}
+
/* Display STT_ARM_TFUNC symbols as functions. */
static void
@@ -8100,6 +8114,7 @@
#define bfd_elf32_new_section_hook elf32_arm_new_section_hook
#define bfd_elf32_bfd_is_target_special_symbol elf32_arm_is_target_special_symbol
#define bfd_elf32_close_and_cleanup elf32_arm_close_and_cleanup
+#define bfd_elf32_bfd_free_cached_info elf32_arm_bfd_free_cached_info
#define bfd_elf32_bfd_final_link elf32_arm_bfd_final_link
#define elf_backend_get_symbol_type elf32_arm_get_symbol_type
diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h
index 503726d..14a693a 100644
--- a/bfd/elfxx-target.h
+++ b/bfd/elfxx-target.h
@@ -29,7 +29,9 @@
#ifndef bfd_elfNN_close_and_cleanup
#define bfd_elfNN_close_and_cleanup _bfd_elf_close_and_cleanup
#endif
-#define bfd_elfNN_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
+#ifndef bfd_elfNN_bfd_free_cached_info
+#define bfd_elfNN_bfd_free_cached_info _bfd_free_cached_info
+#endif
#ifndef bfd_elfNN_get_section_contents
#define bfd_elfNN_get_section_contents _bfd_generic_get_section_contents
#endif
diff --git a/bfd/hash.c b/bfd/hash.c
index ce9ba5c..bc81ac8 100644
--- a/bfd/hash.c
+++ b/bfd/hash.c
@@ -298,7 +298,72 @@
*/
/* The default number of entries to use when creating a hash table. */
-#define DEFAULT_SIZE 4051
+#define DEFAULT_SIZE (4093)
+
+/* The following function returns a nearest prime number which is
+ greater than N, and near a power of two. Copied from libiberty. */
+
+static unsigned long
+higher_prime_number (unsigned long n)
+{
+ /* These are primes that are near, but slightly smaller than, a
+ power of two. */
+ static const unsigned long primes[] = {
+ (unsigned long) 7,
+ (unsigned long) 13,
+ (unsigned long) 31,
+ (unsigned long) 61,
+ (unsigned long) 127,
+ (unsigned long) 251,
+ (unsigned long) 509,
+ (unsigned long) 1021,
+ (unsigned long) 2039,
+ (unsigned long) 4093,
+ (unsigned long) 8191,
+ (unsigned long) 16381,
+ (unsigned long) 32749,
+ (unsigned long) 65521,
+ (unsigned long) 131071,
+ (unsigned long) 262139,
+ (unsigned long) 524287,
+ (unsigned long) 1048573,
+ (unsigned long) 2097143,
+ (unsigned long) 4194301,
+ (unsigned long) 8388593,
+ (unsigned long) 16777213,
+ (unsigned long) 33554393,
+ (unsigned long) 67108859,
+ (unsigned long) 134217689,
+ (unsigned long) 268435399,
+ (unsigned long) 536870909,
+ (unsigned long) 1073741789,
+ (unsigned long) 2147483647,
+ /* 4294967291L */
+ ((unsigned long) 2147483647) + ((unsigned long) 2147483644),
+ };
+
+ const unsigned long *low = &primes[0];
+ const unsigned long *high = &primes[sizeof(primes) / sizeof(primes[0])];
+
+ while (low != high)
+ {
+ const unsigned long *mid = low + (high - low) / 2;
+ if (n >= *mid)
+ low = mid + 1;
+ else
+ high = mid;
+ }
+
+ /* If we've run out of primes, abort. */
+ if (n > *low)
+ {
+ fprintf (stderr, "Cannot find prime bigger than %lu\n", n);
+ abort ();
+ }
+
+ return *low;
+}
+
static size_t bfd_default_hash_table_size = DEFAULT_SIZE;
/* Create a new hash table, given a number of entries. */
@@ -330,6 +395,7 @@
memset ((void *) table->table, 0, alloc);
table->size = size;
table->entsize = entsize;
+ table->count = 0;
table->newfunc = newfunc;
return TRUE;
}
@@ -402,6 +468,7 @@
if (copy)
{
char *new;
+ table->count ++;
new = objalloc_alloc ((struct objalloc *) table->memory, len + 1);
if (!new)
@@ -417,6 +484,38 @@
hashp->next = table->table[index];
table->table[index] = hashp;
+ if (table->count > table->size * 3 / 4)
+ {
+ int newsize = higher_prime_number (table->size);
+ struct bfd_hash_entry **newtable;
+ unsigned int hi;
+ unsigned int alloc;
+
+ alloc = newsize * sizeof (struct bfd_hash_entry *);
+
+ newtable = ((struct bfd_hash_entry **)
+ objalloc_alloc ((struct objalloc *) table->memory, alloc));
+ memset ((PTR) newtable, 0, alloc);
+
+ for (hi = 0; hi < table->size; hi ++)
+ while (table->table[hi])
+ {
+ struct bfd_hash_entry *chain = table->table[hi];
+ struct bfd_hash_entry *chain_end = chain;
+ int index;
+
+ while (chain_end->next && chain_end->next->hash == chain->hash)
+ chain_end = chain_end->next;
+
+ table->table[hi] = chain_end->next;
+ index = chain->hash % newsize;
+ chain_end->next = newtable[index];
+ newtable[index] = chain;
+ }
+ table->table = newtable;
+ table->size = newsize;
+ }
+
return hashp;
}
diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
index ee2484f..2248479 100644
--- a/bfd/libbfd-in.h
+++ b/bfd/libbfd-in.h
@@ -155,6 +155,8 @@
(void);
void _bfd_delete_bfd
(bfd *);
+bfd_boolean _bfd_free_cached_info
+ (bfd *);
bfd_boolean bfd_false
(bfd *ignore);
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index 2a590a3..e9e6c9d 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -160,6 +160,8 @@
(void);
void _bfd_delete_bfd
(bfd *);
+bfd_boolean _bfd_free_cached_info
+ (bfd *);
bfd_boolean bfd_false
(bfd *ignore);
diff --git a/bfd/opncls.c b/bfd/opncls.c
index b02b137..7e62d06 100644
--- a/bfd/opncls.c
+++ b/bfd/opncls.c
@@ -115,11 +115,35 @@
void
_bfd_delete_bfd (bfd *abfd)
{
- bfd_hash_table_free (&abfd->section_htab);
- objalloc_free ((struct objalloc *) abfd->memory);
+ if (abfd->memory)
+ {
+ bfd_hash_table_free (&abfd->section_htab);
+ objalloc_free ((struct objalloc *) abfd->memory);
+ }
free (abfd);
}
+/* Free objalloc memory. */
+
+bfd_boolean
+_bfd_free_cached_info (bfd *abfd)
+{
+ if (abfd->memory)
+ {
+ bfd_hash_table_free (&abfd->section_htab);
+ objalloc_free ((struct objalloc *) abfd->memory);
+
+ abfd->sections = NULL;
+ abfd->section_last = NULL;
+ abfd->outsymbols = NULL;
+ abfd->tdata.any = NULL;
+ abfd->usrdata = NULL;
+ abfd->memory = NULL;
+ }
+
+ return TRUE;
+}
+
/*
SECTION
Opening and closing BFDs
diff --git a/bfd/tekhex.c b/bfd/tekhex.c
index 559f21a..afe42cc 100644
--- a/bfd/tekhex.c
+++ b/bfd/tekhex.c
@@ -264,36 +264,50 @@
#define enda(x) (x->vma + x->size)
-static bfd_vma
-getvalue (char **srcp)
+static bfd_boolean
+getvalue (char **srcp, bfd_vma *valuep)
{
char *src = *srcp;
bfd_vma value = 0;
- unsigned int len = hex_value(*src++);
+ unsigned int len;
+ if (!ISHEX (*src))
+ return FALSE;
+
+ len = hex_value (*src++);
if (len == 0)
len = 16;
while (len--)
- value = value << 4 | hex_value(*src++);
+ {
+ if (!ISHEX (*src))
+ return FALSE;
+ value = value << 4 | hex_value (*src++);
+ }
*srcp = src;
- return value;
+ *valuep = value;
+ return TRUE;
}
-static unsigned int
-getsym (char *dstp, char **srcp)
+static bfd_boolean
+getsym (char *dstp, char **srcp, unsigned int *lenp)
{
char *src = *srcp;
unsigned int i;
- unsigned int len = hex_value(*src++);
+ unsigned int len;
+
+ if (!ISHEX (*src))
+ return FALSE;
+ len = hex_value (*src++);
if (len == 0)
len = 16;
for (i = 0; i < len; i++)
dstp[i] = src[i];
dstp[i] = 0;
*srcp = src + i;
- return len;
+ *lenp = len;
+ return TRUE;
}
static struct data_struct *
@@ -333,11 +347,12 @@
/* The first pass is to find the names of all the sections, and see
how big the data is. */
-static void
+static bfd_boolean
first_phase (bfd *abfd, int type, char *src)
{
asection *section = bfd_abs_section_ptr;
unsigned int len;
+ bfd_vma val;
char sym[17]; /* A symbol can only be 16chars long. */
switch (type)
@@ -345,7 +360,10 @@
case '6':
/* Data record - read it and store it. */
{
- bfd_vma addr = getvalue (&src);
+ bfd_vma addr;
+
+ if (!getvalue (&src, &addr))
+ return FALSE;
while (*src)
{
@@ -355,17 +373,18 @@
}
}
- return;
+ return TRUE;
case '3':
/* Symbol record, read the segment. */
- len = getsym (sym, &src);
+ if (!getsym (sym, &src, &len))
+ return FALSE;
section = bfd_get_section_by_name (abfd, sym);
if (section == NULL)
{
char *n = bfd_alloc (abfd, (bfd_size_type) len + 1);
if (!n)
- abort (); /* FIXME. */
+ return FALSE;
memcpy (n, sym, len + 1);
section = bfd_make_section (abfd, n);
}
@@ -375,8 +394,11 @@
{
case '1': /* Section range. */
src++;
- section->vma = getvalue (&src);
- section->size = getvalue (&src) - section->vma;
+ if (!getvalue (&src, §ion->vma))
+ return FALSE;
+ if (!getvalue (&src, &val))
+ return FALSE;
+ section->size = val - section->vma;
section->flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC;
break;
case '0':
@@ -393,35 +415,42 @@
char stype = (*src);
if (!new)
- abort (); /* FIXME. */
+ return FALSE;
new->symbol.the_bfd = abfd;
src++;
abfd->symcount++;
abfd->flags |= HAS_SYMS;
new->prev = abfd->tdata.tekhex_data->symbols;
abfd->tdata.tekhex_data->symbols = new;
- len = getsym (sym, &src);
+ if (!getsym (sym, &src, &len))
+ return FALSE;
new->symbol.name = bfd_alloc (abfd, (bfd_size_type) len + 1);
if (!new->symbol.name)
- abort (); /* FIXME. */
+ return FALSE;
memcpy ((char *) (new->symbol.name), sym, len + 1);
new->symbol.section = section;
if (stype <= '4')
new->symbol.flags = (BSF_GLOBAL | BSF_EXPORT);
else
new->symbol.flags = BSF_LOCAL;
- new->symbol.value = getvalue (&src) - section->vma;
+ if (!getvalue (&src, &val))
+ return FALSE;
+ new->symbol.value = val - section->vma;
}
+ default:
+ return FALSE;
}
}
}
+
+ return TRUE;
}
/* Pass over a tekhex, calling one of the above functions on each
record. */
-static void
-pass_over (bfd *abfd, void (*func) (bfd *, int, char *))
+static bfd_boolean
+pass_over (bfd *abfd, bfd_boolean (*func) (bfd *, int, char *))
{
unsigned int chars_on_line;
bfd_boolean eof = FALSE;
@@ -462,8 +491,11 @@
/* Put a null at the end. */
src[chars_on_line] = 0;
- func (abfd, type, src);
+ if (!func (abfd, type, src))
+ return FALSE;
}
+
+ return TRUE;
}
static long
@@ -524,7 +556,9 @@
tekhex_mkobject (abfd);
- pass_over (abfd, first_phase);
+ if (!pass_over (abfd, first_phase))
+ return NULL;
+
return abfd->xvec;
}
diff --git a/bfd/version.h b/bfd/version.h
index 8957708..73eabbe 100644
--- a/bfd/version.h
+++ b/bfd/version.h
@@ -1,3 +1,3 @@
-#define BFD_VERSION_DATE 20060420
+#define BFD_VERSION_DATE 20060501
#define BFD_VERSION @bfd_version@
#define BFD_VERSION_STRING @bfd_version_string@
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index dcb436b..b2dd5f4 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,104 @@
+2006-04-30 Mark Kettenis <kettenis@gnu.org>
+
+ * breakpoint.c (insert_single_step_breakpoint): Make a failure to
+ insert a single-step breakpoint an error instead of a warning.
+
+2006-05-01 Nathan J. Williams <nathanw@wasabisystems.com>
+
+ * ppcnbsd-tdep.c (ppcnbsd_return_value): Change type of last two
+ arguments from void * to gdb_byte *.
+
+2006-04-26 Michael Snyder <msnyder@redhat.com>
+
+ * linux-fork.c (_initialize_linux_fork): Rename "delete-fork"
+ command to "delete fork" (no hyphen), compatible with other
+ "delete" commands.
+ (info_forks_command): Accept a fork ID argument, for info
+ on a single fork. Report if no matching forks.
+
+2006-04-25 Mark Kettenis <kettenis@gnu.org>
+
+ * breakpoint.c (remove_single_step_breakpoints): Bail out early if
+ no breakpoints are inserted.
+
+ From Masaki MURANAKA <monaka@monami-software.com>:
+ * mips-mdebug-tdep.c (mips_mdebug_frame_prev_register): Change
+ type of last argument to `gdb_byte *'
+
+2006-04-25 Jim Blandy <jimb@codesourcery.com>
+
+ Add support for 'target remote |' on MinGW.
+ * ser-mingw.c (struct pipe_state): New structure.
+ (make_pipe_state, free_pipe_state, cleanup_pipe_state)
+ (pipe_windows_open, pipe_windows_close, pipe_windows_read)
+ (pipe_windows_write, pipe_wait_handle): New functions.
+ (_initialize_ser_windows): Register a "pipe" interface based on
+ them.
+
+2006-04-24 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ser-mingw.c: Include <conio.h>.
+ (struct ser_console_state, struct net_windows_state): Add exit_select,
+ have_stopped, thread.
+ (pipe_select_thread, console_select_thread)
+ (net_windows_select_thread): Don't create a local state copy or
+ close stop_select. Exit on exit_select instead of stop_select. Set
+ have_stopped.
+ (console_select_thread): Don't report control keypresses as pending
+ input.
+ (pipe_select_thread): Allow stop_select to interrupt sleeping.
+ (set_console_wait_handle): Create exit_select and have_stopped.
+ Save the thread handle. Check _kbhit before starting a thread.
+ (ser_console_done_wait_handle): New.
+ (ser_console_close): Close new handles. Wait for the thread to
+ exit.
+ (new_windows_select_thread): Assert that an event occurred.
+ (net_windows_wait_handle): Check for pending input before starting
+ a thread.
+ (net_windows_done_wait_handle): New.
+ (net_windows_open): Create exit_select and have_stopped.
+ Save the thread handle.
+ (net_windows_close): Close new handles. Wait for the thread to
+ exit.
+ (_intiialize_ser_windows): Register done_wait_handle methods.
+
+ * serial.c [USE_WIN32API] (serial_done_wait_handle): New.
+ * serial.h [USE_WIN32API] (struct serial_ops): Add done_wait_handle.
+ [USE_WIN32API] (serial_done_wait_handle): New prototype.
+ * mingw-hdep.c (gdb_select): Use serial_done_wait_handle.
+
+2006-04-23 Andreas Schwab <schwab@suse.de>
+
+ * rs6000-tdep.c: Include "reggroups.h" only once.
+ * Makefile.in (rs6000-tdep.o): Update dependencies.
+
+2006-04-21 Frederic Riss <frederic.riss@st.com>
+
+ * dwarf2read.c (dwarf2_start_subfile): Change prototype to accept
+ compilation directory as last argument.
+ Always pass comp_dir as second argument to start_subfile and prepend
+ dirname to the filename when necessary.
+ Remove now superfluous search for pre-existing subfile.
+ (dwarf_decode_lines): Pass the compilation directory to
+ dwarf2_start_subfile.
+
+2006-04-20 Michael Snyder <msnyder@redhat.com>
+
+ * 2006-03-22 Jim Blandy <jimb@redhat.com>
+ Add support for the Renesas M32C and M16C.
+
+ * configure.tgt (m32c-*-*): New entry.
+ * config/m32c/m32c.mt: New file.
+ * m32c-tdep.c: New file.
+ * Makefile.in (elf_m32c_h): New variable.
+ (m32c-tdep.o): New rule.
+ * NEWS: Mention new target.
+ * MAINTAINERS: Designate Jim Blandy as responsible maintainer.
+
+2006-04-20 Michael Snyder <msnyder@redhat.com>
+
+ * remote.c: Fix spelling error in comment.
+
2006-04-20 Daniel Jacobowitz <dan@codesourcery.com>
* m68klinux-tdep.c (m68k_linux_sigtramp_frame_prev_register):
diff --git a/gdb/MAINTAINERS b/gdb/MAINTAINERS
index dbd2f93..48f8c00 100644
--- a/gdb/MAINTAINERS
+++ b/gdb/MAINTAINERS
@@ -266,6 +266,9 @@
ia64 --target=ia64-linux-gnu ,-Werror
(--target=ia64-elf broken)
+ m32c --target=m32c-elf ,-Werror
+ Jim Blandy, jimb@codesourcery.com
+
m32r --target=m32r-elf ,-Werror
m68hc11 --target=m68hc11-elf ,-Werror ,
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index beab57c..e27a718 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -582,6 +582,7 @@
elf_arm_h = $(INCLUDE_DIR)/elf/arm.h $(elf_reloc_macros_h)
elf_bfd_h = $(BFD_SRC)/elf-bfd.h
elf_frv_h = $(INCLUDE_DIR)/elf/frv.h $(elf_reloc_macros_h)
+elf_m32c_h = $(INCLUDE_DIR)/elf/m32c.h $(elf_reloc_macros_h)
libaout_h = $(BFD_SRC)/libaout.h
libiberty_h = $(INCLUDE_DIR)/libiberty.h
libbfd_h = $(BFD_SRC)/libbfd.h
@@ -598,6 +599,7 @@
gdb_sim_arm_h = $(INCLUDE_DIR)/gdb/sim-arm.h
gdb_sim_d10v_h = $(INCLUDE_DIR)/gdb/sim-d10v.h
gdb_sim_frv_h = $(INCLUDE_DIR)/gdb/sim-frv.h
+gdb_sim_m32c_h = $(INCLUDE_DIR)/gdb/sim-m32c.h
gdb_sim_ppc_h = $(INCLUDE_DIR)/gdb/sim-ppc.h
gdb_sim_sh_h = $(INCLUDE_DIR)/gdb/sim-sh.h
splay_tree_h = $(INCLUDE_DIR)/splay-tree.h
@@ -2215,6 +2217,11 @@
$(expression_h) $(value_h) $(gdbcore_h) $(target_h) $(m2_lang_h)
m2-valprint.o: m2-valprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) \
$(m2_lang_h) $(c_lang_h)
+m32c-tdep.o: m32c-tdep.c $(defs_h) $(gdb_assert_h) $(elf_bfd_h) \
+ $(elf_m32c_h) $(gdb_sim_m32c_h) $(dis_asm_h) $(gdbtypes_h) \
+ $(regcache_h) $(arch_utils_h) $(frame_h) $(frame_unwind_h) \
+ $(dwarf2_frame_h) $(dwarf2expr_h) $(symtab_h) $(gdbcore_h) \
+ $(value_h) $(reggroups_h) $(prologue_value_h) $(target_h)
m32r-linux-nat.o: m32r-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
$(regcache_h) $(linux_nat_h) $(gdb_assert_h) $(gdb_string_h) \
$(gregset_h) $(m32r_tdep_h) $(target_h)
@@ -2508,7 +2515,7 @@
$(reggroups_h) $(libbfd_h) $(coff_internal_h) $(libcoff_h) \
$(coff_xcoff_h) $(libxcoff_h) $(elf_bfd_h) $(solib_svr4_h) \
$(ppc_tdep_h) $(gdb_assert_h) $(dis_asm_h) $(trad_frame_h) \
- $(frame_unwind_h) $(frame_base_h) $(reggroups_h) $(rs6000_tdep_h)
+ $(frame_unwind_h) $(frame_base_h) $(rs6000_tdep_h)
rs6000-aix-tdep.o: rs6000-aix-tdep.c $(defs_h) $(osabi_h) $(rs6000_tdep_h)
s390-nat.o: s390-nat.c $(defs_h) $(tm_h) $(regcache_h) $(inferior_h) \
$(s390_tdep_h) $(target_h) $(linux_nat_h)
diff --git a/gdb/NEWS b/gdb/NEWS
index 526f45a..bf6f31e 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -3,6 +3,12 @@
*** Changes since GDB 6.4
+* New targets
+
+Renesas M32C/M16C m32c-elf
+
+Morpho Technologies ms1 ms1-elf
+
* New commands
init-if-undefined Initialize a convenience variable, but
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 130b684..fd231de 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -7717,7 +7717,7 @@
*bpt_p = deprecated_insert_raw_breakpoint (next_pc);
if (*bpt_p == NULL)
- warning (_("Could not insert single-step breakpoint at 0x%s"),
+ error (_("Could not insert single-step breakpoint at 0x%s"),
paddr_nz (next_pc));
}
diff --git a/gdb/config/m32c/m32c.mt b/gdb/config/m32c/m32c.mt
new file mode 100644
index 0000000..2a404d4
--- /dev/null
+++ b/gdb/config/m32c/m32c.mt
@@ -0,0 +1,7 @@
+# Target: Renesas M32C family
+TDEPFILES = m32c-tdep.o prologue-value.o
+
+# There may also be a SID / CGEN simulator for this, but we do have DJ
+# Delorie's mini-sim.
+SIM_OBS = remote-sim.o
+SIM = ../sim/m32c/libsim.a
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 4092fe1..f6e1ad8 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -107,6 +107,8 @@
iq2000-*-*) gdb_target=iq2000 ;;
+m32c-*-*) gdb_target=m32c ;;
+
m32r*-*-linux*) gdb_target=linux ;;
m32r*-*-*) gdb_target=m32r ;;
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 66ff9d7..dc5f4f1 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,12 @@
+2006-04-27 Michael Snyder <msnyder@redhat.com>
+
+ * gdb.texinfo (delete-fork): Command renamed to "delete fork".
+
+2006-04-22 Andrew Cagney <cagney@redhat.com>
+
+ * gdb.texinfo (Contributors): Credit frame unwinder contributors.
+ * gdbint.texinfo (Algorithms): Fix errors in frame documentation.
+
2006-04-18 Daniel Jacobowitz <dan@codesourcery.com>
* gdbint.texinfo (x86 Watchpoints, Target Conditionals): Update insert
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 790c58d..3230dcb 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -484,6 +484,19 @@
Thorpe, Corinna Vinschen, Ulrich Weigand, and Elena Zannoni, helped
with the migration of old architectures to this new framework.
+Andrew Cagney completely re-designed and re-implemented @value{GDBN}'s
+unwinder framework, this consisting of a fresh new design featuring
+frame IDs, independent frame sniffers, and the sentinel frame. Mark
+Kettenis implemented the @sc{dwarf 2} unwinder, Jeff Johnston the
+libunwind unwinder, and Andrew Cagney the dummy, sentinel, tramp, and
+trad unwinders. The architecture specific changes, each involving a
+complete rewrite of the architecture's frame code, were carried out by
+Jim Blandy, Joel Brobecker, Kevin Buettner, Andrew Cagney, Stephane
+Carrez, Randolph Chung, Orjan Friberg, Richard Henderson, Daniel
+Jacobowitz, Jeff Johnston, Mark Kettenis, Theodore A. Roth, Kei
+Sakamoto, Yoshinori Sato, Michael Snyder, Corinna Vinschen, and Ulrich
+Weigand.
+
@node Sample Session
@chapter A Sample @value{GDBN} Session
@@ -2563,7 +2576,7 @@
To quit debugging one of the forked processes, you can either detach
from it by using the @w{@code{detach-fork}} command (allowing it to
run independently), or delete (and kill) it using the
-@w{@code{delete-fork}} command.
+@w{@code{delete fork}} command.
@table @code
@kindex detach-fork @var{fork-id}
@@ -2572,8 +2585,8 @@
@var{fork-id}, and remove it from the fork list. The process will be
allowed to run independently.
-@kindex delete-fork @var{fork-id}
-@item delete-fork @var{fork-id}
+@kindex delete fork @var{fork-id}
+@item delete fork @var{fork-id}
Kill the process identified by @value{GDBN} fork number @var{fork-id},
and remove it from the fork list.
@@ -2662,8 +2675,8 @@
only restores things that reside in the program being debugged, not in
the debugger.
-@kindex delete-checkpoint @var{checkpoint-id}
-@item delete-checkpoint @var{checkpoint-id}
+@kindex delete checkpoint @var{checkpoint-id}
+@item delete checkpoint @var{checkpoint-id}
Delete the previously-saved checkpoint identified by @var{checkpoint-id}.
@end table
diff --git a/gdb/doc/gdbint.texinfo b/gdb/doc/gdbint.texinfo
index e1d1557..7bbd417 100644
--- a/gdb/doc/gdbint.texinfo
+++ b/gdb/doc/gdbint.texinfo
@@ -232,25 +232,21 @@
and called functions.
@cindex frame, unwind
-@value{GDBN}'s current frame model is the result of an incremental
-cleanup of working code, not a fresh design, so it's a little weird.
-
-The natural model would have a frame object, with methods that read
-and write that frame's registers. Reading or writing the youngest
-frame's registers would simply read or write the processor's current
-registers, since the youngest frame is running directly on the
-processor. Older frames might have some registers saved on the stack
-by younger frames, so accessing the older frames' registers would do a
-mix of memory accesses and register accesses, as appropriate.
+@value{GDBN}'s frame model, a fresh design, was implemented with the
+need to support @sc{dwarf}'s Call Frame Information in mind. In fact,
+the term ``unwind'' is taken directly from that specification.
+Developers wishing to learn more about unwinders, are encouraged to
+read the the @sc{dwarf} specification.
@findex frame_register_unwind
-Instead, @value{GDBN}'s model is that you find a frame's registers by
-``unwinding'' them from the next younger frame. That is, to access
-the registers of frame #1 (the next-to-youngest frame), you actually
-apply @code{frame_register_unwind} to frame #0 (the youngest frame).
-But then the obvious question is: how do you access the registers of
-the youngest frame itself? How do you ``unwind'' them when they're
-not wound up?
+@findex get_frame_register
+@value{GDBN}'s model is that you find a frame's registers by
+``unwinding'' them from the next younger frame. That is,
+@samp{get_frame_register} which returns the value of a register in
+frame #1 (the next-to-youngest frame), is implemented by calling frame
+#0's @code{frame_register_unwind} (the youngest frame). But then the
+obvious question is: how do you access the registers of the youngest
+frame itself?
@cindex sentinel frame
@findex get_frame_type
@@ -261,32 +257,6 @@
is a sentinel frame, then @code{get_frame_type (@var{f}) ==
SENTINEL_FRAME}.
-@findex create_new_frame
-@vindex FRAME_FP
-@code{FRAME_FP} in the machine description has no meaning to the
-machine-independent part of @value{GDBN}, except that it is used when
-setting up a new frame from scratch, as follows:
-
-@smallexample
-create_new_frame (read_register (DEPRECATED_FP_REGNUM), read_pc ()));
-@end smallexample
-
-@cindex frame pointer register
-Other than that, all the meaning imparted to @code{DEPRECATED_FP_REGNUM}
-is imparted by the machine-dependent code. So,
-@code{DEPRECATED_FP_REGNUM} can have any value that is convenient for
-the code that creates new frames. (@code{create_new_frame} calls
-@code{DEPRECATED_INIT_EXTRA_FRAME_INFO} if it is defined; that is where
-you should use the @code{DEPRECATED_FP_REGNUM} value, if your frames are
-nonstandard.)
-
-@cindex frame chain
-Given a @value{GDBN} frame, define @code{DEPRECATED_FRAME_CHAIN} to
-determine the address of the calling function's frame. This will be
-used to create a new @value{GDBN} frame struct, and then
-@code{DEPRECATED_INIT_EXTRA_FRAME_INFO} and
-@code{DEPRECATED_INIT_FRAME_PC} will be called for the new frame.
-
@section Prologue Analysis
@cindex prologue analysis
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 6fe9245..32bf163 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -846,7 +846,7 @@
static void dwarf_decode_lines (struct line_header *, char *, bfd *,
struct dwarf2_cu *, struct partial_symtab *);
-static void dwarf2_start_subfile (char *, char *);
+static void dwarf2_start_subfile (char *, char *, char *);
static struct symbol *new_symbol (struct die_info *, struct type *,
struct dwarf2_cu *);
@@ -6529,13 +6529,12 @@
directory and file name numbers in the statement program
are 1-based. */
struct file_entry *fe = &lh->file_names[file - 1];
- char *dir;
+ char *dir = NULL;
if (fe->dir_index)
dir = lh->include_dirs[fe->dir_index - 1];
- else
- dir = comp_dir;
- dwarf2_start_subfile (fe->name, dir);
+
+ dwarf2_start_subfile (fe->name, dir, comp_dir);
}
/* Decode the table. */
@@ -6627,17 +6626,16 @@
0-based, but the directory and file name numbers in
the statement program are 1-based. */
struct file_entry *fe;
- char *dir;
+ char *dir = NULL;
file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
line_ptr += bytes_read;
fe = &lh->file_names[file - 1];
if (fe->dir_index)
dir = lh->include_dirs[fe->dir_index - 1];
- else
- dir = comp_dir;
+
if (!decode_for_pst_p)
- dwarf2_start_subfile (fe->name, dir);
+ dwarf2_start_subfile (fe->name, dir, comp_dir);
}
break;
case DW_LNS_set_column:
@@ -6717,7 +6715,8 @@
/* Start a subfile for DWARF. FILENAME is the name of the file and
DIRNAME the name of the source directory which contains FILENAME
- or NULL if not known.
+ or NULL if not known. COMP_DIR is the compilation directory for the
+ linetable's compilation unit or NULL if not known.
This routine tries to keep line numbers from identical absolute and
relative file names in a common subfile.
@@ -6733,31 +6732,35 @@
files.files[1].dir: /srcdir
The line number information for list0.c has to end up in a single
- subfile, so that `break /srcdir/list0.c:1' works as expected. */
+ subfile, so that `break /srcdir/list0.c:1' works as expected.
+ start_subfile will ensure that this happens provided that we pass the
+ concatenation of files.files[1].dir and files.files[1].name as the
+ subfile's name. */
static void
-dwarf2_start_subfile (char *filename, char *dirname)
+dwarf2_start_subfile (char *filename, char *dirname, char *comp_dir)
{
- /* If the filename isn't absolute, try to match an existing subfile
- with the full pathname. */
+ char *fullname;
+
+ /* While reading the DIEs, we call start_symtab(DW_AT_name, DW_AT_comp_dir).
+ `start_symtab' will always pass the contents of DW_AT_comp_dir as
+ second argument to start_subfile. To be consistent, we do the
+ same here. In order not to lose the line information directory,
+ we concatenate it to the filename when it makes sense.
+ Note that the Dwarf3 standard says (speaking of filenames in line
+ information): ``The directory index is ignored for file names
+ that represent full path names''. Thus ignoring dirname in the
+ `else' branch below isn't an issue. */
if (!IS_ABSOLUTE_PATH (filename) && dirname != NULL)
- {
- struct subfile *subfile;
- char *fullname = concat (dirname, "/", filename, (char *)NULL);
+ fullname = concat (dirname, SLASH_STRING, filename, (char *)NULL);
+ else
+ fullname = filename;
- for (subfile = subfiles; subfile; subfile = subfile->next)
- {
- if (FILENAME_CMP (subfile->name, fullname) == 0)
- {
- current_subfile = subfile;
- xfree (fullname);
- return;
- }
- }
- xfree (fullname);
- }
- start_subfile (filename, dirname);
+ start_subfile (fullname, comp_dir);
+
+ if (fullname != filename)
+ xfree (fullname);
}
static void
diff --git a/gdb/linux-fork.c b/gdb/linux-fork.c
index bb44682..e96275b 100644
--- a/gdb/linux-fork.c
+++ b/gdb/linux-fork.c
@@ -448,9 +448,18 @@
struct fork_info *fp;
int cur_line;
ULONGEST pc;
+ int requested = -1;
+ struct fork_info *printed = NULL;
+
+ if (arg && *arg)
+ requested = (int) parse_and_eval_long (arg);
for (fp = fork_list; fp; fp = fp->next)
{
+ if (requested > 0 && fp->num != requested)
+ continue;
+
+ printed = fp;
if (ptid_equal (fp->ptid, inferior_ptid))
{
printf_filtered ("* ");
@@ -490,6 +499,13 @@
putchar_filtered ('\n');
}
+ if (printed == NULL)
+ {
+ if (requested > 0)
+ printf_filtered (_("No fork number %d.\n"), requested);
+ else
+ printf_filtered (_("No forks.\n"));
+ }
}
/* Save/restore mode variable 'detach_fork':
@@ -670,11 +686,12 @@
restart <n>: restore program context from a checkpoint.\n\
Argument 'n' is checkpoint ID, as displayed by 'info checkpoints'."));
- /* Delete-checkpoint command: kill the process and remove it from
+ /* Delete checkpoint command: kill the process and remove it from
fork list. */
- add_com ("delete-checkpoint", class_obscure, delete_fork_command, _("\
-Delete a fork/checkpoint (experimental)."));
+ add_cmd ("checkpoint", class_obscure, delete_fork_command, _("\
+Delete a fork/checkpoint (experimental)."),
+ &deletelist);
/* Detach-checkpoint command: release the process to run independantly,
and remove it from the fork list. */
@@ -691,7 +708,7 @@
/* Command aliases (let "fork" and "checkpoint" be used
interchangeably). */
- add_com_alias ("delete-fork", "delete-checkpoint", class_obscure, 1);
+ add_alias_cmd ("fork", "checkpoint", class_obscure, 1, &deletelist);
add_com_alias ("detach-fork", "detach-checkpoint", class_obscure, 1);
add_info_alias ("forks", "checkpoints", 0);
diff --git a/gdb/m32c-tdep.c b/gdb/m32c-tdep.c
new file mode 100644
index 0000000..e93a98c
--- /dev/null
+++ b/gdb/m32c-tdep.c
@@ -0,0 +1,2552 @@
+/* Renesas M32C target-dependent code for GDB, the GNU debugger.
+
+ Copyright 2004, 2005 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. */
+
+#include "defs.h"
+
+#include <stdarg.h>
+
+#if defined (HAVE_STRING_H)
+#include <string.h>
+#endif
+
+#include "gdb_assert.h"
+#include "elf-bfd.h"
+#include "elf/m32c.h"
+#include "gdb/sim-m32c.h"
+#include "dis-asm.h"
+#include "gdbtypes.h"
+#include "regcache.h"
+#include "arch-utils.h"
+#include "frame.h"
+#include "frame-unwind.h"
+#include "dwarf2-frame.h"
+#include "dwarf2expr.h"
+#include "symtab.h"
+#include "gdbcore.h"
+#include "value.h"
+#include "reggroups.h"
+#include "prologue-value.h"
+#include "target.h"
+
+
+/* The m32c tdep structure. */
+
+static struct reggroup *m32c_dma_reggroup;
+
+struct m32c_reg;
+
+/* The type of a function that moves the value of REG between CACHE or
+ BUF --- in either direction. */
+typedef void (m32c_move_reg_t) (struct m32c_reg *reg,
+ struct regcache *cache,
+ void *buf);
+
+struct m32c_reg
+{
+ /* The name of this register. */
+ const char *name;
+
+ /* Its type. */
+ struct type *type;
+
+ /* The architecture this register belongs to. */
+ struct gdbarch *arch;
+
+ /* Its GDB register number. */
+ int num;
+
+ /* Its sim register number. */
+ int sim_num;
+
+ /* Its DWARF register number, or -1 if it doesn't have one. */
+ int dwarf_num;
+
+ /* Register group memberships. */
+ unsigned int general_p : 1;
+ unsigned int dma_p : 1;
+ unsigned int system_p : 1;
+ unsigned int save_restore_p : 1;
+
+ /* Functions to read its value from a regcache, and write its value
+ to a regcache. */
+ m32c_move_reg_t *read, *write;
+
+ /* Data for READ and WRITE functions. The exact meaning depends on
+ the specific functions selected; see the comments for those
+ functions. */
+ struct m32c_reg *rx, *ry;
+ int n;
+};
+
+
+/* An overestimate of the number of raw and pseudoregisters we will
+ have. The exact answer depends on the variant of the architecture
+ at hand, but we can use this to declare statically allocated
+ arrays, and bump it up when needed. */
+#define M32C_MAX_NUM_REGS (75)
+
+/* The largest assigned DWARF register number. */
+#define M32C_MAX_DWARF_REGNUM (40)
+
+
+struct gdbarch_tdep
+{
+ /* All the registers for this variant, indexed by GDB register
+ number, and the number of registers present. */
+ struct m32c_reg regs[M32C_MAX_NUM_REGS];
+
+ /* The number of valid registers. */
+ int num_regs;
+
+ /* Interesting registers. These are pointers into REGS. */
+ struct m32c_reg *pc, *flg;
+ struct m32c_reg *r0, *r1, *r2, *r3, *a0, *a1;
+ struct m32c_reg *r2r0, *r3r2r1r0, *r3r1r2r0;
+ struct m32c_reg *sb, *fb, *sp;
+
+ /* A table indexed by DWARF register numbers, pointing into
+ REGS. */
+ struct m32c_reg *dwarf_regs[M32C_MAX_DWARF_REGNUM + 1];
+
+ /* Types for this architecture. We can't use the builtin_type_foo
+ types, because they're not initialized when building a gdbarch
+ structure. */
+ struct type *voyd, *ptr_voyd, *func_voyd;
+ struct type *uint8, *uint16;
+ struct type *int8, *int16, *int32, *int64;
+
+ /* The types for data address and code address registers. */
+ struct type *data_addr_reg_type, *code_addr_reg_type;
+
+ /* The number of bytes a return address pushed by a 'jsr' instruction
+ occupies on the stack. */
+ int ret_addr_bytes;
+
+ /* The number of bytes an address register occupies on the stack
+ when saved by an 'enter' or 'pushm' instruction. */
+ int push_addr_bytes;
+};
+
+
+/* Types. */
+
+static void
+make_types (struct gdbarch *arch)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
+ unsigned long mach = gdbarch_bfd_arch_info (arch)->mach;
+ int data_addr_reg_bits, code_addr_reg_bits;
+ char type_name[50];
+
+#if 0
+ /* This is used to clip CORE_ADDR values, so this value is
+ appropriate both on the m32c, where pointers are 32 bits long,
+ and on the m16c, where pointers are sixteen bits long, but there
+ may be code above the 64k boundary. */
+ set_gdbarch_addr_bit (arch, 24);
+#else
+ /* GCC uses 32 bits for addrs in the dwarf info, even though
+ only 16/24 bits are used. Setting addr_bit to 24 causes
+ errors in reading the dwarf addresses. */
+ set_gdbarch_addr_bit (arch, 32);
+#endif
+
+ set_gdbarch_int_bit (arch, 16);
+ switch (mach)
+ {
+ case bfd_mach_m16c:
+ data_addr_reg_bits = 16;
+ code_addr_reg_bits = 24;
+ set_gdbarch_ptr_bit (arch, 16);
+ tdep->ret_addr_bytes = 3;
+ tdep->push_addr_bytes = 2;
+ break;
+
+ case bfd_mach_m32c:
+ data_addr_reg_bits = 24;
+ code_addr_reg_bits = 24;
+ set_gdbarch_ptr_bit (arch, 32);
+ tdep->ret_addr_bytes = 4;
+ tdep->push_addr_bytes = 4;
+ break;
+
+ default:
+ gdb_assert (0);
+ }
+
+ /* The builtin_type_mumble variables are sometimes uninitialized when
+ this is called, so we avoid using them. */
+ tdep->voyd = init_type (TYPE_CODE_VOID, 1, 0, "void", NULL);
+ tdep->ptr_voyd = init_type (TYPE_CODE_PTR, gdbarch_ptr_bit (arch) / 8,
+ TYPE_FLAG_UNSIGNED, NULL, NULL);
+ TYPE_TARGET_TYPE (tdep->ptr_voyd) = tdep->voyd;
+ tdep->func_voyd = lookup_function_type (tdep->voyd);
+
+ sprintf (type_name, "%s_data_addr_t",
+ gdbarch_bfd_arch_info (arch)->printable_name);
+ tdep->data_addr_reg_type
+ = init_type (TYPE_CODE_PTR, data_addr_reg_bits / 8,
+ TYPE_FLAG_UNSIGNED, xstrdup (type_name), NULL);
+ TYPE_TARGET_TYPE (tdep->data_addr_reg_type) = tdep->voyd;
+
+ sprintf (type_name, "%s_code_addr_t",
+ gdbarch_bfd_arch_info (arch)->printable_name);
+ tdep->code_addr_reg_type
+ = init_type (TYPE_CODE_PTR, code_addr_reg_bits / 8,
+ TYPE_FLAG_UNSIGNED, xstrdup (type_name), NULL);
+ TYPE_TARGET_TYPE (tdep->code_addr_reg_type) = tdep->func_voyd;
+
+ tdep->uint8 = init_type (TYPE_CODE_INT, 1, TYPE_FLAG_UNSIGNED,
+ "uint8_t", NULL);
+ tdep->uint16 = init_type (TYPE_CODE_INT, 2, TYPE_FLAG_UNSIGNED,
+ "uint16_t", NULL);
+ tdep->int8 = init_type (TYPE_CODE_INT, 1, 0, "int8_t", NULL);
+ tdep->int16 = init_type (TYPE_CODE_INT, 2, 0, "int16_t", NULL);
+ tdep->int32 = init_type (TYPE_CODE_INT, 4, 0, "int32_t", NULL);
+ tdep->int64 = init_type (TYPE_CODE_INT, 8, 0, "int64_t", NULL);
+}
+
+
+
+/* Register set. */
+
+static const char *
+m32c_register_name (int num)
+{
+ return gdbarch_tdep (current_gdbarch)->regs[num].name;
+}
+
+
+static struct type *
+m32c_register_type (struct gdbarch *arch, int reg_nr)
+{
+ return gdbarch_tdep (arch)->regs[reg_nr].type;
+}
+
+
+static int
+m32c_register_sim_regno (int reg_nr)
+{
+ return gdbarch_tdep (current_gdbarch)->regs[reg_nr].sim_num;
+}
+
+
+static int
+m32c_debug_info_reg_to_regnum (int reg_nr)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+ if (0 <= reg_nr && reg_nr <= M32C_MAX_DWARF_REGNUM
+ && tdep->dwarf_regs[reg_nr])
+ return tdep->dwarf_regs[reg_nr]->num;
+ else
+ /* The DWARF CFI code expects to see -1 for invalid register
+ numbers. */
+ return -1;
+}
+
+
+int
+m32c_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
+ struct reggroup *group)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+ struct m32c_reg *reg = &tdep->regs[regnum];
+
+ /* The anonymous raw registers aren't in any groups. */
+ if (! reg->name)
+ return 0;
+
+ if (group == all_reggroup)
+ return 1;
+
+ if (group == general_reggroup
+ && reg->general_p)
+ return 1;
+
+ if (group == m32c_dma_reggroup
+ && reg->dma_p)
+ return 1;
+
+ if (group == system_reggroup
+ && reg->system_p)
+ return 1;
+
+ /* Since the m32c DWARF register numbers refer to cooked registers, not
+ raw registers, and frame_pop depends on the save and restore groups
+ containing registers the DWARF CFI will actually mention, our save
+ and restore groups are cooked registers, not raw registers. (This is
+ why we can't use the default reggroup function.) */
+ if ((group == save_reggroup
+ || group == restore_reggroup)
+ && reg->save_restore_p)
+ return 1;
+
+ return 0;
+}
+
+
+/* Register move functions. We declare them here using
+ m32c_move_reg_t to check the types. */
+static m32c_move_reg_t m32c_raw_read, m32c_raw_write;
+static m32c_move_reg_t m32c_banked_read, m32c_banked_write;
+static m32c_move_reg_t m32c_sb_read, m32c_sb_write;
+static m32c_move_reg_t m32c_part_read, m32c_part_write;
+static m32c_move_reg_t m32c_cat_read, m32c_cat_write;
+static m32c_move_reg_t m32c_r3r2r1r0_read, m32c_r3r2r1r0_write;
+
+
+/* Copy the value of the raw register REG from CACHE to BUF. */
+static void
+m32c_raw_read (struct m32c_reg *reg, struct regcache *cache, void *buf)
+{
+ regcache_raw_read (cache, reg->num, buf);
+}
+
+
+/* Copy the value of the raw register REG from BUF to CACHE. */
+static void
+m32c_raw_write (struct m32c_reg *reg, struct regcache *cache, void *buf)
+{
+ regcache_raw_write (cache, reg->num, (const void *) buf);
+}
+
+
+/* Return the value of the 'flg' register in CACHE. */
+static int
+m32c_read_flg (struct regcache *cache)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (cache));
+ ULONGEST flg;
+ regcache_raw_read_unsigned (cache, tdep->flg->num, &flg);
+ return flg & 0xffff;
+}
+
+
+/* Move the value of a banked register from CACHE to BUF.
+ If the value of the 'flg' register in CACHE has any of the bits
+ masked in REG->n set, then read REG->ry. Otherwise, read
+ REG->rx. */
+static void
+m32c_banked_read (struct m32c_reg *reg, struct regcache *cache, void *buf)
+{
+ struct m32c_reg *bank_reg
+ = ((m32c_read_flg (cache) & reg->n) ? reg->ry : reg->rx);
+ regcache_raw_read (cache, bank_reg->num, buf);
+}
+
+
+/* Move the value of a banked register from BUF to CACHE.
+ If the value of the 'flg' register in CACHE has any of the bits
+ masked in REG->n set, then write REG->ry. Otherwise, write
+ REG->rx. */
+static void
+m32c_banked_write (struct m32c_reg *reg, struct regcache *cache, void *buf)
+{
+ struct m32c_reg *bank_reg
+ = ((m32c_read_flg (cache) & reg->n) ? reg->ry : reg->rx);
+ regcache_raw_write (cache, bank_reg->num, (const void *) buf);
+}
+
+
+/* Move the value of SB from CACHE to BUF. On bfd_mach_m32c, SB is a
+ banked register; on bfd_mach_m16c, it's not. */
+static void
+m32c_sb_read (struct m32c_reg *reg, struct regcache *cache, void *buf)
+{
+ if (gdbarch_bfd_arch_info (reg->arch)->mach == bfd_mach_m16c)
+ m32c_raw_read (reg->rx, cache, buf);
+ else
+ m32c_banked_read (reg, cache, buf);
+}
+
+
+/* Move the value of SB from BUF to CACHE. On bfd_mach_m32c, SB is a
+ banked register; on bfd_mach_m16c, it's not. */
+static void
+m32c_sb_write (struct m32c_reg *reg, struct regcache *cache, void *buf)
+{
+ if (gdbarch_bfd_arch_info (reg->arch)->mach == bfd_mach_m16c)
+ m32c_raw_write (reg->rx, cache, buf);
+ else
+ m32c_banked_write (reg, cache, buf);
+}
+
+
+/* Assuming REG uses m32c_part_read and m32c_part_write, set *OFFSET_P
+ and *LEN_P to the offset and length, in bytes, of the part REG
+ occupies in its underlying register. The offset is from the
+ lower-addressed end, regardless of the architecture's endianness.
+ (The M32C family is always little-endian, but let's keep those
+ assumptions out of here.) */
+static void
+m32c_find_part (struct m32c_reg *reg, int *offset_p, int *len_p)
+{
+ /* The length of the containing register, of which REG is one part. */
+ int containing_len = TYPE_LENGTH (reg->rx->type);
+
+ /* The length of one "element" in our imaginary array. */
+ int elt_len = TYPE_LENGTH (reg->type);
+
+ /* The offset of REG's "element" from the least significant end of
+ the containing register. */
+ int elt_offset = reg->n * elt_len;
+
+ /* If we extend off the end, trim the length of the element. */
+ if (elt_offset + elt_len > containing_len)
+ {
+ elt_len = containing_len - elt_offset;
+ /* We shouldn't be declaring partial registers that go off the
+ end of their containing registers. */
+ gdb_assert (elt_len > 0);
+ }
+
+ /* Flip the offset around if we're big-endian. */
+ if (gdbarch_byte_order (reg->arch) == BFD_ENDIAN_BIG)
+ elt_offset = TYPE_LENGTH (reg->rx->type) - elt_offset - elt_len;
+
+ *offset_p = elt_offset;
+ *len_p = elt_len;
+}
+
+
+/* Move the value of a partial register (r0h, intbl, etc.) from CACHE
+ to BUF. Treating the value of the register REG->rx as an array of
+ REG->type values, where higher indices refer to more significant
+ bits, read the value of the REG->n'th element. */
+static void
+m32c_part_read (struct m32c_reg *reg, struct regcache *cache, void *buf)
+{
+ int offset, len;
+ memset (buf, 0, TYPE_LENGTH (reg->type));
+ m32c_find_part (reg, &offset, &len);
+ regcache_cooked_read_part (cache, reg->rx->num, offset, len, buf);
+}
+
+
+/* Move the value of a banked register from BUF to CACHE.
+ Treating the value of the register REG->rx as an array of REG->type
+ values, where higher indices refer to more significant bits, write
+ the value of the REG->n'th element. */
+static void
+m32c_part_write (struct m32c_reg *reg, struct regcache *cache, void *buf)
+{
+ int offset, len;
+ m32c_find_part (reg, &offset, &len);
+ regcache_cooked_write_part (cache, reg->rx->num, offset, len, buf);
+}
+
+
+/* Move the value of REG from CACHE to BUF. REG's value is the
+ concatenation of the values of the registers REG->rx and REG->ry,
+ with REG->rx contributing the more significant bits. */
+static void
+m32c_cat_read (struct m32c_reg *reg, struct regcache *cache, void *buf)
+{
+ int high_bytes = TYPE_LENGTH (reg->rx->type);
+ int low_bytes = TYPE_LENGTH (reg->ry->type);
+ /* For address arithmetic. */
+ unsigned char *cbuf = buf;
+
+ gdb_assert (TYPE_LENGTH (reg->type) == high_bytes + low_bytes);
+
+ if (gdbarch_byte_order (reg->arch) == BFD_ENDIAN_BIG)
+ {
+ regcache_cooked_read (cache, reg->rx->num, cbuf);
+ regcache_cooked_read (cache, reg->ry->num, cbuf + high_bytes);
+ }
+ else
+ {
+ regcache_cooked_read (cache, reg->rx->num, cbuf + low_bytes);
+ regcache_cooked_read (cache, reg->ry->num, cbuf);
+ }
+}
+
+
+/* Move the value of REG from CACHE to BUF. REG's value is the
+ concatenation of the values of the registers REG->rx and REG->ry,
+ with REG->rx contributing the more significant bits. */
+static void
+m32c_cat_write (struct m32c_reg *reg, struct regcache *cache, void *buf)
+{
+ int high_bytes = TYPE_LENGTH (reg->rx->type);
+ int low_bytes = TYPE_LENGTH (reg->ry->type);
+ /* For address arithmetic. */
+ unsigned char *cbuf = buf;
+
+ gdb_assert (TYPE_LENGTH (reg->type) == high_bytes + low_bytes);
+
+ if (gdbarch_byte_order (reg->arch) == BFD_ENDIAN_BIG)
+ {
+ regcache_cooked_write (cache, reg->rx->num, cbuf);
+ regcache_cooked_write (cache, reg->ry->num, cbuf + high_bytes);
+ }
+ else
+ {
+ regcache_cooked_write (cache, reg->rx->num, cbuf + low_bytes);
+ regcache_cooked_write (cache, reg->ry->num, cbuf);
+ }
+}
+
+
+/* Copy the value of the raw register REG from CACHE to BUF. REG is
+ the concatenation (from most significant to least) of r3, r2, r1,
+ and r0. */
+static void
+m32c_r3r2r1r0_read (struct m32c_reg *reg, struct regcache *cache, void *buf)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (reg->arch);
+ int len = TYPE_LENGTH (tdep->r0->type);
+
+ /* For address arithmetic. */
+ unsigned char *cbuf = buf;
+
+ if (gdbarch_byte_order (reg->arch) == BFD_ENDIAN_BIG)
+ {
+ regcache_cooked_read (cache, tdep->r0->num, cbuf + len * 3);
+ regcache_cooked_read (cache, tdep->r1->num, cbuf + len * 2);
+ regcache_cooked_read (cache, tdep->r2->num, cbuf + len * 1);
+ regcache_cooked_read (cache, tdep->r3->num, cbuf);
+ }
+ else
+ {
+ regcache_cooked_read (cache, tdep->r0->num, cbuf);
+ regcache_cooked_read (cache, tdep->r1->num, cbuf + len * 1);
+ regcache_cooked_read (cache, tdep->r2->num, cbuf + len * 2);
+ regcache_cooked_read (cache, tdep->r3->num, cbuf + len * 3);
+ }
+}
+
+
+/* Copy the value of the raw register REG from BUF to CACHE. REG is
+ the concatenation (from most significant to least) of r3, r2, r1,
+ and r0. */
+static void
+m32c_r3r2r1r0_write (struct m32c_reg *reg, struct regcache *cache, void *buf)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (reg->arch);
+ int len = TYPE_LENGTH (tdep->r0->type);
+
+ /* For address arithmetic. */
+ unsigned char *cbuf = buf;
+
+ if (gdbarch_byte_order (reg->arch) == BFD_ENDIAN_BIG)
+ {
+ regcache_cooked_write (cache, tdep->r0->num, cbuf + len * 3);
+ regcache_cooked_write (cache, tdep->r1->num, cbuf + len * 2);
+ regcache_cooked_write (cache, tdep->r2->num, cbuf + len * 1);
+ regcache_cooked_write (cache, tdep->r3->num, cbuf);
+ }
+ else
+ {
+ regcache_cooked_write (cache, tdep->r0->num, cbuf);
+ regcache_cooked_write (cache, tdep->r1->num, cbuf + len * 1);
+ regcache_cooked_write (cache, tdep->r2->num, cbuf + len * 2);
+ regcache_cooked_write (cache, tdep->r3->num, cbuf + len * 3);
+ }
+}
+
+
+static void
+m32c_pseudo_register_read (struct gdbarch *arch,
+ struct regcache *cache,
+ int cookednum,
+ gdb_byte *buf)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
+ struct m32c_reg *reg;
+
+ gdb_assert (0 <= cookednum && cookednum < tdep->num_regs);
+ gdb_assert (arch == get_regcache_arch (cache));
+ gdb_assert (arch == tdep->regs[cookednum].arch);
+ reg = &tdep->regs[cookednum];
+
+ reg->read (reg, cache, buf);
+}
+
+
+static void
+m32c_pseudo_register_write (struct gdbarch *arch,
+ struct regcache *cache,
+ int cookednum,
+ const gdb_byte *buf)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
+ struct m32c_reg *reg;
+
+ gdb_assert (0 <= cookednum && cookednum < tdep->num_regs);
+ gdb_assert (arch == get_regcache_arch (cache));
+ gdb_assert (arch == tdep->regs[cookednum].arch);
+ reg = &tdep->regs[cookednum];
+
+ reg->write (reg, cache, (void *) buf);
+}
+
+
+/* Add a register with the given fields to the end of ARCH's table.
+ Return a pointer to the newly added register. */
+static struct m32c_reg *
+add_reg (struct gdbarch *arch,
+ const char *name,
+ struct type *type,
+ int sim_num,
+ m32c_move_reg_t *read,
+ m32c_move_reg_t *write,
+ struct m32c_reg *rx,
+ struct m32c_reg *ry,
+ int n)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
+ struct m32c_reg *r = &tdep->regs[tdep->num_regs];
+
+ gdb_assert (tdep->num_regs < M32C_MAX_NUM_REGS);
+
+ r->name = name;
+ r->type = type;
+ r->arch = arch;
+ r->num = tdep->num_regs;
+ r->sim_num = sim_num;
+ r->dwarf_num = -1;
+ r->general_p = 0;
+ r->dma_p = 0;
+ r->system_p = 0;
+ r->save_restore_p = 0;
+ r->read = read;
+ r->write = write;
+ r->rx = rx;
+ r->ry = ry;
+ r->n = n;
+
+ tdep->num_regs++;
+
+ return r;
+}
+
+
+/* Record NUM as REG's DWARF register number. */
+static void
+set_dwarf_regnum (struct m32c_reg *reg, int num)
+{
+ gdb_assert (num < M32C_MAX_NUM_REGS);
+
+ /* Update the reg->DWARF mapping. Only count the first number
+ assigned to this register. */
+ if (reg->dwarf_num == -1)
+ reg->dwarf_num = num;
+
+ /* Update the DWARF->reg mapping. */
+ gdbarch_tdep (reg->arch)->dwarf_regs[num] = reg;
+}
+
+
+/* Mark REG as a general-purpose register, and return it. */
+static struct m32c_reg *
+mark_general (struct m32c_reg *reg)
+{
+ reg->general_p = 1;
+ return reg;
+}
+
+
+/* Mark REG as a DMA register, and return it. */
+static struct m32c_reg *
+mark_dma (struct m32c_reg *reg)
+{
+ reg->dma_p = 1;
+ return reg;
+}
+
+
+/* Mark REG as a SYSTEM register, and return it. */
+static struct m32c_reg *
+mark_system (struct m32c_reg *reg)
+{
+ reg->system_p = 1;
+ return reg;
+}
+
+
+/* Mark REG as a save-restore register, and return it. */
+static struct m32c_reg *
+mark_save_restore (struct m32c_reg *reg)
+{
+ reg->save_restore_p = 1;
+ return reg;
+}
+
+
+#define FLAGBIT_B 0x0010
+#define FLAGBIT_U 0x0080
+
+/* Handy macros for declaring registers. These all evaluate to
+ pointers to the register declared. Macros that define two
+ registers evaluate to a pointer to the first. */
+
+/* A raw register named NAME, with type TYPE and sim number SIM_NUM. */
+#define R(name, type, sim_num) \
+ (add_reg (arch, (name), (type), (sim_num), \
+ m32c_raw_read, m32c_raw_write, NULL, NULL, 0))
+
+/* The simulator register number for a raw register named NAME. */
+#define SIM(name) (m32c_sim_reg_ ## name)
+
+/* A raw unsigned 16-bit data register named NAME.
+ NAME should be an identifier, not a string. */
+#define R16U(name) \
+ (R(#name, tdep->uint16, SIM (name)))
+
+/* A raw data address register named NAME.
+ NAME should be an identifier, not a string. */
+#define RA(name) \
+ (R(#name, tdep->data_addr_reg_type, SIM (name)))
+
+/* A raw code address register named NAME. NAME should
+ be an identifier, not a string. */
+#define RC(name) \
+ (R(#name, tdep->code_addr_reg_type, SIM (name)))
+
+/* A pair of raw registers named NAME0 and NAME1, with type TYPE.
+ NAME should be an identifier, not a string. */
+#define RP(name, type) \
+ (R(#name "0", (type), SIM (name ## 0)), \
+ R(#name "1", (type), SIM (name ## 1)) - 1)
+
+/* A raw banked general-purpose data register named NAME.
+ NAME should be an identifier, not a string. */
+#define RBD(name) \
+ (R(NULL, tdep->int16, SIM (name ## _bank0)), \
+ R(NULL, tdep->int16, SIM (name ## _bank1)) - 1)
+
+/* A raw banked data address register named NAME.
+ NAME should be an identifier, not a string. */
+#define RBA(name) \
+ (R(NULL, tdep->data_addr_reg_type, SIM (name ## _bank0)), \
+ R(NULL, tdep->data_addr_reg_type, SIM (name ## _bank1)) - 1)
+
+/* A cooked register named NAME referring to a raw banked register
+ from the bank selected by the current value of FLG. RAW_PAIR
+ should be a pointer to the first register in the banked pair.
+ NAME must be an identifier, not a string. */
+#define CB(name, raw_pair) \
+ (add_reg (arch, #name, (raw_pair)->type, 0, \
+ m32c_banked_read, m32c_banked_write, \
+ (raw_pair), (raw_pair + 1), FLAGBIT_B))
+
+/* A pair of registers named NAMEH and NAMEL, of type TYPE, that
+ access the top and bottom halves of the register pointed to by
+ NAME. NAME should be an identifier. */
+#define CHL(name, type) \
+ (add_reg (arch, #name "h", (type), 0, \
+ m32c_part_read, m32c_part_write, name, NULL, 1), \
+ add_reg (arch, #name "l", (type), 0, \
+ m32c_part_read, m32c_part_write, name, NULL, 0) - 1)
+
+/* A register constructed by concatenating the two registers HIGH and
+ LOW, whose name is HIGHLOW and whose type is TYPE. */
+#define CCAT(high, low, type) \
+ (add_reg (arch, #high #low, (type), 0, \
+ m32c_cat_read, m32c_cat_write, (high), (low), 0))
+
+/* Abbreviations for marking register group membership. */
+#define G(reg) (mark_general (reg))
+#define S(reg) (mark_system (reg))
+#define DMA(reg) (mark_dma (reg))
+
+
+/* Construct the register set for ARCH. */
+static void
+make_regs (struct gdbarch *arch)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
+ int mach = gdbarch_bfd_arch_info (arch)->mach;
+
+ struct m32c_reg *raw_r0_pair = RBD (r0);
+ struct m32c_reg *raw_r1_pair = RBD (r1);
+ struct m32c_reg *raw_r2_pair = RBD (r2);
+ struct m32c_reg *raw_r3_pair = RBD (r3);
+ struct m32c_reg *raw_a0_pair = RBA (a0);
+ struct m32c_reg *raw_a1_pair = RBA (a1);
+ struct m32c_reg *raw_fb_pair = RBA (fb);
+
+ /* sb is banked on the bfd_mach_m32c, but not on bfd_mach_m16c.
+ We always declare both raw registers, and deal with the distinction
+ in the pseudoregister. */
+ struct m32c_reg *raw_sb_pair = RBA (sb);
+
+ struct m32c_reg *usp = S (RA (usp));
+ struct m32c_reg *isp = S (RA (isp));
+ struct m32c_reg *intb = S (RC (intb));
+ struct m32c_reg *pc = G (RC (pc));
+ struct m32c_reg *flg = G (R16U (flg));
+
+ if (mach == bfd_mach_m32c)
+ {
+ struct m32c_reg *svf = S (R16U (svf));
+ struct m32c_reg *svp = S (RC (svp));
+ struct m32c_reg *vct = S (RC (vct));
+
+ struct m32c_reg *dmd01 = DMA (RP (dmd, tdep->uint8));
+ struct m32c_reg *dct01 = DMA (RP (dct, tdep->uint16));
+ struct m32c_reg *drc01 = DMA (RP (drc, tdep->uint16));
+ struct m32c_reg *dma01 = DMA (RP (dma, tdep->data_addr_reg_type));
+ struct m32c_reg *dsa01 = DMA (RP (dsa, tdep->data_addr_reg_type));
+ struct m32c_reg *dra01 = DMA (RP (dra, tdep->data_addr_reg_type));
+ }
+
+ int num_raw_regs = tdep->num_regs;
+
+ struct m32c_reg *r0 = G (CB (r0, raw_r0_pair));
+ struct m32c_reg *r1 = G (CB (r1, raw_r1_pair));
+ struct m32c_reg *r2 = G (CB (r2, raw_r2_pair));
+ struct m32c_reg *r3 = G (CB (r3, raw_r3_pair));
+ struct m32c_reg *a0 = G (CB (a0, raw_a0_pair));
+ struct m32c_reg *a1 = G (CB (a1, raw_a1_pair));
+ struct m32c_reg *fb = G (CB (fb, raw_fb_pair));
+
+ /* sb is banked on the bfd_mach_m32c, but not on bfd_mach_m16c.
+ Specify custom read/write functions that do the right thing. */
+ struct m32c_reg *sb
+ = G (add_reg (arch, "sb", raw_sb_pair->type, 0,
+ m32c_sb_read, m32c_sb_write,
+ raw_sb_pair, raw_sb_pair + 1, 0));
+
+ /* The current sp is either usp or isp, depending on the value of
+ the FLG register's U bit. */
+ struct m32c_reg *sp
+ = G (add_reg (arch, "sp", usp->type, 0,
+ m32c_banked_read, m32c_banked_write, isp, usp, FLAGBIT_U));
+
+ struct m32c_reg *r0hl = CHL (r0, tdep->int8);
+ struct m32c_reg *r1hl = CHL (r1, tdep->int8);
+ struct m32c_reg *r2hl = CHL (r2, tdep->int8);
+ struct m32c_reg *r3hl = CHL (r3, tdep->int8);
+ struct m32c_reg *intbhl = CHL (intb, tdep->int16);
+
+ struct m32c_reg *r2r0 = CCAT (r2, r0, tdep->int32);
+ struct m32c_reg *r3r1 = CCAT (r3, r1, tdep->int32);
+ struct m32c_reg *r3r1r2r0 = CCAT (r3r1, r2r0, tdep->int64);
+
+ struct m32c_reg *r3r2r1r0
+ = add_reg (arch, "r3r2r1r0", tdep->int64, 0,
+ m32c_r3r2r1r0_read, m32c_r3r2r1r0_write, NULL, NULL, 0);
+
+ struct m32c_reg *a1a0;
+ if (mach == bfd_mach_m16c)
+ a1a0 = CCAT (a1, a0, tdep->int32);
+ else
+ a1a0 = NULL;
+
+ int num_cooked_regs = tdep->num_regs - num_raw_regs;
+
+ tdep->pc = pc;
+ tdep->flg = flg;
+ tdep->r0 = r0;
+ tdep->r1 = r1;
+ tdep->r2 = r2;
+ tdep->r3 = r3;
+ tdep->r2r0 = r2r0;
+ tdep->r3r2r1r0 = r3r2r1r0;
+ tdep->r3r1r2r0 = r3r1r2r0;
+ tdep->a0 = a0;
+ tdep->a1 = a1;
+ tdep->sb = sb;
+ tdep->fb = fb;
+ tdep->sp = sp;
+
+ /* Set up the DWARF register table. */
+ memset (tdep->dwarf_regs, 0, sizeof (tdep->dwarf_regs));
+ set_dwarf_regnum (r0hl + 1, 0x01);
+ set_dwarf_regnum (r0hl + 0, 0x02);
+ set_dwarf_regnum (r1hl + 1, 0x03);
+ set_dwarf_regnum (r1hl + 0, 0x04);
+ set_dwarf_regnum (r0, 0x05);
+ set_dwarf_regnum (r1, 0x06);
+ set_dwarf_regnum (r2, 0x07);
+ set_dwarf_regnum (r3, 0x08);
+ set_dwarf_regnum (a0, 0x09);
+ set_dwarf_regnum (a1, 0x0a);
+ set_dwarf_regnum (fb, 0x0b);
+ set_dwarf_regnum (sp, 0x0c);
+ set_dwarf_regnum (pc, 0x0d); /* GCC's invention */
+ set_dwarf_regnum (sb, 0x13);
+ set_dwarf_regnum (r2r0, 0x15);
+ set_dwarf_regnum (r3r1, 0x16);
+ if (a1a0)
+ set_dwarf_regnum (a1a0, 0x17);
+
+ /* Enumerate the save/restore register group.
+
+ The regcache_save and regcache_restore functions apply their read
+ function to each register in this group.
+
+ Since frame_pop supplies frame_unwind_register as its read
+ function, the registers meaningful to the Dwarf unwinder need to
+ be in this group.
+
+ On the other hand, when we make inferior calls, save_inferior_status
+ and restore_inferior_status use them to preserve the current register
+ values across the inferior call. For this, you'd kind of like to
+ preserve all the raw registers, to protect the interrupted code from
+ any sort of bank switching the callee might have done. But we handle
+ those cases so badly anyway --- for example, it matters whether we
+ restore FLG before or after we restore the general-purpose registers,
+ but there's no way to express that --- that it isn't worth worrying
+ about.
+
+ We omit control registers like inthl: if you call a function that
+ changes those, it's probably because you wanted that change to be
+ visible to the interrupted code. */
+ mark_save_restore (r0);
+ mark_save_restore (r1);
+ mark_save_restore (r2);
+ mark_save_restore (r3);
+ mark_save_restore (a0);
+ mark_save_restore (a1);
+ mark_save_restore (sb);
+ mark_save_restore (fb);
+ mark_save_restore (sp);
+ mark_save_restore (pc);
+ mark_save_restore (flg);
+
+ set_gdbarch_num_regs (arch, num_raw_regs);
+ set_gdbarch_num_pseudo_regs (arch, num_cooked_regs);
+ set_gdbarch_pc_regnum (arch, pc->num);
+ set_gdbarch_sp_regnum (arch, sp->num);
+ set_gdbarch_register_name (arch, m32c_register_name);
+ set_gdbarch_register_type (arch, m32c_register_type);
+ set_gdbarch_pseudo_register_read (arch, m32c_pseudo_register_read);
+ set_gdbarch_pseudo_register_write (arch, m32c_pseudo_register_write);
+ set_gdbarch_register_sim_regno (arch, m32c_register_sim_regno);
+ set_gdbarch_stab_reg_to_regnum (arch, m32c_debug_info_reg_to_regnum);
+ set_gdbarch_dwarf_reg_to_regnum (arch, m32c_debug_info_reg_to_regnum);
+ set_gdbarch_dwarf2_reg_to_regnum (arch, m32c_debug_info_reg_to_regnum);
+ set_gdbarch_register_reggroup_p (arch, m32c_register_reggroup_p);
+
+ reggroup_add (arch, general_reggroup);
+ reggroup_add (arch, all_reggroup);
+ reggroup_add (arch, save_reggroup);
+ reggroup_add (arch, restore_reggroup);
+ reggroup_add (arch, system_reggroup);
+ reggroup_add (arch, m32c_dma_reggroup);
+}
+
+
+
+/* Breakpoints. */
+
+static const unsigned char *
+m32c_breakpoint_from_pc (CORE_ADDR *pc, int *len)
+{
+ static unsigned char break_insn[] = { 0x00 }; /* brk */
+
+ *len = sizeof (break_insn);
+ return break_insn;
+}
+
+
+
+/* Prologue analysis. */
+
+struct m32c_prologue
+{
+ /* For consistency with the DWARF 2 .debug_frame info generated by
+ GCC, a frame's CFA is the address immediately after the saved
+ return address. */
+
+ /* The architecture for which we generated this prologue info. */
+ struct gdbarch *arch;
+
+ enum {
+ /* This function uses a frame pointer. */
+ prologue_with_frame_ptr,
+
+ /* This function has no frame pointer. */
+ prologue_sans_frame_ptr,
+
+ /* This function sets up the stack, so its frame is the first
+ frame on the stack. */
+ prologue_first_frame
+
+ } kind;
+
+ /* If KIND is prologue_with_frame_ptr, this is the offset from the
+ CFA to where the frame pointer points. This is always zero or
+ negative. */
+ LONGEST frame_ptr_offset;
+
+ /* If KIND is prologue_sans_frame_ptr, the offset from the CFA to
+ the stack pointer --- always zero or negative.
+
+ Calling this a "size" is a bit misleading, but given that the
+ stack grows downwards, using offsets for everything keeps one
+ from going completely sign-crazy: you never change anything's
+ sign for an ADD instruction; always change the second operand's
+ sign for a SUB instruction; and everything takes care of
+ itself.
+
+ Functions that use alloca don't have a constant frame size. But
+ they always have frame pointers, so we must use that to find the
+ CFA (and perhaps to unwind the stack pointer). */
+ LONGEST frame_size;
+
+ /* The address of the first instruction at which the frame has been
+ set up and the arguments are where the debug info says they are
+ --- as best as we can tell. */
+ CORE_ADDR prologue_end;
+
+ /* reg_offset[R] is the offset from the CFA at which register R is
+ saved, or 1 if register R has not been saved. (Real values are
+ always zero or negative.) */
+ LONGEST reg_offset[M32C_MAX_NUM_REGS];
+};
+
+
+/* The longest I've seen, anyway. */
+#define M32C_MAX_INSN_LEN (9)
+
+/* Processor state, for the prologue analyzer. */
+struct m32c_pv_state
+{
+ struct gdbarch *arch;
+ pv_t r0, r1, r2, r3;
+ pv_t a0, a1;
+ pv_t sb, fb, sp;
+ pv_t pc;
+ struct pv_area *stack;
+
+ /* Bytes from the current PC, the address they were read from,
+ and the address of the next unconsumed byte. */
+ gdb_byte insn[M32C_MAX_INSN_LEN];
+ CORE_ADDR scan_pc, next_addr;
+};
+
+
+/* Push VALUE on STATE's stack, occupying SIZE bytes. Return zero if
+ all went well, or non-zero if simulating the action would trash our
+ state. */
+static int
+m32c_pv_push (struct m32c_pv_state *state, pv_t value, int size)
+{
+ if (pv_area_store_would_trash (state->stack, state->sp))
+ return 1;
+
+ state->sp = pv_add_constant (state->sp, -size);
+ pv_area_store (state->stack, state->sp, size, value);
+
+ return 0;
+}
+
+
+/* A source or destination location for an m16c or m32c
+ instruction. */
+struct srcdest
+{
+ /* If srcdest_reg, the location is a register pointed to by REG.
+ If srcdest_partial_reg, the location is part of a register pointed
+ to by REG. We don't try to handle this too well.
+ If srcdest_mem, the location is memory whose address is ADDR. */
+ enum { srcdest_reg, srcdest_partial_reg, srcdest_mem } kind;
+ pv_t *reg, addr;
+};
+
+
+/* Return the SIZE-byte value at LOC in STATE. */
+static pv_t
+m32c_srcdest_fetch (struct m32c_pv_state *state, struct srcdest loc, int size)
+{
+ if (loc.kind == srcdest_mem)
+ return pv_area_fetch (state->stack, loc.addr, size);
+ else if (loc.kind == srcdest_partial_reg)
+ return pv_unknown ();
+ else
+ return *loc.reg;
+}
+
+
+/* Write VALUE, a SIZE-byte value, to LOC in STATE. Return zero if
+ all went well, or non-zero if simulating the store would trash our
+ state. */
+static int
+m32c_srcdest_store (struct m32c_pv_state *state, struct srcdest loc,
+ pv_t value, int size)
+{
+ if (loc.kind == srcdest_mem)
+ {
+ if (pv_area_store_would_trash (state->stack, loc.addr))
+ return 1;
+ pv_area_store (state->stack, loc.addr, size, value);
+ }
+ else if (loc.kind == srcdest_partial_reg)
+ *loc.reg = pv_unknown ();
+ else
+ *loc.reg = value;
+
+ return 0;
+}
+
+
+static int
+m32c_sign_ext (int v, int bits)
+{
+ int mask = 1 << (bits - 1);
+ return (v ^ mask) - mask;
+}
+
+static unsigned int
+m32c_next_byte (struct m32c_pv_state *st)
+{
+ gdb_assert (st->next_addr - st->scan_pc < sizeof (st->insn));
+ return st->insn[st->next_addr++ - st->scan_pc];
+}
+
+static int
+m32c_udisp8 (struct m32c_pv_state *st)
+{
+ return m32c_next_byte (st);
+}
+
+
+static int
+m32c_sdisp8 (struct m32c_pv_state *st)
+{
+ return m32c_sign_ext (m32c_next_byte (st), 8);
+}
+
+
+static int
+m32c_udisp16 (struct m32c_pv_state *st)
+{
+ int low = m32c_next_byte (st);
+ int high = m32c_next_byte (st);
+
+ return low + (high << 8);
+}
+
+
+static int
+m32c_sdisp16 (struct m32c_pv_state *st)
+{
+ int low = m32c_next_byte (st);
+ int high = m32c_next_byte (st);
+
+ return m32c_sign_ext (low + (high << 8), 16);
+}
+
+
+static int
+m32c_udisp24 (struct m32c_pv_state *st)
+{
+ int low = m32c_next_byte (st);
+ int mid = m32c_next_byte (st);
+ int high = m32c_next_byte (st);
+
+ return low + (mid << 8) + (high << 16);
+}
+
+
+/* Extract the 'source' field from an m32c MOV.size:G-format instruction. */
+static int
+m32c_get_src23 (unsigned char *i)
+{
+ return (((i[0] & 0x70) >> 2)
+ | ((i[1] & 0x30) >> 4));
+}
+
+
+/* Extract the 'dest' field from an m32c MOV.size:G-format instruction. */
+static int
+m32c_get_dest23 (unsigned char *i)
+{
+ return (((i[0] & 0x0e) << 1)
+ | ((i[1] & 0xc0) >> 6));
+}
+
+
+static struct srcdest
+m32c_decode_srcdest4 (struct m32c_pv_state *st,
+ int code, int size)
+{
+ struct srcdest sd;
+
+ if (code < 6)
+ sd.kind = (size == 2 ? srcdest_reg : srcdest_partial_reg);
+ else
+ sd.kind = srcdest_mem;
+
+ switch (code)
+ {
+ case 0x0: sd.reg = (size == 1 ? &st->r0 : &st->r0); break;
+ case 0x1: sd.reg = (size == 1 ? &st->r0 : &st->r1); break;
+ case 0x2: sd.reg = (size == 1 ? &st->r1 : &st->r2); break;
+ case 0x3: sd.reg = (size == 1 ? &st->r1 : &st->r3); break;
+
+ case 0x4: sd.reg = &st->a0; break;
+ case 0x5: sd.reg = &st->a1; break;
+
+ case 0x6: sd.addr = st->a0; break;
+ case 0x7: sd.addr = st->a1; break;
+
+ case 0x8: sd.addr = pv_add_constant (st->a0, m32c_udisp8 (st)); break;
+ case 0x9: sd.addr = pv_add_constant (st->a1, m32c_udisp8 (st)); break;
+ case 0xa: sd.addr = pv_add_constant (st->sb, m32c_udisp8 (st)); break;
+ case 0xb: sd.addr = pv_add_constant (st->fb, m32c_sdisp8 (st)); break;
+
+ case 0xc: sd.addr = pv_add_constant (st->a0, m32c_udisp16 (st)); break;
+ case 0xd: sd.addr = pv_add_constant (st->a1, m32c_udisp16 (st)); break;
+ case 0xe: sd.addr = pv_add_constant (st->sb, m32c_udisp16 (st)); break;
+ case 0xf: sd.addr = pv_constant (m32c_udisp16 (st)); break;
+
+ default:
+ gdb_assert (0);
+ }
+
+ return sd;
+}
+
+
+static struct srcdest
+m32c_decode_sd23 (struct m32c_pv_state *st, int code, int size, int ind)
+{
+ struct srcdest sd;
+
+ switch (code)
+ {
+ case 0x12:
+ case 0x13:
+ case 0x10:
+ case 0x11:
+ sd.kind = (size == 1) ? srcdest_partial_reg : srcdest_reg;
+ break;
+
+ case 0x02:
+ case 0x03:
+ sd.kind = (size == 4) ? srcdest_reg : srcdest_partial_reg;
+ break;
+
+ default:
+ sd.kind = srcdest_mem;
+ break;
+
+ }
+
+ switch (code)
+ {
+ case 0x12: sd.reg = &st->r0; break;
+ case 0x13: sd.reg = &st->r1; break;
+ case 0x10: sd.reg = ((size == 1) ? &st->r0 : &st->r2); break;
+ case 0x11: sd.reg = ((size == 1) ? &st->r1 : &st->r3); break;
+ case 0x02: sd.reg = &st->a0; break;
+ case 0x03: sd.reg = &st->a1; break;
+
+ case 0x00: sd.addr = st->a0; break;
+ case 0x01: sd.addr = st->a1; break;
+ case 0x04: sd.addr = pv_add_constant (st->a0, m32c_udisp8 (st)); break;
+ case 0x05: sd.addr = pv_add_constant (st->a1, m32c_udisp8 (st)); break;
+ case 0x06: sd.addr = pv_add_constant (st->sb, m32c_udisp8 (st)); break;
+ case 0x07: sd.addr = pv_add_constant (st->fb, m32c_sdisp8 (st)); break;
+ case 0x08: sd.addr = pv_add_constant (st->a0, m32c_udisp16 (st)); break;
+ case 0x09: sd.addr = pv_add_constant (st->a1, m32c_udisp16 (st)); break;
+ case 0x0a: sd.addr = pv_add_constant (st->sb, m32c_udisp16 (st)); break;
+ case 0x0b: sd.addr = pv_add_constant (st->fb, m32c_sdisp16 (st)); break;
+ case 0x0c: sd.addr = pv_add_constant (st->a0, m32c_udisp24 (st)); break;
+ case 0x0d: sd.addr = pv_add_constant (st->a1, m32c_udisp24 (st)); break;
+ case 0x0f: sd.addr = pv_constant (m32c_udisp16 (st)); break;
+ case 0x0e: sd.addr = pv_constant (m32c_udisp24 (st)); break;
+ default:
+ gdb_assert (0);
+ }
+
+ if (ind)
+ {
+ sd.addr = m32c_srcdest_fetch (st, sd, 4);
+ sd.kind = srcdest_mem;
+ }
+
+ return sd;
+}
+
+
+/* The r16c and r32c machines have instructions with similar
+ semantics, but completely different machine language encodings. So
+ we break out the semantics into their own functions, and leave
+ machine-specific decoding in m32c_analyze_prologue.
+
+ The following functions all expect their arguments already decoded,
+ and they all return zero if analysis should continue past this
+ instruction, or non-zero if analysis should stop. */
+
+
+/* Simulate an 'enter SIZE' instruction in STATE. */
+static int
+m32c_pv_enter (struct m32c_pv_state *state, int size)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (state->arch);
+
+ /* If simulating this store would require us to forget
+ everything we know about the stack frame in the name of
+ accuracy, it would be better to just quit now. */
+ if (pv_area_store_would_trash (state->stack, state->sp))
+ return 1;
+
+ if (m32c_pv_push (state, state->fb, tdep->push_addr_bytes))
+ return 1;
+ state->fb = state->sp;
+ state->sp = pv_add_constant (state->sp, -size);
+
+ return 0;
+}
+
+
+static int
+m32c_pv_pushm_one (struct m32c_pv_state *state, pv_t reg,
+ int bit, int src, int size)
+{
+ if (bit & src)
+ {
+ if (m32c_pv_push (state, reg, size))
+ return 1;
+ }
+
+ return 0;
+}
+
+
+/* Simulate a 'pushm SRC' instruction in STATE. */
+static int
+m32c_pv_pushm (struct m32c_pv_state *state, int src)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (state->arch);
+
+ /* The bits in SRC indicating which registers to save are:
+ r0 r1 r2 r3 a0 a1 sb fb */
+ return
+ ( m32c_pv_pushm_one (state, state->fb, 0x01, src, tdep->push_addr_bytes)
+ || m32c_pv_pushm_one (state, state->sb, 0x02, src, tdep->push_addr_bytes)
+ || m32c_pv_pushm_one (state, state->a1, 0x04, src, tdep->push_addr_bytes)
+ || m32c_pv_pushm_one (state, state->a0, 0x08, src, tdep->push_addr_bytes)
+ || m32c_pv_pushm_one (state, state->r3, 0x10, src, 2)
+ || m32c_pv_pushm_one (state, state->r2, 0x20, src, 2)
+ || m32c_pv_pushm_one (state, state->r1, 0x40, src, 2)
+ || m32c_pv_pushm_one (state, state->r0, 0x80, src, 2));
+}
+
+/* Return non-zero if VALUE is the first incoming argument register. */
+
+static int
+m32c_is_1st_arg_reg (struct m32c_pv_state *state, pv_t value)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (state->arch);
+ return (value.kind == pvk_register
+ && (gdbarch_bfd_arch_info (state->arch)->mach == bfd_mach_m16c
+ ? (value.reg == tdep->r1->num)
+ : (value.reg == tdep->r0->num))
+ && value.k == 0);
+}
+
+/* Return non-zero if VALUE is an incoming argument register. */
+
+static int
+m32c_is_arg_reg (struct m32c_pv_state *state, pv_t value)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (state->arch);
+ return (value.kind == pvk_register
+ && (gdbarch_bfd_arch_info (state->arch)->mach == bfd_mach_m16c
+ ? (value.reg == tdep->r1->num || value.reg == tdep->r2->num)
+ : (value.reg == tdep->r0->num))
+ && value.k == 0);
+}
+
+/* Return non-zero if a store of VALUE to LOC is probably spilling an
+ argument register to its stack slot in STATE. Such instructions
+ should be included in the prologue, if possible.
+
+ The store is a spill if:
+ - the value being stored is the original value of an argument register;
+ - the value has not already been stored somewhere in STACK; and
+ - LOC is a stack slot (e.g., a memory location whose address is
+ relative to the original value of the SP). */
+
+static int
+m32c_is_arg_spill (struct m32c_pv_state *st,
+ struct srcdest loc,
+ pv_t value)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (st->arch);
+
+ return (m32c_is_arg_reg (st, value)
+ && loc.kind == srcdest_mem
+ && pv_is_register (loc.addr, tdep->sp->num)
+ && ! pv_area_find_reg (st->stack, st->arch, value.reg, 0));
+}
+
+/* Return non-zero if a store of VALUE to LOC is probably
+ copying the struct return address into an address register
+ for immediate use. This is basically a "spill" into the
+ address register, instead of onto the stack.
+
+ The prerequisites are:
+ - value being stored is original value of the FIRST arg register;
+ - value has not already been stored on stack; and
+ - LOC is an address register (a0 or a1). */
+
+static int
+m32c_is_struct_return (struct m32c_pv_state *st,
+ struct srcdest loc,
+ pv_t value)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (st->arch);
+
+ return (m32c_is_1st_arg_reg (st, value)
+ && !pv_area_find_reg (st->stack, st->arch, value.reg, 0)
+ && loc.kind == srcdest_reg
+ && (pv_is_register (*loc.reg, tdep->a0->num)
+ || pv_is_register (*loc.reg, tdep->a1->num)));
+}
+
+/* Return non-zero if a 'pushm' saving the registers indicated by SRC
+ was a register save:
+ - all the named registers should have their original values, and
+ - the stack pointer should be at a constant offset from the
+ original stack pointer. */
+static int
+m32c_pushm_is_reg_save (struct m32c_pv_state *st, int src)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (st->arch);
+ /* The bits in SRC indicating which registers to save are:
+ r0 r1 r2 r3 a0 a1 sb fb */
+ return
+ (pv_is_register (st->sp, tdep->sp->num)
+ && (! (src & 0x01) || pv_is_register_k (st->fb, tdep->fb->num, 0))
+ && (! (src & 0x02) || pv_is_register_k (st->sb, tdep->sb->num, 0))
+ && (! (src & 0x04) || pv_is_register_k (st->a1, tdep->a1->num, 0))
+ && (! (src & 0x08) || pv_is_register_k (st->a0, tdep->a0->num, 0))
+ && (! (src & 0x10) || pv_is_register_k (st->r3, tdep->r3->num, 0))
+ && (! (src & 0x20) || pv_is_register_k (st->r2, tdep->r2->num, 0))
+ && (! (src & 0x40) || pv_is_register_k (st->r1, tdep->r1->num, 0))
+ && (! (src & 0x80) || pv_is_register_k (st->r0, tdep->r0->num, 0)));
+}
+
+
+/* Function for finding saved registers in a 'struct pv_area'; we pass
+ this to pv_area_scan.
+
+ If VALUE is a saved register, ADDR says it was saved at a constant
+ offset from the frame base, and SIZE indicates that the whole
+ register was saved, record its offset in RESULT_UNTYPED. */
+static void
+check_for_saved (void *prologue_untyped, pv_t addr, CORE_ADDR size, pv_t value)
+{
+ struct m32c_prologue *prologue = (struct m32c_prologue *) prologue_untyped;
+ struct gdbarch *arch = prologue->arch;
+ struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
+
+ /* Is this the unchanged value of some register being saved on the
+ stack? */
+ if (value.kind == pvk_register
+ && value.k == 0
+ && pv_is_register (addr, tdep->sp->num))
+ {
+ /* Some registers require special handling: they're saved as a
+ larger value than the register itself. */
+ CORE_ADDR saved_size = register_size (arch, value.reg);
+
+ if (value.reg == tdep->pc->num)
+ saved_size = tdep->ret_addr_bytes;
+ else if (gdbarch_register_type (arch, value.reg)
+ == tdep->data_addr_reg_type)
+ saved_size = tdep->push_addr_bytes;
+
+ if (size == saved_size)
+ {
+ /* Find which end of the saved value corresponds to our
+ register. */
+ if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
+ prologue->reg_offset[value.reg]
+ = (addr.k + saved_size - register_size (arch, value.reg));
+ else
+ prologue->reg_offset[value.reg] = addr.k;
+ }
+ }
+}
+
+
+/* Analyze the function prologue for ARCH at START, going no further
+ than LIMIT, and place a description of what we found in
+ PROLOGUE. */
+void
+m32c_analyze_prologue (struct gdbarch *arch,
+ CORE_ADDR start, CORE_ADDR limit,
+ struct m32c_prologue *prologue)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
+ unsigned long mach = gdbarch_bfd_arch_info (arch)->mach;
+ CORE_ADDR after_last_frame_related_insn;
+ struct cleanup *back_to;
+ struct m32c_pv_state st;
+
+ st.arch = arch;
+ st.r0 = pv_register (tdep->r0->num, 0);
+ st.r1 = pv_register (tdep->r1->num, 0);
+ st.r2 = pv_register (tdep->r2->num, 0);
+ st.r3 = pv_register (tdep->r3->num, 0);
+ st.a0 = pv_register (tdep->a0->num, 0);
+ st.a1 = pv_register (tdep->a1->num, 0);
+ st.sb = pv_register (tdep->sb->num, 0);
+ st.fb = pv_register (tdep->fb->num, 0);
+ st.sp = pv_register (tdep->sp->num, 0);
+ st.pc = pv_register (tdep->pc->num, 0);
+ st.stack = make_pv_area (tdep->sp->num);
+ back_to = make_cleanup_free_pv_area (st.stack);
+
+ /* Record that the call instruction has saved the return address on
+ the stack. */
+ m32c_pv_push (&st, st.pc, tdep->ret_addr_bytes);
+
+ memset (prologue, 0, sizeof (*prologue));
+ prologue->arch = arch;
+ {
+ int i;
+ for (i = 0; i < M32C_MAX_NUM_REGS; i++)
+ prologue->reg_offset[i] = 1;
+ }
+
+ st.scan_pc = after_last_frame_related_insn = start;
+
+ while (st.scan_pc < limit)
+ {
+ pv_t pre_insn_fb = st.fb;
+ pv_t pre_insn_sp = st.sp;
+
+ /* In theory we could get in trouble by trying to read ahead
+ here, when we only know we're expecting one byte. In
+ practice I doubt anyone will care, and it makes the rest of
+ the code easier. */
+ if (target_read_memory (st.scan_pc, st.insn, sizeof (st.insn)))
+ /* If we can't fetch the instruction from memory, stop here
+ and hope for the best. */
+ break;
+ st.next_addr = st.scan_pc;
+
+ /* The assembly instructions are written as they appear in the
+ section of the processor manuals that describe the
+ instruction encodings.
+
+ When a single assembly language instruction has several
+ different machine-language encodings, the manual
+ distinguishes them by a number in parens, before the
+ mnemonic. Those numbers are included, as well.
+
+ The srcdest decoding instructions have the same names as the
+ analogous functions in the simulator. */
+ if (mach == bfd_mach_m16c)
+ {
+ /* (1) ENTER #imm8 */
+ if (st.insn[0] == 0x7c && st.insn[1] == 0xf2)
+ {
+ if (m32c_pv_enter (&st, st.insn[2]))
+ break;
+ st.next_addr += 3;
+ }
+ /* (1) PUSHM src */
+ else if (st.insn[0] == 0xec)
+ {
+ int src = st.insn[1];
+ if (m32c_pv_pushm (&st, src))
+ break;
+ st.next_addr += 2;
+
+ if (m32c_pushm_is_reg_save (&st, src))
+ after_last_frame_related_insn = st.next_addr;
+ }
+
+ /* (6) MOV.size:G src, dest */
+ else if ((st.insn[0] & 0xfe) == 0x72)
+ {
+ int size = (st.insn[0] & 0x01) ? 2 : 1;
+
+ st.next_addr += 2;
+
+ struct srcdest src
+ = m32c_decode_srcdest4 (&st, (st.insn[1] >> 4) & 0xf, size);
+ struct srcdest dest
+ = m32c_decode_srcdest4 (&st, st.insn[1] & 0xf, size);
+ pv_t src_value = m32c_srcdest_fetch (&st, src, size);
+
+ if (m32c_is_arg_spill (&st, dest, src_value))
+ after_last_frame_related_insn = st.next_addr;
+ else if (m32c_is_struct_return (&st, dest, src_value))
+ after_last_frame_related_insn = st.next_addr;
+
+ if (m32c_srcdest_store (&st, dest, src_value, size))
+ break;
+ }
+
+ /* (1) LDC #IMM16, sp */
+ else if (st.insn[0] == 0xeb
+ && st.insn[1] == 0x50)
+ {
+ st.next_addr += 2;
+ st.sp = pv_constant (m32c_udisp16 (&st));
+ }
+
+ else
+ /* We've hit some instruction we don't know how to simulate.
+ Strictly speaking, we should set every value we're
+ tracking to "unknown". But we'll be optimistic, assume
+ that we have enough information already, and stop
+ analysis here. */
+ break;
+ }
+ else
+ {
+ int src_indirect = 0;
+ int dest_indirect = 0;
+ int i = 0;
+
+ gdb_assert (mach == bfd_mach_m32c);
+
+ /* Check for prefix bytes indicating indirect addressing. */
+ if (st.insn[0] == 0x41)
+ {
+ src_indirect = 1;
+ i++;
+ }
+ else if (st.insn[0] == 0x09)
+ {
+ dest_indirect = 1;
+ i++;
+ }
+ else if (st.insn[0] == 0x49)
+ {
+ src_indirect = dest_indirect = 1;
+ i++;
+ }
+
+ /* (1) ENTER #imm8 */
+ if (st.insn[i] == 0xec)
+ {
+ if (m32c_pv_enter (&st, st.insn[i + 1]))
+ break;
+ st.next_addr += 2;
+ }
+
+ /* (1) PUSHM src */
+ else if (st.insn[i] == 0x8f)
+ {
+ int src = st.insn[i + 1];
+ if (m32c_pv_pushm (&st, src))
+ break;
+ st.next_addr += 2;
+
+ if (m32c_pushm_is_reg_save (&st, src))
+ after_last_frame_related_insn = st.next_addr;
+ }
+
+ /* (7) MOV.size:G src, dest */
+ else if ((st.insn[i] & 0x80) == 0x80
+ && (st.insn[i + 1] & 0x0f) == 0x0b
+ && m32c_get_src23 (&st.insn[i]) < 20
+ && m32c_get_dest23 (&st.insn[i]) < 20)
+ {
+ int bw = st.insn[i] & 0x01;
+ int size = bw ? 2 : 1;
+
+ st.next_addr += 2;
+
+ struct srcdest src
+ = m32c_decode_sd23 (&st, m32c_get_src23 (&st.insn[i]),
+ size, src_indirect);
+ struct srcdest dest
+ = m32c_decode_sd23 (&st, m32c_get_dest23 (&st.insn[i]),
+ size, dest_indirect);
+ pv_t src_value = m32c_srcdest_fetch (&st, src, size);
+
+ if (m32c_is_arg_spill (&st, dest, src_value))
+ after_last_frame_related_insn = st.next_addr;
+
+ if (m32c_srcdest_store (&st, dest, src_value, size))
+ break;
+ }
+ /* (2) LDC #IMM24, sp */
+ else if (st.insn[i] == 0xd5
+ && st.insn[i + 1] == 0x29)
+ {
+ st.next_addr += 2;
+ st.sp = pv_constant (m32c_udisp24 (&st));
+ }
+ else
+ /* We've hit some instruction we don't know how to simulate.
+ Strictly speaking, we should set every value we're
+ tracking to "unknown". But we'll be optimistic, assume
+ that we have enough information already, and stop
+ analysis here. */
+ break;
+ }
+
+ /* If this instruction changed the FB or decreased the SP (i.e.,
+ allocated more stack space), then this may be a good place to
+ declare the prologue finished. However, there are some
+ exceptions:
+
+ - If the instruction just changed the FB back to its original
+ value, then that's probably a restore instruction. The
+ prologue should definitely end before that.
+
+ - If the instruction increased the value of the SP (that is,
+ shrunk the frame), then it's probably part of a frame
+ teardown sequence, and the prologue should end before
+ that. */
+
+ if (! pv_is_identical (st.fb, pre_insn_fb))
+ {
+ if (! pv_is_register_k (st.fb, tdep->fb->num, 0))
+ after_last_frame_related_insn = st.next_addr;
+ }
+ else if (! pv_is_identical (st.sp, pre_insn_sp))
+ {
+ /* The comparison of the constants looks odd, there, because
+ .k is unsigned. All it really means is that the SP is
+ lower than it was before the instruction. */
+ if ( pv_is_register (pre_insn_sp, tdep->sp->num)
+ && pv_is_register (st.sp, tdep->sp->num)
+ && ((pre_insn_sp.k - st.sp.k) < (st.sp.k - pre_insn_sp.k)))
+ after_last_frame_related_insn = st.next_addr;
+ }
+
+ st.scan_pc = st.next_addr;
+ }
+
+ /* Did we load a constant value into the stack pointer? */
+ if (pv_is_constant (st.sp))
+ prologue->kind = prologue_first_frame;
+
+ /* Alternatively, did we initialize the frame pointer? Remember
+ that the CFA is the address after the return address. */
+ if (pv_is_register (st.fb, tdep->sp->num))
+ {
+ prologue->kind = prologue_with_frame_ptr;
+ prologue->frame_ptr_offset = st.fb.k;
+ }
+
+ /* Is the frame size a known constant? Remember that frame_size is
+ actually the offset from the CFA to the SP (i.e., a negative
+ value). */
+ else if (pv_is_register (st.sp, tdep->sp->num))
+ {
+ prologue->kind = prologue_sans_frame_ptr;
+ prologue->frame_size = st.sp.k;
+ }
+
+ /* We haven't been able to make sense of this function's frame. Treat
+ it as the first frame. */
+ else
+ prologue->kind = prologue_first_frame;
+
+ /* Record where all the registers were saved. */
+ pv_area_scan (st.stack, check_for_saved, (void *) prologue);
+
+ prologue->prologue_end = after_last_frame_related_insn;
+
+ do_cleanups (back_to);
+}
+
+
+static CORE_ADDR
+m32c_skip_prologue (CORE_ADDR ip)
+{
+ char *name;
+ CORE_ADDR func_addr, func_end, sal_end;
+ struct m32c_prologue p;
+
+ /* Try to find the extent of the function that contains IP. */
+ if (! find_pc_partial_function (ip, &name, &func_addr, &func_end))
+ return ip;
+
+ /* Find end by prologue analysis. */
+ m32c_analyze_prologue (current_gdbarch, ip, func_end, &p);
+ /* Find end by line info. */
+ sal_end = skip_prologue_using_sal (ip);
+ /* Return whichever is lower. */
+ if (sal_end != 0 && sal_end != ip && sal_end < p.prologue_end)
+ return sal_end;
+ else
+ return p.prologue_end;
+}
+
+
+
+/* Stack unwinding. */
+
+static struct m32c_prologue *
+m32c_analyze_frame_prologue (struct frame_info *next_frame,
+ void **this_prologue_cache)
+{
+ if (! *this_prologue_cache)
+ {
+ CORE_ADDR func_start = frame_func_unwind (next_frame);
+ CORE_ADDR stop_addr = frame_pc_unwind (next_frame);
+
+ /* If we couldn't find any function containing the PC, then
+ just initialize the prologue cache, but don't do anything. */
+ if (! func_start)
+ stop_addr = func_start;
+
+ *this_prologue_cache = FRAME_OBSTACK_ZALLOC (struct m32c_prologue);
+ m32c_analyze_prologue (get_frame_arch (next_frame),
+ func_start, stop_addr, *this_prologue_cache);
+ }
+
+ return *this_prologue_cache;
+}
+
+
+static CORE_ADDR
+m32c_frame_base (struct frame_info *next_frame,
+ void **this_prologue_cache)
+{
+ struct m32c_prologue *p
+ = m32c_analyze_frame_prologue (next_frame, this_prologue_cache);
+ struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (next_frame));
+
+ /* In functions that use alloca, the distance between the stack
+ pointer and the frame base varies dynamically, so we can't use
+ the SP plus static information like prologue analysis to find the
+ frame base. However, such functions must have a frame pointer,
+ to be able to restore the SP on exit. So whenever we do have a
+ frame pointer, use that to find the base. */
+ switch (p->kind)
+ {
+ case prologue_with_frame_ptr:
+ {
+ CORE_ADDR fb
+ = frame_unwind_register_unsigned (next_frame, tdep->fb->num);
+ return fb - p->frame_ptr_offset;
+ }
+
+ case prologue_sans_frame_ptr:
+ {
+ CORE_ADDR sp
+ = frame_unwind_register_unsigned (next_frame, tdep->sp->num);
+ return sp - p->frame_size;
+ }
+
+ case prologue_first_frame:
+ return 0;
+
+ default:
+ gdb_assert (0);
+ }
+}
+
+
+static void
+m32c_this_id (struct frame_info *next_frame,
+ void **this_prologue_cache,
+ struct frame_id *this_id)
+{
+ CORE_ADDR base = m32c_frame_base (next_frame, this_prologue_cache);
+
+ if (base)
+ *this_id = frame_id_build (base, frame_func_unwind (next_frame));
+ /* Otherwise, leave it unset, and that will terminate the backtrace. */
+}
+
+
+static void
+m32c_prev_register (struct frame_info *next_frame,
+ void **this_prologue_cache,
+ int regnum, int *optimizedp,
+ enum lval_type *lvalp, CORE_ADDR *addrp,
+ int *realnump, gdb_byte *bufferp)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (next_frame));
+ struct m32c_prologue *p
+ = m32c_analyze_frame_prologue (next_frame, this_prologue_cache);
+ CORE_ADDR frame_base = m32c_frame_base (next_frame, this_prologue_cache);
+ int reg_size = register_size (get_frame_arch (next_frame), regnum);
+
+ if (regnum == tdep->sp->num)
+ {
+ *optimizedp = 0;
+ *lvalp = not_lval;
+ *addrp = 0;
+ *realnump = -1;
+ if (bufferp)
+ store_unsigned_integer (bufferp, reg_size, frame_base);
+ }
+
+ /* If prologue analysis says we saved this register somewhere,
+ return a description of the stack slot holding it. */
+ else if (p->reg_offset[regnum] != 1)
+ {
+ *optimizedp = 0;
+ *lvalp = lval_memory;
+ *addrp = frame_base + p->reg_offset[regnum];
+ *realnump = -1;
+ if (bufferp)
+ get_frame_memory (next_frame, *addrp, bufferp, reg_size);
+ }
+
+ /* Otherwise, presume we haven't changed the value of this
+ register, and get it from the next frame. */
+ else
+ frame_register_unwind (next_frame, regnum,
+ optimizedp, lvalp, addrp, realnump, bufferp);
+}
+
+
+static const struct frame_unwind m32c_unwind = {
+ NORMAL_FRAME,
+ m32c_this_id,
+ m32c_prev_register
+};
+
+
+static const struct frame_unwind *
+m32c_frame_sniffer (struct frame_info *next_frame)
+{
+ return &m32c_unwind;
+}
+
+
+static CORE_ADDR
+m32c_unwind_pc (struct gdbarch *arch, struct frame_info *next_frame)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
+ return frame_unwind_register_unsigned (next_frame, tdep->pc->num);
+}
+
+
+static CORE_ADDR
+m32c_unwind_sp (struct gdbarch *arch, struct frame_info *next_frame)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
+ return frame_unwind_register_unsigned (next_frame, tdep->sp->num);
+}
+
+
+/* Inferior calls. */
+
+/* The calling conventions, according to GCC:
+
+ r8c, m16c
+ ---------
+ First arg may be passed in r1l or r1 if it (1) fits (QImode or
+ HImode), (2) is named, and (3) is an integer or pointer type (no
+ structs, floats, etc). Otherwise, it's passed on the stack.
+
+ Second arg may be passed in r2, same restrictions (but not QImode),
+ even if the first arg is passed on the stack.
+
+ Third and further args are passed on the stack. No padding is
+ used, stack "alignment" is 8 bits.
+
+ m32cm, m32c
+ -----------
+
+ First arg may be passed in r0l or r0, same restrictions as above.
+
+ Second and further args are passed on the stack. Padding is used
+ after QImode parameters (i.e. lower-addressed byte is the value,
+ higher-addressed byte is the padding), stack "alignment" is 16
+ bits. */
+
+
+/* Return true if TYPE is a type that can be passed in registers. (We
+ ignore the size, and pay attention only to the type code;
+ acceptable sizes depends on which register is being considered to
+ hold it.) */
+static int
+m32c_reg_arg_type (struct type *type)
+{
+ enum type_code code = TYPE_CODE (type);
+
+ return (code == TYPE_CODE_INT
+ || code == TYPE_CODE_ENUM
+ || code == TYPE_CODE_PTR
+ || code == TYPE_CODE_REF
+ || code == TYPE_CODE_BOOL
+ || code == TYPE_CODE_CHAR);
+}
+
+
+static CORE_ADDR
+m32c_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
+ struct value **args, CORE_ADDR sp, int struct_return,
+ CORE_ADDR struct_addr)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+ unsigned long mach = gdbarch_bfd_arch_info (gdbarch)->mach;
+ CORE_ADDR cfa;
+ int i;
+
+ /* The number of arguments given in this function's prototype, or
+ zero if it has a non-prototyped function type. The m32c ABI
+ passes arguments mentioned in the prototype differently from
+ those in the ellipsis of a varargs function, or from those passed
+ to a non-prototyped function. */
+ int num_prototyped_args = 0;
+
+ {
+ struct type *func_type = value_type (function);
+
+ gdb_assert (TYPE_CODE (func_type) == TYPE_CODE_FUNC ||
+ TYPE_CODE (func_type) == TYPE_CODE_METHOD);
+
+#if 0
+ /* The ABI description in gcc/config/m32c/m32c.abi says that
+ we need to handle prototyped and non-prototyped functions
+ separately, but the code in GCC doesn't actually do so. */
+ if (TYPE_PROTOTYPED (func_type))
+#endif
+ num_prototyped_args = TYPE_NFIELDS (func_type);
+ }
+
+ /* First, if the function returns an aggregate by value, push a
+ pointer to a buffer for it. This doesn't affect the way
+ subsequent arguments are allocated to registers. */
+ if (struct_return)
+ {
+ int ptr_len = TYPE_LENGTH (tdep->ptr_voyd);
+ sp -= ptr_len;
+ write_memory_unsigned_integer (sp, ptr_len, struct_addr);
+ }
+
+ /* Push the arguments. */
+ for (i = nargs - 1; i >= 0; i--)
+ {
+ struct value *arg = args[i];
+ const gdb_byte *arg_bits = value_contents (arg);
+ struct type *arg_type = value_type (arg);
+ ULONGEST arg_size = TYPE_LENGTH (arg_type);
+
+ /* Can it go in r1 or r1l (for m16c) or r0 or r0l (for m32c)? */
+ if (i == 0
+ && arg_size <= 2
+ && i < num_prototyped_args
+ && m32c_reg_arg_type (arg_type))
+ {
+ /* Extract and re-store as an integer as a terse way to make
+ sure it ends up in the least significant end of r1. (GDB
+ should avoid assuming endianness, even on uni-endian
+ processors.) */
+ ULONGEST u = extract_unsigned_integer (arg_bits, arg_size);
+ struct m32c_reg *reg = (mach == bfd_mach_m16c) ? tdep->r1 : tdep->r0;
+ regcache_cooked_write_unsigned (regcache, reg->num, u);
+ }
+
+ /* Can it go in r2? */
+ else if (mach == bfd_mach_m16c
+ && i == 1
+ && arg_size == 2
+ && i < num_prototyped_args
+ && m32c_reg_arg_type (arg_type))
+ regcache_cooked_write (regcache, tdep->r2->num, arg_bits);
+
+ /* Everything else goes on the stack. */
+ else
+ {
+ sp -= arg_size;
+
+ /* Align the stack. */
+ if (mach == bfd_mach_m32c)
+ sp &= ~1;
+
+ write_memory (sp, arg_bits, arg_size);
+ }
+ }
+
+ /* This is the CFA we use to identify the dummy frame. */
+ cfa = sp;
+
+ /* Push the return address. */
+ sp -= tdep->ret_addr_bytes;
+ write_memory_unsigned_integer (sp, tdep->ret_addr_bytes, bp_addr);
+
+ /* Update the stack pointer. */
+ regcache_cooked_write_unsigned (regcache, tdep->sp->num, sp);
+
+ /* We need to borrow an odd trick from the i386 target here.
+
+ The value we return from this function gets used as the stack
+ address (the CFA) for the dummy frame's ID. The obvious thing is
+ to return the new TOS. However, that points at the return
+ address, saved on the stack, which is inconsistent with the CFA's
+ described by GCC's DWARF 2 .debug_frame information: DWARF 2
+ .debug_frame info uses the address immediately after the saved
+ return address. So you end up with a dummy frame whose CFA
+ points at the return address, but the frame for the function
+ being called has a CFA pointing after the return address: the
+ younger CFA is *greater than* the older CFA. The sanity checks
+ in frame.c don't like that.
+
+ So we try to be consistent with the CFA's used by DWARF 2.
+ Having a dummy frame and a real frame with the *same* CFA is
+ tolerable. */
+ return cfa;
+}
+
+
+static struct frame_id
+m32c_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
+{
+ /* This needs to return a frame ID whose PC is the return address
+ passed to m32c_push_dummy_call, and whose stack_addr is the SP
+ m32c_push_dummy_call returned.
+
+ m32c_unwind_sp gives us the CFA, which is the value the SP had
+ before the return address was pushed. */
+ return frame_id_build (m32c_unwind_sp (gdbarch, next_frame),
+ frame_pc_unwind (next_frame));
+}
+
+
+
+/* Return values. */
+
+/* Return value conventions, according to GCC:
+
+ r8c, m16c
+ ---------
+
+ QImode in r0l
+ HImode in r0
+ SImode in r2r0
+ near pointer in r0
+ far pointer in r2r0
+
+ Aggregate values (regardless of size) are returned by pushing a
+ pointer to a temporary area on the stack after the args are pushed.
+ The function fills in this area with the value. Note that this
+ pointer on the stack does not affect how register arguments, if any,
+ are configured.
+
+ m32cm, m32c
+ -----------
+ Same. */
+
+/* Return non-zero if values of type TYPE are returned by storing them
+ in a buffer whose address is passed on the stack, ahead of the
+ other arguments. */
+static int
+m32c_return_by_passed_buf (struct type *type)
+{
+ enum type_code code = TYPE_CODE (type);
+
+ return (code == TYPE_CODE_STRUCT
+ || code == TYPE_CODE_UNION);
+}
+
+static enum return_value_convention
+m32c_return_value (struct gdbarch *gdbarch,
+ struct type *valtype,
+ struct regcache *regcache,
+ gdb_byte *readbuf,
+ const gdb_byte *writebuf)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+ enum return_value_convention conv;
+ ULONGEST valtype_len = TYPE_LENGTH (valtype);
+
+ if (m32c_return_by_passed_buf (valtype))
+ conv = RETURN_VALUE_STRUCT_CONVENTION;
+ else
+ conv = RETURN_VALUE_REGISTER_CONVENTION;
+
+ if (readbuf)
+ {
+ /* We should never be called to find values being returned by
+ RETURN_VALUE_STRUCT_CONVENTION. Those can't be located,
+ unless we made the call ourselves. */
+ gdb_assert (conv == RETURN_VALUE_REGISTER_CONVENTION);
+
+ gdb_assert (valtype_len <= 8);
+
+ /* Anything that fits in r0 is returned there. */
+ if (valtype_len <= TYPE_LENGTH (tdep->r0->type))
+ {
+ ULONGEST u;
+ regcache_cooked_read_unsigned (regcache, tdep->r0->num, &u);
+ store_unsigned_integer (readbuf, valtype_len, u);
+ }
+ else
+ {
+ /* Everything else is passed in mem0, using as many bytes as
+ needed. This is not what the Renesas tools do, but it's
+ what GCC does at the moment. */
+ struct minimal_symbol *mem0
+ = lookup_minimal_symbol ("mem0", NULL, NULL);
+
+ if (! mem0)
+ error ("The return value is stored in memory at 'mem0', "
+ "but GDB cannot find\n"
+ "its address.");
+ read_memory (SYMBOL_VALUE_ADDRESS (mem0), readbuf, valtype_len);
+ }
+ }
+
+ if (writebuf)
+ {
+ /* We should never be called to store values to be returned
+ using RETURN_VALUE_STRUCT_CONVENTION. We have no way of
+ finding the buffer, unless we made the call ourselves. */
+ gdb_assert (conv == RETURN_VALUE_REGISTER_CONVENTION);
+
+ gdb_assert (valtype_len <= 8);
+
+ /* Anything that fits in r0 is returned there. */
+ if (valtype_len <= TYPE_LENGTH (tdep->r0->type))
+ {
+ ULONGEST u = extract_unsigned_integer (writebuf, valtype_len);
+ regcache_cooked_write_unsigned (regcache, tdep->r0->num, u);
+ }
+ else
+ {
+ /* Everything else is passed in mem0, using as many bytes as
+ needed. This is not what the Renesas tools do, but it's
+ what GCC does at the moment. */
+ struct minimal_symbol *mem0
+ = lookup_minimal_symbol ("mem0", NULL, NULL);
+
+ if (! mem0)
+ error ("The return value is stored in memory at 'mem0', "
+ "but GDB cannot find\n"
+ " its address.");
+ write_memory (SYMBOL_VALUE_ADDRESS (mem0),
+ (char *) writebuf, valtype_len);
+ }
+ }
+
+ return conv;
+}
+
+
+
+/* Trampolines. */
+
+/* The m16c and m32c use a trampoline function for indirect function
+ calls. An indirect call looks like this:
+
+ ... push arguments ...
+ ... push target function address ...
+ jsr.a m32c_jsri16
+
+ The code for m32c_jsri16 looks like this:
+
+ m32c_jsri16:
+
+ # Save return address.
+ pop.w m32c_jsri_ret
+ pop.b m32c_jsri_ret+2
+
+ # Store target function address.
+ pop.w m32c_jsri_addr
+
+ # Re-push return address.
+ push.b m32c_jsri_ret+2
+ push.w m32c_jsri_ret
+
+ # Call the target function.
+ jmpi.a m32c_jsri_addr
+
+ Without further information, GDB will treat calls to m32c_jsri16
+ like calls to any other function. Since m32c_jsri16 doesn't have
+ debugging information, that normally means that GDB sets a step-
+ resume breakpoint and lets the program continue --- which is not
+ what the user wanted. (Giving the trampoline debugging info
+ doesn't help: the user expects the program to stop in the function
+ their program is calling, not in some trampoline code they've never
+ seen before.)
+
+ The SKIP_TRAMPOLINE_CODE gdbarch method tells GDB how to step
+ through such trampoline functions transparently to the user. When
+ given the address of a trampoline function's first instruction,
+ SKIP_TRAMPOLINE_CODE should return the address of the first
+ instruction of the function really being called. If GDB decides it
+ wants to step into that function, it will set a breakpoint there
+ and silently continue to it.
+
+ We recognize the trampoline by name, and extract the target address
+ directly from the stack. This isn't great, but recognizing by its
+ code sequence seems more fragile. */
+
+static CORE_ADDR
+m32c_skip_trampoline_code (CORE_ADDR stop_pc)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+
+ /* It would be nicer to simply look up the addresses of known
+ trampolines once, and then compare stop_pc with them. However,
+ we'd need to ensure that that cached address got invalidated when
+ someone loaded a new executable, and I'm not quite sure of the
+ best way to do that. find_pc_partial_function does do some
+ caching, so we'll see how this goes. */
+ char *name;
+ CORE_ADDR start, end;
+
+ if (find_pc_partial_function (stop_pc, &name, &start, &end))
+ {
+ /* Are we stopped at the beginning of the trampoline function? */
+ if (strcmp (name, "m32c_jsri16") == 0
+ && stop_pc == start)
+ {
+ /* Get the stack pointer. The return address is at the top,
+ and the target function's address is just below that. We
+ know it's a two-byte address, since the trampoline is
+ m32c_jsri*16*. */
+ CORE_ADDR sp = get_frame_sp (get_current_frame ());
+ CORE_ADDR target
+ = read_memory_unsigned_integer (sp + tdep->ret_addr_bytes, 2);
+
+ /* What we have now is the address of a jump instruction.
+ What we need is the destination of that jump.
+ The opcode is 1 byte, and the destination is the next 3 bytes.
+ */
+ target = read_memory_unsigned_integer (target + 1, 3);
+ return target;
+ }
+ }
+
+ return 0;
+}
+
+
+/* Address/pointer conversions. */
+
+/* On the m16c, there is a 24-bit address space, but only a very few
+ instructions can generate addresses larger than 0xffff: jumps,
+ jumps to subroutines, and the lde/std (load/store extended)
+ instructions.
+
+ Since GCC can only support one size of pointer, we can't have
+ distinct 'near' and 'far' pointer types; we have to pick one size
+ for everything. If we wanted to use 24-bit pointers, then GCC
+ would have to use lde and ste for all memory references, which
+ would be terrible for performance and code size. So the GNU
+ toolchain uses 16-bit pointers for everything, and gives up the
+ ability to have pointers point outside the first 64k of memory.
+
+ However, as a special hack, we let the linker place functions at
+ addresses above 0xffff, as long as it also places a trampoline in
+ the low 64k for every function whose address is taken. Each
+ trampoline consists of a single jmp.a instruction that jumps to the
+ function's real entry point. Pointers to functions can be 16 bits
+ long, even though the functions themselves are at higher addresses:
+ the pointers refer to the trampolines, not the functions.
+
+ This complicates things for GDB, however: given the address of a
+ function (from debug info or linker symbols, say) which could be
+ anywhere in the 24-bit address space, how can we find an
+ appropriate 16-bit value to use as a pointer to it?
+
+ If the linker has not generated a trampoline for the function,
+ we're out of luck. Well, I guess we could malloc some space and
+ write a jmp.a instruction to it, but I'm not going to get into that
+ at the moment.
+
+ If the linker has generated a trampoline for the function, then it
+ also emitted a symbol for the trampoline: if the function's linker
+ symbol is named NAME, then the function's trampoline's linker
+ symbol is named NAME.plt.
+
+ So, given a code address:
+ - We try to find a linker symbol at that address.
+ - If we find such a symbol named NAME, we look for a linker symbol
+ named NAME.plt.
+ - If we find such a symbol, we assume it is a trampoline, and use
+ its address as the pointer value.
+
+ And, given a function pointer:
+ - We try to find a linker symbol at that address named NAME.plt.
+ - If we find such a symbol, we look for a linker symbol named NAME.
+ - If we find that, we provide that as the function's address.
+ - If any of the above steps fail, we return the original address
+ unchanged; it might really be a function in the low 64k.
+
+ See? You *knew* there was a reason you wanted to be a computer
+ programmer! :) */
+
+static void
+m32c_m16c_address_to_pointer (struct type *type, gdb_byte *buf, CORE_ADDR addr)
+{
+ gdb_assert (TYPE_CODE (type) == TYPE_CODE_PTR ||
+ TYPE_CODE (type) == TYPE_CODE_REF);
+
+ enum type_code target_code = TYPE_CODE (TYPE_TARGET_TYPE (type));
+
+ if (target_code == TYPE_CODE_FUNC || target_code == TYPE_CODE_METHOD)
+ {
+ /* Try to find a linker symbol at this address. */
+ struct minimal_symbol *func_msym = lookup_minimal_symbol_by_pc (addr);
+
+ if (! func_msym)
+ error ("Cannot convert code address %s to function pointer:\n"
+ "couldn't find a symbol at that address, to find trampoline.",
+ paddr_nz (addr));
+
+ char *func_name = SYMBOL_LINKAGE_NAME (func_msym);
+ char *tramp_name = xmalloc (strlen (func_name) + 5);
+ strcpy (tramp_name, func_name);
+ strcat (tramp_name, ".plt");
+
+ /* Try to find a linker symbol for the trampoline. */
+ struct minimal_symbol *tramp_msym
+ = lookup_minimal_symbol (tramp_name, NULL, NULL);
+
+ /* We've either got another copy of the name now, or don't need
+ the name any more. */
+ xfree (tramp_name);
+
+ if (! tramp_msym)
+ error ("Cannot convert code address %s to function pointer:\n"
+ "couldn't find trampoline named '%s.plt'.",
+ paddr_nz (addr), func_name);
+
+ /* The trampoline's address is our pointer. */
+ addr = SYMBOL_VALUE_ADDRESS (tramp_msym);
+ }
+
+ store_unsigned_integer (buf, TYPE_LENGTH (type), addr);
+}
+
+
+static CORE_ADDR
+m32c_m16c_pointer_to_address (struct type *type, const gdb_byte *buf)
+{
+ gdb_assert (TYPE_CODE (type) == TYPE_CODE_PTR ||
+ TYPE_CODE (type) == TYPE_CODE_REF);
+
+ CORE_ADDR ptr = extract_unsigned_integer (buf, TYPE_LENGTH (type));
+
+ enum type_code target_code = TYPE_CODE (TYPE_TARGET_TYPE (type));
+
+ if (target_code == TYPE_CODE_FUNC || target_code == TYPE_CODE_METHOD)
+ {
+ /* See if there is a minimal symbol at that address whose name is
+ "NAME.plt". */
+ struct minimal_symbol *ptr_msym = lookup_minimal_symbol_by_pc (ptr);
+
+ if (ptr_msym)
+ {
+ char *ptr_msym_name = SYMBOL_LINKAGE_NAME (ptr_msym);
+ int len = strlen (ptr_msym_name);
+
+ if (len > 4
+ && strcmp (ptr_msym_name + len - 4, ".plt") == 0)
+ {
+ /* We have a .plt symbol; try to find the symbol for the
+ corresponding function.
+
+ Since the trampoline contains a jump instruction, we
+ could also just extract the jump's target address. I
+ don't see much advantage one way or the other. */
+ char *func_name = xmalloc (len - 4 + 1);
+ memcpy (func_name, ptr_msym_name, len - 4);
+ func_name[len - 4] = '\0';
+ struct minimal_symbol *func_msym
+ = lookup_minimal_symbol (func_name, NULL, NULL);
+
+ /* If we do have such a symbol, return its value as the
+ function's true address. */
+ if (func_msym)
+ ptr = SYMBOL_VALUE_ADDRESS (func_msym);
+ }
+ }
+ }
+
+ return ptr;
+}
+
+
+
+/* Initialization. */
+
+static struct gdbarch *
+m32c_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+{
+ struct gdbarch *arch;
+ struct gdbarch_tdep *tdep;
+ unsigned long mach = info.bfd_arch_info->mach;
+
+ /* Find a candidate among the list of architectures we've created
+ already. */
+ for (arches = gdbarch_list_lookup_by_info (arches, &info);
+ arches != NULL;
+ arches = gdbarch_list_lookup_by_info (arches->next, &info))
+ return arches->gdbarch;
+
+ tdep = xcalloc (1, sizeof (*tdep));
+ arch = gdbarch_alloc (&info, tdep);
+
+ /* Essential types. */
+ make_types (arch);
+
+ /* Address/pointer conversions. */
+ if (mach == bfd_mach_m16c)
+ {
+ set_gdbarch_address_to_pointer (arch, m32c_m16c_address_to_pointer);
+ set_gdbarch_pointer_to_address (arch, m32c_m16c_pointer_to_address);
+ }
+
+ /* Register set. */
+ make_regs (arch);
+
+ /* Disassembly. */
+ set_gdbarch_print_insn (arch, print_insn_m32c);
+
+ /* Breakpoints. */
+ set_gdbarch_breakpoint_from_pc (arch, m32c_breakpoint_from_pc);
+
+ /* Prologue analysis and unwinding. */
+ set_gdbarch_inner_than (arch, core_addr_lessthan);
+ set_gdbarch_skip_prologue (arch, m32c_skip_prologue);
+ set_gdbarch_unwind_pc (arch, m32c_unwind_pc);
+ set_gdbarch_unwind_sp (arch, m32c_unwind_sp);
+#if 0
+ /* I'm dropping the dwarf2 sniffer because it has a few problems.
+ They may be in the dwarf2 cfi code in GDB, or they may be in
+ the debug info emitted by the upstream toolchain. I don't
+ know which, but I do know that the prologue analyzer works better.
+ MVS 04/13/06
+ */
+ frame_unwind_append_sniffer (arch, dwarf2_frame_sniffer);
+#endif
+ frame_unwind_append_sniffer (arch, m32c_frame_sniffer);
+
+ /* Inferior calls. */
+ set_gdbarch_push_dummy_call (arch, m32c_push_dummy_call);
+ set_gdbarch_return_value (arch, m32c_return_value);
+ set_gdbarch_unwind_dummy_id (arch, m32c_unwind_dummy_id);
+
+ /* Trampolines. */
+ set_gdbarch_skip_trampoline_code (arch, m32c_skip_trampoline_code);
+
+ return arch;
+}
+
+
+void
+_initialize_m32c_tdep (void)
+{
+ register_gdbarch_init (bfd_arch_m32c, m32c_gdbarch_init);
+
+ m32c_dma_reggroup = reggroup_new ("dma", USER_REGGROUP);
+}
diff --git a/gdb/mingw-hdep.c b/gdb/mingw-hdep.c
index 79b23dc..bb0f50a 100644
--- a/gdb/mingw-hdep.c
+++ b/gdb/mingw-hdep.c
@@ -167,6 +167,10 @@
for (fd = 0, indx = 0; fd < n; ++fd)
{
HANDLE fd_h;
+ struct serial *scb;
+
+ if (!FD_ISSET (fd, readfds) && !FD_ISSET (fd, writefds))
+ continue;
if (FD_ISSET (fd, readfds))
{
@@ -189,6 +193,12 @@
else
num_ready++;
}
+
+ /* We created at least one event handle for this fd. Let the
+ device know we are finished with it. */
+ scb = serial_for_fd (fd);
+ if (scb)
+ serial_done_wait_handle (scb);
}
return num_ready;
diff --git a/gdb/mips-mdebug-tdep.c b/gdb/mips-mdebug-tdep.c
index db79713..06cfba5 100644
--- a/gdb/mips-mdebug-tdep.c
+++ b/gdb/mips-mdebug-tdep.c
@@ -394,7 +394,7 @@
void **this_cache,
int regnum, int *optimizedp,
enum lval_type *lvalp, CORE_ADDR *addrp,
- int *realnump, void *valuep)
+ int *realnump, gdb_byte *valuep)
{
struct mips_frame_cache *info = mips_mdebug_frame_cache (next_frame,
this_cache);
diff --git a/gdb/ppcnbsd-tdep.c b/gdb/ppcnbsd-tdep.c
index 9547fcd..57ba742 100644
--- a/gdb/ppcnbsd-tdep.c
+++ b/gdb/ppcnbsd-tdep.c
@@ -246,8 +246,8 @@
static enum return_value_convention
ppcnbsd_return_value (struct gdbarch *gdbarch, struct type *valtype,
- struct regcache *regcache, void *readbuf,
- const void *writebuf)
+ struct regcache *regcache, gdb_byte *readbuf,
+ const gdb_byte *writebuf)
{
if ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT
|| TYPE_CODE (valtype) == TYPE_CODE_UNION)
diff --git a/gdb/remote.c b/gdb/remote.c
index 22581a5..d1ffdb5 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -973,7 +973,7 @@
typedef int gdb_threadref; /* Internal GDB thread reference. */
/* gdb_ext_thread_info is an internal GDB data structure which is
- equivalint to the reply of the remote threadinfo packet. */
+ equivalent to the reply of the remote threadinfo packet. */
struct gdb_ext_thread_info
{
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index f932b4c..f22236c 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -59,7 +59,6 @@
#include "frame-unwind.h"
#include "frame-base.h"
-#include "reggroups.h"
#include "rs6000-tdep.h"
/* If the kernel has to deliver a signal, it pushes a sigcontext
diff --git a/gdb/ser-mingw.c b/gdb/ser-mingw.c
index 7a6f232..79e186b 100644
--- a/gdb/ser-mingw.c
+++ b/gdb/ser-mingw.c
@@ -26,6 +26,7 @@
#include "ser-tcp.h"
#include <windows.h>
+#include <conio.h>
#include <fcntl.h>
#include <unistd.h>
@@ -350,23 +351,22 @@
HANDLE start_select;
HANDLE stop_select;
+ HANDLE exit_select;
+ HANDLE have_stopped;
+
+ HANDLE thread;
};
static DWORD WINAPI
console_select_thread (void *arg)
{
struct serial *scb = arg;
- struct ser_console_state *state, state_copy;
- int event_index, fd;
+ struct ser_console_state *state;
+ int event_index;
HANDLE h;
- /* Copy useful information out of the control block, to make sure
- that we do not race with freeing it. */
- state_copy = *(struct ser_console_state *) scb->state;
- state = &state_copy;
- fd = scb->fd;
-
- h = (HANDLE) _get_osfhandle (fd);
+ state = scb->state;
+ h = (HANDLE) _get_osfhandle (scb->fd);
while (1)
{
@@ -374,14 +374,15 @@
INPUT_RECORD record;
DWORD n_records;
+ SetEvent (state->have_stopped);
+
wait_events[0] = state->start_select;
- wait_events[1] = state->stop_select;
+ wait_events[1] = state->exit_select;
if (WaitForMultipleObjects (2, wait_events, FALSE, INFINITE) != WAIT_OBJECT_0)
- {
- CloseHandle (state->stop_select);
- return 0;
- }
+ return 0;
+
+ ResetEvent (state->have_stopped);
retry:
wait_events[0] = state->stop_select;
@@ -391,10 +392,7 @@
if (event_index == WAIT_OBJECT_0
|| WaitForSingleObject (state->stop_select, 0) == WAIT_OBJECT_0)
- {
- CloseHandle (state->stop_select);
- return 0;
- }
+ continue;
if (event_index != WAIT_OBJECT_0 + 1)
{
@@ -415,9 +413,30 @@
if (record.EventType == KEY_EVENT && record.Event.KeyEvent.bKeyDown)
{
- /* This is really a keypress. */
- SetEvent (state->read_event);
- continue;
+ WORD keycode = record.Event.KeyEvent.wVirtualKeyCode;
+
+ /* Ignore events containing only control keys. We must
+ recognize "enhanced" keys which we are interested in
+ reading via getch, if they do not map to ASCII. But we
+ do not want to report input available for e.g. the
+ control key alone. */
+
+ if (record.Event.KeyEvent.uChar.AsciiChar != 0
+ || keycode == VK_PRIOR
+ || keycode == VK_NEXT
+ || keycode == VK_END
+ || keycode == VK_HOME
+ || keycode == VK_LEFT
+ || keycode == VK_UP
+ || keycode == VK_RIGHT
+ || keycode == VK_DOWN
+ || keycode == VK_INSERT
+ || keycode == VK_DELETE)
+ {
+ /* This is really a keypress. */
+ SetEvent (state->read_event);
+ continue;
+ }
}
/* Otherwise discard it and wait again. */
@@ -439,31 +458,27 @@
pipe_select_thread (void *arg)
{
struct serial *scb = arg;
- struct ser_console_state *state, state_copy;
- int event_index, fd;
+ struct ser_console_state *state;
+ int event_index;
HANDLE h;
- /* Copy useful information out of the control block, to make sure
- that we do not race with freeing it. */
- state_copy = *(struct ser_console_state *) scb->state;
- state = &state_copy;
- fd = scb->fd;
-
- h = (HANDLE) _get_osfhandle (fd);
+ state = scb->state;
+ h = (HANDLE) _get_osfhandle (scb->fd);
while (1)
{
HANDLE wait_events[2];
DWORD n_avail;
+ SetEvent (state->have_stopped);
+
wait_events[0] = state->start_select;
- wait_events[1] = state->stop_select;
+ wait_events[1] = state->exit_select;
if (WaitForMultipleObjects (2, wait_events, FALSE, INFINITE) != WAIT_OBJECT_0)
- {
- CloseHandle (state->stop_select);
- return 0;
- }
+ return 0;
+
+ ResetEvent (state->have_stopped);
retry:
if (!PeekNamedPipe (h, NULL, 0, NULL, &n_avail, NULL))
@@ -478,13 +493,11 @@
continue;
}
- if (WaitForSingleObject (state->stop_select, 0) == WAIT_OBJECT_0)
- {
- CloseHandle (state->stop_select);
- return 0;
- }
+ /* Delay 10ms before checking again, but allow the stop event
+ to wake us. */
+ if (WaitForSingleObject (state->stop_select, 10) == WAIT_OBJECT_0)
+ continue;
- Sleep (10);
goto retry;
}
}
@@ -511,29 +524,62 @@
memset (state, 0, sizeof (struct ser_console_state));
scb->state = state;
- /* Create auto reset events to wake and terminate the select thread. */
+ /* Create auto reset events to wake, stop, and exit the select
+ thread. */
state->start_select = CreateEvent (0, FALSE, FALSE, 0);
state->stop_select = CreateEvent (0, FALSE, FALSE, 0);
+ state->exit_select = CreateEvent (0, FALSE, FALSE, 0);
- /* Create our own events to report read and exceptions separately.
- The exception event is currently never used. */
+ /* Create a manual reset event to signal whether the thread is
+ stopped. This must be manual reset, because we may wait on
+ it multiple times without ever starting the thread. */
+ state->have_stopped = CreateEvent (0, TRUE, FALSE, 0);
+
+ /* Create our own events to report read and exceptions separately. */
state->read_event = CreateEvent (0, FALSE, FALSE, 0);
state->except_event = CreateEvent (0, FALSE, FALSE, 0);
- /* And finally start the select thread. */
if (is_tty)
- CreateThread (NULL, 0, console_select_thread, scb, 0, &threadId);
+ state->thread = CreateThread (NULL, 0, console_select_thread, scb, 0,
+ &threadId);
else
- CreateThread (NULL, 0, pipe_select_thread, scb, 0, &threadId);
+ state->thread = CreateThread (NULL, 0, pipe_select_thread, scb, 0,
+ &threadId);
}
- ResetEvent (state->read_event);
- ResetEvent (state->except_event);
-
- SetEvent (state->start_select);
-
*read = state->read_event;
*except = state->except_event;
+
+ /* Start from a blank state. */
+ ResetEvent (state->read_event);
+ ResetEvent (state->except_event);
+ ResetEvent (state->stop_select);
+
+ /* First check for a key already in the buffer. If there is one,
+ we don't need a thread. This also catches the second key of
+ multi-character returns from getch, for instance for arrow
+ keys. The second half is in a C library internal buffer,
+ and PeekConsoleInput will not find it. */
+ if (_kbhit ())
+ {
+ SetEvent (state->read_event);
+ return;
+ }
+
+ /* Otherwise, start the select thread. */
+ SetEvent (state->start_select);
+}
+
+static void
+ser_console_done_wait_handle (struct serial *scb)
+{
+ struct ser_console_state *state = scb->state;
+
+ if (state == NULL)
+ return;
+
+ SetEvent (state->stop_select);
+ WaitForSingleObject (state->have_stopped, INFINITE);
}
static void
@@ -543,7 +589,14 @@
if (scb->state)
{
- SetEvent (state->stop_select);
+ SetEvent (state->exit_select);
+
+ WaitForSingleObject (state->thread, INFINITE);
+
+ CloseHandle (state->start_select);
+ CloseHandle (state->stop_select);
+ CloseHandle (state->exit_select);
+ CloseHandle (state->have_stopped);
CloseHandle (state->read_event);
CloseHandle (state->except_event);
@@ -571,6 +624,217 @@
return NULL;
}
+struct pipe_state
+{
+ /* Since we use the pipe_select_thread for our select emulation,
+ we need to place the state structure it requires at the front
+ of our state. */
+ struct ser_console_state wait;
+
+ /* The pex obj for our (one-stage) pipeline. */
+ struct pex_obj *pex;
+
+ /* Streams for the pipeline's input and output. */
+ FILE *input, *output;
+};
+
+static struct pipe_state *
+make_pipe_state (void)
+{
+ struct pipe_state *ps = XMALLOC (struct pipe_state);
+
+ memset (ps, 0, sizeof (*ps));
+ ps->wait.read_event = INVALID_HANDLE_VALUE;
+ ps->wait.except_event = INVALID_HANDLE_VALUE;
+ ps->wait.start_select = INVALID_HANDLE_VALUE;
+ ps->wait.stop_select = INVALID_HANDLE_VALUE;
+
+ return ps;
+}
+
+static void
+free_pipe_state (struct pipe_state *ps)
+{
+ int saved_errno = errno;
+
+ if (ps->wait.read_event != INVALID_HANDLE_VALUE)
+ CloseHandle (ps->wait.read_event);
+ if (ps->wait.except_event != INVALID_HANDLE_VALUE)
+ CloseHandle (ps->wait.except_event);
+ if (ps->wait.start_select != INVALID_HANDLE_VALUE)
+ CloseHandle (ps->wait.start_select);
+
+ /* If we have a select thread running, let the select thread free
+ the stop event. */
+ if (ps->wait.stop_select != INVALID_HANDLE_VALUE)
+ SetEvent (ps->wait.stop_select);
+
+ /* Close the pipe to the child. We must close the pipe before
+ calling pex_free because pex_free will wait for the child to exit
+ and the child will not exit until the pipe is closed. */
+ if (ps->input)
+ fclose (ps->input);
+ if (ps->pex)
+ pex_free (ps->pex);
+ /* pex_free closes ps->output. */
+
+ xfree (ps);
+
+ errno = saved_errno;
+}
+
+static void
+cleanup_pipe_state (void *untyped)
+{
+ struct pipe_state *ps = untyped;
+
+ free_pipe_state (ps);
+}
+
+static int
+pipe_windows_open (struct serial *scb, const char *name)
+{
+ char **argv = buildargv (name);
+ struct cleanup *back_to = make_cleanup_freeargv (argv);
+ if (! argv[0] || argv[0][0] == '\0')
+ error ("missing child command");
+
+ struct pipe_state *ps = make_pipe_state ();
+ make_cleanup (cleanup_pipe_state, ps);
+
+ ps->pex = pex_init (PEX_USE_PIPES, "target remote pipe", NULL);
+ if (! ps->pex)
+ goto fail;
+ ps->input = pex_input_pipe (ps->pex, 1);
+ if (! ps->input)
+ goto fail;
+
+ {
+ int err;
+ const char *err_msg
+ = pex_run (ps->pex, PEX_SEARCH | PEX_BINARY_INPUT | PEX_BINARY_OUTPUT,
+ argv[0], argv, NULL, NULL,
+ &err);
+
+ if (err_msg)
+ {
+ /* Our caller expects us to return -1, but all they'll do with
+ it generally is print the message based on errno. We have
+ all the same information here, plus err_msg provided by
+ pex_run, so we just raise the error here. */
+ if (err)
+ error ("error starting child process '%s': %s: %s",
+ name, err_msg, safe_strerror (err));
+ else
+ error ("error starting child process '%s': %s",
+ name, err_msg);
+ }
+ }
+
+ ps->output = pex_read_output (ps->pex, 1);
+ if (! ps->output)
+ goto fail;
+
+ scb->fd = fileno (ps->output);
+ scb->state = (void *) ps;
+
+ discard_cleanups (back_to);
+ return 0;
+
+ fail:
+ do_cleanups (back_to);
+ return -1;
+}
+
+
+static void
+pipe_windows_close (struct serial *scb)
+{
+ struct pipe_state *ps = scb->state;
+
+ /* In theory, we should try to kill the subprocess here, but the pex
+ interface doesn't give us enough information to do that. Usually
+ closing the input pipe will get the message across. */
+
+ free_pipe_state (ps);
+}
+
+
+static int
+pipe_windows_read (struct serial *scb, size_t count)
+{
+ HANDLE pipeline_out = (HANDLE) _get_osfhandle (scb->fd);
+ if (pipeline_out == INVALID_HANDLE_VALUE)
+ return -1;
+
+ DWORD available;
+ if (! PeekNamedPipe (pipeline_out, NULL, 0, NULL, &available, NULL))
+ return -1;
+
+ if (count > available)
+ count = available;
+
+ DWORD bytes_read;
+ if (! ReadFile (pipeline_out, scb->buf, count, &bytes_read, NULL))
+ return -1;
+
+ return bytes_read;
+}
+
+
+static int
+pipe_windows_write (struct serial *scb, const void *buf, size_t count)
+{
+ struct pipe_state *ps = scb->state;
+ int pipeline_in_fd = fileno (ps->input);
+ if (pipeline_in_fd < 0)
+ return -1;
+
+ HANDLE pipeline_in = (HANDLE) _get_osfhandle (pipeline_in_fd);
+ if (pipeline_in == INVALID_HANDLE_VALUE)
+ return -1;
+
+ DWORD written;
+ if (! WriteFile (pipeline_in, buf, count, &written, NULL))
+ return -1;
+
+ return written;
+}
+
+
+static void
+pipe_wait_handle (struct serial *scb, HANDLE *read, HANDLE *except)
+{
+ struct pipe_state *ps = scb->state;
+
+ /* Have we allocated our events yet? */
+ if (ps->wait.read_event == INVALID_HANDLE_VALUE)
+ {
+ DWORD threadId;
+
+ /* Create auto reset events to wake and terminate the select thread. */
+ ps->wait.start_select = CreateEvent (0, FALSE, FALSE, 0);
+ ps->wait.stop_select = CreateEvent (0, FALSE, FALSE, 0);
+
+ /* Create our own events to report read and exceptions separately.
+ The exception event is currently never used. */
+ ps->wait.read_event = CreateEvent (0, FALSE, FALSE, 0);
+ ps->wait.except_event = CreateEvent (0, FALSE, FALSE, 0);
+
+ /* Start the select thread. */
+ CreateThread (NULL, 0, pipe_select_thread, scb, 0, &threadId);
+ }
+
+ ResetEvent (ps->wait.read_event);
+ ResetEvent (ps->wait.except_event);
+
+ SetEvent (ps->wait.start_select);
+
+ *read = ps->wait.read_event;
+ *except = ps->wait.except_event;
+}
+
+
struct net_windows_state
{
HANDLE read_event;
@@ -578,7 +842,12 @@
HANDLE start_select;
HANDLE stop_select;
+ HANDLE exit_select;
+ HANDLE have_stopped;
+
HANDLE sock_event;
+
+ HANDLE thread;
};
static DWORD WINAPI
@@ -586,27 +855,24 @@
{
struct serial *scb = arg;
struct net_windows_state *state, state_copy;
- int event_index, fd;
+ int event_index;
- /* Copy useful information out of the control block, to make sure
- that we do not race with freeing it. */
- state_copy = *(struct net_windows_state *) scb->state;
- state = &state_copy;
- fd = scb->fd;
+ state = scb->state;
while (1)
{
HANDLE wait_events[2];
WSANETWORKEVENTS events;
+ SetEvent (state->have_stopped);
+
wait_events[0] = state->start_select;
- wait_events[1] = state->stop_select;
+ wait_events[1] = state->exit_select;
if (WaitForMultipleObjects (2, wait_events, FALSE, INFINITE) != WAIT_OBJECT_0)
- {
- CloseHandle (state->stop_select);
- return 0;
- }
+ return 0;
+
+ ResetEvent (state->have_stopped);
wait_events[0] = state->stop_select;
wait_events[1] = state->sock_event;
@@ -615,10 +881,7 @@
if (event_index == WAIT_OBJECT_0
|| WaitForSingleObject (state->stop_select, 0) == WAIT_OBJECT_0)
- {
- CloseHandle (state->stop_select);
- return 0;
- }
+ continue;
if (event_index != WAIT_OBJECT_0 + 1)
{
@@ -630,7 +893,9 @@
/* Enumerate the internal network events, and reset the object that
signalled us to catch the next event. */
- WSAEnumNetworkEvents (fd, state->sock_event, &events);
+ WSAEnumNetworkEvents (scb->fd, state->sock_event, &events);
+
+ gdb_assert (events.lNetworkEvents & (FD_READ | FD_CLOSE));
if (events.lNetworkEvents & FD_READ)
SetEvent (state->read_event);
@@ -645,13 +910,78 @@
{
struct net_windows_state *state = scb->state;
+ /* Start from a clean slate. */
ResetEvent (state->read_event);
ResetEvent (state->except_event);
-
- SetEvent (state->start_select);
+ ResetEvent (state->stop_select);
*read = state->read_event;
*except = state->except_event;
+
+ /* Check any pending events. This both avoids starting the thread
+ unnecessarily, and handles stray FD_READ events (see below). */
+ if (WaitForSingleObject (state->sock_event, 0) == WAIT_OBJECT_0)
+ {
+ WSANETWORKEVENTS events;
+ int any = 0;
+
+ /* Enumerate the internal network events, and reset the object that
+ signalled us to catch the next event. */
+ WSAEnumNetworkEvents (scb->fd, state->sock_event, &events);
+
+ /* You'd think that FD_READ or FD_CLOSE would be set here. But,
+ sometimes, neither is. I suspect that the FD_READ is set and
+ the corresponding event signalled while recv is running, and
+ the FD_READ is then lowered when recv consumes all the data,
+ but there's no way to un-signal the event. This isn't a
+ problem for the call in net_select_thread, since any new
+ events after this point will not have been drained by recv.
+ It just means that we can't have the obvious assert here. */
+
+ /* If there is a read event, it might be still valid, or it might
+ not be - it may have been signalled before we last called
+ recv. Double-check that there is data. */
+ if (events.lNetworkEvents & FD_READ)
+ {
+ unsigned long available;
+
+ if (ioctlsocket (scb->fd, FIONREAD, &available) == 0
+ && available > 0)
+ {
+ SetEvent (state->read_event);
+ any = 1;
+ }
+ else
+ /* Oops, no data. This call to recv will cause future
+ data to retrigger the event, e.g. while we are
+ in net_select_thread. */
+ recv (scb->fd, NULL, 0, 0);
+ }
+
+ /* If there's a close event, then record it - it is obviously
+ still valid, and it will not be resignalled. */
+ if (events.lNetworkEvents & FD_CLOSE)
+ {
+ SetEvent (state->except_event);
+ any = 1;
+ }
+
+ /* If we set either handle, there's no need to wake the thread. */
+ if (any)
+ return;
+ }
+
+ /* Start the select thread. */
+ SetEvent (state->start_select);
+}
+
+static void
+net_windows_done_wait_handle (struct serial *scb)
+{
+ struct net_windows_state *state = scb->state;
+
+ SetEvent (state->stop_select);
+ WaitForSingleObject (state->have_stopped, INFINITE);
}
static int
@@ -669,9 +999,16 @@
memset (state, 0, sizeof (struct net_windows_state));
scb->state = state;
- /* Create auto reset events to wake and terminate the select thread. */
+ /* Create auto reset events to wake, stop, and exit the select
+ thread. */
state->start_select = CreateEvent (0, FALSE, FALSE, 0);
state->stop_select = CreateEvent (0, FALSE, FALSE, 0);
+ state->exit_select = CreateEvent (0, FALSE, FALSE, 0);
+
+ /* Create a manual reset event to signal whether the thread is
+ stopped. This must be manual reset, because we may wait on
+ it multiple times without ever starting the thread. */
+ state->have_stopped = CreateEvent (0, TRUE, FALSE, 0);
/* Associate an event with the socket. */
state->sock_event = CreateEvent (0, TRUE, FALSE, 0);
@@ -682,7 +1019,8 @@
state->except_event = CreateEvent (0, FALSE, FALSE, 0);
/* And finally start the select thread. */
- CreateThread (NULL, 0, net_windows_select_thread, scb, 0, &threadId);
+ state->thread = CreateThread (NULL, 0, net_windows_select_thread, scb, 0,
+ &threadId);
return 0;
}
@@ -693,11 +1031,17 @@
{
struct net_windows_state *state = scb->state;
- SetEvent (state->stop_select);
+ SetEvent (state->exit_select);
+ WaitForSingleObject (state->thread, INFINITE);
CloseHandle (state->read_event);
CloseHandle (state->except_event);
+
CloseHandle (state->start_select);
+ CloseHandle (state->stop_select);
+ CloseHandle (state->exit_select);
+ CloseHandle (state->have_stopped);
+
CloseHandle (state->sock_event);
xfree (scb->state);
@@ -760,6 +1104,35 @@
ops->noflush_set_tty_state = ser_base_noflush_set_tty_state;
ops->drain_output = ser_base_drain_output;
ops->wait_handle = ser_console_wait_handle;
+ ops->done_wait_handle = ser_console_done_wait_handle;
+
+ serial_add_interface (ops);
+
+ /* The pipe interface. */
+
+ ops = XMALLOC (struct serial_ops);
+ memset (ops, 0, sizeof (struct serial_ops));
+ ops->name = "pipe";
+ ops->next = 0;
+ ops->open = pipe_windows_open;
+ ops->close = pipe_windows_close;
+ ops->readchar = ser_base_readchar;
+ ops->write = ser_base_write;
+ ops->flush_output = ser_base_flush_output;
+ ops->flush_input = ser_base_flush_input;
+ ops->send_break = ser_base_send_break;
+ ops->go_raw = ser_base_raw;
+ ops->get_tty_state = ser_base_get_tty_state;
+ ops->set_tty_state = ser_base_set_tty_state;
+ ops->print_tty_state = ser_base_print_tty_state;
+ ops->noflush_set_tty_state = ser_base_noflush_set_tty_state;
+ ops->setbaudrate = ser_base_setbaudrate;
+ ops->setstopbits = ser_base_setstopbits;
+ ops->drain_output = ser_base_drain_output;
+ ops->async = ser_base_async;
+ ops->read_prim = pipe_windows_read;
+ ops->write_prim = pipe_windows_write;
+ ops->wait_handle = pipe_wait_handle;
serial_add_interface (ops);
@@ -792,5 +1165,6 @@
ops->read_prim = net_read_prim;
ops->write_prim = net_write_prim;
ops->wait_handle = net_windows_wait_handle;
+ ops->done_wait_handle = net_windows_done_wait_handle;
serial_add_interface (ops);
}
diff --git a/gdb/serial.c b/gdb/serial.c
index fb74e1c..6a2c634 100644
--- a/gdb/serial.c
+++ b/gdb/serial.c
@@ -557,6 +557,13 @@
*except = NULL;
}
}
+
+void
+serial_done_wait_handle (struct serial *scb)
+{
+ if (scb->ops->done_wait_handle)
+ scb->ops->done_wait_handle (scb);
+}
#endif
#if 0
diff --git a/gdb/serial.h b/gdb/serial.h
index d9a395b..8d7ae65 100644
--- a/gdb/serial.h
+++ b/gdb/serial.h
@@ -253,6 +253,7 @@
when signaled, in *READ. Return a handle indicating errors
in *EXCEPT. */
void (*wait_handle) (struct serial *scb, HANDLE *read, HANDLE *except);
+ void (*done_wait_handle) (struct serial *scb);
#endif /* USE_WIN32API */
};
@@ -270,6 +271,9 @@
serial device. */
extern void serial_wait_handle (struct serial *, HANDLE *, HANDLE *);
+/* Windows-only: signal that we are done with the wait handles. */
+extern void serial_done_wait_handle (struct serial *);
+
#endif /* USE_WIN32API */
#endif /* SERIAL_H */
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 738ee69..a5a673c 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,25 @@
+2006-04-30 Mark Kettenis <kettenis@gnu.org>
+
+ * gdb.base/sigbpt.exp (stepi_out): FAIL when inserting a
+ single-step breakpoint fails; make this a KFAIL on
+ sparc*-*-openbsd*.
+ * gdb.base/siginfo.exp: Likewise.
+ * gdb.base/sigstep.exp (advance, advancei): Likewise.
+
+2006-04-26 Michael Snyder <msnyder@redhat.com>
+
+ * gdb.base/multi-forks.exp: Modify patterns for "run to exit",
+ which may have to consume output from other forks.
+ Add tests to make sure that "delete fork" succeeded.
+
+2006-04-20 Michael Snyder <msnyder@redhat.com>
+
+ * 2006-03-22 Jim Blandy <jimb@redhat.com>
+ Add support for the Renesas M32C and M16C.
+
+ * gdb.asm/asm-source.exp: Add m32c target.
+ * gdb.asm/m32c.inc: Support for m32c target.
+
2006-04-07 Andrew Stubbs <andrew.stubbs@st.com>
* gdb.base/commands.exp (recursive_source_test): New test.
diff --git a/gdb/testsuite/gdb.asm/asm-source.exp b/gdb/testsuite/gdb.asm/asm-source.exp
index cbd38a4..03cc355 100644
--- a/gdb/testsuite/gdb.asm/asm-source.exp
+++ b/gdb/testsuite/gdb.asm/asm-source.exp
@@ -73,6 +73,9 @@
"m32r*-linux*" {
set asm-arch m32r-linux
}
+ "m32c-*-*" {
+ set asm-arch m32c
+ }
"m32r*-*" {
set asm-arch m32r
append link-flags "--whole-archive -lgloss --no-whole-archive"
diff --git a/gdb/testsuite/gdb.asm/m32c.inc b/gdb/testsuite/gdb.asm/m32c.inc
new file mode 100644
index 0000000..7925e77
--- /dev/null
+++ b/gdb/testsuite/gdb.asm/m32c.inc
@@ -0,0 +1,33 @@
+ comment "subroutine prologue"
+ .macro gdbasm_enter
+ enter #0
+ .endm
+
+ comment "subroutine epilogue"
+ .macro gdbasm_leave
+ exitd
+ .endm
+
+ .macro gdbasm_call subr
+ jsr.a \subr
+ .endm
+
+ .macro gdbasm_several_nops
+ nop
+ nop
+ nop
+ nop
+ .endm
+
+ comment "exit (0)"
+ .macro gdbasm_exit0
+ mov.w #0, r1
+ mov.b #1, r0l
+ ste.b r0l,0xe0000
+ .endm
+
+ comment "crt0 startup"
+ .macro gdbasm_startup
+ ldc #0xfc00, sp
+ .endm
+
diff --git a/gdb/testsuite/gdb.base/multi-forks.exp b/gdb/testsuite/gdb.base/multi-forks.exp
index 82fdc50..5a706d7 100644
--- a/gdb/testsuite/gdb.base/multi-forks.exp
+++ b/gdb/testsuite/gdb.base/multi-forks.exp
@@ -67,7 +67,7 @@
send_gdb "continue\n"
gdb_expect {
- -re ".*Break.* main .*$gdb_prompt $" {}
+ -re ".*Break.* main .*$gdb_prompt.*$" {}
-re ".*$gdb_prompt $" {fail "run to exit 1"}
default {fail "run to exit 1 (timeout)"}
}
@@ -84,7 +84,7 @@
send_gdb "continue\n"
gdb_expect {
- -re ".*Break.* main .*$gdb_prompt $" {}
+ -re ".*Break.* main .*$gdb_prompt.*$" {}
-re ".*$gdb_prompt $" {fail "run to exit 2"}
default {fail "run to exit 2 (timeout)"}
}
@@ -136,22 +136,31 @@
gdb_test "detach-fork 4" "Detached .*" "Detach 4"
#
-# Test delete-fork
+# Test delete fork
#
-gdb_test "delete-fork 5" "" "Delete 5"
-gdb_test "delete-fork 6" "" "Delete 6"
-gdb_test "delete-fork 7" "" "Delete 7"
-gdb_test "delete-fork 8" "" "Delete 8"
-gdb_test "delete-fork 9" "" "Delete 9"
-gdb_test "delete-fork 10" "" "Delete 10"
-gdb_test "delete-fork 11" "" "Delete 11"
-gdb_test "delete-fork 12" "" "Delete 12"
-gdb_test "delete-fork 13" "" "Delete 13"
-gdb_test "delete-fork 14" "" "Delete 14"
-gdb_test "delete-fork 15" "" "Delete 15"
-
-
+gdb_test "delete fork 5" "" "Delete 5"
+gdb_test "info fork 5" "No fork number 5." "Did delete 5"
+gdb_test "delete fork 6" "" "Delete 6"
+gdb_test "info fork 6" "No fork number 6." "Did delete 6"
+gdb_test "delete fork 7" "" "Delete 7"
+gdb_test "info fork 7" "No fork number 7." "Did delete 7"
+gdb_test "delete fork 8" "" "Delete 8"
+gdb_test "info fork 8" "No fork number 8." "Did delete 8"
+gdb_test "delete fork 9" "" "Delete 9"
+gdb_test "info fork 9" "No fork number 9." "Did delete 9"
+gdb_test "delete fork 10" "" "Delete 10"
+gdb_test "info fork 10" "No fork number 10." "Did delete 10"
+gdb_test "delete fork 11" "" "Delete 11"
+gdb_test "info fork 11" "No fork number 11." "Did delete 11"
+gdb_test "delete fork 12" "" "Delete 12"
+gdb_test "info fork 12" "No fork number 12." "Did delete 12"
+gdb_test "delete fork 13" "" "Delete 13"
+gdb_test "info fork 13" "No fork number 13." "Did delete 13"
+gdb_test "delete fork 14" "" "Delete 14"
+gdb_test "info fork 14" "No fork number 14." "Did delete 14"
+gdb_test "delete fork 15" "" "Delete 15"
+gdb_test "info fork 15" "No fork number 15." "Did delete 15"
return 0
diff --git a/gdb/testsuite/gdb.base/sigbpt.exp b/gdb/testsuite/gdb.base/sigbpt.exp
index 9e010e2..0e69e39 100644
--- a/gdb/testsuite/gdb.base/sigbpt.exp
+++ b/gdb/testsuite/gdb.base/sigbpt.exp
@@ -166,6 +166,10 @@
# trampoline, and back to the instruction that faulted.
set test "${name}; stepi out of handler"
gdb_test_multiple "stepi" "$test" {
+ -re "Could not insert single-step breakpoint.*$gdb_prompt $" {
+ setup_kfail "sparc*-*-openbsd*" gdb/1736
+ fail "$test (could not insert single-step breakpoint)"
+ }
-re "keeper.*$gdb_prompt $" {
send_gdb "stepi\n"
exp_continue
diff --git a/gdb/testsuite/gdb.base/siginfo.exp b/gdb/testsuite/gdb.base/siginfo.exp
index a081ab8..d600801 100644
--- a/gdb/testsuite/gdb.base/siginfo.exp
+++ b/gdb/testsuite/gdb.base/siginfo.exp
@@ -75,6 +75,10 @@
# Check that GDB can step the inferior back to main
set test "step out of handler"
gdb_test_multiple "step" "${test}" {
+ -re "Could not insert single-step breakpoint.*$gdb_prompt $" {
+ setup_kfail sparc*-*-openbsd* gdb/1736
+ fail "$test (could not insert single-step breakpoint)"
+ }
-re "done = 1;.*${gdb_prompt} $" {
send_gdb "$i\n"
exp_continue
diff --git a/gdb/testsuite/gdb.base/sigstep.exp b/gdb/testsuite/gdb.base/sigstep.exp
index 6addca7..9069885 100644
--- a/gdb/testsuite/gdb.base/sigstep.exp
+++ b/gdb/testsuite/gdb.base/sigstep.exp
@@ -79,6 +79,10 @@
set test "$prefix; leave handler"
gdb_test_multiple "$i" "${test}" {
+ -re "Could not insert single-step breakpoint.*$gdb_prompt $" {
+ setup_kfail "sparc*-*-openbsd*" gdb/1736
+ fail "$test (could not insert single-step breakpoint)"
+ }
-re "done = 1;.*${gdb_prompt} $" {
send_gdb "$i\n"
exp_continue -continue_timer
@@ -122,6 +126,10 @@
fail "$test (could not set breakpoint)"
return
}
+ -re "Could not insert single-step breakpoint.*$gdb_prompt $" {
+ setup_kfail "sparc*-*-openbsd*" gdb/1736
+ fail "$test (could not insert single-step breakpoint)"
+ }
-re "done = 1;.*${gdb_prompt} $" {
send_gdb "$i\n"
exp_continue -continue_timer
diff --git a/gdb/version.in b/gdb/version.in
index 70f27cd..44c55b9 100644
--- a/gdb/version.in
+++ b/gdb/version.in
@@ -1 +1 @@
-6.4.50.20060420-cvs
+6.4.50.20060501-cvs
diff --git a/include/ChangeLog b/include/ChangeLog
index 0a3787a..6f695ff 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -17,6 +17,11 @@
R_BFIN_GOTOFFLO): New relocs.
(EF_BFIN_PIC, EF_BFIN_FDPIC, EF_BFIN_PIC_FLAGS): New macros.
+2006-03-23 Michael Matz <matz@suse.de>
+
+ * elf/x86-64.h: Add the new relocations with their official
+ numbers.
+
2006-02-17 Shrirang Khisti <shrirangk@kpitcummins.com>
Anil Paranjape <anilp1@kpitcummins.com>
Shilin Shakti <shilins@kpitcummins.com>
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
index ad4411a..1d398f6 100644
--- a/include/opcode/ChangeLog
+++ b/include/opcode/ChangeLog
@@ -1,4 +1,24 @@
-2006-04-07 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+2006-04-30 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * mips.h: Defines udi bits and masks. Add description of
+ characters which may appear in the args field of udi
+ instructions.
+
+2006-04-26 Thiemo Seufer <ths@networkno.de>
+
+ * mips.h: Improve comments describing the bitfield instruction
+ fields.
+
+2006-04-26 Julian Brown <julian@codesourcery.com>
+
+ * arm.h (FPU_VFP_EXT_V3): Define constant.
+ (FPU_NEON_EXT_V1): Likewise.
+ (FPU_VFP_HARD): Update.
+ (FPU_VFP_V3): Define macro.
+ (FPU_ARCH_VFP_V3, FPU_ARCH_VFP_V3_PLUS_NEON_V1): Define macros.
+
+2006-04-07 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
* avr.h (AVR_ISA_PWMx): New.
diff --git a/include/opcode/arm.h b/include/opcode/arm.h
index 1d3aa5a..f142fca 100644
--- a/include/opcode/arm.h
+++ b/include/opcode/arm.h
@@ -58,6 +58,8 @@
#define FPU_VFP_EXT_V1xD 0x08000000 /* Base VFP instruction set. */
#define FPU_VFP_EXT_V1 0x04000000 /* Double-precision insns. */
#define FPU_VFP_EXT_V2 0x02000000 /* ARM10E VFPr1. */
+#define FPU_VFP_EXT_V3 0x01000000 /* VFPv3 insns. */
+#define FPU_NEON_EXT_V1 0x00800000 /* Neon (SIMD) insns. */
/* Architectures are the sum of the base and extensions. The ARM ARM (rev E)
defines the following: ARMv3, ARMv3M, ARMv4xM, ARMv4, ARMv4TxM, ARMv4T,
@@ -105,7 +107,9 @@
#define FPU_VFP_V1xD (FPU_VFP_EXT_V1xD | FPU_ENDIAN_PURE)
#define FPU_VFP_V1 (FPU_VFP_V1xD | FPU_VFP_EXT_V1)
#define FPU_VFP_V2 (FPU_VFP_V1 | FPU_VFP_EXT_V2)
-#define FPU_VFP_HARD (FPU_VFP_EXT_V1xD | FPU_VFP_EXT_V1 | FPU_VFP_EXT_V2)
+#define FPU_VFP_V3 (FPU_VFP_V2 | FPU_VFP_EXT_V3)
+#define FPU_VFP_HARD (FPU_VFP_EXT_V1xD | FPU_VFP_EXT_V1 | FPU_VFP_EXT_V2 \
+ | FPU_VFP_EXT_V3 | FPU_NEON_EXT_V1)
#define FPU_FPA (FPU_FPA_EXT_V1 | FPU_FPA_EXT_V2)
/* Deprecated */
@@ -117,6 +121,10 @@
#define FPU_ARCH_VFP_V1xD ARM_FEATURE (0, FPU_VFP_V1xD)
#define FPU_ARCH_VFP_V1 ARM_FEATURE (0, FPU_VFP_V1)
#define FPU_ARCH_VFP_V2 ARM_FEATURE (0, FPU_VFP_V2)
+#define FPU_ARCH_VFP_V3 ARM_FEATURE (0, FPU_VFP_V3)
+#define FPU_ARCH_NEON_V1 ARM_FEATURE (0, FPU_NEON_EXT_V1)
+#define FPU_ARCH_VFP_V3_PLUS_NEON_V1 \
+ ARM_FEATURE (0, FPU_VFP_V3 | FPU_NEON_EXT_V1)
#define FPU_ARCH_VFP_HARD ARM_FEATURE (0, FPU_VFP_HARD)
#define FPU_ARCH_ENDIAN_PURE ARM_FEATURE (0, FPU_ENDIAN_PURE)
diff --git a/include/opcode/mips.h b/include/opcode/mips.h
index 4bec5ed..34ef26e 100644
--- a/include/opcode/mips.h
+++ b/include/opcode/mips.h
@@ -203,6 +203,16 @@
#define MDMX_FMTSEL_VEC_QH 0x15
#define MDMX_FMTSEL_VEC_OB 0x16
+/* UDI */
+#define OP_SH_UDI1 6
+#define OP_MASK_UDI1 0x1f
+#define OP_SH_UDI2 6
+#define OP_MASK_UDI2 0x3ff
+#define OP_SH_UDI3 6
+#define OP_MASK_UDI3 0x7fff
+#define OP_SH_UDI4 6
+#define OP_MASK_UDI4 0xfffff
+
/* This structure holds information for a particular instruction. */
struct mips_opcode
@@ -268,19 +278,20 @@
"x" accept and ignore register name
"z" must be zero register
"K" 5 bit Hardware Register (rdhwr instruction) (OP_*_RD)
- "+A" 5 bit ins/ext position, which becomes LSB (OP_*_SHAMT).
+ "+A" 5 bit ins/ext/dins/dext/dinsm/dextm position, which becomes
+ LSB (OP_*_SHAMT).
Enforces: 0 <= pos < 32.
- "+B" 5 bit ins size, which becomes MSB (OP_*_INSMSB).
+ "+B" 5 bit ins/dins size, which becomes MSB (OP_*_INSMSB).
Requires that "+A" or "+E" occur first to set position.
Enforces: 0 < (pos+size) <= 32.
- "+C" 5 bit ext size, which becomes MSBD (OP_*_EXTMSBD).
+ "+C" 5 bit ext/dext size, which becomes MSBD (OP_*_EXTMSBD).
Requires that "+A" or "+E" occur first to set position.
Enforces: 0 < (pos+size) <= 32.
(Also used by "dext" w/ different limits, but limits for
that are checked by the M_DEXT macro.)
- "+E" 5 bit dins/dext position, which becomes LSB-32 (OP_*_SHAMT).
+ "+E" 5 bit dinsu/dextu position, which becomes LSB-32 (OP_*_SHAMT).
Enforces: 32 <= pos < 64.
- "+F" 5 bit "dinsm" size, which becomes MSB-32 (OP_*_INSMSB).
+ "+F" 5 bit "dinsm/dinsu" size, which becomes MSB-32 (OP_*_INSMSB).
Requires that "+A" or "+E" occur first to set position.
Enforces: 32 < (pos+size) <= 64.
"+G" 5 bit "dextm" size, which becomes MSBD-32 (OP_*_EXTMSBD).
@@ -350,6 +361,12 @@
"+t" 5 bit coprocessor 0 destination register (OP_*_RT)
"+T" 5 bit coprocessor 0 destination register (OP_*_RT) - disassembly only
+ UDI immediates:
+ "+1" UDI immediate bits 6-10
+ "+2" UDI immediate bits 6-15
+ "+3" UDI immediate bits 6-20
+ "+4" UDI immediate bits 6-25
+
Other:
"()" parens surrounding optional value
"," separates operands
@@ -364,6 +381,7 @@
Extension character sequences used so far ("+" followed by the
following), for quick reference when adding more:
+ "1234"
"ABCDEFGHIT"
"t"
*/
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index fb328da..76baa3c 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,7 @@
+2006-04-24 Julian Brown <julian@codesourcery.com>
+
+ * floatformat.c (floatformat_to_double): Fix (biased) exponent=0 case.
+
2006-03-29 Jim Blandy <jimb@codesourcery.com>
* pex-common.c (pex_input_file, pex_input_pipe): New functions.
diff --git a/libiberty/floatformat.c b/libiberty/floatformat.c
index bd31efa..0bbb8ed 100644
--- a/libiberty/floatformat.c
+++ b/libiberty/floatformat.c
@@ -394,7 +394,7 @@
/* Handle denormalized numbers. FIXME: What should we do for
non-IEEE formats? */
- if (exponent == 0 && mant != 0)
+ if (special_exponent && exponent == 0 && mant != 0)
dto += ldexp ((double)mant,
(- fmt->exp_bias
- mant_bits
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 8637a8b..c384080 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,63 @@
+2006-04-30 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+
+ * mips-opc.c (mips_builtin_opcodes): Add udi instructions
+ "udi0" to "udi15".
+ * mips-dis.c (print_insn_args): Adds udi argument handling.
+
+2006-04-28 James E Wilson <wilson@specifix.com>
+
+ * m68k-dis.c (match_insn_m68k): Restore fprintf_func before printing
+ error message.
+
+2006-04-28 Thiemo Seufer <ths@mips.com>
+ David Ung <davidu@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * mips-dis.c (mips_cp0sel_names_mips3264r2): Add MT register
+ names.
+
+2006-04-28 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+ David Ung <davidu@mips.com>
+
+ * mips-dis.c (print_insn_args): Add mips_opcode argument.
+ (print_insn_mips): Adjust print_insn_args call.
+
+2006-04-28 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * mips-dis.c (print_insn_args): Print $fcc only for FP
+ instructions, use $cc elsewise.
+
+2006-04-28 Thiemo Seufer <ths@mips.com>
+ Nigel Stephens <nigel@mips.com>
+
+ * opcodes/mips-dis.c (mips16_to_32_reg_map, mips16_reg_names):
+ Map MIPS16 registers to O32 names.
+ (print_mips16_insn_arg): Use mips16_reg_names.
+
+2006-04-26 Julian Brown <julian@codesourcery.com>
+
+ * arm-dis.c (print_insn_neon): Disassemble floating-point constant
+ VMOV.
+
+2006-04-26 Nathan Sidwell <nathan@codesourcery.com>
+ Julian Brown <julian@codesourcery.com>
+
+ * opcodes/arm-dis.c (coprocessor_opcodes): Add %A, %B, %k, convert
+ %<code>[zy] into %[zy]<code>. Expand meaning of %<bitfield>['`?].
+ Add unified load/store instruction names.
+ (neon_opcode_table): New.
+ (arm_opcodes): Expand meaning of %<bitfield>['`?].
+ (arm_decode_bitfield): New.
+ (print_insn_coprocessor): Add pc argument. Add %A & %B specifiers.
+ Use arm_decode_bitfield and adjust numeric specifiers. Adjust %z & %y.
+ (print_insn_neon): New.
+ (print_insn_arm): Adjust print_insn_coprocessor call. Call
+ print_insn_neon. Use arm_decode_bitfield and adjust numeric specifiers.
+ (print_insn_thumb32): Likewise.
+
2006-04-19 Alan Modra <amodra@bigpond.net.au>
* Makefile.am: Run "make dep-am".
diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c
index bc5b52c..6ca9333 100644
--- a/opcodes/arm-dis.c
+++ b/opcodes/arm-dis.c
@@ -26,6 +26,7 @@
#include "opcode/arm.h"
#include "opintl.h"
#include "safe-ctype.h"
+#include "floatformat.h"
/* FIXME: This shouldn't be done here. */
#include "coff/internal.h"
@@ -63,6 +64,8 @@
%c print condition code (always bits 28-31)
%A print address for ldc/stc/ldf/stf instruction
+ %B print vstm/vldm register list
+ %C print vstr/vldr address operand
%I print cirrus signed shift immediate: bits 0..3|4..6
%F print the COUNT field of a LFM/SFM instruction.
%P print floating point precision in arithmetic insn
@@ -71,6 +74,7 @@
%<bitfield>r print as an ARM register
%<bitfield>d print the bitfield in decimal
+ %<bitfield>k print immediate for VFPv3 conversion instruction
%<bitfield>x print the bitfield in hex
%<bitfield>X print the bitfield as 1 hex digit without leading "0x"
%<bitfield>f print a floating point constant if >7 else a
@@ -78,15 +82,18 @@
%<bitfield>w print as an iWMMXt width field - [bhwd]ss/us
%<bitfield>g print as an iWMMXt 64-bit register
%<bitfield>G print as an iWMMXt general purpose or control register
+ %<bitfield>D print as a NEON D register
+ %<bitfield>Q print as a NEON Q register
- %<code>y print a single precision VFP reg.
+ %y<code> print a single precision VFP reg.
Codes: 0=>Sm, 1=>Sd, 2=>Sn, 3=>multi-list, 4=>Sm pair
- %<code>z print a double precision VFP reg
+ %z<code> print a double precision VFP reg
Codes: 0=>Dm, 1=>Dd, 2=>Dn, 3=>multi-list
- %<bitnum>'c print specified char iff bit is one
- %<bitnum>`c print specified char iff bit is zero
- %<bitnum>?ab print a if bit is one else print b
+ %<bitfield>'c print specified char iff bitfield is all ones
+ %<bitfield>`c print specified char iff bitfield is all zeroes
+ %<bitfield>?ab... select from array of values in big endian order
+
%L print as an iWMMXt N/M width field.
%Z print the Immediate of a WSHUFH instruction.
%l like 'A' except use byte offsets for 'B' & 'H'
@@ -201,80 +208,110 @@
{FPU_FPA_EXT_V2, 0x0c000200, 0x0e100f00, "sfm%c\t%12-14f, %F, %A"},
{FPU_FPA_EXT_V2, 0x0c100200, 0x0e100f00, "lfm%c\t%12-14f, %F, %A"},
+ /* Register load/store */
+ {FPU_NEON_EXT_V1, 0x0d000b00, 0x0f300f00, "vstr%c\t%12-15,22D, %C"},
+ {FPU_NEON_EXT_V1, 0x0d100b00, 0x0f300f00, "vldr%c\t%12-15,22D, %C"},
+ {FPU_NEON_EXT_V1, 0x0c800b00, 0x0f900f00, "vstmia%c\t%16-19r%21'!, %B"},
+ {FPU_NEON_EXT_V1, 0x0c900b00, 0x0f900f00, "vldmia%c\t%16-19r%21'!, %B"},
+ {FPU_NEON_EXT_V1, 0x0d000b00, 0x0f900f00, "vstmdb%c\t%16-19r%21'!, %B"},
+ {FPU_NEON_EXT_V1, 0x0d100b00, 0x0f900f00, "vldmdb%c\t%16-19r%21'!, %B"},
+
+ /* Data transfer between ARM and NEON registers */
+ {FPU_NEON_EXT_V1, 0x0e800b10, 0x0ff00f70, "vdup%c.32\t%16-19,7D, %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0e800b30, 0x0ff00f70, "vdup%c.16\t%16-19,7D, %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0ea00b10, 0x0ff00f70, "vdup%c.32\t%16-19,7Q, %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0ea00b30, 0x0ff00f70, "vdup%c.16\t%16-19,7Q, %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0ec00b10, 0x0ff00f70, "vdup%c.8\t%16-19,7D, %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0ee00b10, 0x0ff00f70, "vdup%c.8\t%16-19,7Q, %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0c400b10, 0x0ff00fd0, "vmov%c\t%0-3,5D, %12-15r, %16-19r"},
+ {FPU_NEON_EXT_V1, 0x0c500b10, 0x0ff00fd0, "vmov%c\t%12-15r, %16-19r, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0x0e000b10, 0x0fd00f70, "vmov%c.32\t%16-19,7D[%21d], %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0e100b10, 0x0f500f70, "vmov%c.32\t%12-15r, %16-19,7D[%21d]"},
+ {FPU_NEON_EXT_V1, 0x0e000b30, 0x0fd00f30, "vmov%c.16\t%16-19,7D[%6,21d], %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0e100b30, 0x0f500f30, "vmov%c.%23?us16\t%12-15r, %16-19,7D[%6,21d]"},
+ {FPU_NEON_EXT_V1, 0x0e400b10, 0x0fd00f10, "vmov%c.8\t%16-19,7D[%5,6,21d], %12-15r"},
+ {FPU_NEON_EXT_V1, 0x0e500b10, 0x0f500f10, "vmov%c.%23?us8\t%12-15r, %16-19,7D[%5,6,21d]"},
+
/* Floating point coprocessor (VFP) instructions */
- {FPU_VFP_EXT_V1, 0x0eb00bc0, 0x0fff0ff0, "fabsd%c\t%1z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0eb00ac0, 0x0fbf0fd0, "fabss%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0e300b00, 0x0ff00ff0, "faddd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e300a00, 0x0fb00f50, "fadds%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb40b40, 0x0fff0f70, "fcmp%7'ed%c\t%1z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0eb40a40, 0x0fbf0f50, "fcmp%7'es%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb50b40, 0x0fff0f70, "fcmp%7'ezd%c\t%1z"},
- {FPU_VFP_EXT_V1xD, 0x0eb50a40, 0x0fbf0f70, "fcmp%7'ezs%c\t%1y"},
- {FPU_VFP_EXT_V1, 0x0eb00b40, 0x0fff0ff0, "fcpyd%c\t%1z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0eb00a40, 0x0fbf0fd0, "fcpys%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb70ac0, 0x0fff0fd0, "fcvtds%c\t%1z, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb70bc0, 0x0fbf0ff0, "fcvtsd%c\t%1y, %0z"},
- {FPU_VFP_EXT_V1, 0x0e800b00, 0x0ff00ff0, "fdivd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e800a00, 0x0fb00f50, "fdivs%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0d100b00, 0x0f700f00, "fldd%c\t%1z, %A"},
- {FPU_VFP_EXT_V1xD, 0x0c900b00, 0x0fd00f00, "fldmia%0?xd%c\t%16-19r%21'!, %3z"},
- {FPU_VFP_EXT_V1xD, 0x0d300b00, 0x0ff00f00, "fldmdb%0?xd%c\t%16-19r!, %3z"},
- {FPU_VFP_EXT_V1xD, 0x0d100a00, 0x0f300f00, "flds%c\t%1y, %A"},
- {FPU_VFP_EXT_V1xD, 0x0c900a00, 0x0f900f00, "fldmias%c\t%16-19r%21'!, %3y"},
- {FPU_VFP_EXT_V1xD, 0x0d300a00, 0x0fb00f00, "fldmdbs%c\t%16-19r!, %3y"},
- {FPU_VFP_EXT_V1, 0x0e000b00, 0x0ff00ff0, "fmacd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e000a00, 0x0fb00f50, "fmacs%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0e200b10, 0x0ff00fff, "fmdhr%c\t%2z, %12-15r"},
- {FPU_VFP_EXT_V1, 0x0e000b10, 0x0ff00fff, "fmdlr%c\t%2z, %12-15r"},
- {FPU_VFP_EXT_V2, 0x0c400b10, 0x0ff00ff0, "fmdrr%c\t%0z, %12-15r, %16-19r"},
- {FPU_VFP_EXT_V1, 0x0e300b10, 0x0ff00fff, "fmrdh%c\t%12-15r, %2z"},
- {FPU_VFP_EXT_V1, 0x0e100b10, 0x0ff00fff, "fmrdl%c\t%12-15r, %2z"},
- {FPU_VFP_EXT_V1, 0x0c500b10, 0x0ff00ff0, "fmrrd%c\t%12-15r, %16-19r, %0z"},
- {FPU_VFP_EXT_V2, 0x0c500a10, 0x0ff00fd0, "fmrrs%c\t%12-15r, %16-19r, %4y"},
- {FPU_VFP_EXT_V1xD, 0x0e100a10, 0x0ff00f7f, "fmrs%c\t%12-15r, %2y"},
{FPU_VFP_EXT_V1xD, 0x0ef1fa10, 0x0fffffff, "fmstat%c"},
- {FPU_VFP_EXT_V1xD, 0x0ef00a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpsid"},
- {FPU_VFP_EXT_V1xD, 0x0ef10a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpscr"},
- {FPU_VFP_EXT_V1xD, 0x0ef80a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpexc"},
- {FPU_VFP_EXT_V1xD, 0x0ef90a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpinst\t@ Impl def"},
- {FPU_VFP_EXT_V1xD, 0x0efa0a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpinst2\t@ Impl def"},
- {FPU_VFP_EXT_V1xD, 0x0ef00a10, 0x0ff00fff, "fmrx%c\t%12-15r, <impl def 0x%16-19x>"},
- {FPU_VFP_EXT_V1, 0x0e100b00, 0x0ff00ff0, "fmscd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e100a00, 0x0fb00f50, "fmscs%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1xD, 0x0e000a10, 0x0ff00f7f, "fmsr%c\t%2y, %12-15r"},
- {FPU_VFP_EXT_V2, 0x0c400a10, 0x0ff00fd0, "fmsrr%c\t%12-15r, %16-19r, %4y"},
- {FPU_VFP_EXT_V1, 0x0e200b00, 0x0ff00ff0, "fmuld%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e200a00, 0x0fb00f50, "fmuls%c\t%1y, %2y, %0y"},
{FPU_VFP_EXT_V1xD, 0x0ee00a10, 0x0fff0fff, "fmxr%c\tfpsid, %12-15r"},
{FPU_VFP_EXT_V1xD, 0x0ee10a10, 0x0fff0fff, "fmxr%c\tfpscr, %12-15r"},
{FPU_VFP_EXT_V1xD, 0x0ee80a10, 0x0fff0fff, "fmxr%c\tfpexc, %12-15r"},
{FPU_VFP_EXT_V1xD, 0x0ee90a10, 0x0fff0fff, "fmxr%c\tfpinst, %12-15r\t@ Impl def"},
{FPU_VFP_EXT_V1xD, 0x0eea0a10, 0x0fff0fff, "fmxr%c\tfpinst2, %12-15r\t@ Impl def"},
+ {FPU_VFP_EXT_V1xD, 0x0ef00a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpsid"},
+ {FPU_VFP_EXT_V1xD, 0x0ef10a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpscr"},
+ {FPU_VFP_EXT_V1xD, 0x0ef80a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpexc"},
+ {FPU_VFP_EXT_V1xD, 0x0ef90a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpinst\t@ Impl def"},
+ {FPU_VFP_EXT_V1xD, 0x0efa0a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpinst2\t@ Impl def"},
+ {FPU_VFP_EXT_V1, 0x0e000b10, 0x0ff00fff, "fmdlr%c\t%z2, %12-15r"},
+ {FPU_VFP_EXT_V1, 0x0e100b10, 0x0ff00fff, "fmrdl%c\t%12-15r, %z2"},
+ {FPU_VFP_EXT_V1, 0x0e200b10, 0x0ff00fff, "fmdhr%c\t%z2, %12-15r"},
+ {FPU_VFP_EXT_V1, 0x0e300b10, 0x0ff00fff, "fmrdh%c\t%12-15r, %z2"},
{FPU_VFP_EXT_V1xD, 0x0ee00a10, 0x0ff00fff, "fmxr%c\t<impl def 0x%16-19x>, %12-15r"},
- {FPU_VFP_EXT_V1, 0x0eb10b40, 0x0fff0ff0, "fnegd%c\t%1z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0eb10a40, 0x0fbf0fd0, "fnegs%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0e000b40, 0x0ff00ff0, "fnmacd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e000a40, 0x0fb00f50, "fnmacs%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0e100b40, 0x0ff00ff0, "fnmscd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e100a40, 0x0fb00f50, "fnmscs%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0e200b40, 0x0ff00ff0, "fnmuld%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e200a40, 0x0fb00f50, "fnmuls%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb80bc0, 0x0fff0fd0, "fsitod%c\t%1z, %0y"},
- {FPU_VFP_EXT_V1xD, 0x0eb80ac0, 0x0fbf0fd0, "fsitos%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb10bc0, 0x0fff0ff0, "fsqrtd%c\t%1z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0eb10ac0, 0x0fbf0fd0, "fsqrts%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0d000b00, 0x0f700f00, "fstd%c\t%1z, %A"},
- {FPU_VFP_EXT_V1xD, 0x0c800b00, 0x0fd00f00, "fstmia%0?xd%c\t%16-19r%21'!, %3z"},
- {FPU_VFP_EXT_V1xD, 0x0d200b00, 0x0ff00f00, "fstmdb%0?xd%c\t%16-19r!, %3z"},
- {FPU_VFP_EXT_V1xD, 0x0d000a00, 0x0f300f00, "fsts%c\t%1y, %A"},
- {FPU_VFP_EXT_V1xD, 0x0c800a00, 0x0f900f00, "fstmias%c\t%16-19r%21'!, %3y"},
- {FPU_VFP_EXT_V1xD, 0x0d200a00, 0x0fb00f00, "fstmdbs%c\t%16-19r!, %3y"},
- {FPU_VFP_EXT_V1, 0x0e300b40, 0x0ff00ff0, "fsubd%c\t%1z, %2z, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0e300a40, 0x0fb00f50, "fsubs%c\t%1y, %2y, %0y"},
- {FPU_VFP_EXT_V1, 0x0ebc0b40, 0x0fbe0f70, "fto%16?sui%7'zd%c\t%1y, %0z"},
- {FPU_VFP_EXT_V1xD, 0x0ebc0a40, 0x0fbe0f50, "fto%16?sui%7'zs%c\t%1y, %0y"},
- {FPU_VFP_EXT_V1, 0x0eb80b40, 0x0fff0fd0, "fuitod%c\t%1z, %0y"},
- {FPU_VFP_EXT_V1xD, 0x0eb80a40, 0x0fbf0fd0, "fuitos%c\t%1y, %0y"},
+ {FPU_VFP_EXT_V1xD, 0x0ef00a10, 0x0ff00fff, "fmrx%c\t%12-15r, <impl def 0x%16-19x>"},
+ {FPU_VFP_EXT_V1xD, 0x0e000a10, 0x0ff00f7f, "fmsr%c\t%y2, %12-15r"},
+ {FPU_VFP_EXT_V1xD, 0x0e100a10, 0x0ff00f7f, "fmrs%c\t%12-15r, %y2"},
+ {FPU_VFP_EXT_V1xD, 0x0eb50a40, 0x0fbf0f70, "fcmp%7'ezs%c\t%y1"},
+ {FPU_VFP_EXT_V1, 0x0eb50b40, 0x0fbf0f70, "fcmp%7'ezd%c\t%z1"},
+ {FPU_VFP_EXT_V1xD, 0x0eb00a40, 0x0fbf0fd0, "fcpys%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0eb00ac0, 0x0fbf0fd0, "fabss%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0eb00b40, 0x0fbf0fd0, "fcpyd%c\t%z1, %z0"},
+ {FPU_VFP_EXT_V1, 0x0eb00bc0, 0x0fbf0fd0, "fabsd%c\t%z1, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0eb10a40, 0x0fbf0fd0, "fnegs%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0eb10ac0, 0x0fbf0fd0, "fsqrts%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0eb10b40, 0x0fbf0fd0, "fnegd%c\t%z1, %z0"},
+ {FPU_VFP_EXT_V1, 0x0eb10bc0, 0x0fbf0fd0, "fsqrtd%c\t%z1, %z0"},
+ {FPU_VFP_EXT_V1, 0x0eb70ac0, 0x0fbf0fd0, "fcvtds%c\t%z1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0eb70bc0, 0x0fbf0fd0, "fcvtsd%c\t%y1, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0eb80a40, 0x0fbf0fd0, "fuitos%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0eb80ac0, 0x0fbf0fd0, "fsitos%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0eb80b40, 0x0fbf0fd0, "fuitod%c\t%z1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0eb80bc0, 0x0fbf0fd0, "fsitod%c\t%z1, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0eb40a40, 0x0fbf0f50, "fcmp%7'es%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0eb40b40, 0x0fbf0f50, "fcmp%7'ed%c\t%z1, %z0"},
+ {FPU_VFP_EXT_V3, 0x0eba0a40, 0x0fbe0f50, "f%16?us%7?lhtos%c\t%y1, #%5,0-3k"},
+ {FPU_VFP_EXT_V3, 0x0eba0b40, 0x0fbe0f50, "f%16?us%7?lhtod%c\t%z1, #%5,0-3k"},
+ {FPU_VFP_EXT_V1xD, 0x0ebc0a40, 0x0fbe0f50, "fto%16?sui%7'zs%c\t%y1, %y0"},
+ {FPU_VFP_EXT_V1, 0x0ebc0b40, 0x0fbe0f50, "fto%16?sui%7'zd%c\t%y1, %z0"},
+ {FPU_VFP_EXT_V3, 0x0ebe0a40, 0x0fbe0f50, "fto%16?us%7?lhs%c\t%y1, #%5,0-3k"},
+ {FPU_VFP_EXT_V3, 0x0ebe0b40, 0x0fbe0f50, "fto%16?us%7?lhd%c\t%z1, #%5,0-3k"},
+ {FPU_VFP_EXT_V1, 0x0c500b10, 0x0fb00ff0, "fmrrd%c\t%12-15r, %16-19r, %z0"},
+ {FPU_VFP_EXT_V3, 0x0eb00a00, 0x0fb00ff0, "fconsts%c\t%y1, #%16-19,0-3d"},
+ {FPU_VFP_EXT_V3, 0x0eb00b00, 0x0fb00ff0, "fconstd%c\t%z1, #%16-19,0-3d"},
+ {FPU_VFP_EXT_V2, 0x0c400a10, 0x0ff00fd0, "fmsrr%c\t%12-15r, %16-19r, %y4"},
+ {FPU_VFP_EXT_V2, 0x0c400b10, 0x0ff00fd0, "fmdrr%c\t%z0, %12-15r, %16-19r"},
+ {FPU_VFP_EXT_V2, 0x0c500a10, 0x0ff00fd0, "fmrrs%c\t%12-15r, %16-19r, %y4"},
+ {FPU_VFP_EXT_V1xD, 0x0e000a00, 0x0fb00f50, "fmacs%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0e000a40, 0x0fb00f50, "fnmacs%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1, 0x0e000b00, 0x0fb00f50, "fmacd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1, 0x0e000b40, 0x0fb00f50, "fnmacd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0e100a00, 0x0fb00f50, "fmscs%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0e100a40, 0x0fb00f50, "fnmscs%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1, 0x0e100b00, 0x0fb00f50, "fmscd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1, 0x0e100b40, 0x0fb00f50, "fnmscd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0e200a00, 0x0fb00f50, "fmuls%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0e200a40, 0x0fb00f50, "fnmuls%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1, 0x0e200b00, 0x0fb00f50, "fmuld%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1, 0x0e200b40, 0x0fb00f50, "fnmuld%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0e300a00, 0x0fb00f50, "fadds%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1xD, 0x0e300a40, 0x0fb00f50, "fsubs%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1, 0x0e300b00, 0x0fb00f50, "faddd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1, 0x0e300b40, 0x0fb00f50, "fsubd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0e800a00, 0x0fb00f50, "fdivs%c\t%y1, %y2, %y0"},
+ {FPU_VFP_EXT_V1, 0x0e800b00, 0x0fb00f50, "fdivd%c\t%z1, %z2, %z0"},
+ {FPU_VFP_EXT_V1xD, 0x0d200a00, 0x0fb00f00, "fstmdbs%c\t%16-19r!, %y3"},
+ {FPU_VFP_EXT_V1xD, 0x0d200b00, 0x0fb00f00, "fstmdb%0?xd%c\t%16-19r!, %z3"},
+ {FPU_VFP_EXT_V1xD, 0x0d300a00, 0x0fb00f00, "fldmdbs%c\t%16-19r!, %y3"},
+ {FPU_VFP_EXT_V1xD, 0x0d300b00, 0x0fb00f00, "fldmdb%0?xd%c\t%16-19r!, %z3"},
+ {FPU_VFP_EXT_V1xD, 0x0d000a00, 0x0f300f00, "fsts%c\t%y1, %A"},
+ {FPU_VFP_EXT_V1, 0x0d000b00, 0x0f300f00, "fstd%c\t%z1, %A"},
+ {FPU_VFP_EXT_V1xD, 0x0d100a00, 0x0f300f00, "flds%c\t%y1, %A"},
+ {FPU_VFP_EXT_V1, 0x0d100b00, 0x0f300f00, "fldd%c\t%z1, %A"},
+ {FPU_VFP_EXT_V1xD, 0x0c800a00, 0x0f900f00, "fstmias%c\t%16-19r%21'!, %y3"},
+ {FPU_VFP_EXT_V1xD, 0x0c800b00, 0x0f900f00, "fstmia%0?xd%c\t%16-19r%21'!, %z3"},
+ {FPU_VFP_EXT_V1xD, 0x0c900a00, 0x0f900f00, "fldmias%c\t%16-19r%21'!, %y3"},
+ {FPU_VFP_EXT_V1xD, 0x0c900b00, 0x0f900f00, "fldmia%0?xd%c\t%16-19r%21'!, %z3"},
/* Cirrus coprocessor instructions. */
{ARM_CEXT_MAVERICK, 0x0d100400, 0x0f500f00, "cfldrs%c\tmvf%12-15d, %A"},
@@ -381,9 +418,286 @@
{ARM_EXT_V5, 0xfe000000, 0xff000010, "cdp2\t%8-11d, %20-23d, cr%12-15d, cr%16-19d, cr%0-3d, {%5-7d}"},
{ARM_EXT_V5, 0xfe000010, 0xff100010, "mcr2\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
{ARM_EXT_V5, 0xfe100010, 0xff100010, "mrc2\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
+
{0, 0, 0, 0}
};
+/* Neon opcode table: This does not encode the top byte -- that is
+ checked by the print_insn_neon routine, as it depends on whether we are
+ doing thumb32 or arm32 disassembly. */
+
+/* print_insn_neon recognizes the following format control codes:
+
+ %% %
+
+ %A print v{st,ld}[1234] operands
+ %B print v{st,ld}[1234] any one operands
+ %C print v{st,ld}[1234] single->all operands
+ %D print scalar
+ %E print vmov, vmvn, vorr, vbic encoded constant
+ %F print vtbl,vtbx register list
+
+ %<bitfield>r print as an ARM register
+ %<bitfield>d print the bitfield in decimal
+ %<bitfield>e print the 2^N - bitfield in decimal
+ %<bitfield>D print as a NEON D register
+ %<bitfield>Q print as a NEON Q register
+ %<bitfield>R print as a NEON D or Q register
+ %<bitfield>Sn print byte scaled width limited by n
+ %<bitfield>Tn print short scaled width limited by n
+ %<bitfield>Un print long scaled width limited by n
+
+ %<bitfield>'c print specified char iff bitfield is all ones
+ %<bitfield>`c print specified char iff bitfield is all zeroes
+ %<bitfield>?ab... select from array of values in big endian order */
+
+static const struct opcode32 neon_opcodes[] =
+{
+ /* Extract */
+ {FPU_NEON_EXT_V1, 0xf2b00840, 0xffb00850, "vext.8\t%12-15,22R, %16-19,7R, %0-3,5R, #%8-11d"},
+ {FPU_NEON_EXT_V1, 0xf2b00000, 0xffb00810, "vext.8\t%12-15,22R, %16-19,7R, %0-3,5R, #%8-11d"},
+
+ /* Move data element to all lanes */
+ {FPU_NEON_EXT_V1, 0xf3b40c00, 0xffb70f90, "vdup.32\t%12-15,22R, %0-3,5D[%19d]"},
+ {FPU_NEON_EXT_V1, 0xf3b20c00, 0xffb30f90, "vdup.16\t%12-15,22R, %0-3,5D[%18-19d]"},
+ {FPU_NEON_EXT_V1, 0xf3b10c00, 0xffb10f90, "vdup.8\t%12-15,22R, %0-3,5D[%17-19d]"},
+
+ /* Table lookup */
+ {FPU_NEON_EXT_V1, 0xf3b00800, 0xffb00c50, "vtbl.8\t%12-15,22D, %F, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf3b00840, 0xffb00c50, "vtbx.8\t%12-15,22D, %F, %0-3,5D"},
+
+ /* Two registers, miscellaneous */
+ {FPU_NEON_EXT_V1, 0xf2880a10, 0xfebf0fd0, "vmovl.%24?us8\t%12-15,22Q, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2900a10, 0xfebf0fd0, "vmovl.%24?us16\t%12-15,22Q, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2a00a10, 0xfebf0fd0, "vmovl.%24?us32\t%12-15,22Q, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf3b00500, 0xffbf0f90, "vcnt.8\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00580, 0xffbf0f90, "vmvn\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b20000, 0xffbf0f90, "vswp\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b20200, 0xffb30fd0, "vmovn.i%18-19S2\t%12-15,22D, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf3b20240, 0xffb30fd0, "vqmovun.s%18-19T2\t%12-15,22D, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf3b20280, 0xffb30fd0, "vqmovn.s%18-19T2\t%12-15,22D, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf3b202c0, 0xffb30fd0, "vqmovn.u%18-19T2\t%12-15,22D, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf3b20300, 0xffb30fd0, "vshll.i%18-19S2\t%12-15,22Q, %0-3,5D, #%18-19S2"},
+ {FPU_NEON_EXT_V1, 0xf3bb0400, 0xffbf0e90, "vrecpe.%8?fu%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3bb0480, 0xffbf0e90, "vrsqrte.%8?fu%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00000, 0xffb30f90, "vrev64.%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00080, 0xffb30f90, "vrev32.%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00100, 0xffb30f90, "vrev16.%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00400, 0xffb30f90, "vcls.s%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00480, 0xffb30f90, "vclz.i%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00700, 0xffb30f90, "vqabs.s%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00780, 0xffb30f90, "vqneg.s%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b20080, 0xffb30f90, "vtrn.%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b20100, 0xffb30f90, "vuzp.%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b20180, 0xffb30f90, "vzip.%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b10000, 0xffb30b90, "vcgt.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
+ {FPU_NEON_EXT_V1, 0xf3b10080, 0xffb30b90, "vcge.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
+ {FPU_NEON_EXT_V1, 0xf3b10100, 0xffb30b90, "vceq.%10?fi%18-19S2\t%12-15,22R, %0-3,5R, #0"},
+ {FPU_NEON_EXT_V1, 0xf3b10180, 0xffb30b90, "vcle.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
+ {FPU_NEON_EXT_V1, 0xf3b10200, 0xffb30b90, "vclt.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
+ {FPU_NEON_EXT_V1, 0xf3b10300, 0xffb30b90, "vabs.%10?fs%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b10380, 0xffb30b90, "vneg.%10?fs%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00200, 0xffb30f10, "vpaddl.%7?us%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b00600, 0xffb30f10, "vpadal.%7?us%18-19S2\t%12-15,22R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3b30600, 0xffb30e10, "vcvt.%7-8?usff%18-19Sa.%7-8?ffus%18-19Sa\t%12-15,22R, %0-3,5R"},
+
+ /* Three registers of the same length */
+ {FPU_NEON_EXT_V1, 0xf2000110, 0xffb00f10, "vand\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2100110, 0xffb00f10, "vbic\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2200110, 0xffb00f10, "vorr\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2300110, 0xffb00f10, "vorn\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000110, 0xffb00f10, "veor\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3100110, 0xffb00f10, "vbsl\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3200110, 0xffb00f10, "vbit\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3300110, 0xffb00f10, "vbif\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000d00, 0xffa00f10, "vadd.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000d10, 0xffa00f10, "vmla.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000e00, 0xffa00f10, "vceq.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000f00, 0xffa00f10, "vmax.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000f10, 0xffa00f10, "vrecps.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2200d00, 0xffa00f10, "vsub.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2200d10, 0xffa00f10, "vmls.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2200f00, 0xffa00f10, "vmin.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2200f10, 0xffa00f10, "vrsqrts.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000d00, 0xffa00f10, "vpadd.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000d10, 0xffa00f10, "vmul.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000e00, 0xffa00f10, "vcge.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000e10, 0xffa00f10, "vacge.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000f00, 0xffa00f10, "vpmax.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3200d00, 0xffa00f10, "vabd.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3200e00, 0xffa00f10, "vcgt.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3200e10, 0xffa00f10, "vacgt.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3200f00, 0xffa00f10, "vpmin.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000800, 0xff800f10, "vadd.i%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000810, 0xff800f10, "vtst.%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000900, 0xff800f10, "vmla.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000b00, 0xff800f10, "vqdmulh.s%20-21S6\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000b10, 0xff800f10, "vpadd.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000800, 0xff800f10, "vsub.i%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000810, 0xff800f10, "vceq.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000900, 0xff800f10, "vmls.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf3000b00, 0xff800f10, "vqrdmulh.s%20-21S6\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000000, 0xfe800f10, "vhadd.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000010, 0xfe800f10, "vqadd.%24?us%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000100, 0xfe800f10, "vrhadd.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000200, 0xfe800f10, "vhsub.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000210, 0xfe800f10, "vqsub.%24?us%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000300, 0xfe800f10, "vcgt.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000310, 0xfe800f10, "vcge.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000400, 0xfe800f10, "vshl.%24?us%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000410, 0xfe800f10, "vqshl.%24?us%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000500, 0xfe800f10, "vrshl.%24?us%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000510, 0xfe800f10, "vqrshl.%24?us%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000600, 0xfe800f10, "vmax.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000610, 0xfe800f10, "vmin.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000700, 0xfe800f10, "vabd.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000710, 0xfe800f10, "vaba.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000910, 0xfe800f10, "vmul.%24?pi%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000a00, 0xfe800f10, "vpmax.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+ {FPU_NEON_EXT_V1, 0xf2000a10, 0xfe800f10, "vpmin.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
+
+ /* One register and an immediate value */
+ {FPU_NEON_EXT_V1, 0xf2800e10, 0xfeb80fb0, "vmov.i8\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800e30, 0xfeb80fb0, "vmov.i64\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800f10, 0xfeb80fb0, "vmov.f32\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800810, 0xfeb80db0, "vmov.i16\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800830, 0xfeb80db0, "vmvn.i16\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800910, 0xfeb80db0, "vorr.i16\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800930, 0xfeb80db0, "vbic.i16\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800c10, 0xfeb80eb0, "vmov.i32\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800c30, 0xfeb80eb0, "vmvn.i32\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800110, 0xfeb809b0, "vorr.i32\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800130, 0xfeb809b0, "vbic.i32\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800010, 0xfeb808b0, "vmov.i32\t%12-15,22R, %E"},
+ {FPU_NEON_EXT_V1, 0xf2800030, 0xfeb808b0, "vmvn.i32\t%12-15,22R, %E"},
+
+ /* Two registers and a shift amount */
+ {FPU_NEON_EXT_V1, 0xf2880810, 0xffb80fd0, "vshrn.i16\t%12-15,22D, %0-3,5Q, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880850, 0xffb80fd0, "vrshrn.i16\t%12-15,22D, %0-3,5Q, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880810, 0xfeb80fd0, "vqshrun.s16\t%12-15,22D, %0-3,5Q, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880850, 0xfeb80fd0, "vqrshrun.s16\t%12-15,22D, %0-3,5Q, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880910, 0xfeb80fd0, "vqshrn.%24?us16\t%12-15,22D, %0-3,5Q, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880950, 0xfeb80fd0, "vqrshrn.%24?us16\t%12-15,22D, %0-3,5Q, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880a10, 0xfeb80fd0, "vshll.%24?us8\t%12-15,22D, %0-3,5Q, #%16-18d"},
+ {FPU_NEON_EXT_V1, 0xf2900810, 0xffb00fd0, "vshrn.i32\t%12-15,22D, %0-3,5Q, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900850, 0xffb00fd0, "vrshrn.i32\t%12-15,22D, %0-3,5Q, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2880510, 0xffb80f90, "vshl.%24?us8\t%12-15,22R, %0-3,5R, #%16-18d"},
+ {FPU_NEON_EXT_V1, 0xf3880410, 0xffb80f90, "vsri.8\t%12-15,22R, %0-3,5R, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf3880510, 0xffb80f90, "vsli.8\t%12-15,22R, %0-3,5R, #%16-18d"},
+ {FPU_NEON_EXT_V1, 0xf3880610, 0xffb80f90, "vqshlu.s8\t%12-15,22R, %0-3,5R, #%16-18d"},
+ {FPU_NEON_EXT_V1, 0xf2900810, 0xfeb00fd0, "vqshrun.s32\t%12-15,22D, %0-3,5Q, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900850, 0xfeb00fd0, "vqrshrun.s32\t%12-15,22D, %0-3,5Q, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900910, 0xfeb00fd0, "vqshrn.%24?us32\t%12-15,22D, %0-3,5Q, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900950, 0xfeb00fd0, "vqrshrn.%24?us32\t%12-15,22D, %0-3,5Q, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900a10, 0xfeb00fd0, "vshll.%24?us16\t%12-15,22D, %0-3,5Q, #%16-19d"},
+ {FPU_NEON_EXT_V1, 0xf2880010, 0xfeb80f90, "vshr.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880110, 0xfeb80f90, "vsra.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880210, 0xfeb80f90, "vrshr.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880310, 0xfeb80f90, "vrsra.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
+ {FPU_NEON_EXT_V1, 0xf2880710, 0xfeb80f90, "vqshl.%24?us8\t%12-15,22R, %0-3,5R, #%16-18d"},
+ {FPU_NEON_EXT_V1, 0xf2a00810, 0xffa00fd0, "vshrn.i64\t%12-15,22D, %0-3,5Q, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2a00850, 0xffa00fd0, "vrshrn.i64\t%12-15,22D, %0-3,5Q, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2900510, 0xffb00f90, "vshl.%24?us16\t%12-15,22R, %0-3,5R, #%16-19d"},
+ {FPU_NEON_EXT_V1, 0xf3900410, 0xffb00f90, "vsri.16\t%12-15,22R, %0-3,5R, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf3900510, 0xffb00f90, "vsli.16\t%12-15,22R, %0-3,5R, #%16-19d"},
+ {FPU_NEON_EXT_V1, 0xf3900610, 0xffb00f90, "vqshlu.s16\t%12-15,22R, %0-3,5R, #%16-19d"},
+ {FPU_NEON_EXT_V1, 0xf2a00a10, 0xfea00fd0, "vshll.%24?us32\t%12-15,22D, %0-3,5Q, #%16-20d"},
+ {FPU_NEON_EXT_V1, 0xf2900010, 0xfeb00f90, "vshr.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900110, 0xfeb00f90, "vsra.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900210, 0xfeb00f90, "vrshr.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900310, 0xfeb00f90, "vrsra.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
+ {FPU_NEON_EXT_V1, 0xf2900710, 0xfeb00f90, "vqshl.%24?us16\t%12-15,22R, %0-3,5R, #%16-19d"},
+ {FPU_NEON_EXT_V1, 0xf2800810, 0xfec00fd0, "vqshrun.s64\t%12-15,22D, %0-3,5Q, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2800850, 0xfec00fd0, "vqrshrun.s64\t%12-15,22D, %0-3,5Q, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2800910, 0xfec00fd0, "vqshrn.%24?us64\t%12-15,22D, %0-3,5Q, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2800950, 0xfec00fd0, "vqrshrn.%24?us64\t%12-15,22D, %0-3,5Q, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2a00510, 0xffa00f90, "vshl.%24?us32\t%12-15,22R, %0-3,5R, #%16-20d"},
+ {FPU_NEON_EXT_V1, 0xf3a00410, 0xffa00f90, "vsri.32\t%12-15,22R, %0-3,5R, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf3a00510, 0xffa00f90, "vsli.32\t%12-15,22R, %0-3,5R, #%16-20d"},
+ {FPU_NEON_EXT_V1, 0xf3a00610, 0xffa00f90, "vqshlu.s32\t%12-15,22R, %0-3,5R, #%16-20d"},
+ {FPU_NEON_EXT_V1, 0xf2a00010, 0xfea00f90, "vshr.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2a00110, 0xfea00f90, "vsra.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2a00210, 0xfea00f90, "vrshr.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2a00310, 0xfea00f90, "vrsra.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
+ {FPU_NEON_EXT_V1, 0xf2a00710, 0xfea00f90, "vqshl.%24?us32\t%12-15,22R, %0-3,5R, #%16-20d"},
+ {FPU_NEON_EXT_V1, 0xf2800590, 0xff800f90, "vshl.%24?us64\t%12-15,22R, %0-3,5R, #%16-21d"},
+ {FPU_NEON_EXT_V1, 0xf3800490, 0xff800f90, "vsri.64\t%12-15,22R, %0-3,5R, #%16-21e"},
+ {FPU_NEON_EXT_V1, 0xf3800590, 0xff800f90, "vsli.64\t%12-15,22R, %0-3,5R, #%16-21d"},
+ {FPU_NEON_EXT_V1, 0xf3800690, 0xff800f90, "vqshlu.s64\t%12-15,22R, %0-3,5R, #%16-21d"},
+ {FPU_NEON_EXT_V1, 0xf2800090, 0xfe800f90, "vshr.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
+ {FPU_NEON_EXT_V1, 0xf2800190, 0xfe800f90, "vsra.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
+ {FPU_NEON_EXT_V1, 0xf2800290, 0xfe800f90, "vrshr.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
+ {FPU_NEON_EXT_V1, 0xf2800390, 0xfe800f90, "vrsra.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
+ {FPU_NEON_EXT_V1, 0xf2800790, 0xfe800f90, "vqshl.%24?us64\t%12-15,22R, %0-3,5R, #%16-21d"},
+ {FPU_NEON_EXT_V1, 0xf2a00e10, 0xfea00e90, "vcvt.%24,8?usff32.%24,8?ffus32\t%12-15,22R, %0-3,5R, #%16-20e"},
+
+ /* Three registers of different lengths */
+ {FPU_NEON_EXT_V1, 0xf2800e00, 0xfea00f50, "vmull.p%20S0\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800400, 0xff800f50, "vaddhn.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf2800600, 0xff800f50, "vsubhn.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf2800900, 0xff800f50, "vqdmlal.s%20-21S6\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800b00, 0xff800f50, "vqdmlsl.s%20-21S6\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800d00, 0xff800f50, "vqdmull.s%20-21S6\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf3800400, 0xff800f50, "vraddhn.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf3800600, 0xff800f50, "vrsubhn.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
+ {FPU_NEON_EXT_V1, 0xf2800000, 0xfe800f50, "vaddl.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800100, 0xfe800f50, "vaddw.%24?us%20-21S2\t%12-15,22Q, %16-19,7Q, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800200, 0xfe800f50, "vsubl.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800300, 0xfe800f50, "vsubw.%24?us%20-21S2\t%12-15,22Q, %16-19,7Q, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800500, 0xfe800f50, "vabal.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800700, 0xfe800f50, "vabdl.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800800, 0xfe800f50, "vmlal.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800a00, 0xfe800f50, "vmlsl.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+ {FPU_NEON_EXT_V1, 0xf2800c00, 0xfe800f50, "vmull.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
+
+ /* Two registers and a scalar */
+ {FPU_NEON_EXT_V1, 0xf2800040, 0xff800f50, "vmla.i%20-21S6\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800140, 0xff800f50, "vmla.f%20-21Sa\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800340, 0xff800f50, "vqdmlal.s%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800440, 0xff800f50, "vmls.i%20-21S6\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800540, 0xff800f50, "vmls.f%20-21S6\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800740, 0xff800f50, "vqdmlsl.s%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800840, 0xff800f50, "vmul.i%20-21S6\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800940, 0xff800f50, "vmul.f%20-21Sa\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800b40, 0xff800f50, "vqdmull.s%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800c40, 0xff800f50, "vqdmulh.s%20-21S6\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800d40, 0xff800f50, "vqrdmulh.s%20-21S6\t%12-15,22D, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800040, 0xff800f50, "vmla.i%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800140, 0xff800f50, "vmla.f%20-21Sa\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800440, 0xff800f50, "vmls.i%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800540, 0xff800f50, "vmls.f%20-21Sa\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800840, 0xff800f50, "vmul.i%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800940, 0xff800f50, "vmul.f%20-21Sa\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800c40, 0xff800f50, "vqdmulh.s%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf3800d40, 0xff800f50, "vqrdmulh.s%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800240, 0xfe800f50, "vmlal.%24?us%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800640, 0xfe800f50, "vmlsl.%24?us%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
+ {FPU_NEON_EXT_V1, 0xf2800a40, 0xfe800f50, "vmull.%24?us%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
+
+ /* Element and structure load/store */
+ {FPU_NEON_EXT_V1, 0xf4a00fc0, 0xffb00fc0, "vld4.32\t%C"},
+ {FPU_NEON_EXT_V1, 0xf4a00c00, 0xffb00f00, "vld1.%6-7S2\t%C"},
+ {FPU_NEON_EXT_V1, 0xf4a00d00, 0xffb00f00, "vld2.%6-7S2\t%C"},
+ {FPU_NEON_EXT_V1, 0xf4a00e00, 0xffb00f00, "vld3.%6-7S2\t%C"},
+ {FPU_NEON_EXT_V1, 0xf4a00f00, 0xffb00f00, "vld4.%6-7S2\t%C"},
+ {FPU_NEON_EXT_V1, 0xf4000200, 0xff900f00, "v%21?ls%21?dt1.%6-7S3\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000300, 0xff900f00, "v%21?ls%21?dt2.%6-7S2\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000400, 0xff900f00, "v%21?ls%21?dt3.%6-7S2\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000500, 0xff900f00, "v%21?ls%21?dt3.%6-7S2\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000600, 0xff900f00, "v%21?ls%21?dt1.%6-7S3\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000700, 0xff900f00, "v%21?ls%21?dt1.%6-7S3\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000800, 0xff900f00, "v%21?ls%21?dt2.%6-7S2\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000900, 0xff900f00, "v%21?ls%21?dt2.%6-7S2\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000a00, 0xff900f00, "v%21?ls%21?dt1.%6-7S3\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4000000, 0xff900e00, "v%21?ls%21?dt4.%6-7S2\t%A"},
+ {FPU_NEON_EXT_V1, 0xf4800000, 0xff900300, "v%21?ls%21?dt1.%10-11S2\t%B"},
+ {FPU_NEON_EXT_V1, 0xf4800100, 0xff900300, "v%21?ls%21?dt2.%10-11S2\t%B"},
+ {FPU_NEON_EXT_V1, 0xf4800200, 0xff900300, "v%21?ls%21?dt3.%10-11S2\t%B"},
+ {FPU_NEON_EXT_V1, 0xf4800300, 0xff900300, "v%21?ls%21?dt4.%10-11S2\t%B"},
+
+ {0,0 ,0, 0}
+};
+
/* Opcode tables: ARM, 16-bit Thumb, 32-bit Thumb. All three are partially
ordered: they must be searched linearly from the top to obtain a correct
match. */
@@ -410,10 +724,10 @@
%<bitfield>W print the bitfield plus one in decimal
%<bitfield>x print the bitfield in hex
%<bitfield>X print the bitfield as 1 hex digit without leading "0x"
-
- %<bitnum>'c print specified char iff bit is one
- %<bitnum>`c print specified char iff bit is zero
- %<bitnum>?ab print a if bit is one else print b
+
+ %<bitfield>'c print specified char iff bitfield is all ones
+ %<bitfield>`c print specified char iff bitfield is all zeroes
+ %<bitfield>?ab... select from array of values in big endian order
%e print arm SMI operand (bits 0..7,8..19).
%E print the LSB and WIDTH fields of a BFI or BFC instruction.
@@ -844,9 +1158,9 @@
%<bitfield>r print bitfield as an ARM register
%<bitfield>c print bitfield as a condition code
- %<bitnum>'c print "c" iff bit is one
- %<bitnum>`c print "c" iff bit is zero
- %<bitnum>?ab print "a" if bit is one, else "b"
+ %<bitfield>'c print specified char iff bitfield is all ones
+ %<bitfield>`c print specified char iff bitfield is all zeroes
+ %<bitfield>?ab... select from array of values in big endian order
With one exception at the bottom (done because BL and BLX(1) need
to come dead last), this table was machine-sorted first in
@@ -1149,6 +1463,43 @@
return 16;
}
+/* Decode a bitfield of the form matching regexp (N(-N)?,)*N(-N)?.
+ Returns pointer to following character of the format string and
+ fills in *VALUEP and *WIDTHP with the extracted value and number of
+ bits extracted. WIDTHP can be NULL. */
+
+static const char *
+arm_decode_bitfield (const char *ptr, unsigned long insn,
+ unsigned long *valuep, int *widthp)
+{
+ unsigned long value = 0;
+ int width = 0;
+
+ do
+ {
+ int start, end;
+ int bits;
+
+ for (start = 0; *ptr >= '0' && *ptr <= '9'; ptr++)
+ start = start * 10 + *ptr - '0';
+ if (*ptr == '-')
+ for (end = 0, ptr++; *ptr >= '0' && *ptr <= '9'; ptr++)
+ end = end * 10 + *ptr - '0';
+ else
+ end = start;
+ bits = end - start;
+ if (bits < 0)
+ abort ();
+ value |= ((insn >> start) & ((2ul << bits) - 1)) << width;
+ width += bits + 1;
+ }
+ while (*ptr++ == ',');
+ *valuep = value;
+ if (widthp)
+ *widthp = width;
+ return ptr - 1;
+}
+
static void
arm_decode_shift (long given, fprintf_ftype func, void *stream)
{
@@ -1185,7 +1536,7 @@
recognised coprocessor instruction. */
static bfd_boolean
-print_insn_coprocessor (struct disassemble_info *info, long given,
+print_insn_coprocessor (bfd_vma pc, struct disassemble_info *info, long given,
bfd_boolean thumb)
{
const struct opcode32 *insn;
@@ -1265,6 +1616,46 @@
}
break;
+ case 'B':
+ {
+ int regno = ((given >> 12) & 0xf) | ((given >> (22 - 4)) & 0x10);
+ int offset = (given >> 1) & 0x3f;
+
+ if (offset == 1)
+ func (stream, "{d%d}", regno);
+ else if (regno + offset > 32)
+ func (stream, "{d%d-<overflow reg d%d>}", regno, regno + offset - 1);
+ else
+ func (stream, "{d%d-d%d}", regno, regno + offset - 1);
+ }
+ break;
+
+ case 'C':
+ {
+ int rn = (given >> 16) & 0xf;
+ int offset = (given & 0xff) * 4;
+ int add = (given >> 23) & 1;
+
+ func (stream, "[%s", arm_regnames[rn]);
+
+ if (offset)
+ {
+ if (!add)
+ offset = -offset;
+ func (stream, ", #%d", offset);
+ }
+ func (stream, "]");
+ if (rn == 15)
+ {
+ func (stream, "\t; ");
+ /* FIXME: Unsure if info->bytes_per_chunk is the
+ right thing to use here. */
+ info->print_address_func (offset + pc
+ + info->bytes_per_chunk * 2, info);
+ }
+ }
+ break;
+
case 'c':
func (stream, "%s",
arm_conditional [(given >> 28) & 0xf]);
@@ -1360,206 +1751,158 @@
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
- int bitstart = *c++ - '0';
- int bitend = 0;
- while (*c >= '0' && *c <= '9')
- bitstart = (bitstart * 10) + *c++ - '0';
+ int width;
+ unsigned long value;
+
+ c = arm_decode_bitfield (c, given, &value, &width);
switch (*c)
{
- case '-':
- c++;
-
- while (*c >= '0' && *c <= '9')
- bitend = (bitend * 10) + *c++ - '0';
-
- if (!bitend)
- abort ();
-
- switch (*c)
- {
- case 'r':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- func (stream, "%s", arm_regnames[reg]);
- }
- break;
- case 'd':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- func (stream, "%ld", reg);
- }
- break;
- case 'f':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- if (reg > 7)
- func (stream, "#%s",
- arm_fp_const[reg & 7]);
- else
- func (stream, "f%ld", reg);
- }
- break;
-
- case 'w':
- {
- long reg;
-
- if (bitstart != bitend)
- {
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
- if (bitend - bitstart == 1)
- func (stream, "%s", iwmmxt_wwnames[reg]);
- else
- func (stream, "%s", iwmmxt_wwssnames[reg]);
- }
- else
- {
- reg = (((given >> 8) & 0x1) |
- ((given >> 22) & 0x1));
- func (stream, "%s", iwmmxt_wwnames[reg]);
- }
- }
- break;
-
- case 'g':
- {
- long reg;
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
- func (stream, "%s", iwmmxt_regnames[reg]);
- }
- break;
-
- case 'G':
- {
- long reg;
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
- func (stream, "%s", iwmmxt_cregnames[reg]);
- }
- break;
-
- default:
- abort ();
- }
+ case 'r':
+ func (stream, "%s", arm_regnames[value]);
+ break;
+ case 'D':
+ func (stream, "d%ld", value);
+ break;
+ case 'Q':
+ if (value & 1)
+ func (stream, "<illegal reg q%ld.5>", value >> 1);
+ else
+ func (stream, "q%ld", value >> 1);
+ break;
+ case 'd':
+ func (stream, "%ld", value);
+ break;
+ case 'k':
+ {
+ int from = (given & (1 << 7)) ? 32 : 16;
+ func (stream, "%ld", from - value);
+ }
+ break;
+
+ case 'f':
+ if (value > 7)
+ func (stream, "#%s", arm_fp_const[value & 7]);
+ else
+ func (stream, "f%ld", value);
break;
- case 'y':
- case 'z':
- {
- int single = *c == 'y';
- int regno;
-
- switch (bitstart)
- {
- case 4: /* Sm pair */
- func (stream, "{");
- /* Fall through. */
- case 0: /* Sm, Dm */
- regno = given & 0x0000000f;
- if (single)
- {
- regno <<= 1;
- regno += (given >> 5) & 1;
- }
- break;
-
- case 1: /* Sd, Dd */
- regno = (given >> 12) & 0x0000000f;
- if (single)
- {
- regno <<= 1;
- regno += (given >> 22) & 1;
- }
- break;
-
- case 2: /* Sn, Dn */
- regno = (given >> 16) & 0x0000000f;
- if (single)
- {
- regno <<= 1;
- regno += (given >> 7) & 1;
- }
- break;
-
- case 3: /* List */
- func (stream, "{");
- regno = (given >> 12) & 0x0000000f;
- if (single)
- {
- regno <<= 1;
- regno += (given >> 22) & 1;
- }
- break;
-
-
- default:
- abort ();
- }
-
- func (stream, "%c%d", single ? 's' : 'd', regno);
-
- if (bitstart == 3)
- {
- int count = given & 0xff;
-
- if (single == 0)
- count >>= 1;
-
- if (--count)
- {
- func (stream, "-%c%d",
- single ? 's' : 'd',
- regno + count);
- }
-
- func (stream, "}");
- }
- else if (bitstart == 4)
- func (stream, ", %c%d}", single ? 's' : 'd',
- regno + 1);
-
- break;
- }
-
+ case 'w':
+ if (width == 2)
+ func (stream, "%s", iwmmxt_wwnames[value]);
+ else
+ func (stream, "%s", iwmmxt_wwssnames[value]);
break;
+ case 'g':
+ func (stream, "%s", iwmmxt_regnames[value]);
+ break;
+ case 'G':
+ func (stream, "%s", iwmmxt_cregnames[value]);
+ break;
case '`':
c++;
- if ((given & (1 << bitstart)) == 0)
+ if (value == 0)
func (stream, "%c", *c);
break;
case '\'':
c++;
- if ((given & (1 << bitstart)) != 0)
+ if (value == ((1ul << width) - 1))
func (stream, "%c", *c);
break;
case '?':
- ++c;
- if ((given & (1 << bitstart)) != 0)
- func (stream, "%c", *c++);
- else
- func (stream, "%c", *++c);
+ func (stream, "%c", c[(1 << width) - (int)value]);
+ c += 1 << width;
break;
default:
abort ();
}
break;
+ case 'y':
+ case 'z':
+ {
+ int single = *c++ == 'y';
+ int regno;
+
+ switch (*c)
+ {
+ case '4': /* Sm pair */
+ func (stream, "{");
+ /* Fall through. */
+ case '0': /* Sm, Dm */
+ regno = given & 0x0000000f;
+ if (single)
+ {
+ regno <<= 1;
+ regno += (given >> 5) & 1;
+ }
+ else
+ regno += ((given >> 5) & 1) << 4;
+ break;
+
+ case '1': /* Sd, Dd */
+ regno = (given >> 12) & 0x0000000f;
+ if (single)
+ {
+ regno <<= 1;
+ regno += (given >> 22) & 1;
+ }
+ else
+ regno += ((given >> 22) & 1) << 4;
+ break;
+
+ case '2': /* Sn, Dn */
+ regno = (given >> 16) & 0x0000000f;
+ if (single)
+ {
+ regno <<= 1;
+ regno += (given >> 7) & 1;
+ }
+ else
+ regno += ((given >> 7) & 1) << 4;
+ break;
+
+ case '3': /* List */
+ func (stream, "{");
+ regno = (given >> 12) & 0x0000000f;
+ if (single)
+ {
+ regno <<= 1;
+ regno += (given >> 22) & 1;
+ }
+ else
+ regno += ((given >> 22) & 1) << 4;
+ break;
+
+ default:
+ abort ();
+ }
+
+ func (stream, "%c%d", single ? 's' : 'd', regno);
+
+ if (*c == '3')
+ {
+ int count = given & 0xff;
+
+ if (single == 0)
+ count >>= 1;
+
+ if (--count)
+ {
+ func (stream, "-%c%d",
+ single ? 's' : 'd',
+ regno + count);
+ }
+
+ func (stream, "}");
+ }
+ else if (*c == '4')
+ func (stream, ", %c%d}", single ? 's' : 'd',
+ regno + 1);
+ }
+ break;
+
case 'L':
switch (given & 0x00400100)
{
@@ -1712,6 +2055,458 @@
}
}
+/* Print one neon instruction on INFO->STREAM.
+ Return TRUE if the instuction matched, FALSE if this is not a
+ recognised neon instruction. */
+
+static bfd_boolean
+print_insn_neon (struct disassemble_info *info, long given, bfd_boolean thumb)
+{
+ const struct opcode32 *insn;
+ void *stream = info->stream;
+ fprintf_ftype func = info->fprintf_func;
+
+ if (thumb)
+ {
+ if ((given & 0xef000000) == 0xef000000)
+ {
+ /* move bit 28 to bit 24 to translate Thumb2 to ARM encoding. */
+ unsigned long bit28 = given & (1 << 28);
+
+ given &= 0x00ffffff;
+ if (bit28)
+ given |= 0xf3000000;
+ else
+ given |= 0xf2000000;
+ }
+ else if ((given & 0xff000000) == 0xf9000000)
+ given ^= 0xf9000000 ^ 0xf4000000;
+ else
+ return FALSE;
+ }
+
+ for (insn = neon_opcodes; insn->assembler; insn++)
+ {
+ if ((given & insn->mask) == insn->value)
+ {
+ const char *c;
+
+ for (c = insn->assembler; *c; c++)
+ {
+ if (*c == '%')
+ {
+ switch (*++c)
+ {
+ case '%':
+ func (stream, "%%");
+ break;
+
+ case 'A':
+ {
+ static const unsigned char enc[16] =
+ {
+ 0x4, 0x14, /* st4 0,1 */
+ 0x4, /* st1 2 */
+ 0x4, /* st2 3 */
+ 0x3, /* st3 4 */
+ 0x13, /* st3 5 */
+ 0x3, /* st1 6 */
+ 0x1, /* st1 7 */
+ 0x2, /* st2 8 */
+ 0x12, /* st2 9 */
+ 0x2, /* st1 10 */
+ 0, 0, 0, 0, 0
+ };
+ int rd = ((given >> 12) & 0xf) | (((given >> 22) & 1) << 4);
+ int rn = ((given >> 16) & 0xf);
+ int rm = ((given >> 0) & 0xf);
+ int align = ((given >> 4) & 0x3);
+ int type = ((given >> 8) & 0xf);
+ int n = enc[type] & 0xf;
+ int stride = (enc[type] >> 4) + 1;
+ int ix;
+
+ func (stream, "{");
+ if (stride > 1)
+ for (ix = 0; ix != n; ix++)
+ func (stream, "%sd%d", ix ? "," : "", rd + ix * stride);
+ else if (n == 1)
+ func (stream, "d%d", rd);
+ else
+ func (stream, "d%d-d%d", rd, rd + n - 1);
+ func (stream, "}, [%s", arm_regnames[rn]);
+ if (align)
+ func (stream, ", :%d", 32 << align);
+ func (stream, "]");
+ if (rm == 0xd)
+ func (stream, "!");
+ else if (rm != 0xf)
+ func (stream, ", %s", arm_regnames[rm]);
+ }
+ break;
+
+ case 'B':
+ {
+ int rd = ((given >> 12) & 0xf) | (((given >> 22) & 1) << 4);
+ int rn = ((given >> 16) & 0xf);
+ int rm = ((given >> 0) & 0xf);
+ int idx_align = ((given >> 4) & 0xf);
+ int align = 0;
+ int size = ((given >> 10) & 0x3);
+ int idx = idx_align >> (size + 1);
+ int length = ((given >> 8) & 3) + 1;
+ int stride = 1;
+ int i;
+
+ if (length > 1 && size > 0)
+ stride = (idx_align & (1 << size)) ? 2 : 1;
+
+ switch (length)
+ {
+ case 1:
+ {
+ int amask = (1 << size) - 1;
+ if ((idx_align & (1 << size)) != 0)
+ return FALSE;
+ if (size > 0)
+ {
+ if ((idx_align & amask) == amask)
+ align = 8 << size;
+ else if ((idx_align & amask) != 0)
+ return FALSE;
+ }
+ }
+ break;
+
+ case 2:
+ if (size == 2 && (idx_align & 2) != 0)
+ return FALSE;
+ align = (idx_align & 1) ? 16 << size : 0;
+ break;
+
+ case 3:
+ if ((size == 2 && (idx_align & 3) != 0)
+ || (idx_align & 1) != 0)
+ return FALSE;
+ break;
+
+ case 4:
+ if (size == 2)
+ {
+ if ((idx_align & 3) == 3)
+ return FALSE;
+ align = (idx_align & 3) * 64;
+ }
+ else
+ align = (idx_align & 1) ? 32 << size : 0;
+ break;
+
+ default:
+ abort ();
+ }
+
+ func (stream, "{");
+ for (i = 0; i < length; i++)
+ func (stream, "%sd%d[%d]", (i == 0) ? "" : ",",
+ rd + i * stride, idx);
+ func (stream, "}, [%s", arm_regnames[rn]);
+ if (align)
+ func (stream, ", :%d", align);
+ func (stream, "]");
+ if (rm == 0xd)
+ func (stream, "!");
+ else if (rm != 0xf)
+ func (stream, ", %s", arm_regnames[rm]);
+ }
+ break;
+
+ case 'C':
+ {
+ int rd = ((given >> 12) & 0xf) | (((given >> 22) & 1) << 4);
+ int rn = ((given >> 16) & 0xf);
+ int rm = ((given >> 0) & 0xf);
+ int align = ((given >> 4) & 0x1);
+ int size = ((given >> 6) & 0x3);
+ int type = ((given >> 8) & 0x3);
+ int n = type + 1;
+ int stride = ((given >> 5) & 0x1);
+ int ix;
+
+ if (stride && (n == 1))
+ n++;
+ else
+ stride++;
+
+ func (stream, "{");
+ if (stride > 1)
+ for (ix = 0; ix != n; ix++)
+ func (stream, "%sd%d[]", ix ? "," : "", rd + ix * stride);
+ else if (n == 1)
+ func (stream, "d%d[]", rd);
+ else
+ func (stream, "d%d[]-d%d[]", rd, rd + n - 1);
+ func (stream, "}, [%s", arm_regnames[rn]);
+ if (align)
+ {
+ int align = (8 * (type + 1)) << size;
+ if (type == 3)
+ align = (size > 1) ? align >> 1 : align;
+ if (type == 2 || (type == 0 && !size))
+ func (stream, ", :<bad align %d>", align);
+ else
+ func (stream, ", :%d", align);
+ }
+ func (stream, "]");
+ if (rm == 0xd)
+ func (stream, "!");
+ else if (rm != 0xf)
+ func (stream, ", %s", arm_regnames[rm]);
+ }
+ break;
+
+ case 'D':
+ {
+ int raw_reg = (given & 0xf) | ((given >> 1) & 0x10);
+ int size = (given >> 20) & 3;
+ int reg = raw_reg & ((4 << size) - 1);
+ int ix = raw_reg >> size >> 2;
+
+ func (stream, "d%d[%d]", reg, ix);
+ }
+ break;
+
+ case 'E':
+ /* Neon encoded constant for mov, mvn, vorr, vbic */
+ {
+ int bits = 0;
+ int cmode = (given >> 8) & 0xf;
+ int op = (given >> 5) & 0x1;
+ unsigned long value = 0, hival = 0;
+ unsigned shift;
+ int size = 0;
+ int isfloat = 0;
+
+ bits |= ((given >> 24) & 1) << 7;
+ bits |= ((given >> 16) & 7) << 4;
+ bits |= ((given >> 0) & 15) << 0;
+
+ if (cmode < 8)
+ {
+ shift = (cmode >> 1) & 3;
+ value = (unsigned long)bits << (8 * shift);
+ size = 32;
+ }
+ else if (cmode < 12)
+ {
+ shift = (cmode >> 1) & 1;
+ value = (unsigned long)bits << (8 * shift);
+ size = 16;
+ }
+ else if (cmode < 14)
+ {
+ shift = (cmode & 1) + 1;
+ value = (unsigned long)bits << (8 * shift);
+ value |= (1ul << (8 * shift)) - 1;
+ size = 32;
+ }
+ else if (cmode == 14)
+ {
+ if (op)
+ {
+ /* bit replication into bytes */
+ int ix;
+ unsigned long mask;
+
+ value = 0;
+ hival = 0;
+ for (ix = 7; ix >= 0; ix--)
+ {
+ mask = ((bits >> ix) & 1) ? 0xff : 0;
+ if (ix <= 3)
+ value = (value << 8) | mask;
+ else
+ hival = (hival << 8) | mask;
+ }
+ size = 64;
+ }
+ else
+ {
+ /* byte replication */
+ value = (unsigned long)bits;
+ size = 8;
+ }
+ }
+ else if (!op)
+ {
+ /* floating point encoding */
+ int tmp;
+
+ value = (unsigned long)(bits & 0x7f) << 19;
+ value |= (unsigned long)(bits & 0x80) << 24;
+ tmp = bits & 0x40 ? 0x3c : 0x40;
+ value |= (unsigned long)tmp << 24;
+ size = 32;
+ isfloat = 1;
+ }
+ else
+ {
+ func (stream, "<illegal constant %.8x:%x:%x>",
+ bits, cmode, op);
+ size = 32;
+ break;
+ }
+ switch (size)
+ {
+ case 8:
+ func (stream, "#%ld\t; 0x%.2lx", value, value);
+ break;
+
+ case 16:
+ func (stream, "#%ld\t; 0x%.4lx", value, value);
+ break;
+
+ case 32:
+ if (isfloat)
+ {
+ unsigned char valbytes[4];
+ double fvalue;
+
+ /* Do this a byte at a time so we don't have to
+ worry about the host's endianness. */
+ valbytes[0] = value & 0xff;
+ valbytes[1] = (value >> 8) & 0xff;
+ valbytes[2] = (value >> 16) & 0xff;
+ valbytes[3] = (value >> 24) & 0xff;
+
+ floatformat_to_double
+ (&floatformat_ieee_single_little, valbytes,
+ &fvalue);
+
+ func (stream, "#%.7g\t; 0x%.8lx", fvalue,
+ value);
+ }
+ else
+ func (stream, "#%ld\t; 0x%.8lx", value, value);
+ break;
+
+ case 64:
+ func (stream, "#0x%.8lx%.8lx", hival, value);
+ break;
+
+ default:
+ abort ();
+ }
+ }
+ break;
+
+ case 'F':
+ {
+ int regno = ((given >> 16) & 0xf) | ((given >> (7 - 4)) & 0x10);
+ int num = (given >> 8) & 0x3;
+
+ if (!num)
+ func (stream, "{d%d}", regno);
+ else if (num + regno >= 32)
+ func (stream, "{d%d-<overflow reg d%d}", regno, regno + num);
+ else
+ func (stream, "{d%d-d%d}", regno, regno + num);
+ }
+ break;
+
+
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ int width;
+ unsigned long value;
+
+ c = arm_decode_bitfield (c, given, &value, &width);
+
+ switch (*c)
+ {
+ case 'r':
+ func (stream, "%s", arm_regnames[value]);
+ break;
+ case 'd':
+ func (stream, "%ld", value);
+ break;
+ case 'e':
+ func (stream, "%ld", (1ul << width) - value);
+ break;
+
+ case 'S':
+ case 'T':
+ case 'U':
+ /* various width encodings */
+ {
+ int base = 8 << (*c - 'S'); /* 8,16 or 32 */
+ int limit;
+ unsigned low, high;
+
+ c++;
+ if (*c >= '0' && *c <= '9')
+ limit = *c - '0';
+ else if (*c >= 'a' && *c <= 'f')
+ limit = *c - 'a' + 10;
+ else
+ abort ();
+ low = limit >> 2;
+ high = limit & 3;
+
+ if (value < low || value > high)
+ func (stream, "<illegal width %d>", base << value);
+ else
+ func (stream, "%d", base << value);
+ }
+ break;
+ case 'R':
+ if (given & (1 << 6))
+ goto Q;
+ /* FALLTHROUGH */
+ case 'D':
+ func (stream, "d%ld", value);
+ break;
+ case 'Q':
+ Q:
+ if (value & 1)
+ func (stream, "<illegal reg q%ld.5>", value >> 1);
+ else
+ func (stream, "q%ld", value >> 1);
+ break;
+
+ case '`':
+ c++;
+ if (value == 0)
+ func (stream, "%c", *c);
+ break;
+ case '\'':
+ c++;
+ if (value == ((1ul << width) - 1))
+ func (stream, "%c", *c);
+ break;
+ case '?':
+ func (stream, "%c", c[(1 << width) - (int)value]);
+ c += 1 << width;
+ break;
+ default:
+ abort ();
+ }
+ break;
+
+ default:
+ abort ();
+ }
+ }
+ }
+ else
+ func (stream, "%c", *c);
+ }
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
/* Print one ARM instruction from PC on INFO->STREAM. */
static void
@@ -1721,7 +2516,10 @@
void *stream = info->stream;
fprintf_ftype func = info->fprintf_func;
- if (print_insn_coprocessor (info, given, FALSE))
+ if (print_insn_coprocessor (pc, info, given, FALSE))
+ return;
+
+ if (print_insn_neon (info, given, FALSE))
return;
for (insn = arm_opcodes; insn->assembler; insn++)
@@ -1964,102 +2762,51 @@
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
- int bitstart = *c++ - '0';
- int bitend = 0;
- while (*c >= '0' && *c <= '9')
- bitstart = (bitstart * 10) + *c++ - '0';
+ int width;
+ unsigned long value;
+ c = arm_decode_bitfield (c, given, &value, &width);
+
switch (*c)
{
- case '-':
- c++;
-
- while (*c >= '0' && *c <= '9')
- bitend = (bitend * 10) + *c++ - '0';
-
- if (!bitend)
- abort ();
-
- switch (*c)
- {
- case 'r':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- func (stream, "%s", arm_regnames[reg]);
- }
- break;
- case 'd':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- func (stream, "%ld", reg);
- }
- break;
- case 'W':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- func (stream, "%ld", reg + 1);
- }
- break;
- case 'x':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- func (stream, "0x%08lx", reg);
-
- /* Some SWI instructions have special
- meanings. */
- if ((given & 0x0fffffff) == 0x0FF00000)
- func (stream, "\t; IMB");
- else if ((given & 0x0fffffff) == 0x0FF00001)
- func (stream, "\t; IMBRange");
- }
- break;
- case 'X':
- {
- long reg;
-
- reg = given >> bitstart;
- reg &= (2 << (bitend - bitstart)) - 1;
-
- func (stream, "%01lx", reg & 0xf);
- }
- break;
- default:
- abort ();
- }
+ case 'r':
+ func (stream, "%s", arm_regnames[value]);
break;
+ case 'd':
+ func (stream, "%ld", value);
+ break;
+ case 'b':
+ func (stream, "%ld", value * 8);
+ break;
+ case 'W':
+ func (stream, "%ld", value + 1);
+ break;
+ case 'x':
+ func (stream, "0x%08lx", value);
+ /* Some SWI instructions have special
+ meanings. */
+ if ((given & 0x0fffffff) == 0x0FF00000)
+ func (stream, "\t; IMB");
+ else if ((given & 0x0fffffff) == 0x0FF00001)
+ func (stream, "\t; IMBRange");
+ break;
+ case 'X':
+ func (stream, "%01lx", value & 0xf);
+ break;
case '`':
c++;
- if ((given & (1 << bitstart)) == 0)
+ if (value == 0)
func (stream, "%c", *c);
break;
case '\'':
c++;
- if ((given & (1 << bitstart)) != 0)
+ if (value == ((1ul << width) - 1))
func (stream, "%c", *c);
break;
case '?':
- ++c;
- if ((given & (1 << bitstart)) != 0)
- func (stream, "%c", *c++);
- else
- func (stream, "%c", *++c);
+ func (stream, "%c", c[(1 << width) - (int)value]);
+ c += 1 << width;
break;
default:
abort ();
@@ -2373,7 +3120,10 @@
void *stream = info->stream;
fprintf_ftype func = info->fprintf_func;
- if (print_insn_coprocessor (info, given, TRUE))
+ if (print_insn_coprocessor (pc, info, given, TRUE))
+ return;
+
+ if (print_insn_neon (info, given, TRUE))
return;
for (insn = thumb32_opcodes; insn->assembler; insn++)
@@ -2752,30 +3502,15 @@
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
- int bitstart = *c++ - '0';
- int bitend = 0;
- unsigned int val;
- while (*c >= '0' && *c <= '9')
- bitstart = (bitstart * 10) + *c++ - '0';
+ int width;
+ unsigned long val;
- if (*c == '-')
- {
- c++;
- while (*c >= '0' && *c <= '9')
- bitend = (bitend * 10) + *c++ - '0';
- if (!bitend)
- abort ();
-
- val = given >> bitstart;
- val &= (2 << (bitend - bitstart)) - 1;
- }
- else
- val = (given >> bitstart) & 1;
-
+ c = arm_decode_bitfield (c, given, &val, &width);
+
switch (*c)
{
- case 'd': func (stream, "%u", val); break;
- case 'W': func (stream, "%u", val * 4); break;
+ case 'd': func (stream, "%lu", val); break;
+ case 'W': func (stream, "%lu", val * 4); break;
case 'r': func (stream, "%s", arm_regnames[val]); break;
case 'c':
@@ -2786,20 +3521,20 @@
break;
case '\'':
- if (val)
- func (stream, "%c", c[1]);
c++;
+ if (val == ((1ul << width) - 1))
+ func (stream, "%c", *c);
break;
case '`':
- if (!val)
- func (stream, "%c", c[1]);
c++;
+ if (val == 0)
+ func (stream, "%c", *c);
break;
case '?':
- func (stream, "%c", val ? c[1] : c[2]);
- c += 2;
+ func (stream, "%c", c[(1 << width) - (int)val]);
+ c += 1 << width;
break;
default:
diff --git a/opcodes/m68k-dis.c b/opcodes/m68k-dis.c
index 8fc70152..3094963 100644
--- a/opcodes/m68k-dis.c
+++ b/opcodes/m68k-dis.c
@@ -1308,12 +1308,14 @@
}
else
{
+ /* We must restore the print functions before trying to print the
+ error message. */
+ info->fprintf_func = save_printer;
+ info->print_address_func = save_print_address;
info->fprintf_func (info->stream,
/* xgettext:c-format */
_("<internal error in opcode table: %s %s>\n"),
best->name, best->args);
- info->fprintf_func = save_printer;
- info->print_address_func = save_print_address;
return 2;
}
}
diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
index 9a48d86..ee1e9af 100644
--- a/opcodes/mips-dis.c
+++ b/opcodes/mips-dis.c
@@ -51,12 +51,15 @@
const char * const name;
};
-/* The mips16 register names. */
-static const char * const mips16_reg_names[] =
+/* The mips16 registers. */
+static const unsigned int mips16_to_32_reg_map[] =
{
- "s0", "s1", "v0", "v1", "a0", "a1", "a2", "a3"
+ 16, 17, 2, 3, 4, 5, 6, 7
};
+#define mips16_reg_names(rn) mips_gpr_names[mips16_to_32_reg_map[rn]]
+
+
static const char * const mips_gpr_names_numeric[32] =
{
"$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7",
@@ -181,7 +184,28 @@
static const struct mips_cp0sel_name mips_cp0sel_names_mips3264r2[] =
{
{ 4, 1, "c0_contextconfig" },
+ { 0, 1, "c0_mvpcontrol" },
+ { 0, 2, "c0_mvpconf0" },
+ { 0, 3, "c0_mvpconf1" },
+ { 1, 1, "c0_vpecontrol" },
+ { 1, 2, "c0_vpeconf0" },
+ { 1, 3, "c0_vpeconf1" },
+ { 1, 4, "c0_yqmask" },
+ { 1, 5, "c0_vpeschedule" },
+ { 1, 6, "c0_vpeschefback" },
+ { 2, 1, "c0_tcstatus" },
+ { 2, 2, "c0_tcbind" },
+ { 2, 3, "c0_tcrestart" },
+ { 2, 4, "c0_tchalt" },
+ { 2, 5, "c0_tccontext" },
+ { 2, 6, "c0_tcschedule" },
+ { 2, 7, "c0_tcschefback" },
{ 5, 1, "c0_pagegrain" },
+ { 6, 1, "c0_srsconf0" },
+ { 6, 2, "c0_srsconf1" },
+ { 6, 3, "c0_srsconf2" },
+ { 6, 4, "c0_srsconf3" },
+ { 6, 5, "c0_srsconf4" },
{ 12, 1, "c0_intctl" },
{ 12, 2, "c0_srsctl" },
{ 12, 3, "c0_srsmap" },
@@ -688,7 +712,8 @@
print_insn_args (const char *d,
register unsigned long int l,
bfd_vma pc,
- struct disassemble_info *info)
+ struct disassemble_info *info,
+ const struct mips_opcode *opp)
{
int op, delta;
unsigned int lsb, msb, msbd;
@@ -728,6 +753,26 @@
(*info->fprintf_func) (info->stream, "0x%x", msb - lsb + 1);
break;
+ case '1':
+ (*info->fprintf_func) (info->stream, "0x%lx",
+ (l >> OP_SH_UDI1) & OP_MASK_UDI1);
+ break;
+
+ case '2':
+ (*info->fprintf_func) (info->stream, "0x%lx",
+ (l >> OP_SH_UDI2) & OP_MASK_UDI2);
+ break;
+
+ case '3':
+ (*info->fprintf_func) (info->stream, "0x%lx",
+ (l >> OP_SH_UDI3) & OP_MASK_UDI3);
+ break;
+
+ case '4':
+ (*info->fprintf_func) (info->stream, "0x%lx",
+ (l >> OP_SH_UDI4) & OP_MASK_UDI4);
+ break;
+
case 'C':
case 'H':
msbd = (l >> OP_SH_EXTMSBD) & OP_MASK_EXTMSBD;
@@ -1069,7 +1114,9 @@
break;
case 'N':
- (*info->fprintf_func) (info->stream, "$fcc%ld",
+ (*info->fprintf_func) (info->stream,
+ ((opp->pinfo & (FP_D | FP_S)) != 0
+ ? "$fcc%ld" : "$cc%ld"),
(l >> OP_SH_BCC) & OP_MASK_BCC);
break;
@@ -1247,7 +1294,7 @@
if (d != NULL && *d != '\0')
{
(*info->fprintf_func) (info->stream, "\t");
- print_insn_args (d, word, memaddr, info);
+ print_insn_args (d, word, memaddr, info, op);
}
return INSNLEN;
@@ -1283,27 +1330,27 @@
case 'y':
case 'w':
(*info->fprintf_func) (info->stream, "%s",
- mips16_reg_names[((l >> MIPS16OP_SH_RY)
- & MIPS16OP_MASK_RY)]);
+ mips16_reg_names(((l >> MIPS16OP_SH_RY)
+ & MIPS16OP_MASK_RY)));
break;
case 'x':
case 'v':
(*info->fprintf_func) (info->stream, "%s",
- mips16_reg_names[((l >> MIPS16OP_SH_RX)
- & MIPS16OP_MASK_RX)]);
+ mips16_reg_names(((l >> MIPS16OP_SH_RX)
+ & MIPS16OP_MASK_RX)));
break;
case 'z':
(*info->fprintf_func) (info->stream, "%s",
- mips16_reg_names[((l >> MIPS16OP_SH_RZ)
- & MIPS16OP_MASK_RZ)]);
+ mips16_reg_names(((l >> MIPS16OP_SH_RZ)
+ & MIPS16OP_MASK_RZ)));
break;
case 'Z':
(*info->fprintf_func) (info->stream, "%s",
- mips16_reg_names[((l >> MIPS16OP_SH_MOVE32Z)
- & MIPS16OP_MASK_MOVE32Z)]);
+ mips16_reg_names(((l >> MIPS16OP_SH_MOVE32Z)
+ & MIPS16OP_MASK_MOVE32Z)));
break;
case '0':
diff --git a/opcodes/mips-opc.c b/opcodes/mips-opc.c
index 42da748..e6cca40 100644
--- a/opcodes/mips-opc.c
+++ b/opcodes/mips-opc.c
@@ -1263,6 +1263,72 @@
{"yield", "s", 0x7c000009, 0xfc1fffff, TRAP|RD_s, 0, MT32 },
{"yield", "d,s", 0x7c000009, 0xfc1f07ff, TRAP|WR_d|RD_s, 0, MT32 },
+/* User Defined Instruction. */
+{"udi0", "s,t,d,+1",0x70000010, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi0", "s,t,+2", 0x70000010, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi0", "s,+3", 0x70000010, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi0", "+4", 0x70000010, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi1", "s,t,d,+1",0x70000011, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi1", "s,t,+2", 0x70000011, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi1", "s,+3", 0x70000011, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi1", "+4", 0x70000011, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi2", "s,t,d,+1",0x70000012, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi2", "s,t,+2", 0x70000012, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi2", "s,+3", 0x70000012, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi2", "+4", 0x70000012, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi3", "s,t,d,+1",0x70000013, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi3", "s,t,+2", 0x70000013, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi3", "s,+3", 0x70000013, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi3", "+4", 0x70000013, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi4", "s,t,d,+1",0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi4", "s,t,+2", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi4", "s,+3", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi4", "+4", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi5", "s,t,d,+1",0x70000015, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi5", "s,t,+2", 0x70000015, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi5", "s,+3", 0x70000015, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi5", "+4", 0x70000015, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi6", "s,t,d,+1",0x70000016, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi6", "s,t,+2", 0x70000016, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi6", "s,+3", 0x70000016, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi6", "+4", 0x70000016, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi7", "s,t,d,+1",0x70000017, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi7", "s,t,+2", 0x70000017, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi7", "s,+3", 0x70000017, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi7", "+4", 0x70000017, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi8", "s,t,d,+1",0x70000018, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi8", "s,t,+2", 0x70000018, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi8", "s,+3", 0x70000018, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi8", "+4", 0x70000018, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi9", "s,t,d,+1",0x70000019, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi9", "s,t,+2", 0x70000019, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi9", "s,+3", 0x70000019, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi9", "+4", 0x70000019, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi10", "s,t,d,+1",0x7000001a, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi10", "s,t,+2", 0x7000001a, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi10", "s,+3", 0x7000001a, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi10", "+4", 0x7000001a, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi11", "s,t,d,+1",0x7000001b, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi11", "s,t,+2", 0x7000001b, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi11", "s,+3", 0x7000001b, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi11", "+4", 0x7000001b, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi12", "s,t,d,+1",0x7000001c, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi12", "s,t,+2", 0x7000001c, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi12", "s,+3", 0x7000001c, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi12", "+4", 0x7000001c, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi13", "s,t,d,+1",0x7000001d, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi13", "s,t,+2", 0x7000001d, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi13", "s,+3", 0x7000001d, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi13", "+4", 0x7000001d, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi14", "s,t,d,+1",0x7000001e, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi14", "s,t,+2", 0x7000001e, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi14", "s,+3", 0x7000001e, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi14", "+4", 0x7000001e, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi15", "s,t,d,+1",0x7000001f, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi15", "s,t,+2", 0x7000001f, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi15", "s,+3", 0x7000001f, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+{"udi15", "+4", 0x7000001f, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
+
/* Coprocessor 2 move/branch operations overlap with VR5400 .ob format
instructions so they are here for the latters to take precedence. */
{"bc2f", "p", 0x49000000, 0xffff0000, CBD|RD_CC, 0, I1 },
diff --git a/readline/examples/rlfe/ChangeLog b/readline/examples/rlfe/ChangeLog
deleted file mode 100644
index ba41b2b..0000000
--- a/readline/examples/rlfe/ChangeLog
+++ /dev/null
@@ -1,37 +0,0 @@
-2004-11-04 Per Bothner <per@bothner.com>
-
- * pty.c: Import from screen-4.0.2.
- * configure.in, Makefile.in, config.h.in: Set up autoconf handling,
- copying a bunk of stuff over from screen.
- * rlfe.c: Use OpenPTY from pty.c instead of get_master_pty.
-
-2004-11-03 Per Bothner <per@bothner.com>
-
- * rlfe.c: Get input emphasis (boldening) more robust.
-
- * rlfe.c: Various cleanups on comments and names.
-
-2003-11-07 Wolfgang Taeuber <wolfgang_taeuber@agilent.com>
-
- * Specify a history file and the size of the history file with command
- * line options; use EDITOR/VISUAL to set vi/emacs preference.
-
-1999-09-03 Chet Ramey <chet@nike.ins.cwru.edu>
-
- * fep.c: Memmove is not universally available. This patch assumes
- that an autoconf test has been performed, and that memcpy is
- available without checking.
-
- * fep.c: VDISCARD is not universally available, even when termios is.
-
- * fep.c: If a system doesn't have TIOCSCTTY, the first `open'
- performed after setsid allocates a controlling terminal. The
- original code would leave the child process running on the slave pty
- without a controlling tty if TIOCSCTTY was not available.
-
- * fep.c: Most versions of SVR4, including solaris, don't allow
- terminal ioctl calls on the master side of the pty.
-
-1999-08-28 Per Bothner <per@bothner.com>
-
- * fep.c: Initial release.
diff --git a/readline/examples/rlfe/Makefile.in b/readline/examples/rlfe/Makefile.in
deleted file mode 100644
index 4653dec..0000000
--- a/readline/examples/rlfe/Makefile.in
+++ /dev/null
@@ -1,176 +0,0 @@
-#
-# Makefile template for rlfe
-#
-# See machine dependant config.h for more configuration options.
-#
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-DESTDIR =
-
-# Where to install screen.
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-# don't forget to change mandir and infodir in doc/Makefile.
-bindir = $(exec_prefix)/bin
-
-VERSION = @VERSION@
-SCREEN = screen-$(VERSION)
-
-CC = @CC@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-#LDFLAGS = -L$(READLINE_DIR)
-LDFLAGS = @LDFLAGS@
-LIBS = -lreadline -lhistory -lncurses
-
-CPP=@CPP@
-CPP_DEPEND=$(CC) -MM
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-
-AWK = @AWK@
-
-OPTIONS=
-#OPTIONS= -DDEBUG
-
-SHELL=/bin/sh
-
-CFILES= rlfe.c pty.c
-HFILES= extern.h os.h screen.h
-EXTRA_DIST=configure.in configure Makefile.in config.h.in ChangeLog README
-OFILES= rlfe.o pty.o
-
-all: rlfe
-
-rlfe: $(OFILES)
- $(CC) $(LDFLAGS) -o $@ $(OFILES) $(LIBS)
-
-rlfe-$(VERSION).tar.gz:
- tar czf $@ $(CFILES) $(HFILES) $(EXTRA_DIST)
-
-.c.o:
- $(CC) -c -I. -I$(srcdir) $(M_CFLAGS) $(DEFS) $(OPTIONS) $(CFLAGS) $<
-
-install_bin: .version screen
- -if [ -f $(DESTDIR)$(bindir)/$(SCREEN) ] && [ ! -f $(DESTDIR)$(bindir)/$(SCREEN).old ]; \
- then mv $(DESTDIR)$(bindir)/$(SCREEN) $(DESTDIR)$(bindir)/$(SCREEN).old; fi
- $(INSTALL_PROGRAM) screen $(DESTDIR)$(bindir)/$(SCREEN)
- -chown root $(DESTDIR)$(bindir)/$(SCREEN) && chmod 4755 $(DESTDIR)$(bindir)/$(SCREEN)
-# This doesn't work if $(bindir)/screen is a symlink
- -if [ -f $(DESTDIR)$(bindir)/screen ] && [ ! -f $(DESTDIR)$(bindir)/screen.old ]; then mv $(DESTDIR)$(bindir)/screen $(DESTDIR)$(bindir)/screen.old; fi
- rm -f $(DESTDIR)$(bindir)/screen
- (cd $(DESTDIR)$(bindir) && ln -sf $(SCREEN) screen)
- cp $(srcdir)/utf8encodings/?? $(DESTDIR)$(SCREENENCODINGS)
-
-
-uninstall: .version
- rm -f $(DESTDIR)$(bindir)/$(SCREEN)
- rm -f $(DESTDIR)$(bindir)/screen
- -mv $(DESTDIR)$(bindir)/screen.old $(DESTDIR)$(bindir)/screen
- rm -f $(DESTDIR)$(ETCSCREENRC)
- cd doc; $(MAKE) uninstall
-
-shadow:
- mkdir shadow;
- cd shadow; ln -s ../*.[ch] ../*.in ../*.sh ../configure ../doc ../terminfo ../etc .
- rm -f shadow/term.h shadow/tty.c shadow/comm.h shadow/osdef.h
- echo "install all Makefiles and config:" > shadow/Makefile
- echo " rm -f config.cache" >> shadow/Makefile
- echo " sh ./configure" >> shadow/Makefile
-
-term.h: term.c term.sh
- AWK=$(AWK) srcdir=$(srcdir) sh $(srcdir)/term.sh
-
-kmapdef.c: term.h
-
-tty.c: tty.sh
- sh $(srcdir)/tty.sh tty.c
-
-mostlyclean:
- rm -f $(OFILES) rlfe *.o
-
-clean celan: mostlyclean
- rm -f tty.c term.h comm.h osdef.h kmapdef.c core
-
-# Delete all files from the current directory that are created by
-# configuring or building the program.
-# building of term.h/comm.h requires awk. Keep it in the distribution
-# we keep config.h, as this file knows where 'make dist' finds the ETCSCREENRC.
-#distclean: mostlyclean
-# rm -f $(SCREEN).tar $(SCREEN).tar.gz
-# rm -f config.status Makefile
-# rm -f osdef.h doc/Makefile
-
-maintainer-clean:
- @echo "This command is not even intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-
-# Delete everything from the current directory that can be
-# reconstructed with this Makefile.
-realclean: .version mostlyclean
- rm -f $(SCREEN).tar $(SCREEN).tar.gz
- rm -f config.status Makefile doc/Makefile
- rm -f tty.c term.h comm.h osdef.h kmapdef.c
- rm -f config.h
- echo "install all Makefiles and config:" > Makefile
- echo " sh ./configure" >> Makefile
-
-tags TAGS: $(CFILES)
- -ctags *.sh $(CFILES) *.h
- -ctags -e *.sh $(CFILES) *.h
-
-dist: .version $(SCREEN).tar.gz
-
-
-# Perform self-tests (if any).
-check:
-
-config:
- rm -f config.cache
- sh ./configure
-
-
-###############################################################################
-
-.version:
- @rev=`sed < $(srcdir)/patchlevel.h -n -e '/#define REV/s/#define REV *//p'`; \
- vers=`sed < $(srcdir)/patchlevel.h -n -e '/#define VERS/s/#define VERS *//p'`; \
- pat=`sed < $(srcdir)/patchlevel.h -n -e '/#define PATCHLEVEL/s/#define PATCHLEVEL *//p'`; \
- if [ "$${rev}.$${vers}.$${pat}" != "$(VERSION)" ]; then \
- echo "This distribution is screen-$${rev}.$${vers}.$${pat}, but"; \
- echo "the Makefile is from $(VERSION). Please update!"; exit 1; fi
-
-###############################################################################
-
-mdepend: $(CFILES) term.h
- @rm -f DEPEND ; \
- for i in ${CFILES} ; do \
- echo "$$i" ; \
- echo `echo "$$i" | sed -e 's/.c$$/.o/'`": $$i" `\
- cc -E $$i |\
- grep '^# .*"\./.*\.h"' |\
- (sort -t'"' -u -k 2,2 2>/dev/null || sort -t'"' -u +1 -2) |\
- sed -e 's/.*"\.\/\(.*\)".*/\1/'\
- ` >> DEPEND ; \
- done
-
-depend: depend.in
- ./config.status || ./configure
-
-depend.in: $(CFILES) term.h
- cp Makefile.in Makefile.in~
- sed -e '/\#\#\# Dependencies/q' < Makefile.in > tmp_make
- for i in $(CFILES); do echo $$i; $(CPP_DEPEND) $$i >> tmp_make; done
- mv tmp_make Makefile.in
-
-###############################################################################
-
-### Dependencies:
-pty.o: pty.c config.h
diff --git a/readline/examples/rlfe/README b/readline/examples/rlfe/README
deleted file mode 100644
index 9e1f689..0000000
--- a/readline/examples/rlfe/README
+++ /dev/null
@@ -1,78 +0,0 @@
-rlfe (ReadLine Front-End) is a "universal wrapper" around readline.
-You specify an interactive program to run (typically a shell), and
-readline is used to edit input lines.
-
-There are other such front-ends; what distinguishes this one is that
-it monitors the state of the inferior pty, and if the inferior program
-switches its terminal to raw mode, then rlfe passes your characters
-through directly. This basically means you can run your entire
-session (including bash and terminal-mode emacs) under rlfe.
-
-FEATURES
-
-* Can use all readline commands (and history) in commands that
-read input lines in "canonical mode" - even 'cat'!
-
-* Automatically switches between "readline-editing mode" and "raw mode"
-depending on the terminal mode. If the inferior program invokes
-readline itself, it will do its own line editing. (The inferior
-readline will not know about rlfe, and it will have its own history.)
-You can even run programs like 'emavs -nw' and 'vi' under rlfe.
-The goal is you could leave rlfe always on without even knowing
-about it. (We're not quite there, but it works tolerably well.)
-
-* The input line (after any prompt) is changed to bold-face.
-
-INSTALL
-
-The usual: ./configure && make && make install
-
-Note so far rlfe has only been tested on GNU Linux (Fedora Core 2)
-and Mac OS X (10.3).
-
-This assumes readline header files and libraries are in the default
-places. If not, you can create a link named readline pointing to the
-readline sources. To link with libreadline.a and libhistory.a
-you can copy or link them, or add LDFLAGS='-/path/to/readline' to
-the make command-line.
-
-USAGE
-
-Just run it. That by default runs bash. You can run some other
-command by giving it as command-line arguments.
-
-There are a few tweaks: -h allows you to name the history file,
-and -s allows you to specify its size. It default to "emacs" mode,
-but if the the environment variable EDITOR is set to "vi" that
-mode is chosen.
-
-ISSUES
-
-* The mode switching depends on the terminal mode set by the inferior
-program. Thus ssh/telnet/screen-type programs will typically be in
-raw mode, so rlfe won't be much use, even if remote programs run in
-canonical mode. The work-around is to run rlfe on the remote end.
-
-* Echo supression and prompt recognition are somewhat fragile.
-(A protocol so that the o/s tty code can reliably communicate its
-state to rlfe could solve this problem, and the previous one.)
-
-* See the intro to rlfe.c for more notes.
-
-* Assumes a VT100-compatible terminal, though that could be generalized
-if anybody cares.
-
-* Requires ncurses.
-
-* It would be useful to integrate rlfe's logic in a terminal emulator.
-That would make it easier to reposition the edit position with a mouse,
-integrate cut-and-paste with the system clipboard, and more robustly
-handle escape sequence and multi-byte characters more robustly.
-
-AUTHOR
-
-Per Bothner <per@bothner.com>
-
-LICENSE
-
-GPL.
diff --git a/readline/examples/rlfe/config.h.in b/readline/examples/rlfe/config.h.in
deleted file mode 100644
index f8ff13b..0000000
--- a/readline/examples/rlfe/config.h.in
+++ /dev/null
@@ -1,375 +0,0 @@
-/* Copyright 2004 Per Bothner <per@bothner.com>
- * Based on config.h from screen-4.0.2.
- * Copyright (c) 1993-2000
- * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
- * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
- * Copyright (c) 1987 Oliver Laumann
- *
- * 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 (see the file COPYING); if not, write to the
- * Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- ****************************************************************
- * $Id$ FAU
- */
-
-
-
-
-
-/**********************************************************************
- *
- * User Configuration Section
- */
-
-
-/*
- * define PTYMODE if you do not like the default of 0622, which allows
- * public write to your pty.
- * define PTYGROUP to some numerical group-id if you do not want the
- * tty to be in "your" group.
- * Note, screen is unable to change mode or group of the pty if it
- * is not installed with sufficient privilege. (e.g. set-uid-root)
- * define PTYROFS if the /dev/pty devices are mounted on a read-only
- * filesystem so screen should not even attempt to set mode or group
- * even if running as root (e.g. on TiVo).
- */
-#undef PTYMODE
-#undef PTYGROUP
-#undef PTYROFS
-
-/*
- * If screen is NOT installed set-uid root, screen can provide tty
- * security by exclusively locking the ptys. While this keeps other
- * users from opening your ptys, it also keeps your own subprocesses
- * from being able to open /dev/tty. Define LOCKPTY to add this
- * exclusive locking.
- */
-#undef LOCKPTY
-
-
-/**********************************************************************
- *
- * End of User Configuration Section
- *
- * Rest of this file is modified by 'configure'
- * Change at your own risk!
- *
- */
-
-/*
- * Some defines to identify special unix variants
- */
-#ifndef SVR4
-#undef SVR4
-#endif
-
-#ifndef _POSIX_SOURCE
-#undef _POSIX_SOURCE
-#endif
-
-/*
- * Define POSIX if your system supports IEEE Std 1003.1-1988 (POSIX).
- */
-#undef POSIX
-
-/*
- * Define TERMIO if you have struct termio instead of struct sgttyb.
- * This is usually the case for SVID systems, where BSD uses sgttyb.
- * POSIX systems should define this anyway, even though they use
- * struct termios.
- */
-#undef TERMIO
-
-/*
- * Define CYTERMIO if you have cyrillic termio modes.
- */
-#undef CYTERMIO
-
-/*
- * Define TERMINFO if your machine emulates the termcap routines
- * with the terminfo database.
- * Thus the .screenrc file is parsed for
- * the command 'terminfo' and not 'termcap'.
- */
-#undef TERMINFO
-
-/*
- * If your library does not define ospeed, define this.
- */
-#undef NEED_OSPEED
-
-/*
- * Define SYSV if your machine is SYSV complient (Sys V, HPUX, A/UX)
- */
-#ifndef SYSV
-#undef SYSV
-#endif
-
-/*
- * Define SIGVOID if your signal handlers return void. On older
- * systems, signal returns int, but on newer ones, it returns void.
- */
-#undef SIGVOID
-
-/*
- * Define USESIGSET if you have sigset for BSD 4.1 reliable signals.
- */
-#undef USESIGSET
-
-/*
- * Define SYSVSIGS if signal handlers must be reinstalled after
- * they have been called.
- */
-#undef SYSVSIGS
-
-/*
- * Define BSDWAIT if your system defines a 'union wait' in <sys/wait.h>
- *
- * Only allow BSDWAIT i.e. wait3 on nonposix systems, since
- * posix implies wait(3) and waitpid(3). vdlinden@fwi.uva.nl
- *
- */
-#ifndef POSIX
-#undef BSDWAIT
-#endif
-
-/*
- * On RISCOS we prefer wait2() over wait3(). rouilj@sni-usa.com
- */
-#ifdef BSDWAIT
-#undef USE_WAIT2
-#endif
-
-/*
- * Define if you have the utempter utmp helper program
- */
-#undef HAVE_UTEMPTER
-
-/*
- * If ttyslot() breaks getlogin() by returning indexes to utmp entries
- * of type DEAD_PROCESS, then our getlogin() replacement should be
- * selected by defining BUGGYGETLOGIN.
- */
-#undef BUGGYGETLOGIN
-
-/*
- * If your system has the calls setreuid() and setregid(),
- * define HAVE_SETREUID. Otherwise screen will use a forked process to
- * safely create output files without retaining any special privileges.
- */
-#undef HAVE_SETREUID
-
-/*
- * If your system supports BSD4.4's seteuid() and setegid(), define
- * HAVE_SETEUID.
- */
-#undef HAVE_SETEUID
-
-/*
- * If you want the "time" command to display the current load average
- * define LOADAV. Maybe you must install screen with the needed
- * privileges to read /dev/kmem.
- * Note that NLIST_ stuff is only checked, when getloadavg() is not available.
- */
-#undef LOADAV
-
-#undef LOADAV_NUM
-#undef LOADAV_TYPE
-#undef LOADAV_SCALE
-#undef LOADAV_GETLOADAVG
-#undef LOADAV_UNIX
-#undef LOADAV_AVENRUN
-#undef LOADAV_USE_NLIST64
-
-#undef NLIST_DECLARED
-#undef NLIST_STRUCT
-#undef NLIST_NAME_UNION
-
-/*
- * If your system has the new format /etc/ttys (like 4.3 BSD) and the
- * getttyent(3) library functions, define GETTTYENT.
- */
-#undef GETTTYENT
-
-/*
- * Define USEBCOPY if the bcopy/memcpy from your system's C library
- * supports the overlapping of source and destination blocks. When
- * undefined, screen uses its own (probably slower) version of bcopy().
- *
- * SYSV machines may have a working memcpy() -- Oh, this is
- * quite unlikely. Tell me if you see one.
- * "But then, memmove() should work, if at all available" he thought...
- * Boing, never say "works everywhere" unless you checked SCO UNIX.
- * Their memove fails the test in the configure script. Sigh. (Juergen)
- */
-#undef USEBCOPY
-#undef USEMEMCPY
-#undef USEMEMMOVE
-
-/*
- * If your system has vsprintf() and requires the use of the macros in
- * "varargs.h" to use functions with variable arguments,
- * define USEVARARGS.
- */
-#undef USEVARARGS
-
-/*
- * If your system has strerror() define this.
- */
-#undef HAVE_STRERROR
-
-/*
- * If the select return value doesn't treat a descriptor that is
- * usable for reading and writing as two hits, define SELECT_BROKEN.
- */
-#undef SELECT_BROKEN
-
-/*
- * Define this if your system supports named pipes.
- */
-#undef NAMEDPIPE
-
-/*
- * Define this if your system exits select() immediatly if a pipe is
- * opened read-only and no writer has opened it.
- */
-#undef BROKEN_PIPE
-
-/*
- * Define this if the unix-domain socket implementation doesn't
- * create a socket in the filesystem.
- */
-#undef SOCK_NOT_IN_FS
-
-/*
- * If your system has setenv() and unsetenv() define USESETENV
- */
-#undef USESETENV
-
-/*
- * If your system does not come with a setenv()/putenv()/getenv()
- * functions, you may bring in our own code by defining NEEDPUTENV.
- */
-#undef NEEDPUTENV
-
-/*
- * If the passwords are stored in a shadow file and you want the
- * builtin lock to work properly, define SHADOWPW.
- */
-#undef SHADOWPW
-
-/*
- * If you are on a SYS V machine that restricts filename length to 14
- * characters, you may need to enforce that by setting NAME_MAX to 14
- */
-#undef NAME_MAX /* KEEP_UNDEF_HERE override system value */
-#undef NAME_MAX
-
-/*
- * define HAVE_RENAME if your system has a rename() function
- */
-#undef HAVE_RENAME
-
-/*
- * define HAVE__EXIT if your system has the _exit() call.
- */
-#undef HAVE__EXIT
-
-/*
- * define HAVE_LSTAT if your system has symlinks and the lstat() call.
- */
-#undef HAVE_LSTAT
-
-/*
- * define HAVE_UTIMES if your system has the utimes() call.
- */
-#undef HAVE_UTIMES
-
-/*
- * define HAVE_FCHOWN if your system has the fchown() call.
- */
-#undef HAVE_FCHOWN
-
-/*
- * define HAVE_FCHMOD if your system has the fchmod() call.
- */
-#undef HAVE_FCHMOD
-
-/*
- * define HAVE_VSNPRINTF if your system has vsnprintf() (GNU lib).
- */
-#undef HAVE_VSNPRINTF
-
-/*
- * define HAVE_GETCWD if your system has the getcwd() call.
- */
-#undef HAVE_GETCWD
-
-/*
- * define HAVE_SETLOCALE if your system has the setlocale() call.
- */
-#undef HAVE_SETLOCALE
-
-/*
- * define HAVE_STRFTIME if your system has the strftime() call.
- */
-#undef HAVE_STRFTIME
-
-/*
- * define HAVE_NL_LANGINFO if your system has the nl_langinfo() call
- * and <langinfo.h> defines CODESET.
- */
-#undef HAVE_NL_LANGINFO
-
-/*
- * Newer versions of Solaris include fdwalk, which can greatly improve
- * the startup time of screen; otherwise screen spends a lot of time
- * closing file descriptors.
- */
-#undef HAVE_FDWALK
-
-/*
- * define HAVE_DEV_PTC if you have a /dev/ptc character special
- * device.
- */
-#undef HAVE_DEV_PTC
-
-/*
- * define HAVE_SVR4_PTYS if you have a /dev/ptmx character special
- * device and support the ptsname(), grantpt(), unlockpt() functions.
- */
-#undef HAVE_SVR4_PTYS
-
-/*
- * define HAVE_GETPT if you have the getpt() function.
- */
-#undef HAVE_GETPT
-
-/*
- * define HAVE_OPENPTY if your system has the openpty() call.
- */
-#undef HAVE_OPENPTY
-
-/*
- * define PTYRANGE0 and or PTYRANGE1 if you want to adapt screen
- * to unusual environments. E.g. For SunOs the defaults are "qpr" and
- * "0123456789abcdef". For SunOs 4.1.2
- * #define PTYRANGE0 "pqrstuvwxyzPQRST"
- * is recommended by Dan Jacobson.
- */
-#undef PTYRANGE0
-#undef PTYRANGE1
-
-#define USEVARARGS
diff --git a/readline/examples/rlfe/configure b/readline/examples/rlfe/configure
deleted file mode 100755
index ba82026..0000000
--- a/readline/examples/rlfe/configure
+++ /dev/null
@@ -1,5400 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59.
-#
-# Copyright (C) 2003 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" || {
- # Find who we are. Look in the path if we contain no path at all
- # relative or not.
- case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
- ;;
- esac
- # We did not find ourselves, most probably we were run as `sh COMMAND'
- # in which case we are not to be found in the path.
- if test "x$as_myself" = x; then
- as_myself=$0
- fi
- if test ! -f "$as_myself"; then
- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
- { (exit 1); exit 1; }; }
- fi
- case $CONFIG_SHELL in
- '')
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for as_base in sh bash ksh sh5; do
- case $as_dir in
- /*)
- if ("$as_dir/$as_base" -c '
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- CONFIG_SHELL=$as_dir/$as_base
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" ${1+"$@"}
- fi;;
- esac
- done
-done
-;;
- esac
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line before each line; the second 'sed' does the real
- # work. The second script uses 'N' to pair each line-number line
- # with the numbered line, and appends trailing '-' during
- # substitution so that $LINENO is not a special case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
- sed '=' <$as_myself |
- sed '
- N
- s,$,-,
- : loop
- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
- t loop
- s,-$,,
- s,^['$as_cr_digits']*\n,,
- ' >$as_me.lineno &&
- chmod +x $as_me.lineno ||
- { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensible to this).
- . ./$as_me.lineno
- # Exit status is that of the last command.
- exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
- as_ln_s='cp -p'
- else
- as_ln_s='ln -s'
- fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-exec 6>&1
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_config_libobj_dir=.
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete. It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-
-ac_unique_file="rlfe.c"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS VERSION CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP AWK WRITEPATH XTERMPATH LIBOBJS LTLIBOBJS'
-ac_subst_files=''
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-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'
-
-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
-
- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
-
- # 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_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$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 ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
- datadir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- eval "enable_$ac_feature=no" ;;
-
- -enable-* | --enable-*)
- ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) 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 | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$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 | -n)
- 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_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
- esac
- eval "with_$ac_package='$ac_optarg'" ;;
-
- -without-* | --without-*)
- ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- 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 "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
- eval "$ac_envvar='$ac_optarg'"
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
- [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
- localstatedir libdir includedir oldincludedir infodir mandir
-do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) ;;
- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-# 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_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$0" : 'X\(//\)[^/]' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$0" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- 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 "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
- { (exit 1); exit 1; }; }
- else
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
- { (exit 1); exit 1; }; }
- fi
-fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
- { (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # 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 <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-_ACEOF
-
- cat <<_ACEOF
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --infodir=DIR info documentation [PREFIX/info]
- --mandir=DIR man documentation [PREFIX/man]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-pty-mode=mode default mode for ptys
- --with-pty-group=group default group for ptys
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
- headers in a nonstandard directory <include dir>
- CPP C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_ACEOF
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- ac_popdir=`pwd`
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d $ac_dir || continue
- ac_builddir=.
-
-if test "$ac_dir" != .; then
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
- .) # No --srcdir option. We are building in place.
- ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
-
- cd $ac_dir
- # Check for guested configure; otherwise get Cygnus style configure.
- if test -f $ac_srcdir/configure.gnu; then
- echo
- $SHELL $ac_srcdir/configure.gnu --help=recursive
- elif test -f $ac_srcdir/configure; then
- echo
- $SHELL $ac_srcdir/configure --help=recursive
- elif test -f $ac_srcdir/configure.ac ||
- test -f $ac_srcdir/configure.in; then
- echo
- $ac_configure --help
- else
- echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi
- cd $ac_popdir
- done
-fi
-
-test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
- cat <<\_ACEOF
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit 0
-fi
-exec 5>config.log
-cat >&5 <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.59. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- echo "PATH: $as_dir"
-done
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_sep=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
- # Get rid of the leading space.
- ac_sep=" "
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
- echo
- # The following way of writing the cache mishandles newlines in values,
-{
- (set) 2>&1 |
- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- sed -n \
- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
- ;;
- *)
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
- ;;
- esac;
-}
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- sed "/^$/d" confdefs.h | sort
- echo
- fi
- test "$ac_signal" != 0 &&
- echo "$as_me: caught signal $ac_signal"
- echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core &&
- rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
- ' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# 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
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# 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 "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
- { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . $cache_file;;
- *) . ./$cache_file;;
- esac
- fi
-else
- { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val="\$ac_cv_env_${ac_var}_value"
- eval ac_new_val="\$ac_env_${ac_var}_value"
- case $ac_old_set,$ac_new_set in
- set,)
- { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
-echo "$as_me: former value: $ac_old_val" >&2;}
- { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
-echo "$as_me: current value: $ac_new_val" >&2;}
- ac_cache_corrupted=:
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ac_config_headers="$ac_config_headers config.h"
-
-VERSION=0.4
-
-
-
-old_CFLAGS="$CFLAGS"
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- CC=$ac_ct_CC
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- CC=$ac_ct_CC
-else
- CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$ac_ct_CC" && break
-done
-
- CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
- "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
- (eval $ac_link_default) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Find the output, starting from the most likely. This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
- ;;
- conftest.$ac_ext )
- # This is the source file.
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- # FIXME: I believe we export ac_cv_exeext for Libtool,
- # but it would be cool to find out if it's true. Does anybody
- # maintain Libtool? --akim.
- export ac_cv_exeext
- break;;
- * )
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
- fi
- fi
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- export ac_cv_exeext
- break;;
- * ) break;;
- esac
-done
-else
- { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_compiler_gnu=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std1 is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std1. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX 10.20 and later -Ae
-# HP-UX older versions -Aa -D_HPUX_SOURCE
-# SVR4 -Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_stdc=$ac_arg
-break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
- x|xno)
- echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
- *)
- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
- CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C. Since we use `exit',
-# in C++ we need to declare it. In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
- choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- for ac_declaration in \
- '' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
-fi
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether non-existent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
-else
- { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
- fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-
-
-if test $ac_cv_c_compiler_gnu = yes; then
- echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5
-echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6
-if test "${ac_cv_prog_gcc_traditional+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_pattern="Autoconf.*'x'"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sgtty.h>
-Autoconf TIOCGETP
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "$ac_pattern" >/dev/null 2>&1; then
- ac_cv_prog_gcc_traditional=yes
-else
- ac_cv_prog_gcc_traditional=no
-fi
-rm -f conftest*
-
-
- if test $ac_cv_prog_gcc_traditional = no; then
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <termio.h>
-Autoconf TCGETA
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "$ac_pattern" >/dev/null 2>&1; then
- ac_cv_prog_gcc_traditional=yes
-fi
-rm -f conftest*
-
- fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5
-echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6
- if test $ac_cv_prog_gcc_traditional = yes; then
- CC="$CC -traditional"
- fi
-fi
-
-echo "$as_me:$LINENO: checking for library containing strerror" >&5
-echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6
-if test "${ac_cv_search_strerror+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_func_search_save_LIBS=$LIBS
-ac_cv_search_strerror=no
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char strerror ();
-int
-main ()
-{
-strerror ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_search_strerror="none required"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test "$ac_cv_search_strerror" = no; then
- for ac_lib in cposix; do
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char strerror ();
-int
-main ()
-{
-strerror ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_search_strerror="-l$ac_lib"
-break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- done
-fi
-LIBS=$ac_func_search_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
-echo "${ECHO_T}$ac_cv_search_strerror" >&6
-if test "$ac_cv_search_strerror" != no; then
- test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS"
-
-fi
-
-
-if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-main(){exit(0);}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-
-if test $CC != cc ; then
-echo "Your $CC failed - restarting with CC=cc" 1>&6
-
-echo "" 1>&6
-
-CC=cc
-export CC
-exec $0 $configure_args
-fi
-
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-main(){exit(0);}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-exec 5>&2
-eval $ac_link
-echo "CC=$CC; CFLAGS=$CFLAGS; LIBS=$LIBS;" 1>&6
-
-echo "$ac_compile" 1>&6
-
-{ { echo "$as_me:$LINENO: error: Can't run the compiler - sorry" >&5
-echo "$as_me: error: Can't run the compiler - sorry" >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-main()
-{
- int __something_strange_();
- __something_strange_(0);
-}
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- { { echo "$as_me:$LINENO: error: Your compiler does not set the exit status - sorry" >&5
-echo "$as_me: error: Your compiler does not set the exit status - sorry" >&2;}
- { (exit 1); exit 1; }; }
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-for ac_prog in gawk mawk nawk awk
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_AWK+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$AWK"; then
- ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AWK="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
- echo "$as_me:$LINENO: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$AWK" && break
-done
-
-
-if test -f etc/toolcheck; then
-{ echo "$as_me:$LINENO: checking for buggy tools..." >&5
-echo "$as_me: checking for buggy tools..." >&6;}
-sh etc/toolcheck 1>&6
-fi
-
-
-{ echo "$as_me:$LINENO: checking for System V..." >&5
-echo "$as_me: checking for System V..." >&6;}
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <signal.h>
-#include <fcntl.h>
-int
-main ()
-{
-int x = SIGCHLD | FNDELAY;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-cat >>confdefs.h <<\_ACEOF
-#define SYSV 1
-_ACEOF
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-{ echo "$as_me:$LINENO: checking for Solaris 2.x..." >&5
-echo "$as_me: checking for Solaris 2.x..." >&6;}
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#if defined(SVR4) && defined(sun)
- yes
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "yes" >/dev/null 2>&1; then
- LIBS="$LIBS -lsocket -lnsl -lkstat"
-fi
-rm -f conftest*
-
-
-
-{ echo "$as_me:$LINENO: checking select..." >&5
-echo "$as_me: checking select..." >&6;}
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-select(0, 0, 0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-LIBS="$LIBS -lnet -lnsl"
-{ echo "$as_me:$LINENO: checking select with $LIBS..." >&5
-echo "$as_me: checking select with $LIBS..." >&6;}
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-select(0, 0, 0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: !!! no select - no screen" >&5
-echo "$as_me: error: !!! no select - no screen" >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-{ echo "$as_me:$LINENO: checking select return value..." >&5
-echo "$as_me: checking select return value..." >&6;}
-if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-char *nam = "/tmp/conftest$$";
-
-#ifdef NAMEDPIPE
-
-#ifndef O_NONBLOCK
-#define O_NONBLOCK O_NDELAY
-#endif
-#ifndef S_IFIFO
-#define S_IFIFO 0010000
-#endif
-
-
-main()
-{
-#ifdef FD_SET
- fd_set f;
-#else
- int f;
-#endif
-
-#ifdef __FreeBSD__
-/* From Andrew A. Chernov (ache@astral.msk.su):
- * opening RDWR fifo fails in BSD 4.4, but select return values are
- * right.
- */
- exit(0);
-#endif
- (void)alarm(5);
-#ifdef POSIX
- if (mkfifo(nam, 0777))
-#else
- if (mknod(nam, S_IFIFO|0777, 0))
-#endif
- exit(1);
- close(0);
- if (open(nam, O_RDWR | O_NONBLOCK))
- exit(1);
- if (write(0, "TEST", 4) == -1)
- exit(1);
-
-#else
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-main()
-{
- int s1, s2, l;
- struct sockaddr_un a;
-#ifdef FD_SET
- fd_set f;
-#else
- int f;
-#endif
-
- (void)alarm(5);
- if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
- exit(1);
- a.sun_family = AF_UNIX;
- strcpy(a.sun_path, nam);
- (void) unlink(nam);
- if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1)
- exit(1);
- if (listen(s1, 2))
- exit(1);
- if (fork() == 0)
- {
- if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
- kill(getppid(), 3);
- (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2);
- if (write(s2, "HELLO", 5) == -1)
- kill(getppid(), 3);
- exit(0);
- }
- l = sizeof(a);
- close(0);
- if (accept(s1, (struct sockaddr *)&a, &l))
- exit(1);
-#endif
-
-
-#ifdef FD_SET
- FD_SET(0, &f);
-#else
- f = 1;
-#endif
- if (select(1, &f, 0, 0, 0) == -1)
- exit(1);
- if (select(1, &f, &f, 0, 0) != 2)
- exit(1);
- exit(0);
-}
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "- select is ok" 1>&6
-
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-echo "- select can't count" 1>&6
- cat >>confdefs.h <<\_ACEOF
-#define SELECT_BROKEN 1
-_ACEOF
-
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-{ echo "$as_me:$LINENO: checking for tgetent..." >&5
-echo "$as_me: checking for tgetent..." >&6;}
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-tgetent((char *)0, (char *)0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-olibs="$LIBS"
-LIBS="-lcurses $olibs"
-{ echo "$as_me:$LINENO: checking libcurses..." >&5
-echo "$as_me: checking libcurses..." >&6;}
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
-#ifdef __hpux
-__sorry_hpux_libcurses_is_totally_broken_in_10_10();
-#else
-tgetent((char *)0, (char *)0);
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-LIBS="-ltermcap $olibs"
-{ echo "$as_me:$LINENO: checking libtermcap..." >&5
-echo "$as_me: checking libtermcap..." >&6;}
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-tgetent((char *)0, (char *)0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-LIBS="-ltermlib $olibs"
-{ echo "$as_me:$LINENO: checking libtermlib..." >&5
-echo "$as_me: checking libtermlib..." >&6;}
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-tgetent((char *)0, (char *)0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-LIBS="-lncurses $olibs"
-{ echo "$as_me:$LINENO: checking libncurses..." >&5
-echo "$as_me: checking libncurses..." >&6;}
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-tgetent((char *)0, (char *)0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: !!! no tgetent - no screen" >&5
-echo "$as_me: error: !!! no tgetent - no screen" >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-main()
-{
- exit(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "- you use the termcap database" 1>&6
-
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-echo "- you use the terminfo database" 1>&6
- cat >>confdefs.h <<\_ACEOF
-#define TERMINFO 1
-_ACEOF
-
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: checking ospeed..." >&5
-echo "$as_me: checking ospeed..." >&6;}
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-extern short ospeed;
-int
-main ()
-{
-ospeed=5;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-cat >>confdefs.h <<\_ACEOF
-#define NEED_OSPEED 1
-_ACEOF
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-{ echo "$as_me:$LINENO: checking for /dev/ptc..." >&5
-echo "$as_me: checking for /dev/ptc..." >&6;}
-if test -r /dev/ptc; then
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_DEV_PTC 1
-_ACEOF
-
-fi
-
-{ echo "$as_me:$LINENO: checking for SVR4 ptys..." >&5
-echo "$as_me: checking for SVR4 ptys..." >&6;}
-sysvr4ptys=
-if test -c /dev/ptmx ; then
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-ptsname(0);grantpt(0);unlockpt(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_SVR4_PTYS 1
-_ACEOF
-
-sysvr4ptys=1
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
-
-for ac_func in getpt
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-if test -z "$sysvr4ptys"; then
-
-for ac_func in openpty
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
- echo "$as_me:$LINENO: checking for openpty in -lutil" >&5
-echo $ECHO_N "checking for openpty in -lutil... $ECHO_C" >&6
-if test "${ac_cv_lib_util_openpty+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lutil $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char openpty ();
-int
-main ()
-{
-openpty ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_util_openpty=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_util_openpty=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_util_openpty" >&5
-echo "${ECHO_T}$ac_cv_lib_util_openpty" >&6
-if test $ac_cv_lib_util_openpty = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_OPENPTY 1
-_ACEOF
- LIBS="$LIBS -lutil"
-fi
-
-fi
-done
-
-fi
-
-{ echo "$as_me:$LINENO: checking for ptyranges..." >&5
-echo "$as_me: checking for ptyranges..." >&6;}
-if test -d /dev/ptym ; then
-pdir='/dev/ptym'
-else
-pdir='/dev'
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef M_UNIX
- yes;
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "yes" >/dev/null 2>&1; then
- ptys=`echo /dev/ptyp??`
-else
- ptys=`echo $pdir/pty??`
-fi
-rm -f conftest*
-
-if test "$ptys" != "$pdir/pty??" ; then
-p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
-p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
-cat >>confdefs.h <<_ACEOF
-#define PTYRANGE0 "$p0"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PTYRANGE1 "$p1"
-_ACEOF
-
-fi
-
-
-# Check whether --with-pty-mode or --without-pty-mode was given.
-if test "${with_pty_mode+set}" = set; then
- withval="$with_pty_mode"
- ptymode="${withval}"
-fi;
-
-# Check whether --with-pty-group or --without-pty-group was given.
-if test "${with_pty_group+set}" = set; then
- withval="$with_pty_group"
- ptygrp="${withval}"
-fi;
-test -n "$ptymode" || ptymode=0620
-if test -n "$ptygrp" ; then
-cat >>confdefs.h <<_ACEOF
-#define PTYMODE $ptymode
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PTYGROUP $ptygrp
-_ACEOF
-
-else
-
-{ echo "$as_me:$LINENO: checking default tty permissions/group..." >&5
-echo "$as_me: checking default tty permissions/group..." >&6;}
-rm -f conftest_grp
-if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdio.h>
-main()
-{
- struct stat sb;
- char *x,*ttyname();
- int om, m;
- FILE *fp;
-
- if (!(x = ttyname(0))) exit(1);
- if (stat(x, &sb)) exit(1);
- om = sb.st_mode;
- if (om & 002) exit(0);
- m = system("mesg y");
- if (m == -1 || m == 127) exit(1);
- if (stat(x, &sb)) exit(1);
- m = sb.st_mode;
- if (chmod(x, om)) exit(1);
- if (m & 002) exit(0);
- if (sb.st_gid == getgid()) exit(1);
- if (!(fp=fopen("conftest_grp", "w")))
- exit(1);
- fprintf(fp, "%d\n", sb.st_gid);
- fclose(fp);
- exit(0);
-}
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
-
- if test -f conftest_grp; then
- ptygrp=`cat conftest_grp`
- echo "- pty mode: $ptymode, group: $ptygrp" 1>&6
-
- cat >>confdefs.h <<_ACEOF
-#define PTYMODE $ptymode
-_ACEOF
-
- cat >>confdefs.h <<_ACEOF
-#define PTYGROUP $ptygrp
-_ACEOF
-
- else
- echo "- ptys are world accessable" 1>&6
-
- fi
-
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-
- WRITEPATH=''
- XTERMPATH=''
- # Extract the first word of "write", so it can be a program name with args.
-set dummy write; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_WRITEPATH+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $WRITEPATH in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_WRITEPATH="$WRITEPATH" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_WRITEPATH="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- ;;
-esac
-fi
-WRITEPATH=$ac_cv_path_WRITEPATH
-
-if test -n "$WRITEPATH"; then
- echo "$as_me:$LINENO: result: $WRITEPATH" >&5
-echo "${ECHO_T}$WRITEPATH" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- # Extract the first word of "xterm", so it can be a program name with args.
-set dummy xterm; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_XTERMPATH+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $XTERMPATH in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_XTERMPATH="$XTERMPATH" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_XTERMPATH="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- ;;
-esac
-fi
-XTERMPATH=$ac_cv_path_XTERMPATH
-
-if test -n "$XTERMPATH"; then
- echo "$as_me:$LINENO: result: $XTERMPATH" >&5
-echo "${ECHO_T}$XTERMPATH" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- found=
- if test -n "$WRITEPATH$XTERMPATH"; then
- findfollow=
- lsfollow=
- found=`find $WRITEPATH $XTERMPATH -follow -print 2>/dev/null`
- if test -n "$found"; then
- findfollow=-follow
- lsfollow=L
- fi
- if test -n "$XTERMPATH"; then
- ptygrpn=`ls -l$lsfollow $XTERMPATH | sed -n -e 1p | $AWK '{print $4}'`
- if test tty != "$ptygrpn"; then
- XTERMPATH=
- fi
- fi
- fi
- if test -n "$WRITEPATH$XTERMPATH"; then
- found=`find $WRITEPATH $XTERMPATH $findfollow -perm -2000 -print`
- if test -n "$found"; then
- ptygrp=`ls -ln$lsfollow $found | sed -n -e 1p | $AWK '{print $4}'`
- echo "- pty mode: $ptymode, group: $ptygrp" 1>&6
-
- cat >>confdefs.h <<_ACEOF
-#define PTYMODE $ptymode
-_ACEOF
-
- cat >>confdefs.h <<_ACEOF
-#define PTYGROUP $ptygrp
-_ACEOF
-
- else
- echo "- ptys are world accessable" 1>&6
-
- fi
- else
- echo "- can't determine - assume ptys are world accessable" 1>&6
-
- fi
-
-
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest_grp
-fi
-
-if test -n "$posix" ; then
-
-echo "assuming posix signal definition" 1>&6
-
-cat >>confdefs.h <<\_ACEOF
-#define SIGVOID 1
-_ACEOF
-
-
-else
-
-{ echo "$as_me:$LINENO: checking return type of signal handlers..." >&5
-echo "$as_me: checking return type of signal handlers..." >&6;}
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-#undef signal
-#endif
-extern void (*signal ()) ();
-int
-main ()
-{
-int i;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cat >>confdefs.h <<\_ACEOF
-#define SIGVOID 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: checking sigset..." >&5
-echo "$as_me: checking sigset..." >&6;}
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <signal.h>
-
-int
-main ()
-{
-
-#ifdef SIGVOID
-sigset(0, (void (*)())0);
-#else
-sigset(0, (int (*)())0);
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cat >>confdefs.h <<\_ACEOF
-#define USESIGSET 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-{ echo "$as_me:$LINENO: checking signal implementation..." >&5
-echo "$as_me: checking signal implementation..." >&6;}
-if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <signal.h>
-
-#ifndef SIGCLD
-#define SIGCLD SIGCHLD
-#endif
-#ifdef USESIGSET
-#define signal sigset
-#endif
-
-int got;
-
-#ifdef SIGVOID
-void
-#endif
-hand()
-{
- got++;
-}
-
-main()
-{
- /* on hpux we use sigvec to get bsd signals */
-#ifdef __hpux
- (void)signal(SIGCLD, hand);
- kill(getpid(), SIGCLD);
- kill(getpid(), SIGCLD);
- if (got < 2)
- exit(1);
-#endif
- exit(0);
-}
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-cat >>confdefs.h <<\_ACEOF
-#define SYSVSIGS 1
-_ACEOF
-
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-fi
-
- ac_config_files="$ac_config_files Makefile"
-cat >confcache <<\_ACEOF
-# 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, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# 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 | grep ac_space) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
- ;;
- esac;
-} |
- sed '
- t clear
- : clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
- if test -w $cache_file; then
- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
- cat confcache >$cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[ ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[ ]*$//;
-}'
-fi
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_i=`echo "$ac_i" |
- sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
- # 2. Add them.
- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" || {
- # Find who we are. Look in the path if we contain no path at all
- # relative or not.
- case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
- ;;
- esac
- # We did not find ourselves, most probably we were run as `sh COMMAND'
- # in which case we are not to be found in the path.
- if test "x$as_myself" = x; then
- as_myself=$0
- fi
- if test ! -f "$as_myself"; then
- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
- { (exit 1); exit 1; }; }
- fi
- case $CONFIG_SHELL in
- '')
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for as_base in sh bash ksh sh5; do
- case $as_dir in
- /*)
- if ("$as_dir/$as_base" -c '
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- CONFIG_SHELL=$as_dir/$as_base
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" ${1+"$@"}
- fi;;
- esac
- done
-done
-;;
- esac
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line before each line; the second 'sed' does the real
- # work. The second script uses 'N' to pair each line-number line
- # with the numbered line, and appends trailing '-' during
- # substitution so that $LINENO is not a special case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
- sed '=' <$as_myself |
- sed '
- N
- s,$,-,
- : loop
- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
- t loop
- s,-$,,
- s,^['$as_cr_digits']*\n,,
- ' >$as_me.lineno &&
- chmod +x $as_me.lineno ||
- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensible to this).
- . ./$as_me.lineno
- # Exit status is that of the last command.
- exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
- as_ln_s='cp -p'
- else
- as_ln_s='ln -s'
- fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-exec 6>&1
-
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling. Logging --version etc. is OK.
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.59. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
-_ACEOF
-
-# Files that config.status was made for.
-if test -n "$ac_config_files"; then
- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number, then exit
- -q, --quiet do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to <bug-autoconf@gnu.org>."
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.59,
- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value. By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "x$1" : 'x\([^=]*\)='`
- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- -*)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- *) # This is not an option, so the user has probably given explicit
- # arguments.
- ac_option=$1
- ac_need_defaults=false;;
- esac
-
- case $ac_option in
- # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --vers* | -V )
- echo "$ac_cs_version"; exit 0 ;;
- --he | --h)
- # Conflict between --help and --header
- { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
- { (exit 1); exit 1; }; };;
- --help | --hel | -h )
- echo "$ac_cs_usage"; exit 0 ;;
- --debug | --d* | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- CONFIG_FILES="$CONFIG_FILES $ac_optarg"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
- ac_need_defaults=false;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
- { (exit 1); exit 1; }; } ;;
-
- *) ac_config_targets="$ac_config_targets $1" ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-
-
-
-
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_config_target in $ac_config_targets
-do
- case "$ac_config_target" in
- # Handling of arguments.
- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./confstat$$-$RANDOM
- (umask 077 && mkdir $tmp)
-} ||
-{
- echo "$me: cannot create a temporary directory in ." >&2
- { (exit 1); exit 1; }
-}
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
- # Protect against being on the right side of a sed subst in config.status.
- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s,@SHELL@,$SHELL,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s,@exec_prefix@,$exec_prefix,;t t
-s,@prefix@,$prefix,;t t
-s,@program_transform_name@,$program_transform_name,;t t
-s,@bindir@,$bindir,;t t
-s,@sbindir@,$sbindir,;t t
-s,@libexecdir@,$libexecdir,;t t
-s,@datadir@,$datadir,;t t
-s,@sysconfdir@,$sysconfdir,;t t
-s,@sharedstatedir@,$sharedstatedir,;t t
-s,@localstatedir@,$localstatedir,;t t
-s,@libdir@,$libdir,;t t
-s,@includedir@,$includedir,;t t
-s,@oldincludedir@,$oldincludedir,;t t
-s,@infodir@,$infodir,;t t
-s,@mandir@,$mandir,;t t
-s,@build_alias@,$build_alias,;t t
-s,@host_alias@,$host_alias,;t t
-s,@target_alias@,$target_alias,;t t
-s,@DEFS@,$DEFS,;t t
-s,@ECHO_C@,$ECHO_C,;t t
-s,@ECHO_N@,$ECHO_N,;t t
-s,@ECHO_T@,$ECHO_T,;t t
-s,@LIBS@,$LIBS,;t t
-s,@VERSION@,$VERSION,;t t
-s,@CC@,$CC,;t t
-s,@CFLAGS@,$CFLAGS,;t t
-s,@LDFLAGS@,$LDFLAGS,;t t
-s,@CPPFLAGS@,$CPPFLAGS,;t t
-s,@ac_ct_CC@,$ac_ct_CC,;t t
-s,@EXEEXT@,$EXEEXT,;t t
-s,@OBJEXT@,$OBJEXT,;t t
-s,@CPP@,$CPP,;t t
-s,@EGREP@,$EGREP,;t t
-s,@AWK@,$AWK,;t t
-s,@WRITEPATH@,$WRITEPATH,;t t
-s,@XTERMPATH@,$XTERMPATH,;t t
-s,@LIBOBJS@,$LIBOBJS,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_ACEOF
-
- cat >>$CONFIG_STATUS <<\_ACEOF
- # 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_lines=48
- ac_sed_frag=1 # Number of current file.
- ac_beg=1 # First line for current file.
- ac_end=$ac_max_sed_lines # 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" $tmp/subs.sed >$tmp/subs.frag
- else
- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- fi
- if test ! -s $tmp/subs.frag; then
- ac_more_lines=false
- else
- # The purpose of the label and of the branching condition is to
- # speed up the sed processing (if there are no `@' at all, there
- # is no need to browse any of the substitutions).
- # These are the two extra sed commands mentioned above.
- (echo ':t
- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
- fi
- ac_sed_frag=`expr $ac_sed_frag + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_lines`
- fi
- done
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
- fi
-fi # test -n "$CONFIG_FILES"
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
- esac
-
- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- ac_builddir=.
-
-if test "$ac_dir" != .; then
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
- .) # No --srcdir option. We are building in place.
- ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
-
-
-
- if test x"$ac_file" != x-; then
- { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
- rm -f "$ac_file"
- fi
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- if test x"$ac_file" = x-; then
- configure_input=
- else
- configure_input="$ac_file. "
- fi
- configure_input=$configure_input"Generated from `echo $ac_file_in |
- sed 's,.*/,,'` by configure."
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- echo "$f";;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo "$f"
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo "$srcdir/$f"
- else
- # /dev/null tree
- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
- sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@abs_srcdir@,$ac_abs_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s,@builddir@,$ac_builddir,;t t
-s,@abs_builddir@,$ac_abs_builddir,;t t
-s,@top_builddir@,$ac_top_builddir,;t t
-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
- rm -f $tmp/stdin
- if test x"$ac_file" != x-; then
- mv $tmp/out $ac_file
- else
- cat $tmp/out
- rm -f $tmp/out
- fi
-
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='[ ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
- esac
-
- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- # Do quote $f, to prevent DOS paths from being IFS'd.
- echo "$f";;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo "$f"
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo "$srcdir/$f"
- else
- # /dev/null tree
- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
- # Remove the trailing spaces.
- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
-
-_ACEOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h. The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status. Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless. Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments. This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo ' :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
-do
- # Write a limited-size here document to $tmp/defines.sed.
- echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#define' lines.
- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
- echo 'CEOF
- sed -f $tmp/defines.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
- rm -f conftest.defines
- mv conftest.tail conftest.defines
-done
-rm -f conftest.defines
-echo ' fi # grep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
- # Write a limited-size here document to $tmp/undefs.sed.
- echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#undef'
- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
- echo 'CEOF
- sed -f $tmp/undefs.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
- rm -f conftest.undefs
- mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
-
-cat >>$CONFIG_STATUS <<\_ACEOF
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- if test x"$ac_file" = x-; then
- echo "/* Generated by configure. */" >$tmp/config.h
- else
- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
- fi
- cat $tmp/in >>$tmp/config.h
- rm -f $tmp/in
- if test x"$ac_file" != x-; then
- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
- { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
- else
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- rm -f $ac_file
- mv $tmp/config.h $ac_file
- fi
- else
- cat $tmp/config.h
- rm -f $tmp/config.h
- fi
-done
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
-fi
-
diff --git a/readline/examples/rlfe/configure.in b/readline/examples/rlfe/configure.in
deleted file mode 100644
index ad68541..0000000
--- a/readline/examples/rlfe/configure.in
+++ /dev/null
@@ -1,438 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-
-AC_INIT(rlfe.c)
-AC_CONFIG_HEADER(config.h)
-VERSION=0.4
-AC_SUBST(VERSION)
-
-dnl
-dnl Define some useful macros
-dnl
-AC_DEFUN(AC_PROGRAM_SOURCE,
-[AC_REQUIRE([AC_PROG_CPP])AC_PROVIDE([$0])cat > conftest.c <<EOF
-#include "confdefs.h"
-[$1]
-_CUT_HERE_
-[$2]
-EOF
-eval "$ac_cpp conftest.c 2>&5 | sed -e '1,/_CUT_HERE_/d' -e 's/ //g' > conftest.out"
-. ./conftest.out
-rm -f conftest*
-])dnl
-dnl
-define(AC_NOTE,
-[echo "$1" 1>&AC_FD_MSG
-])dnl
-
-old_CFLAGS="$CFLAGS"
-AC_PROG_CC
-AC_PROG_CPP
-AC_PROG_GCC_TRADITIONAL
-AC_ISC_POSIX
-
-AC_TRY_RUN(main(){exit(0);},,[
-if test $CC != cc ; then
-AC_NOTE(Your $CC failed - restarting with CC=cc)
-AC_NOTE()
-CC=cc
-export CC
-exec $0 $configure_args
-fi
-])
-
-AC_TRY_RUN(main(){exit(0);},,
-exec 5>&2
-eval $ac_link
-AC_NOTE(CC=$CC; CFLAGS=$CFLAGS; LIBS=$LIBS;)
-AC_NOTE($ac_compile)
-AC_MSG_ERROR(Can't run the compiler - sorry))
-
-AC_TRY_RUN([
-main()
-{
- int __something_strange_();
- __something_strange_(0);
-}
-],AC_MSG_ERROR(Your compiler does not set the exit status - sorry))
-
-AC_PROG_AWK
-
-if test -f etc/toolcheck; then
-AC_CHECKING(for buggy tools)
-sh etc/toolcheck 1>&AC_FD_MSG
-fi
-
-dnl
-dnl **** special unix variants ****
-dnl
-
-AC_CHECKING(for System V)
-AC_TRY_COMPILE(
-[#include <sys/types.h>
-#include <signal.h>
-#include <fcntl.h>], [int x = SIGCHLD | FNDELAY;], , AC_DEFINE(SYSV))
-
-AC_CHECKING(for Solaris 2.x)
-AC_EGREP_CPP(yes,
-[#if defined(SVR4) && defined(sun)
- yes
-#endif
-], LIBS="$LIBS -lsocket -lnsl -lkstat")
-
-dnl
-dnl **** select() ****
-dnl
-
-AC_CHECKING(select)
-AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],,
-LIBS="$LIBS -lnet -lnsl"
-AC_CHECKING(select with $LIBS)
-AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],,
-AC_MSG_ERROR(!!! no select - no screen))
-)
-dnl
-dnl **** check the select implementation ****
-dnl
-
-AC_CHECKING(select return value)
-AC_TRY_RUN([
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-char *nam = "/tmp/conftest$$";
-
-#ifdef NAMEDPIPE
-
-#ifndef O_NONBLOCK
-#define O_NONBLOCK O_NDELAY
-#endif
-#ifndef S_IFIFO
-#define S_IFIFO 0010000
-#endif
-
-
-main()
-{
-#ifdef FD_SET
- fd_set f;
-#else
- int f;
-#endif
-
-#ifdef __FreeBSD__
-/* From Andrew A. Chernov (ache@astral.msk.su):
- * opening RDWR fifo fails in BSD 4.4, but select return values are
- * right.
- */
- exit(0);
-#endif
- (void)alarm(5);
-#ifdef POSIX
- if (mkfifo(nam, 0777))
-#else
- if (mknod(nam, S_IFIFO|0777, 0))
-#endif
- exit(1);
- close(0);
- if (open(nam, O_RDWR | O_NONBLOCK))
- exit(1);
- if (write(0, "TEST", 4) == -1)
- exit(1);
-
-#else
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-main()
-{
- int s1, s2, l;
- struct sockaddr_un a;
-#ifdef FD_SET
- fd_set f;
-#else
- int f;
-#endif
-
- (void)alarm(5);
- if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
- exit(1);
- a.sun_family = AF_UNIX;
- strcpy(a.sun_path, nam);
- (void) unlink(nam);
- if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1)
- exit(1);
- if (listen(s1, 2))
- exit(1);
- if (fork() == 0)
- {
- if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
- kill(getppid(), 3);
- (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2);
- if (write(s2, "HELLO", 5) == -1)
- kill(getppid(), 3);
- exit(0);
- }
- l = sizeof(a);
- close(0);
- if (accept(s1, (struct sockaddr *)&a, &l))
- exit(1);
-#endif
-
-
-#ifdef FD_SET
- FD_SET(0, &f);
-#else
- f = 1;
-#endif
- if (select(1, &f, 0, 0, 0) == -1)
- exit(1);
- if (select(1, &f, &f, 0, 0) != 2)
- exit(1);
- exit(0);
-}
-],AC_NOTE(- select is ok),
-AC_NOTE(- select can't count) AC_DEFINE(SELECT_BROKEN))
-
-dnl
-dnl **** termcap or terminfo ****
-dnl
-AC_CHECKING(for tgetent)
-AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
-olibs="$LIBS"
-LIBS="-lcurses $olibs"
-AC_CHECKING(libcurses)
-AC_TRY_LINK(,[
-#ifdef __hpux
-__sorry_hpux_libcurses_is_totally_broken_in_10_10();
-#else
-tgetent((char *)0, (char *)0);
-#endif
-],,
-LIBS="-ltermcap $olibs"
-AC_CHECKING(libtermcap)
-AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
-LIBS="-ltermlib $olibs"
-AC_CHECKING(libtermlib)
-AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
-LIBS="-lncurses $olibs"
-AC_CHECKING(libncurses)
-AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
-AC_MSG_ERROR(!!! no tgetent - no screen))))))
-
-AC_TRY_RUN([
-main()
-{
- exit(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1);
-}], AC_NOTE(- you use the termcap database),
-AC_NOTE(- you use the terminfo database) AC_DEFINE(TERMINFO))
-AC_CHECKING(ospeed)
-AC_TRY_LINK(extern short ospeed;,ospeed=5;,,AC_DEFINE(NEED_OSPEED))
-
-dnl
-dnl **** PTY specific things ****
-dnl
-AC_CHECKING(for /dev/ptc)
-if test -r /dev/ptc; then
-AC_DEFINE(HAVE_DEV_PTC)
-fi
-
-AC_CHECKING(for SVR4 ptys)
-sysvr4ptys=
-if test -c /dev/ptmx ; then
-AC_TRY_LINK([],[ptsname(0);grantpt(0);unlockpt(0);],[AC_DEFINE(HAVE_SVR4_PTYS)
-sysvr4ptys=1])
-fi
-
-AC_CHECK_FUNCS(getpt)
-
-dnl check for openpty()
-if test -z "$sysvr4ptys"; then
-AC_CHECK_FUNCS(openpty,,
-[AC_CHECK_LIB(util,openpty, [AC_DEFINE(HAVE_OPENPTY)] [LIBS="$LIBS -lutil"])])
-fi
-
-AC_CHECKING(for ptyranges)
-if test -d /dev/ptym ; then
-pdir='/dev/ptym'
-else
-pdir='/dev'
-fi
-dnl SCO uses ptyp%d
-AC_EGREP_CPP(yes,
-[#ifdef M_UNIX
- yes;
-#endif
-], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
-dnl if test -c /dev/ptyp19; then
-dnl ptys=`echo /dev/ptyp??`
-dnl else
-dnl ptys=`echo $pdir/pty??`
-dnl fi
-if test "$ptys" != "$pdir/pty??" ; then
-p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
-p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
-AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
-AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
-fi
-
-dnl **** pty mode/group handling ****
-dnl
-dnl support provided by Luke Mewburn <lm@rmit.edu.au>, 931222
-AC_ARG_WITH(pty-mode, [ --with-pty-mode=mode default mode for ptys], [ ptymode="${withval}" ])
-AC_ARG_WITH(pty-group, [ --with-pty-group=group default group for ptys], [ ptygrp="${withval}" ])
-test -n "$ptymode" || ptymode=0620
-if test -n "$ptygrp" ; then
-AC_DEFINE_UNQUOTED(PTYMODE, $ptymode)
-AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp)
-else
-
-AC_CHECKING(default tty permissions/group)
-rm -f conftest_grp
-AC_TRY_RUN([
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdio.h>
-main()
-{
- struct stat sb;
- char *x,*ttyname();
- int om, m;
- FILE *fp;
-
- if (!(x = ttyname(0))) exit(1);
- if (stat(x, &sb)) exit(1);
- om = sb.st_mode;
- if (om & 002) exit(0);
- m = system("mesg y");
- if (m == -1 || m == 127) exit(1);
- if (stat(x, &sb)) exit(1);
- m = sb.st_mode;
- if (chmod(x, om)) exit(1);
- if (m & 002) exit(0);
- if (sb.st_gid == getgid()) exit(1);
- if (!(fp=fopen("conftest_grp", "w")))
- exit(1);
- fprintf(fp, "%d\n", sb.st_gid);
- fclose(fp);
- exit(0);
-}
-],[
- if test -f conftest_grp; then
- ptygrp=`cat conftest_grp`
- AC_NOTE([- pty mode: $ptymode, group: $ptygrp])
- AC_DEFINE_UNQUOTED(PTYMODE, $ptymode)
- AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp)
- else
- AC_NOTE(- ptys are world accessable)
- fi
-],[
- WRITEPATH=''
- XTERMPATH=''
- AC_PATH_PROG(WRITEPATH, write)
- AC_PATH_PROG(XTERMPATH, xterm)
- found=
- if test -n "$WRITEPATH$XTERMPATH"; then
- findfollow=
- lsfollow=
- found=`find $WRITEPATH $XTERMPATH -follow -print 2>/dev/null`
- if test -n "$found"; then
- findfollow=-follow
- lsfollow=L
- fi
- if test -n "$XTERMPATH"; then
- ptygrpn=`ls -l$lsfollow $XTERMPATH | sed -n -e 1p | $AWK '{print $4}'`
- if test tty != "$ptygrpn"; then
- XTERMPATH=
- fi
- fi
- fi
- if test -n "$WRITEPATH$XTERMPATH"; then
- found=`find $WRITEPATH $XTERMPATH $findfollow -perm -2000 -print`
- if test -n "$found"; then
- ptygrp=`ls -ln$lsfollow $found | sed -n -e 1p | $AWK '{print $4}'`
- AC_NOTE([- pty mode: $ptymode, group: $ptygrp])
- AC_DEFINE_UNQUOTED(PTYMODE, $ptymode)
- AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp)
- else
- AC_NOTE(- ptys are world accessable)
- fi
- else
- AC_NOTE(- can't determine - assume ptys are world accessable)
- fi
- ]
-)
-rm -f conftest_grp
-fi
-
-dnl
-dnl **** signal handling ****
-dnl
-if test -n "$posix" ; then
-
-dnl POSIX has reliable signals with void return type.
-AC_NOTE(assuming posix signal definition)
-AC_DEFINE(SIGVOID)
-
-else
-
-AC_CHECKING(return type of signal handlers)
-AC_TRY_COMPILE(
-[#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-#undef signal
-#endif
-extern void (*signal ()) ();], [int i;], AC_DEFINE(SIGVOID))
-AC_CHECKING(sigset)
-AC_TRY_LINK([
-#include <sys/types.h>
-#include <signal.h>
-],[
-#ifdef SIGVOID
-sigset(0, (void (*)())0);
-#else
-sigset(0, (int (*)())0);
-#endif
-], AC_DEFINE(USESIGSET))
-AC_CHECKING(signal implementation)
-AC_TRY_RUN([
-#include <sys/types.h>
-#include <signal.h>
-
-#ifndef SIGCLD
-#define SIGCLD SIGCHLD
-#endif
-#ifdef USESIGSET
-#define signal sigset
-#endif
-
-int got;
-
-#ifdef SIGVOID
-void
-#endif
-hand()
-{
- got++;
-}
-
-main()
-{
- /* on hpux we use sigvec to get bsd signals */
-#ifdef __hpux
- (void)signal(SIGCLD, hand);
- kill(getpid(), SIGCLD);
- kill(getpid(), SIGCLD);
- if (got < 2)
- exit(1);
-#endif
- exit(0);
-}
-],,AC_DEFINE(SYSVSIGS))
-
-fi
-
-AC_OUTPUT(Makefile)
diff --git a/readline/examples/rlfe/extern.h b/readline/examples/rlfe/extern.h
deleted file mode 100644
index 2cace2c..0000000
--- a/readline/examples/rlfe/extern.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright (c) 1993-2002
- * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
- * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
- * Copyright (c) 1987 Oliver Laumann
- *
- * 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 (see the file COPYING); if not, write to the
- * Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- ****************************************************************
- * $Id$ FAU
- */
-
-#if !defined(__GNUC__) || __GNUC__ < 2
-#undef __attribute__
-#define __attribute__(x)
-#endif
-
-/* pty.c */
-extern int OpenPTY __P((char **));
-extern void InitPTY __P((int));
-
diff --git a/readline/examples/rlfe/os.h b/readline/examples/rlfe/os.h
deleted file mode 100644
index 1994fe6..0000000
--- a/readline/examples/rlfe/os.h
+++ /dev/null
@@ -1,530 +0,0 @@
-/* Copyright (c) 1993-2002
- * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
- * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
- * Copyright (c) 1987 Oliver Laumann
- *
- * 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 (see the file COPYING); if not, write to the
- * Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- ****************************************************************
- * $Id$ FAU
- */
-
-#include <stdio.h>
-#include <errno.h>
-
-#include <sys/param.h>
-
-/* In strict ANSI mode, HP-UX machines define __hpux but not hpux */
-#if defined(__hpux) && !defined(hpux)
-# define hpux
-#endif
-
-#if defined(__bsdi__) || defined(__386BSD__) || defined(_CX_UX) || defined(hpux) || defined(_IBMR2) || defined(linux)
-# include <signal.h>
-#endif /* __bsdi__ || __386BSD__ || _CX_UX || hpux || _IBMR2 || linux */
-
-#ifdef ISC
-# ifdef ENAMETOOLONG
-# undef ENAMETOOLONG
-# endif
-# ifdef ENOTEMPTY
-# undef ENOTEMPTY
-# endif
-# include <sys/bsdtypes.h>
-# include <net/errno.h>
-#endif
-
-#ifdef sun
-# define getpgrp __getpgrp
-# define exit __exit
-#endif
-#ifdef POSIX
-# include <unistd.h>
-# if defined(__STDC__)
-# include <stdlib.h>
-# endif /* __STDC__ */
-#endif /* POSIX */
-#ifdef sun
-# undef getpgrp
-# undef exit
-#endif /* sun */
-
-#ifndef linux /* all done in <errno.h> */
-extern int errno;
-#endif /* linux */
-#ifndef HAVE_STRERROR
-/* No macros, please */
-#undef strerror
-#endif
-
-#if !defined(SYSV) && !defined(linux)
-# ifdef NEWSOS
-# define strlen ___strlen___
-# include <strings.h>
-# undef strlen
-# else /* NEWSOS */
-# include <strings.h>
-# endif /* NEWSOS */
-#else /* SYSV */
-# if defined(SVR4) || defined(NEWSOS)
-# define strlen ___strlen___
-# include <string.h>
-# undef strlen
-# if !defined(NEWSOS) && !defined(__hpux)
- extern size_t strlen(const char *);
-# endif
-# else /* SVR4 */
-# include <string.h>
-# endif /* SVR4 */
-#endif /* SYSV */
-
-#ifdef USEVARARGS
-# if defined(__STDC__)
-# include <stdarg.h>
-# define VA_LIST(var) va_list var;
-# define VA_DOTS ...
-# define VA_DECL
-# define VA_START(ap, fmt) va_start(ap, fmt)
-# define VA_ARGS(ap) ap
-# define VA_END(ap) va_end(ap)
-# else
-# include <varargs.h>
-# define VA_LIST(var) va_list var;
-# define VA_DOTS va_alist
-# define VA_DECL va_dcl
-# define VA_START(ap, fmt) va_start(ap)
-# define VA_ARGS(ap) ap
-# define VA_END(ap) va_end(ap)
-# endif
-#else
-# define VA_LIST(var)
-# define VA_DOTS p1, p2, p3, p4, p5, p6
-# define VA_DECL unsigned long VA_DOTS;
-# define VA_START(ap, fmt)
-# define VA_ARGS(ap) VA_DOTS
-# define VA_END(ap)
-# undef vsnprintf
-# define vsnprintf xsnprintf
-#endif
-
-#if !defined(sun) && !defined(B43) && !defined(ISC) && !defined(pyr) && !defined(_CX_UX)
-# include <time.h>
-#endif
-#include <sys/time.h>
-
-#ifdef M_UNIX /* SCO */
-# include <sys/stream.h>
-# include <sys/ptem.h>
-# define ftruncate(fd, s) chsize(fd, s)
-#endif
-
-#ifdef SYSV
-# define index strchr
-# define rindex strrchr
-# define bzero(poi,len) memset(poi,0,len)
-# define bcmp memcmp
-# define killpg(pgrp,sig) kill( -(pgrp), sig)
-#endif
-
-#ifndef HAVE_GETCWD
-# define getcwd(b,l) getwd(b)
-#endif
-
-#ifndef USEBCOPY
-# ifdef USEMEMMOVE
-# define bcopy(s,d,len) memmove(d,s,len)
-# else
-# ifdef USEMEMCPY
-# define bcopy(s,d,len) memcpy(d,s,len)
-# else
-# define NEED_OWN_BCOPY
-# define bcopy xbcopy
-# endif
-# endif
-#endif
-
-#ifdef hpux
-# define setreuid(ruid, euid) setresuid(ruid, euid, -1)
-# define setregid(rgid, egid) setresgid(rgid, egid, -1)
-#endif
-
-#if defined(HAVE_SETEUID) || defined(HAVE_SETREUID)
-# define USE_SETEUID
-#endif
-
-#if !defined(HAVE__EXIT) && !defined(_exit)
-#define _exit(x) exit(x)
-#endif
-
-#ifndef HAVE_UTIMES
-# define utimes utime
-#endif
-
-#ifdef BUILTIN_TELNET
-# include <netinet/in.h>
-# include <arpa/inet.h>
-#endif
-
-#if defined(USE_LOCALE) && (!defined(HAVE_SETLOCALE) || !defined(HAVE_STRFTIME))
-# undef USE_LOCALE
-#endif
-
-/*****************************************************************
- * terminal handling
- */
-
-#ifdef POSIX
-# include <termios.h>
-# ifdef hpux
-# include <bsdtty.h>
-# endif /* hpux */
-# ifdef NCCS
-# define MAXCC NCCS
-# else
-# define MAXCC 256
-# endif
-#else /* POSIX */
-# ifdef TERMIO
-# include <termio.h>
-# ifdef NCC
-# define MAXCC NCC
-# else
-# define MAXCC 256
-# endif
-# ifdef CYTERMIO
-# include <cytermio.h>
-# endif
-# else /* TERMIO */
-# include <sgtty.h>
-# endif /* TERMIO */
-#endif /* POSIX */
-
-#ifndef VDISABLE
-# ifdef _POSIX_VDISABLE
-# define VDISABLE _POSIX_VDISABLE
-# else
-# define VDISABLE 0377
-# endif /* _POSIX_VDISABLE */
-#endif /* !VDISABLE */
-
-
-/* on sgi, regardless of the stream head's read mode (RNORM/RMSGN/RMSGD)
- * TIOCPKT mode causes data loss if our buffer is too small (IOSIZE)
- * to hold the whole packet at first read().
- * (Marc Boucher)
- *
- * matthew green:
- * TIOCPKT is broken on dgux 5.4.1 generic AViiON mc88100
- *
- * Joe Traister: On AIX4, programs like irc won't work if screen
- * uses TIOCPKT (select fails to return on pty read).
- */
-#if defined(sgi) || defined(DGUX) || defined(_IBMR2)
-# undef TIOCPKT
-#endif
-
-/* linux ncurses is broken, we have to use our own tputs */
-#if defined(linux) && defined(TERMINFO)
-# define tputs xtputs
-#endif
-
-/* Alexandre Oliva: SVR4 style ptys don't work with osf */
-#ifdef __osf__
-# undef HAVE_SVR4_PTYS
-#endif
-
-/*****************************************************************
- * utmp handling
- */
-
-#ifdef GETUTENT
- typedef char *slot_t;
-#else
- typedef int slot_t;
-#endif
-
-#if defined(UTMPOK) || defined(BUGGYGETLOGIN)
-# if defined(SVR4) && !defined(DGUX) && !defined(__hpux) && !defined(linux)
-# include <utmpx.h>
-# define UTMPFILE UTMPX_FILE
-# define utmp utmpx
-# define getutent getutxent
-# define getutid getutxid
-# define getutline getutxline
-# define pututline pututxline
-# define setutent setutxent
-# define endutent endutxent
-# define ut_time ut_xtime
-# else /* SVR4 */
-# include <utmp.h>
-# endif /* SVR4 */
-# ifdef apollo
- /*
- * We don't have GETUTENT, so we dig into utmp ourselves.
- * But we save the permanent filedescriptor and
- * open utmp just when we need to.
- * This code supports an unsorted utmp. jw.
- */
-# define UTNOKEEP
-# endif /* apollo */
-
-# ifndef UTMPFILE
-# ifdef UTMP_FILE
-# define UTMPFILE UTMP_FILE
-# else
-# ifdef _PATH_UTMP
-# define UTMPFILE _PATH_UTMP
-# else
-# define UTMPFILE "/etc/utmp"
-# endif /* _PATH_UTMP */
-# endif
-# endif
-
-#endif /* UTMPOK || BUGGYGETLOGIN */
-
-#if !defined(UTMPOK) && defined(USRLIMIT)
-# undef USRLIMIT
-#endif
-
-#ifdef LOGOUTOK
-# ifndef LOGINDEFAULT
-# define LOGINDEFAULT 0
-# endif
-#else
-# ifdef LOGINDEFAULT
-# undef LOGINDEFAULT
-# endif
-# define LOGINDEFAULT 1
-#endif
-
-
-/*****************************************************************
- * file stuff
- */
-
-#ifndef F_OK
-#define F_OK 0
-#endif
-#ifndef X_OK
-#define X_OK 1
-#endif
-#ifndef W_OK
-#define W_OK 2
-#endif
-#ifndef R_OK
-#define R_OK 4
-#endif
-
-#ifndef S_IFIFO
-#define S_IFIFO 0010000
-#endif
-#ifndef S_IREAD
-#define S_IREAD 0000400
-#endif
-#ifndef S_IWRITE
-#define S_IWRITE 0000200
-#endif
-#ifndef S_IEXEC
-#define S_IEXEC 0000100
-#endif
-
-#if defined(S_IFIFO) && defined(S_IFMT) && !defined(S_ISFIFO)
-#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
-#endif
-#if defined(S_IFSOCK) && defined(S_IFMT) && !defined(S_ISSOCK)
-#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
-#endif
-#if defined(S_IFCHR) && defined(S_IFMT) && !defined(S_ISCHR)
-#define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
-#endif
-#if defined(S_IFDIR) && defined(S_IFMT) && !defined(S_ISDIR)
-#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
-#endif
-#if defined(S_IFLNK) && defined(S_IFMT) && !defined(S_ISLNK)
-#define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
-#endif
-
-/*
- * SunOS 4.1.3: `man 2V open' has only one line that mentions O_NOBLOCK:
- *
- * O_NONBLOCK Same as O_NDELAY above.
- *
- * on the very same SunOS 4.1.3, I traced the open system call and found
- * that an open("/dev/ttyy08", O_RDWR|O_NONBLOCK|O_NOCTTY) was blocked,
- * whereas open("/dev/ttyy08", O_RDWR|O_NDELAY |O_NOCTTY) went through.
- *
- * For this simple reason I now favour O_NDELAY. jw. 4.5.95
- */
-#if defined(sun) && !defined(SVR4)
-# undef O_NONBLOCK
-#endif
-
-#if !defined(O_NONBLOCK) && defined(O_NDELAY)
-# define O_NONBLOCK O_NDELAY
-#endif
-
-#if !defined(FNBLOCK) && defined(FNONBLOCK)
-# define FNBLOCK FNONBLOCK
-#endif
-#if !defined(FNBLOCK) && defined(FNDELAY)
-# define FNBLOCK FNDELAY
-#endif
-#if !defined(FNBLOCK) && defined(O_NONBLOCK)
-# define FNBLOCK O_NONBLOCK
-#endif
-
-#ifndef POSIX
-#undef mkfifo
-#define mkfifo(n,m) mknod(n,S_IFIFO|(m),0)
-#endif
-
-#if !defined(HAVE_LSTAT) && !defined(lstat)
-# define lstat stat
-#endif
-
-/*****************************************************************
- * signal handling
- */
-
-#ifdef SIGVOID
-# define SIGRETURN
-# define sigret_t void
-#else
-# define SIGRETURN return 0;
-# define sigret_t int
-#endif
-
-/* Geeeee, reverse it? */
-#if defined(SVR4) || (defined(SYSV) && defined(ISC)) || defined(_AIX) || defined(linux) || defined(ultrix) || defined(__386BSD__) || defined(__bsdi__) || defined(POSIX) || defined(NeXT)
-# define SIGHASARG
-#endif
-
-#ifdef SIGHASARG
-# define SIGPROTOARG (int)
-# define SIGDEFARG (sigsig) int sigsig;
-# define SIGARG 0
-#else
-# define SIGPROTOARG (void)
-# define SIGDEFARG ()
-# define SIGARG
-#endif
-
-#ifndef SIGCHLD
-#define SIGCHLD SIGCLD
-#endif
-
-#if defined(POSIX) || defined(hpux)
-# define signal xsignal
-#else
-# ifdef USESIGSET
-# define signal sigset
-# endif /* USESIGSET */
-#endif
-
-/* used in screen.c and attacher.c */
-#ifndef NSIG /* kbeal needs these w/o SYSV */
-# define NSIG 32
-#endif /* !NSIG */
-
-
-/*****************************************************************
- * Wait stuff
- */
-
-#if (!defined(sysV68) && !defined(M_XENIX)) || defined(NeXT) || defined(M_UNIX)
-# include <sys/wait.h>
-#endif
-
-#ifndef WTERMSIG
-# ifndef BSDWAIT /* if wait is NOT a union: */
-# define WTERMSIG(status) (status & 0177)
-# else
-# define WTERMSIG(status) status.w_T.w_Termsig
-# endif
-#endif
-
-#ifndef WSTOPSIG
-# ifndef BSDWAIT /* if wait is NOT a union: */
-# define WSTOPSIG(status) ((status >> 8) & 0377)
-# else
-# define WSTOPSIG(status) status.w_S.w_Stopsig
-# endif
-#endif
-
-/* NET-2 uses WCOREDUMP */
-#if defined(WCOREDUMP) && !defined(WIFCORESIG)
-# define WIFCORESIG(status) WCOREDUMP(status)
-#endif
-
-#ifndef WIFCORESIG
-# ifndef BSDWAIT /* if wait is NOT a union: */
-# define WIFCORESIG(status) (status & 0200)
-# else
-# define WIFCORESIG(status) status.w_T.w_Coredump
-# endif
-#endif
-
-#ifndef WEXITSTATUS
-# ifndef BSDWAIT /* if wait is NOT a union: */
-# define WEXITSTATUS(status) ((status >> 8) & 0377)
-# else
-# define WEXITSTATUS(status) status.w_T.w_Retcode
-# endif
-#endif
-
-
-/*****************************************************************
- * select stuff
- */
-
-#if defined(M_XENIX) || defined(M_UNIX) || defined(_SEQUENT_)
-#include <sys/select.h> /* for timeval + FD... */
-#endif
-
-/*
- * SunOS 3.5 - Tom Schmidt - Micron Semiconductor, Inc - 27-Jul-93
- * tschmidt@vax.micron.com
- */
-#ifndef FD_SET
-# ifndef SUNOS3
-typedef struct fd_set { int fds_bits[1]; } fd_set;
-# endif
-# define FD_ZERO(fd) ((fd)->fds_bits[0] = 0)
-# define FD_SET(b, fd) ((fd)->fds_bits[0] |= 1 << (b))
-# define FD_ISSET(b, fd) ((fd)->fds_bits[0] & 1 << (b))
-# define FD_SETSIZE 32
-#endif
-
-
-/*****************************************************************
- * user defineable stuff
- */
-
-#ifndef TERMCAP_BUFSIZE
-# define TERMCAP_BUFSIZE 2048
-#endif
-
-#ifndef MAXPATHLEN
-# define MAXPATHLEN 1024
-#endif
-
-/*
- * you may try to vary this value. Use low values if your (VMS) system
- * tends to choke when pasting. Use high values if you want to test
- * how many characters your pty's can buffer.
- */
-#define IOSIZE 4096
-
diff --git a/readline/examples/rlfe/pty.c b/readline/examples/rlfe/pty.c
deleted file mode 100644
index f89d44c..0000000
--- a/readline/examples/rlfe/pty.c
+++ /dev/null
@@ -1,387 +0,0 @@
-/* Copyright (c) 1993-2002
- * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
- * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
- * Copyright (c) 1987 Oliver Laumann
- *
- * 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 (see the file COPYING); if not, write to the
- * Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- ****************************************************************
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <signal.h>
-
-#include "config.h"
-#include "screen.h"
-
-#ifndef sun
-# include <sys/ioctl.h>
-#endif
-
-/* for solaris 2.1, Unixware (SVR4.2) and possibly others */
-#ifdef HAVE_SVR4_PTYS
-# include <sys/stropts.h>
-#endif
-
-#if defined(sun) && defined(LOCKPTY) && !defined(TIOCEXCL)
-# include <sys/ttold.h>
-#endif
-
-#ifdef ISC
-# include <sys/tty.h>
-# include <sys/sioctl.h>
-# include <sys/pty.h>
-#endif
-
-#ifdef sgi
-# include <sys/sysmacros.h>
-#endif /* sgi */
-
-#include "extern.h"
-
-/*
- * if no PTYRANGE[01] is in the config file, we pick a default
- */
-#ifndef PTYRANGE0
-# define PTYRANGE0 "qpr"
-#endif
-#ifndef PTYRANGE1
-# define PTYRANGE1 "0123456789abcdef"
-#endif
-
-/* SVR4 pseudo ttys don't seem to work with SCO-5 */
-#ifdef M_UNIX
-# undef HAVE_SVR4_PTYS
-#endif
-
-extern int eff_uid;
-
-/* used for opening a new pty-pair: */
-static char PtyName[32], TtyName[32];
-
-#if !(defined(sequent) || defined(_SEQUENT_) || defined(HAVE_SVR4_PTYS))
-# ifdef hpux
-static char PtyProto[] = "/dev/ptym/ptyXY";
-static char TtyProto[] = "/dev/pty/ttyXY";
-# else
-# ifdef M_UNIX
-static char PtyProto[] = "/dev/ptypXY";
-static char TtyProto[] = "/dev/ttypXY";
-# else
-static char PtyProto[] = "/dev/ptyXY";
-static char TtyProto[] = "/dev/ttyXY";
-# endif
-# endif /* hpux */
-#endif
-
-static void initmaster __P((int));
-
-#if defined(sun)
-/* sun's utmp_update program opens the salve side, thus corrupting
- */
-int pty_preopen = 1;
-#else
-int pty_preopen = 0;
-#endif
-
-/*
- * Open all ptys with O_NOCTTY, just to be on the safe side
- * (RISCos mips breaks otherwise)
- */
-#ifndef O_NOCTTY
-# define O_NOCTTY 0
-#endif
-
-/***************************************************************/
-
-static void
-initmaster(f)
-int f;
-{
-#ifdef POSIX
- tcflush(f, TCIOFLUSH);
-#else
-# ifdef TIOCFLUSH
- (void) ioctl(f, TIOCFLUSH, (char *) 0);
-# endif
-#endif
-#ifdef LOCKPTY
- (void) ioctl(f, TIOCEXCL, (char *) 0);
-#endif
-}
-
-void
-InitPTY(f)
-int f;
-{
- if (f < 0)
- return;
-#if defined(I_PUSH) && defined(HAVE_SVR4_PTYS) && !defined(sgi) && !defined(linux) && !defined(__osf__) && !defined(M_UNIX)
- if (ioctl(f, I_PUSH, "ptem"))
- Panic(errno, "InitPTY: cannot I_PUSH ptem");
- if (ioctl(f, I_PUSH, "ldterm"))
- Panic(errno, "InitPTY: cannot I_PUSH ldterm");
-# ifdef sun
- if (ioctl(f, I_PUSH, "ttcompat"))
- Panic(errno, "InitPTY: cannot I_PUSH ttcompat");
-# endif
-#endif
-}
-
-/***************************************************************/
-
-#if defined(OSX) && !defined(PTY_DONE)
-#define PTY_DONE
-int
-OpenPTY(ttyn)
-char **ttyn;
-{
- register int f;
- if ((f = open_controlling_pty(TtyName)) < 0)
- return -1;
- initmaster(f);
- *ttyn = TtyName;
- return f;
-}
-#endif
-
-/***************************************************************/
-
-#if (defined(sequent) || defined(_SEQUENT_)) && !defined(PTY_DONE)
-#define PTY_DONE
-int
-OpenPTY(ttyn)
-char **ttyn;
-{
- char *m, *s;
- register int f;
-
- if ((f = getpseudotty(&s, &m)) < 0)
- return -1;
-#ifdef _SEQUENT_
- fvhangup(s);
-#endif
- strncpy(PtyName, m, sizeof(PtyName));
- strncpy(TtyName, s, sizeof(TtyName));
- initmaster(f);
- *ttyn = TtyName;
- return f;
-}
-#endif
-
-/***************************************************************/
-
-#if defined(__sgi) && !defined(PTY_DONE)
-#define PTY_DONE
-int
-OpenPTY(ttyn)
-char **ttyn;
-{
- int f;
- char *name, *_getpty();
- sigret_t (*sigcld)__P(SIGPROTOARG);
-
- /*
- * SIGCHLD set to SIG_DFL for _getpty() because it may fork() and
- * exec() /usr/adm/mkpts
- */
- sigcld = signal(SIGCHLD, SIG_DFL);
- name = _getpty(&f, O_RDWR | O_NONBLOCK, 0600, 0);
- signal(SIGCHLD, sigcld);
-
- if (name == 0)
- return -1;
- initmaster(f);
- *ttyn = name;
- return f;
-}
-#endif
-
-/***************************************************************/
-
-#if defined(MIPS) && defined(HAVE_DEV_PTC) && !defined(PTY_DONE)
-#define PTY_DONE
-int
-OpenPTY(ttyn)
-char **ttyn;
-{
- register int f;
- struct stat buf;
-
- strcpy(PtyName, "/dev/ptc");
- if ((f = open(PtyName, O_RDWR | O_NOCTTY | O_NONBLOCK)) < 0)
- return -1;
- if (fstat(f, &buf) < 0)
- {
- close(f);
- return -1;
- }
- sprintf(TtyName, "/dev/ttyq%d", minor(buf.st_rdev));
- initmaster(f);
- *ttyn = TtyName;
- return f;
-}
-#endif
-
-/***************************************************************/
-
-#if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE)
-#define PTY_DONE
-int
-OpenPTY(ttyn)
-char **ttyn;
-{
- register int f;
- char *m, *ptsname();
- int unlockpt __P((int)), grantpt __P((int));
-#if defined(HAVE_GETPT) && defined(linux)
- int getpt __P((void));
-#endif
- sigret_t (*sigcld)__P(SIGPROTOARG);
-
- strcpy(PtyName, "/dev/ptmx");
-#if defined(HAVE_GETPT) && defined(linux)
- if ((f = getpt()) == -1)
-#else
- if ((f = open(PtyName, O_RDWR | O_NOCTTY)) == -1)
-#endif
- return -1;
-
- /*
- * SIGCHLD set to SIG_DFL for grantpt() because it fork()s and
- * exec()s pt_chmod
- */
- sigcld = signal(SIGCHLD, SIG_DFL);
- if ((m = ptsname(f)) == NULL || grantpt(f) || unlockpt(f))
- {
- signal(SIGCHLD, sigcld);
- close(f);
- return -1;
- }
- signal(SIGCHLD, sigcld);
- strncpy(TtyName, m, sizeof(TtyName));
- initmaster(f);
- *ttyn = TtyName;
- return f;
-}
-#endif
-
-/***************************************************************/
-
-#if defined(_AIX) && defined(HAVE_DEV_PTC) && !defined(PTY_DONE)
-#define PTY_DONE
-
-int
-OpenPTY(ttyn)
-char **ttyn;
-{
- register int f;
-
- /* a dumb looking loop replaced by mycrofts code: */
- strcpy (PtyName, "/dev/ptc");
- if ((f = open (PtyName, O_RDWR | O_NOCTTY)) < 0)
- return -1;
- strncpy(TtyName, ttyname(f), sizeof(TtyName));
- if (eff_uid && access(TtyName, R_OK | W_OK))
- {
- close(f);
- return -1;
- }
- initmaster(f);
-# ifdef _IBMR2
- pty_preopen = 1;
-# endif
- *ttyn = TtyName;
- return f;
-}
-#endif
-
-/***************************************************************/
-
-#if defined(HAVE_OPENPTY) && !defined(PTY_DONE)
-#define PTY_DONE
-int
-OpenPTY(ttyn)
-char **ttyn;
-{
- int f, s;
- if (openpty(&f, &s, TtyName, NULL, NULL) != 0)
- return -1;
- close(s);
- initmaster(f);
- pty_preopen = 1;
- *ttyn = TtyName;
- return f;
-}
-#endif
-
-/***************************************************************/
-
-#ifndef PTY_DONE
-int
-OpenPTY(ttyn)
-char **ttyn;
-{
- register char *p, *q, *l, *d;
- register int f;
-
- debug("OpenPTY: Using BSD style ptys.\n");
- strcpy(PtyName, PtyProto);
- strcpy(TtyName, TtyProto);
- for (p = PtyName; *p != 'X'; p++)
- ;
- for (q = TtyName; *q != 'X'; q++)
- ;
- for (l = PTYRANGE0; (*p = *l) != '\0'; l++)
- {
- for (d = PTYRANGE1; (p[1] = *d) != '\0'; d++)
- {
- debug1("OpenPTY tries '%s'\n", PtyName);
- if ((f = open(PtyName, O_RDWR | O_NOCTTY)) == -1)
- continue;
- q[0] = *l;
- q[1] = *d;
- if (eff_uid && access(TtyName, R_OK | W_OK))
- {
- close(f);
- continue;
- }
-#if defined(sun) && defined(TIOCGPGRP) && !defined(SUNOS3)
- /* Hack to ensure that the slave side of the pty is
- * unused. May not work in anything other than SunOS4.1
- */
- {
- int pgrp;
-
- /* tcgetpgrp does not work (uses TIOCGETPGRP)! */
- if (ioctl(f, TIOCGPGRP, (char *)&pgrp) != -1 || errno != EIO)
- {
- close(f);
- continue;
- }
- }
-#endif
- initmaster(f);
- *ttyn = TtyName;
- return f;
- }
- }
- return -1;
-}
-#endif
-
diff --git a/readline/examples/rlfe/rlfe.c b/readline/examples/rlfe/rlfe.c
deleted file mode 100644
index 6d747dc..0000000
--- a/readline/examples/rlfe/rlfe.c
+++ /dev/null
@@ -1,780 +0,0 @@
-/* A front-end using readline to "cook" input lines.
- *
- * Copyright (C) 2004, 1999 Per Bothner
- *
- * This front-end 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.
- *
- * Some code from Johnson & Troan: "Linux Application Development"
- * (Addison-Wesley, 1998) was used directly or for inspiration.
- *
- * 2003-11-07 Wolfgang Taeuber <wolfgang_taeuber@agilent.com>
- * Specify a history file and the size of the history file with command
- * line options; use EDITOR/VISUAL to set vi/emacs preference.
- */
-
-/* PROBLEMS/TODO:
- *
- * Only tested under GNU/Linux and Mac OS 10.x; needs to be ported.
- *
- * Switching between line-editing-mode vs raw-char-mode depending on
- * what tcgetattr returns is inherently not robust, plus it doesn't
- * work when ssh/telnetting in. A better solution is possible if the
- * tty system can send in-line escape sequences indicating the current
- * mode, echo'd input, etc. That would also allow a user preference
- * to set different colors for prompt, input, stdout, and stderr.
- *
- * When running mc -c under the Linux console, mc does not recognize
- * mouse clicks, which mc does when not running under rlfe.
- *
- * Pasting selected text containing tabs is like hitting the tab character,
- * which invokes readline completion. We don't want this. I don't know
- * if this is fixable without integrating rlfe into a terminal emulator.
- *
- * Echo suppression is a kludge, but can only be avoided with better kernel
- * support: We need a tty mode to disable "real" echoing, while still
- * letting the inferior think its tty driver to doing echoing.
- * Stevens's book claims SCR$ and BSD4.3+ have TIOCREMOTE.
- *
- * The latest readline may have some hooks we can use to avoid having
- * to back up the prompt. (See HAVE_ALREADY_PROMPTED.)
- *
- * Desirable readline feature: When in cooked no-echo mode (e.g. password),
- * echo characters are they are types with '*', but remove them when done.
- *
- * Asynchronous output while we're editing an input line should be
- * inserted in the output view *before* the input line, so that the
- * lines being edited (with the prompt) float at the end of the input.
- *
- * A "page mode" option to emulate more/less behavior: At each page of
- * output, pause for a user command. This required parsing the output
- * to keep track of line lengths. It also requires remembering the
- * output, if we want an option to scroll back, which suggests that
- * this should be integrated with a terminal emulator like xterm.
- */
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <signal.h>
-#include <netdb.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <grp.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <termios.h>
-
-#include "config.h"
-
-#ifdef READLINE_LIBRARY
-# include "readline.h"
-# include "history.h"
-#else
-# include <readline/readline.h>
-# include <readline/history.h>
-#endif
-
-#ifndef COMMAND
-#define COMMAND "/bin/bash"
-#endif
-#ifndef COMMAND_ARGS
-#define COMMAND_ARGS COMMAND
-#endif
-
-#ifndef ALT_COMMAND
-#define ALT_COMMAND "/bin/sh"
-#endif
-#ifndef ALT_COMMAND_ARGS
-#define ALT_COMMAND_ARGS ALT_COMMAND
-#endif
-
-#ifndef HAVE_MEMMOVE
-# if __GNUC__ > 1
-# define memmove(d, s, n) __builtin_memcpy(d, s, n)
-# else
-# define memmove(d, s, n) memcpy(d, s, n)
-# endif
-#else
-# define memmove(d, s, n) memcpy(d, s, n)
-#endif
-
-#define APPLICATION_NAME "rlfe"
-
-static int in_from_inferior_fd;
-static int out_to_inferior_fd;
-static void set_edit_mode ();
-static void usage_exit ();
-static char *hist_file = 0;
-static int hist_size = 0;
-
-/* Unfortunately, we cannot safely display echo from the inferior process.
- The reason is that the echo bit in the pty is "owned" by the inferior,
- and if we try to turn it off, we could confuse the inferior.
- Thus, when echoing, we get echo twice: First readline echoes while
- we're actually editing. Then we send the line to the inferior, and the
- terminal driver send back an extra echo.
- The work-around is to remember the input lines, and when we see that
- line come back, we supress the output.
- A better solution (supposedly available on SVR4) would be a smarter
- terminal driver, with more flags ... */
-#define ECHO_SUPPRESS_MAX 1024
-char echo_suppress_buffer[ECHO_SUPPRESS_MAX];
-int echo_suppress_start = 0;
-int echo_suppress_limit = 0;
-
-/*#define DEBUG*/
-
-#ifdef DEBUG
-FILE *logfile = NULL;
-#define DPRINT0(FMT) (fprintf(logfile, FMT), fflush(logfile))
-#define DPRINT1(FMT, V1) (fprintf(logfile, FMT, V1), fflush(logfile))
-#define DPRINT2(FMT, V1, V2) (fprintf(logfile, FMT, V1, V2), fflush(logfile))
-#else
-#define DPRINT0(FMT) ((void) 0) /* Do nothing */
-#define DPRINT1(FMT, V1) ((void) 0) /* Do nothing */
-#define DPRINT2(FMT, V1, V2) ((void) 0) /* Do nothing */
-#endif
-
-struct termios orig_term;
-
-/* Pid of child process. */
-static pid_t child = -1;
-
-static void
-sig_child (int signo)
-{
- int status;
- wait (&status);
- if (hist_file != 0)
- {
- write_history (hist_file);
- if (hist_size)
- history_truncate_file (hist_file, hist_size);
- }
- DPRINT0 ("(Child process died.)\n");
- tcsetattr(STDIN_FILENO, TCSANOW, &orig_term);
- exit (0);
-}
-
-volatile int propagate_sigwinch = 0;
-
-/* sigwinch_handler
- * propagate window size changes from input file descriptor to
- * master side of pty.
- */
-void sigwinch_handler(int signal) {
- propagate_sigwinch = 1;
-}
-
-
-/* get_slave_pty() returns an integer file descriptor.
- * If it returns < 0, an error has occurred.
- * Otherwise, it has returned the slave file descriptor.
- */
-
-int get_slave_pty(char *name) {
- struct group *gptr;
- gid_t gid;
- int slave = -1;
-
- /* chown/chmod the corresponding pty, if possible.
- * This will only work if the process has root permissions.
- * Alternatively, write and exec a small setuid program that
- * does just this.
- */
- if ((gptr = getgrnam("tty")) != 0) {
- gid = gptr->gr_gid;
- } else {
- /* if the tty group does not exist, don't change the
- * group on the slave pty, only the owner
- */
- gid = -1;
- }
-
- /* Note that we do not check for errors here. If this is code
- * where these actions are critical, check for errors!
- */
- chown(name, getuid(), gid);
- /* This code only makes the slave read/writeable for the user.
- * If this is for an interactive shell that will want to
- * receive "write" and "wall" messages, OR S_IWGRP into the
- * second argument below.
- */
- chmod(name, S_IRUSR|S_IWUSR);
-
- /* open the corresponding slave pty */
- slave = open(name, O_RDWR);
- return (slave);
-}
-
-/* Certain special characters, such as ctrl/C, we want to pass directly
- to the inferior, rather than letting readline handle them. */
-
-static char special_chars[20];
-static int special_chars_count;
-
-static void
-add_special_char(int ch)
-{
- if (ch != 0)
- special_chars[special_chars_count++] = ch;
-}
-
-static int eof_char;
-
-static int
-is_special_char(int ch)
-{
- int i;
-#if 0
- if (ch == eof_char && rl_point == rl_end)
- return 1;
-#endif
- for (i = special_chars_count; --i >= 0; )
- if (special_chars[i] == ch)
- return 1;
- return 0;
-}
-
-static char buf[1024];
-/* buf[0 .. buf_count-1] is the what has been emitted on the current line.
- It is used as the readline prompt. */
-static int buf_count = 0;
-
-int do_emphasize_input = 1;
-int current_emphasize_input;
-
-char *start_input_mode = "\033[1m";
-char *end_input_mode = "\033[0m";
-
-int num_keys = 0;
-
-static void maybe_emphasize_input (int on)
-{
- if (on == current_emphasize_input
- || (on && ! do_emphasize_input))
- return;
- fprintf (rl_outstream, on ? start_input_mode : end_input_mode);
- fflush (rl_outstream);
- current_emphasize_input = on;
-}
-
-static void
-null_prep_terminal (int meta)
-{
-}
-
-static void
-null_deprep_terminal ()
-{
- maybe_emphasize_input (0);
-}
-
-static int
-pre_input_change_mode (void)
-{
- return 0;
-}
-
-char pending_special_char;
-
-static void
-line_handler (char *line)
-{
- if (line == NULL)
- {
- char buf[1];
- DPRINT0("saw eof!\n");
- buf[0] = '\004'; /* ctrl/d */
- write (out_to_inferior_fd, buf, 1);
- }
- else
- {
- static char enter[] = "\r";
- /* Send line to inferior: */
- int length = strlen (line);
- if (length > ECHO_SUPPRESS_MAX-2)
- {
- echo_suppress_start = 0;
- echo_suppress_limit = 0;
- }
- else
- {
- if (echo_suppress_limit + length > ECHO_SUPPRESS_MAX - 2)
- {
- if (echo_suppress_limit - echo_suppress_start + length
- <= ECHO_SUPPRESS_MAX - 2)
- {
- memmove (echo_suppress_buffer,
- echo_suppress_buffer + echo_suppress_start,
- echo_suppress_limit - echo_suppress_start);
- echo_suppress_limit -= echo_suppress_start;
- echo_suppress_start = 0;
- }
- else
- {
- echo_suppress_limit = 0;
- }
- echo_suppress_start = 0;
- }
- memcpy (echo_suppress_buffer + echo_suppress_limit,
- line, length);
- echo_suppress_limit += length;
- echo_suppress_buffer[echo_suppress_limit++] = '\r';
- echo_suppress_buffer[echo_suppress_limit++] = '\n';
- }
- write (out_to_inferior_fd, line, length);
- if (pending_special_char == 0)
- {
- write (out_to_inferior_fd, enter, sizeof(enter)-1);
- if (*line)
- add_history (line);
- }
- free (line);
- }
- rl_callback_handler_remove ();
- buf_count = 0;
- num_keys = 0;
- if (pending_special_char != 0)
- {
- write (out_to_inferior_fd, &pending_special_char, 1);
- pending_special_char = 0;
- }
-}
-
-/* Value of rl_getc_function.
- Use this because readline should read from stdin, not rl_instream,
- points to the pty (so readline has monitor its terminal modes). */
-
-int
-my_rl_getc (FILE *dummy)
-{
- int ch = rl_getc (stdin);
- if (is_special_char (ch))
- {
- pending_special_char = ch;
- return '\r';
- }
- return ch;
-}
-
-int
-main(int argc, char** argv)
-{
- char *path;
- int i;
- int master;
- char *name;
- int in_from_tty_fd;
- struct sigaction act;
- struct winsize ws;
- struct termios t;
- int maxfd;
- fd_set in_set;
- static char empty_string[1] = "";
- char *prompt = empty_string;
- int ioctl_err = 0;
- int arg_base = 1;
-
-#ifdef DEBUG
- logfile = fopen("/tmp/rlfe.log", "w");
-#endif
-
- while (arg_base<argc)
- {
- if (argv[arg_base][0] != '-')
- break;
- if (arg_base+1 >= argc )
- usage_exit();
- switch(argv[arg_base][1])
- {
- case 'h':
- arg_base++;
- hist_file = argv[arg_base];
- break;
- case 's':
- arg_base++;
- hist_size = atoi(argv[arg_base]);
- if (hist_size<0)
- usage_exit();
- break;
- default:
- usage_exit();
- }
- arg_base++;
- }
- if (hist_file)
- read_history (hist_file);
-
- set_edit_mode ();
-
- rl_readline_name = APPLICATION_NAME;
-
- if ((master = OpenPTY (&name)) < 0)
- {
- perror("ptypair: could not open master pty");
- exit(1);
- }
-
- DPRINT1("pty name: '%s'\n", name);
-
- /* set up SIGWINCH handler */
- act.sa_handler = sigwinch_handler;
- sigemptyset(&(act.sa_mask));
- act.sa_flags = 0;
- if (sigaction(SIGWINCH, &act, NULL) < 0)
- {
- perror("ptypair: could not handle SIGWINCH ");
- exit(1);
- }
-
- if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) < 0)
- {
- perror("ptypair: could not get window size");
- exit(1);
- }
-
- if ((child = fork()) < 0)
- {
- perror("cannot fork");
- exit(1);
- }
-
- if (child == 0)
- {
- int slave; /* file descriptor for slave pty */
-
- /* We are in the child process */
- close(master);
-
-#ifdef TIOCSCTTY
- if ((slave = get_slave_pty(name)) < 0)
- {
- perror("ptypair: could not open slave pty");
- exit(1);
- }
-#endif
-
- /* We need to make this process a session group leader, because
- * it is on a new PTY, and things like job control simply will
- * not work correctly unless there is a session group leader
- * and process group leader (which a session group leader
- * automatically is). This also disassociates us from our old
- * controlling tty.
- */
- if (setsid() < 0)
- {
- perror("could not set session leader");
- }
-
- /* Tie us to our new controlling tty. */
-#ifdef TIOCSCTTY
- if (ioctl(slave, TIOCSCTTY, NULL))
- {
- perror("could not set new controlling tty");
- }
-#else
- if ((slave = get_slave_pty(name)) < 0)
- {
- perror("ptypair: could not open slave pty");
- exit(1);
- }
-#endif
-
- /* make slave pty be standard in, out, and error */
- dup2(slave, STDIN_FILENO);
- dup2(slave, STDOUT_FILENO);
- dup2(slave, STDERR_FILENO);
-
- /* at this point the slave pty should be standard input */
- if (slave > 2)
- {
- close(slave);
- }
-
- /* Try to restore window size; failure isn't critical */
- if (ioctl(STDOUT_FILENO, TIOCSWINSZ, &ws) < 0)
- {
- perror("could not restore window size");
- }
-
- /* now start the shell */
- {
- static char* command_args[] = { COMMAND_ARGS, NULL };
- static char* alt_command_args[] = { ALT_COMMAND_ARGS, NULL };
- if (argc <= 1)
- {
- execvp (COMMAND, command_args);
- execvp (ALT_COMMAND, alt_command_args);
- }
- else
- execvp (argv[arg_base], &argv[arg_base]);
- }
-
- /* should never be reached */
- exit(1);
- }
-
- /* parent */
- signal (SIGCHLD, sig_child);
-
- /* Note that we only set termios settings for standard input;
- * the master side of a pty is NOT a tty.
- */
- tcgetattr(STDIN_FILENO, &orig_term);
-
- t = orig_term;
- eof_char = t.c_cc[VEOF];
- /* add_special_char(t.c_cc[VEOF]);*/
- add_special_char(t.c_cc[VINTR]);
- add_special_char(t.c_cc[VQUIT]);
- add_special_char(t.c_cc[VSUSP]);
-#if defined (VDISCARD)
- add_special_char(t.c_cc[VDISCARD]);
-#endif
-
- t.c_lflag &= ~(ICANON | ISIG | ECHO | ECHOCTL | ECHOE | \
- ECHOK | ECHOKE | ECHONL | ECHOPRT );
- t.c_iflag &= ~ICRNL;
- t.c_iflag |= IGNBRK;
- t.c_cc[VMIN] = 1;
- t.c_cc[VTIME] = 0;
- tcsetattr(STDIN_FILENO, TCSANOW, &t);
- in_from_inferior_fd = master;
- out_to_inferior_fd = master;
- rl_instream = fdopen (master, "r");
- rl_getc_function = my_rl_getc;
-
- rl_prep_term_function = null_prep_terminal;
- rl_deprep_term_function = null_deprep_terminal;
- rl_pre_input_hook = pre_input_change_mode;
- rl_callback_handler_install (prompt, line_handler);
-
- in_from_tty_fd = STDIN_FILENO;
- FD_ZERO (&in_set);
- maxfd = in_from_inferior_fd > in_from_tty_fd ? in_from_inferior_fd
- : in_from_tty_fd;
- for (;;)
- {
- int num;
- FD_SET (in_from_inferior_fd, &in_set);
- FD_SET (in_from_tty_fd, &in_set);
-
- num = select(maxfd+1, &in_set, NULL, NULL, NULL);
-
- if (propagate_sigwinch)
- {
- struct winsize ws;
- if (ioctl (STDIN_FILENO, TIOCGWINSZ, &ws) >= 0)
- {
- ioctl (master, TIOCSWINSZ, &ws);
- }
- propagate_sigwinch = 0;
- continue;
- }
-
- if (num <= 0)
- {
- perror ("select");
- exit (-1);
- }
- if (FD_ISSET (in_from_tty_fd, &in_set))
- {
- extern int readline_echoing_p;
- struct termios term_master;
- int do_canon = 1;
- int do_icrnl = 1;
- int ioctl_ret;
-
- DPRINT1("[tty avail num_keys:%d]\n", num_keys);
-
- /* If we can't get tty modes for the master side of the pty, we
- can't handle non-canonical-mode programs. Always assume the
- master is in canonical echo mode if we can't tell. */
- ioctl_ret = tcgetattr(master, &term_master);
-
- if (ioctl_ret >= 0)
- {
- do_canon = (term_master.c_lflag & ICANON) != 0;
- do_icrnl = (term_master.c_lflag & ICRNL) != 0;
- readline_echoing_p = (term_master.c_lflag & ECHO) != 0;
- DPRINT1 ("echo,canon,crnl:%03d\n",
- 100 * readline_echoing_p
- + 10 * do_canon
- + 1 * do_icrnl);
- }
- else
- {
- if (ioctl_err == 0)
- DPRINT1("tcgetattr on master fd failed: errno = %d\n", errno);
- ioctl_err = 1;
- }
-
- if (do_canon == 0 && num_keys == 0)
- {
- char ch[10];
- int count = read (STDIN_FILENO, ch, sizeof(ch));
- DPRINT1("[read %d chars from stdin: ", count);
- DPRINT2(" \"%.*s\"]\n", count, ch);
- if (do_icrnl)
- {
- int i = count;
- while (--i >= 0)
- {
- if (ch[i] == '\r')
- ch[i] = '\n';
- }
- }
- maybe_emphasize_input (1);
- write (out_to_inferior_fd, ch, count);
- }
- else
- {
- if (num_keys == 0)
- {
- int i;
- /* Re-install callback handler for new prompt. */
- if (prompt != empty_string)
- free (prompt);
- if (prompt == NULL)
- {
- DPRINT0("New empty prompt\n");
- prompt = empty_string;
- }
- else
- {
- if (do_emphasize_input && buf_count > 0)
- {
- prompt = malloc (buf_count + strlen (end_input_mode)
- + strlen (start_input_mode) + 5);
- sprintf (prompt, "\001%s\002%.*s\001%s\002",
- end_input_mode,
- buf_count, buf,
- start_input_mode);
- }
- else
- {
- prompt = malloc (buf_count + 1);
- memcpy (prompt, buf, buf_count);
- prompt[buf_count] = '\0';
- }
- DPRINT1("New prompt '%s'\n", prompt);
-#if 0 /* ifdef HAVE_RL_ALREADY_PROMPTED */
- /* Doesn't quite work when do_emphasize_input is 1. */
- rl_already_prompted = buf_count > 0;
-#else
- if (buf_count > 0)
- write (1, "\r", 1);
-#endif
- }
-
- rl_callback_handler_install (prompt, line_handler);
- }
- num_keys++;
- maybe_emphasize_input (1);
- rl_callback_read_char ();
- }
- }
- else /* output from inferior. */
- {
- int i;
- int count;
- int old_count;
- if (buf_count > (sizeof(buf) >> 2))
- buf_count = 0;
- count = read (in_from_inferior_fd, buf+buf_count,
- sizeof(buf) - buf_count);
- DPRINT2("read %d from inferior, buf_count=%d", count, buf_count);
- DPRINT2(": \"%.*s\"", count, buf+buf_count);
- maybe_emphasize_input (0);
- if (count <= 0)
- {
- DPRINT0 ("(Connection closed by foreign host.)\n");
- tcsetattr(STDIN_FILENO, TCSANOW, &orig_term);
- exit (0);
- }
- old_count = buf_count;
-
- /* Look for any pending echo that we need to suppress. */
- while (echo_suppress_start < echo_suppress_limit
- && count > 0
- && buf[buf_count] == echo_suppress_buffer[echo_suppress_start])
- {
- count--;
- buf_count++;
- echo_suppress_start++;
- }
- DPRINT1("suppressed %d characters of echo.\n", buf_count-old_count);
-
- /* Write to the terminal anything that was not suppressed. */
- if (count > 0)
- write (1, buf + buf_count, count);
-
- /* Finally, look for a prompt candidate.
- * When we get around to going input (from the keyboard),
- * we will consider the prompt to be anything since the last
- * line terminator. So we need to save that text in the
- * initial part of buf. However, anything before the
- * most recent end-of-line is not interesting. */
- buf_count += count;
-#if 1
- for (i = buf_count; --i >= old_count; )
-#else
- for (i = buf_count - 1; i-- >= buf_count - count; )
-#endif
- {
- if (buf[i] == '\n' || buf[i] == '\r')
- {
- i++;
- memmove (buf, buf+i, buf_count - i);
- buf_count -= i;
- break;
- }
- }
- DPRINT2("-> i: %d, buf_count: %d\n", i, buf_count);
- }
- }
-}
-
-static void set_edit_mode ()
-{
- int vi = 0;
- char *shellopts;
-
- shellopts = getenv ("SHELLOPTS");
- while (shellopts != 0)
- {
- if (strncmp ("vi", shellopts, 2) == 0)
- {
- vi = 1;
- break;
- }
- shellopts = index (shellopts + 1, ':');
- }
-
- if (!vi)
- {
- if (getenv ("EDITOR") != 0)
- vi |= strcmp (getenv ("EDITOR"), "vi") == 0;
- }
-
- if (vi)
- rl_variable_bind ("editing-mode", "vi");
- else
- rl_variable_bind ("editing-mode", "emacs");
-}
-
-
-static void usage_exit ()
-{
- fprintf (stderr, "Usage: rlfe [-h histfile] [-s size] cmd [arg1] [arg2] ...\n\n");
- exit (1);
-}
diff --git a/readline/examples/rlfe/screen.h b/readline/examples/rlfe/screen.h
deleted file mode 100644
index 5b040c3..0000000
--- a/readline/examples/rlfe/screen.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Dummy header to avoid modifying pty.c */
-#include "os.h"
diff --git a/sim/ppc/ChangeLog b/sim/ppc/ChangeLog
index 4268294..6be4b7e 100644
--- a/sim/ppc/ChangeLog
+++ b/sim/ppc/ChangeLog
@@ -1,3 +1,9 @@
+2006-04-23 Andreas Schwab <schwab@suse.de>
+
+ * Makefile.in (tmp-ld-decode): Fix dependencies.
+ (tmp-ld-cache): Likewise.
+ (tmp-ld-insn): Likewise.
+
2006-02-01 Mark Mitchell <mark@codesourcery.com>
* emul_netbsd.c (emul_netbsd_create): Quote file-name property.
diff --git a/sim/ppc/Makefile.in b/sim/ppc/Makefile.in
index 79fec05..ff9efee 100644
--- a/sim/ppc/Makefile.in
+++ b/sim/ppc/Makefile.in
@@ -745,17 +745,17 @@
ld-decode.o: ld-decode.c $(MISC_H) $(LF_H) $(TABLE_H) $(LD_DECODE_H)
$(CC_FOR_BUILD) $(BUILD_CFLAGS) -c $(srcdir)/ld-decode.c
-tmp-ld-decode: ld-decode.o misc.o lf.o table.o filter_host.o
+tmp-ld-decode: ld-decode.c misc.o lf.o table.o filter_host.o
$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o tmp-ld-decode -DMAIN $(srcdir)/ld-decode.c misc.o lf.o table.o filter_host.o $(BUILD_LIBS)
ld-cache.o: ld-cache.c $(MISC_H) $(LF_H) $(TABLE_H) $(LD_CACHE_H)
$(CC_FOR_BUILD) $(BUILD_CFLAGS) -c $(srcdir)/ld-cache.c
-tmp-ld-cache: ld-cache.o misc.o lf.o table.o filter_host.o
+tmp-ld-cache: ld-cache.c misc.o lf.o table.o filter_host.o
$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o tmp-ld-cache -DMAIN $(srcdir)/ld-cache.c misc.o lf.o table.o filter_host.o $(BUILD_LIBS)
ld-insn.o: ld-insn.c $(MISC_H) $(LF_H) $(TABLE_H) $(FILTER_H) $(LD_DECODE_H) $(LD_CACHE_H) $(LD_INSN_H) $(IGEN_H)
$(CC_FOR_BUILD) $(BUILD_CFLAGS) -c $(srcdir)/ld-insn.c
-tmp-ld-insn: ld-insn.o misc.o lf.o table.o ld-decode.o filter_host.o filter.o
+tmp-ld-insn: ld-insn.c ld-cache.o misc.o lf.o table.o ld-decode.o filter_host.o filter.o
$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o tmp-ld-insn -DMAIN $(srcdir)/ld-insn.c ld-cache.o misc.o lf.o table.o ld-decode.o filter_host.o filter.o $(BUILD_LIBS)
gen-model.o: gen-model.c $(MISC_H) $(LF_H) $(TABLE_H) $(FILTER_H) $(LD_CACHE_H) $(LD_DECODE_H) $(LD_INSN_H) $(GEN_MODEL_H)
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/host1.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/host1.ms
deleted file mode 100644
index c41f51f..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/host1.ms
+++ /dev/null
@@ -1,8 +0,0 @@
-#mach: crisv32
-#sim(crisv32): --hw-device "/rv/host localhost"
-
-# Check that we trivially resolve a hostname.
-
-#r @,@srcdir@/trivial4.r
-
- .include "trivial4.ms"
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/irq1.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/irq1.ms
deleted file mode 100644
index f3e6f2e..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/irq1.ms
+++ /dev/null
@@ -1,69 +0,0 @@
-#mach: crisv10 crisv32
-#sim(crisv10): --hw-device "/rv/trace? true"
-#sim(crisv32): --hw-device "/rv/trace? true"
-#output: /rv: WD\n
-#output: /rv: REG R 0xd0000032\n
-#output: /rv: := 0xabcdef01\n
-#output: /rv: IRQ 0x4\n
-#output: /rv: REG R 0xd0000036\n
-#output: /rv: := 0x76543210\n
-#output: /rv: REG R 0xd0000036\n
-#output: /rv: := 0x76543211\n
-#output: /rv: REG R 0xd0000030\n
-#output: /rv: IRQ 0x0\n
-#output: /rv: := 0xeeff4455\n
-#output: pass\n
-
-# Trivial test of interrupts.
-# Locations of IRQ notifiers above depend on when the simulator is
-# polled; adjustments may be needed (after checking that no poll is
-# gone due to a bug!)
-
-#r W,
-#r r,a8832,abcdef01
-#r I,4
-#r r,a8836,76543210
-#r r,a8836,76543211
-#r I,0
-#r r,a8830,eeff4455
-
- .lcomm dummy,4
-
- .include "testutils.inc"
- start
- .if ..asm.arch.cris.v32
- move irqvec1,$ebp
- .else
- move irqvec1,$ibr
- .endif
- test_h_mem 0xabcdef01 0xd0000032
- nop
- nop
- test_h_mem 0x76543210 0xd0000036
- ei
- test_h_mem 0,dummy
-wouldreturnhere:
- nop
-killme:
- fail
-
-returnhere:
- test_h_mem 0x76543211 0xd0000036
- test_h_mem 0xeeff4455 0xd0000030
- pass
-
-irq0x33:
- .if ..asm.arch.cris.v32
- test_h_dr wouldreturnhere,$erp
- move returnhere,$erp
- rete
- rfe
- .else
- move $dccr,$r0
- test_h_dr wouldreturnhere,$irp
- move returnhere,$irp
- reti
- move $r0,$dccr
- .endif
-
- singlevec irqvec1,0x33,irq0x33
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/irq2.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/irq2.ms
deleted file mode 100644
index 19709e4..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/irq2.ms
+++ /dev/null
@@ -1,44 +0,0 @@
-#mach: crisv10 crisv32
-#sim(crisv10): --hw-device "/rv/trace? true" --hw-device "/rv/intmultiple 0xaa"
-#sim(crisv32): --hw-device "/rv/trace? true" --hw-device "/rv/intmultiple 0xaa"
-#output: /rv: WD\n
-#output: /rv: REG R 0xd0000032\n
-#output: /rv: := 0xabcdef01\n
-#output: /rv: IRQ 0xaa\n
-#output: /rv: REG R 0xd0000036\n
-#output: /rv: := 0x76543210\n
-#output: /rv: REG R 0xd0000030\n
-#output: /rv: IRQ 0x0\n
-#output: /rv: := 0xeeff4455\n
-#output: pass\n
-
-# Primarily to test multiple-int-bits set in dv-rv.c.
-
-#r W,
-#r r,a8832,abcdef01
-#r I,6
-#r r,a8836,76543210
-#r I,0
-#r r,a8830,eeff4455
-
- .lcomm dummy,4
-
- .include "testutils.inc"
- start
- test_h_mem 0xabcdef01 0xd0000032
- .if ..asm.arch.cris.v32
- move irqvec1,$ebp
- .else
- move irqvec1,$ibr
- .endif
- ei
- test_h_mem 0,dummy
-killme:
- fail
-
-irq0xea:
- test_h_mem 0x76543210 0xd0000036
- test_h_mem 0xeeff4455 0xd0000030
- pass
-
- singlevec irqvec1,0xea,irq0xea
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/irq3.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/irq3.ms
deleted file mode 100644
index d96b6f5..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/irq3.ms
+++ /dev/null
@@ -1,46 +0,0 @@
-#mach: crisv10 crisv32
-#sim(crisv10): --hw-device "/rv/trace? true" --hw-device "/rv/intmultiple 0xaa"
-#sim(crisv32): --hw-device "/rv/trace? true" --hw-device "/rv/intmultiple 0xaa"
-#output: /rv: WD\n
-#output: /rv: REG R 0xd0000032\n
-#output: /rv: := 0xabcdef01\n
-#output: /rv: IRQ 0xaa\n
-#output: /rv: IRQ 0xaa\n
-#output: /rv: REG R 0xd0000036\n
-#output: /rv: := 0x76543210\n
-#output: /rv: REG R 0xd0000030\n
-#output: /rv: IRQ 0x0\n
-#output: /rv: := 0xeeff4455\n
-#output: pass\n
-
-# Much like irq2.ms, but modified to check same-int-port-value-twice.
-
-#r W,
-#r r,a8832,abcdef01
-#r I,6
-#r I,6
-#r r,a8836,76543210
-#r I,0
-#r r,a8830,eeff4455
-
- .lcomm dummy,4
-
- .include "testutils.inc"
- start
- test_h_mem 0xabcdef01 0xd0000032
- .if ..asm.arch.cris.v32
- move irqvec1,$ebp
- .else
- move irqvec1,$ibr
- .endif
- ei
- test_h_mem 0,dummy
-killme:
- fail
-
-irq0xea:
- test_h_mem 0x76543210 0xd0000036
- test_h_mem 0xeeff4455 0xd0000030
- pass
-
- singlevec irqvec1,0xea,irq0xea
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/irq4.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/irq4.ms
deleted file mode 100644
index 9e16b5c..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/irq4.ms
+++ /dev/null
@@ -1,46 +0,0 @@
-#mach: crisv10 crisv32
-#sim(crisv10): --hw-device "/rv/trace? true" --hw-device "/cris/multiple-int ignore_previous"
-#sim(crisv32): --hw-device "/rv/trace? true" --hw-device "/cris/multiple-int ignore_previous"
-#output: /rv: WD\n
-#output: /rv: REG R 0xd0000032\n
-#output: /rv: := 0xabcdef01\n
-#output: /rv: IRQ 0x4\n
-#output: /rv: IRQ 0x8\n
-#output: /rv: REG R 0xd0000036\n
-#output: /rv: := 0x76543210\n
-#output: /rv: REG R 0xd0000030\n
-#output: /rv: IRQ 0x0\n
-#output: /rv: := 0xeeff4455\n
-#output: pass\n
-
-# Much like irq3.ms, but modified to test multiple-int ignore_previous.
-
-#r W,
-#r r,a8832,abcdef01
-#r I,4
-#r I,8
-#r r,a8836,76543210
-#r I,0
-#r r,a8830,eeff4455
-
- .lcomm dummy,4
-
- .include "testutils.inc"
- start
- test_h_mem 0xabcdef01 0xd0000032
- .if ..asm.arch.cris.v32
- move irqvec1,$ebp
- .else
- move irqvec1,$ibr
- .endif
- ei
- test_h_mem 0,dummy
-killme:
- fail
-
-irq0x34:
- test_h_mem 0x76543210 0xd0000036
- test_h_mem 0xeeff4455 0xd0000030
- pass
-
- singlevec irqvec1,0x34,irq0x34
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/irq5.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/irq5.ms
deleted file mode 100644
index 4ecc5a6..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/irq5.ms
+++ /dev/null
@@ -1,46 +0,0 @@
-#mach: crisv10 crisv32
-#sim(crisv10): --hw-device "/rv/trace? true" --hw-device "/cris/multiple-int 0xae"
-#sim(crisv32): --hw-device "/rv/trace? true" --hw-device "/cris/multiple-int 0xae"
-#output: /rv: WD\n
-#output: /rv: REG R 0xd0000032\n
-#output: /rv: := 0xabcdef01\n
-#output: /rv: IRQ 0x4\n
-#output: /rv: IRQ 0x8\n
-#output: /rv: REG R 0xd0000036\n
-#output: /rv: := 0x76543210\n
-#output: /rv: REG R 0xd0000030\n
-#output: /rv: IRQ 0x0\n
-#output: /rv: := 0xeeff4455\n
-#output: pass\n
-
-# Much like irq4.ms, but modified to test vector case for multiple-int.
-
-#r W,
-#r r,a8832,abcdef01
-#r I,4
-#r I,8
-#r r,a8836,76543210
-#r I,0
-#r r,a8830,eeff4455
-
- .lcomm dummy,4
-
- .include "testutils.inc"
- start
- test_h_mem 0xabcdef01 0xd0000032
- .if ..asm.arch.cris.v32
- move irqvec1,$ebp
- .else
- move irqvec1,$ibr
- .endif
- ei
- test_h_mem 0,dummy
-killme:
- fail
-
-irq0xae:
- test_h_mem 0x76543210 0xd0000036
- test_h_mem 0xeeff4455 0xd0000030
- pass
-
- singlevec irqvec1,0xae,irq0xae
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/irq6.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/irq6.ms
deleted file mode 100644
index 9e40f4a..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/irq6.ms
+++ /dev/null
@@ -1,99 +0,0 @@
-#mach: crisv10 crisv32
-#sim(crisv10): --hw-device "/rv/trace? true"
-#sim(crisv32): --hw-device "/rv/trace? true"
-#output: /rv: WD\n
-#output: /rv: REG R 0xd0000032\n
-#output: /rv: := 0xabcdef01\n
-#output: /rv: IRQ 0x4\n
-#output: /rv: REG R 0xd0000036\n
-#output: /rv: := 0x76543210\n
-#output: /rv: REG R 0xd0000030\n
-#output: /rv: IRQ 0x0\n
-#output: /rv: IRQ 0x8\n
-#output: /rv: := 0xeeff4455\n
-#output: /rv: REG R 0xd0000034\n
-#output: /rv: := 0xdd001122\n
-#output: /rv: REG R 0xd0000038\n
-#output: /rv: := 0xaaeeff44\n
-#output: /rv: REG R 0xd000003c\n
-#output: /rv: := 0xff445511\n
-#output: pass\n
-
-# Test two successive ints; that flags are disabled when an interrupt
-# is taken, and then automatically (or by register restore) enabled at
-# return.
-
-#r W,
-#r r,a8832,abcdef01
-#r I,4
-#r r,a8836,76543210
-#r I,0
-#r I,8
-#r r,a8830,eeff4455
-#r r,a8834,dd001122
-#r r,a8838,aaeeff44
-#r r,a883c,ff445511
-
- .lcomm dummy,4
-
- .include "testutils.inc"
- start
- test_h_mem 0xabcdef01 0xd0000032
- moveq -1,$r4
-
- .if ..asm.arch.cris.v32
- move irqvec1,$ebp
- .else
- move irqvec1,$ibr
- .endif
-
- ei
- test_h_mem 0,dummy
-
- ; Here after the first interrupt, or perhaps the second interrupt is
- ; taken directly; leave it optional. Anyway, the second interrupt
- ; should be taken no later than this branch.
- test_h_mem 0,dummy
-
-killme:
- fail
-
-irq0x33:
- .if ..asm.arch.cris.v32
- ; Nothing needed to save flags - "shift" should happen, and back at rfe.
- .else
- ; The missing sim support for interrupt-excluding instructions is matched
- ; by the flaw that sim doesn't service interrupts in straight code.
- ; So, we can use a sequence that would work on actual hardware.
- move $dccr,$r5
- di
- .endif
-
- test_h_mem 0x76543210 0xd0000036
- test_h_mem 0xeeff4455 0xd0000030
- test_h_mem 0xdd001122 0xd0000034
- moveq -22,$r4
-
- .if ..asm.arch.cris.v32
- move irqvec2,$ebp
- rete
- rfe
- .else
- move irqvec2,$ibr
- reti
- move $r5,$dccr
- .endif
-
- pass
-
-irq0x34:
- test_h_mem 0xaaeeff44 0xd0000038
- test_h_mem 0xff445511 0xd000003c
- cmpq -22,$r4
- bne killme
- nop
- pass
-
- singlevec irqvec1,0x33,irq0x33
-
- singlevec irqvec2,0x34,irq0x34
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/mbox1.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/mbox1.ms
deleted file mode 100644
index ee0f54c..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/mbox1.ms
+++ /dev/null
@@ -1,88 +0,0 @@
-#mach: crisv10 crisv32
-#sim(crisv10): --hw-device "/rv/trace? true"
-#sim(crisv32): --hw-device "/rv/trace? true"
-#output: /rv: WD\n
-#output: /rv: MBOX H 0x1001d..0x10037\n
-#output: /rv: 0x10020: 12 23 34 56 79 8a bd de\n
-#output: /rv: 0x10028: fb ad ba db ad 56 78 9a\n
-#output: /rv: 0x10030: fd e1 23 45 66 54 32 1a\n
-#output: /rv: -> 0x1001d..0x10027\n
-#output: /rv: 0x10020: aa 55 77 88 32 10 ee cc\n
-#output: /rv: MBOX P 0xfffd..0x1001f\n
-#output: /rv: 0x10000: aa 55 12 23 34 56 79 8a\n
-#output: /rv: 0x10008: bd de fb ad ba db ad 56\n
-#output: /rv: 0x10010: 78 9a fd e1 23 45 66 54\n
-#output: /rv: 0x10018: 32 1a ac cb be ed db ed\n
-#output: /rv: -> 0xfffd..0x10017\n
-#output: /rv: 0x10000: 11 22 56 78 ee dd 12 ab\n
-#output: /rv: 0x10008: 55 aa ee 00 42 12 27 98\n
-#output: /rv: 0x10010: 88 55 22 33 66 77 22 45\n
-#output: /rv: REG R 0xd0000038\n
-#output: /rv: := 0x76543211\n
-#output: pass\n
-
-# Trivial test of mailbox commands.
-
-#r W,
-#r i,1b000512233456798abddefbadbadbad56789afde123456654321a
-#r o,0b0005aa5577883210eecc
-#r i,230006aa5512233456798abddefbadbadbad56789afde123456654321aaccbbeeddbed
-#r o,1b000511225678eedd12ab55aaee00421227988855223366772245
-#r r,a8838,76543211
-
- .include "testutils.inc"
- start
- move.w 0x1b,$r0
- move.d 0x1001d,$r1
- move.w $r0,[$r1+]
- moveq 5,$r0
- move.b $r0,[$r1]
- mvi_h_mem 0x56342312 0x10020
- mvi_h_mem 0xdebd8a79 0x10024
- mvi_h_mem 0xdbbaadfb 0x10028
- mvi_h_mem 0x9a7856ad 0x1002c
- mvi_h_mem 0x4523e1fd 0x10030
- mvi_h_mem 0x1a325466 0x10034
-
- mvi_h_mem 0x1001d 0xc000f000
-
- move.d 0x1001d,$r0
- movu.w [$r0+],$r1
- test_h_gr 0xb $r1
- movu.b [$r0],$r1
- test_h_gr 0x5 $r1
- test_h_mem 0x887755aa 0x10020
- test_h_mem 0xccee1032 0x10024
-
- move.w 0x23,$r0
- move.d 0xfffd,$r1
- move.w $r0,[$r1+]
- moveq 6,$r0
- move.b $r0,[$r1]
- mvi_h_mem 0x231255aa 0x10000
- mvi_h_mem 0x8a795634 0x10004
- mvi_h_mem 0xadfbdebd 0x10008
- mvi_h_mem 0x56addbba 0x1000c
- mvi_h_mem 0xe1fd9a78 0x10010
- mvi_h_mem 0x54664523 0x10014
- mvi_h_mem 0xcbac1a32 0x10018
- mvi_h_mem 0xeddbedbe 0x1001c
-
- mvi_h_mem 0xfffd 0xc000f000
-
- move.d 0xfffd,$r0
- movu.w [$r0+],$r1
- test_h_gr 0x1b $r1
- movu.b [$r0],$r1
- test_h_gr 0x6 $r1
- test_h_mem 0x78562211 0x10000
- test_h_mem 0xab12ddee 0x10004
- test_h_mem 0x00eeaa55 0x10008
- test_h_mem 0x98271242 0x1000c
- test_h_mem 0x33225588 0x10010
- test_h_mem 0x45227766 0x10014
-
- test_h_mem 0x76543211 0xd0000038
- pass
-
- .fill 65536*2+128,1,0
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/mem1.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/mem1.ms
deleted file mode 100644
index ee5c4f5..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/mem1.ms
+++ /dev/null
@@ -1,100 +0,0 @@
-#mach: crisv10 crisv32
-#sim(crisv10): --hw-device "/rv/trace? true"
-#sim(crisv32): --hw-device "/rv/trace? true"
-#output: /rv: WD\n
-#output: /rv: REG R 0xd0000036\n
-#output: /rv: := 0x76543210\n
-#output: /rv: DMA W 0x20020..0x2003f\n
-#output: /rv: 0x20020: 12 23 34 56\n
-#output: /rv: 0x20024: 79 8a bd de\n
-#output: /rv: 0x20028: fb ad ba db\n
-#output: /rv: 0x2002c: ad 56 78 9a\n
-#output: /rv: 0x20030: fd e1 23 45\n
-#output: /rv: 0x20034: 66 54 32 1a\n
-#output: /rv: 0x20038: ac cb be ed\n
-#output: /rv: 0x2003c: db ed aa da\n
-#output: /rv: REG R 0xd0000038\n
-#output: /rv: := 0x76543211\n
-#output: /rv: DMA R 0x20000..0x2001f\n
-#output: /rv: 0x20000: aa 55 12 23\n
-#output: /rv: 0x20004: 34 56 79 8a\n
-#output: /rv: 0x20008: bd de fb ad\n
-#output: /rv: 0x2000c: ba db ad 56\n
-#output: /rv: 0x20010: 78 9a fd e1\n
-#output: /rv: 0x20014: 23 45 66 54\n
-#output: /rv: 0x20018: 32 1a ac cb\n
-#output: /rv: 0x2001c: be ed db ed\n
-#output: /rv: IRQ 0x8\n
-#output: /rv: REG R 0xd0000038\n
-#output: /rv: := 0x76543212\n
-#output: pass\n
-
-# Trivial test of DMA.
-
-# Locations of IRQ notifiers above depend on when the simulator is
-# polled; adjustments may be needed (after checking that no poll is
-# gone due to a bug!)
-
-#r W,
-#r r,a8836,76543210
-#r s,e020,12233456798abddefbadbadbad56789afde123456654321aaccbbeeddbedaada
-#r r,a8838,76543211
-#r l,e000,aa5512233456798abddefbadbadbad56789afde123456654321aaccbbeeddbed
-#r I,8
-#r r,a8838,76543212
-
- .include "testutils.inc"
- start
- test_h_mem 0x76543210 0xd0000036
-
- move.d 0x2003f,$r1
- move.d 0x10000,$r3
-0:
- test.b [$r1]
- bne 1f
- subq 1,$r3
- bne 0b
- nop
-
-1:
- test_h_mem 0x56342312 0x20020
- test_h_mem 0xdebd8a79 0x20024
- test_h_mem 0xdbbaadfb 0x20028
- test_h_mem 0x9a7856ad 0x2002c
- test_h_mem 0x4523e1fd 0x20030
- test_h_mem 0x1a325466 0x20034
- test_h_mem 0xedbecbac 0x20038
- test_h_mem 0xdaaaeddb 0x2003c
-
- move.d 0x20020,$r0
- move.d 0x20000,$r1
- move.w 0x55aa,$r2
- move.w $r2,[r1+]
- .rept 8
- move.d [$r0+],$r2
- move.d $r2,[$r1+]
- .endr
-
- test_h_mem 0x76543211 0xd0000038
-
- .if ..asm.arch.cris.v32
- move irqvec1,$ebp
- .else
- move irqvec1,$ibr
- .endif
- ei
- move.d 0x100000,$r9
-0:
- subq 1,$r9
- bne 0b
- nop
-killme:
- fail
-
-irq0x34:
- test_h_mem 0x76543212 0xd0000038
- pass
-
- .fill 65536*2+128,1,0
-
- singlevec irqvec1,0x34,irq0x34
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/mem2.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/mem2.ms
deleted file mode 100644
index b676249..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/mem2.ms
+++ /dev/null
@@ -1,104 +0,0 @@
-#mach: crisv10 crisv32
-#sim(crisv10): --hw-device "/rv/trace? true"
-#sim(crisv32): --hw-device "/rv/trace? true"
-#output: /rv: WD\n
-#output: /rv: REG R 0xd0000036\n
-#output: /rv: := 0x76543210\n
-#output: /rv: DMA W 0x20020..0x20043\n
-#output: /rv: 0x20020: 12 23 34 56\n
-#output: /rv: 0x20024: 79 8a bd de\n
-#output: /rv: 0x20028: fb ad ba db\n
-#output: /rv: 0x2002c: ad 56 78 9a\n
-#output: /rv: 0x20030: fd e1 23 45\n
-#output: /rv: 0x20034: 66 54 32 1a\n
-#output: /rv: 0x20038: ac cb be ed\n
-#output: /rv: 0x2003c: db ed aa da\n
-#output: /rv: 0x20040: 00 aa bb cc\n
-#output: /rv: REG R 0xd0000038\n
-#output: /rv: := 0x76543211\n
-#output: /rv: DMA R 0x20000..0x20023\n
-#output: /rv: 0x20000: aa 55 12 23\n
-#output: /rv: 0x20004: 34 56 79 8a\n
-#output: /rv: 0x20008: bd de fb ad\n
-#output: /rv: 0x2000c: ba db ad 56\n
-#output: /rv: 0x20010: 78 9a fd e1\n
-#output: /rv: 0x20014: 23 45 66 54\n
-#output: /rv: 0x20018: 32 1a ac cb\n
-#output: /rv: 0x2001c: be ed db ed\n
-#output: /rv: 0x20020: aa da 00 aa\n
-#output: /rv: IRQ 0x8\n
-#output: /rv: REG R 0xd0000038\n
-#output: /rv: := 0x76543212\n
-#output: pass\n
-
-# This is a slight variation of mem1.ms just to trig the "buffer needs
-# to be malloced for large request size" for the DMA request.
-
-# Locations of IRQ notifiers above depend on when the simulator is
-# polled; adjustments may be needed (after checking that no poll is
-# gone due to a bug!)
-
-#r W,
-#r r,a8836,76543210
-#r s,e020,12233456798abddefbadbadbad56789afde123456654321aaccbbeeddbedaada00aabbcc
-#r r,a8838,76543211
-#r l,e000,aa5512233456798abddefbadbadbad56789afde123456654321aaccbbeeddbedaada00aa
-#r I,8
-#r r,a8838,76543212
-
- .include "testutils.inc"
- start
- test_h_mem 0x76543210 0xd0000036
-
- move.d 0x2003f,$r1
- move.d 0x10000,$r3
-0:
- test.b [$r1]
- bne 1f
- subq 1,$r3
- bne 0b
- nop
-
-1:
- test_h_mem 0x56342312 0x20020
- test_h_mem 0xdebd8a79 0x20024
- test_h_mem 0xdbbaadfb 0x20028
- test_h_mem 0x9a7856ad 0x2002c
- test_h_mem 0x4523e1fd 0x20030
- test_h_mem 0x1a325466 0x20034
- test_h_mem 0xedbecbac 0x20038
- test_h_mem 0xdaaaeddb 0x2003c
- test_h_mem 0xccbbaa00 0x20040
-
- move.d 0x20020,$r0
- move.d 0x20000,$r1
- move.w 0x55aa,$r2
- move.w $r2,[r1+]
- .rept 9
- move.d [$r0+],$r2
- move.d $r2,[$r1+]
- .endr
-
- test_h_mem 0x76543211 0xd0000038
-
- .if ..asm.arch.cris.v32
- move irqvec1,$ebp
- .else
- move irqvec1,$ibr
- .endif
- ei
- move.d 0x100000,$r9
-0:
- subq 1,$r9
- bne 0b
- nop
-killme:
- fail
-
-irq0x34:
- test_h_mem 0x76543212 0xd0000038
- pass
-
- .fill 65536*2+128,1,0
-
- singlevec irqvec1,0x34,irq0x34
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/poll1.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/poll1.ms
deleted file mode 100644
index baf1ed9..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/poll1.ms
+++ /dev/null
@@ -1,22 +0,0 @@
-#mach: crisv32
-#sim(crisv32): --hw-device "/rv/dummy 0x12"
-
-# A variant of trivial2.ms to check that the right thing happens when
-# we reach the poll function with a dummy device.
-
- .include "testutils.inc"
- start
- move.d 0xd0000000,$r0
- move.d [$r0+],$r3
- cmp.d 0x12121212,$r3
- beq ok
- nop
-bad:
- fail
-ok:
- move.d 0x10000,$r10
-0:
- bne 0b
- subq 1,$r10
-
- pass
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/quit.s b/sim/testsuite/sim/cris/hw/rv-n-cris/quit.s
deleted file mode 100644
index 8c1d239..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/quit.s
+++ /dev/null
@@ -1,4 +0,0 @@
-; Trivial target simulator program that just exits.
- .include "testutils.inc"
- startnostack
- quit
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp b/sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp
deleted file mode 100644
index 6f3c8f3..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp
+++ /dev/null
@@ -1,241 +0,0 @@
-# Copyright (C) 2006 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 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# Miscellaneous CRIS simulator testcases in assembly code, testing
-# dv-rv.c and dv-cris.c functions.
-
-# Check whether dv-rv and dv-cris are present.
-
-proc sim_has_rv_and_cris {} {
- global srcdir
- global subdir
- global SIMFLAGS
- global global_as_options
- global global_ld_options
- global global_sim_options
-
- # We need to assemble and link a trivial program and pass that, in
- # order to test successful exit.
-
- # A bit of duplication here for the assembling and linking part;
- # what we want to do it to run the simulator without affecting the
- # PASS/FAIL counters, and we can use e.g. run_sim_test for that.
-
- if ![info exists global_as_options] {
- set global_as_options ""
- }
- if ![info exists global_ld_options] {
- set global_ld_options ""
- }
- if ![info exists global_sim_options] {
- set global_sim_options ""
- }
-
- set comp_output [target_assemble $srcdir/$subdir/quit.s quit.o \
- "-I$srcdir/$subdir $global_as_options"]
-
- if ![string match "" $comp_output] {
- verbose -log "$comp_output" 3
- fail "rv sim test setup (assembling)"
- return 0
- }
-
- set comp_output [target_link quit.o quit.x "$global_ld_options"]
-
- if ![string match "" $comp_output] {
- verbose -log "$comp_output" 3
- fail "rv sim test setup (linking)"
- return 0
- }
-
- set result \
- [sim_run quit.x \
- "$global_sim_options --hw-device rv --hw-device cris --hw-info" \
- "" "" ""]
- set return_code [lindex $result 0]
- set output [lindex $result 1]
-
- if { "$return_code" == "pass" } {
- return 1
- }
-
- return 0
-}
-
-# Similar to slurp_options, but lines are fixed format "^#r ..." (not
-# "^#{ws}*r:{ws}+" to avoid intruding on slurp_options syntax). Only
-# trailing whitespace of the "..." is trimmed. Beware that lines
-# including parameters may not contain ":".
-
-proc slurp_rv { file } {
- if [catch { set f [open $file r] } x] {
- #perror "couldn't open `$file': $x"
- perror "$x"
- return -1
- }
- set rv_array {}
- # whitespace expression
- set ws {[ ]*}
- # whitespace is ignored at the end of a line.
- set pat "^#r (.*)$ws\$"
- # Allow arbitrary lines until the first option is seen.
- set seen_opt 0
- while { [gets $f line] != -1 } {
- set line [string trim $line]
- # Whitespace here is space-tab.
- if [regexp $pat $line xxx cmd] {
- # match!
- lappend rv_array $cmd
- set seen_opt 1
- } else {
- if { $seen_opt } {
- break
- }
- }
- }
- close $f
- return $rv_array
-}
-
-# The main test loop.
-
-if [istarget cris*-*-*] {
- global ASFLAGS_FOR_TARGET
- set has_rv_and_cris [sim_has_rv_and_cris]
- global global_as_options
- global global_ld_options
- global global_sim_options
-
- set saved_global_sim_options $global_sim_options
- set saved_global_ld_options $global_ld_options
- set rvdummy "[file dirname [board_info target sim]]/rvdummy"
-
- # All machines we test and the corresponding assembler option.
- # We'll only ever test v10 and higher here.
-
- set combos {{"crisv10" "--march=v10 --no-mul-bug-abort"}
- {"crisv32" "--march=v32"}}
-
- # We need to pass different assembler flags for each machine.
- # Specifying it here rather than adding a specifier to each and every
- # test-file is preferrable.
-
- foreach combo $combos {
- set mach [lindex $combo 0]
- set ASFLAGS_FOR_TARGET "[lindex $combo 1]"
-
- # The .ms suffix is for "miscellaneous .s".
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
-
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] {
- continue
- }
-
- # Whoever runs the test should be alerted that not all
- # testcases have been checked; that's why we do the loop
- # and don't just return at the top.
- if !$has_rv_and_cris {
- untested $src
- continue
- }
-
- set sim_defaults "--hw-file $srcdir/$subdir/std.dev"
- set ld_defaults "--section-start=.text=0"
-
- # We parse options an extra time besides in run_sim_test,
- # to determine if our defaults should be overridden.
-
- set opt_array [slurp_options $src]
- foreach i $opt_array {
- set opt_name [lindex $i 0]
- set opt_machs [lindex $i 1]
- set opt_val [lindex $i 2]
-
- # Allow concatenating to the default options by
- # specifying a mach.
- if { $opt_name == "sim" && $opt_machs == "" } {
- set sim_defaults ""
- }
-
- if { $opt_name == "ld" && $opt_machs == "" } {
- set ld_defaults ""
- }
- }
-
- set rvdummy_id -1
- set hostcmds [slurp_rv $src]
-
- if { $hostcmds != "" } {
- # I guess we could ask to have rvdummy executed on a
- # remote host, but it looks like too much trouble for
- # a feature rarely used.
- if [is_remote host] {
- untested $src
- continue
- }
-
- set src_components [file split $src]
- set rvfile "[lindex $src_components \
- [expr [llength $src_components] - 1]].r"
-
- if [catch { set f [open $rvfile w] } x] {
- error "$x"
- } {
- set contents [join $hostcmds "\n"]
-
- # Make it possible to use files from the test
- # source directory; expected with the @-command.
- regsub -all "@srcdir@" $contents "$srcdir/$subdir" contents
-
- verbose "rv: $contents" 2
- puts $f $contents
- close $f
- }
-
- spawn -noecho $rvdummy "$rvfile"
- if { $spawn_id < 0 } {
- error "Couldn't spawn $rvdummy"
- continue
- }
- set rvdummy_id $spawn_id
- }
-
- # Unfortunately this seems like the only way to pass
- # additional sim, ld etc. options to run_sim_test.
- set global_sim_options "$saved_global_sim_options $sim_defaults"
- set global_ld_options "$saved_global_ld_options $ld_defaults"
- run_sim_test $src $mach
- set global_sim_options $saved_global_sim_options
- set global_ld_options $saved_global_ld_options
-
- # Stop the rvdummy, if it's still running. We need to
- # wait on it anyway to avoid it turning into a zombie.
- if { $rvdummy_id != -1 } {
- close -i $rvdummy_id
- wait -i $rvdummy_id
-
- # Gleaned from framework.exp, this seems an indicator
- # to whether the test had expected outcome. If so, we
- # want to remove the rv-file.
- if { $exit_status == 0 } {
- file delete $rvfile
- }
- }
- }
- }
-}
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/std.dev b/sim/testsuite/sim/cris/hw/rv-n-cris/std.dev
deleted file mode 100644
index 9fefcbb..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/std.dev
+++ /dev/null
@@ -1,8 +0,0 @@
-/rv/reg 0xd0000000 64
-/rv/remote-reg 0xa8800
-/rv/intnum 4 2
-/cris/vec-for-int 4 0x33 8 0x34 0xaa 0xea
-/rv/mem 0x20000 0x400
-/rv/remote-mem 0xe000
-/rv/mbox 0xc000f000
-/rv > int int /cris
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/testutils.inc b/sim/testsuite/sim/cris/hw/rv-n-cris/testutils.inc
deleted file mode 100644
index e707abf..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/testutils.inc
+++ /dev/null
@@ -1,22 +0,0 @@
- .include "../../asm/testutils.inc"
-
-# Define an exception vector table "vecname" with a single
-# vector number "n" as "entry", all others "other".
-# V32 only needs 1<<10 alignment, earlier versions need 1<<16.
- .macro singlevec vecname vecno entry other=killme
- .section .text.exvec
- .p2align 16
-\vecname:
- .if (\vecno)
- .rept \vecno
- .dword \other
- .endr
- .endif
- .dword \entry
- .if (\vecno)-255
- .rept 256-(\vecno)-1
- .dword \other
- .endr
- .endif
- .previous
- .endm
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/trivial1.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/trivial1.ms
deleted file mode 100644
index a219b04..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/trivial1.ms
+++ /dev/null
@@ -1,17 +0,0 @@
-#mach: crisv32
-#sim(crisv32): --hw-info
-#output: /\n
-#output: /rv\n
-#output: /rv/reg 0xd0000000 0x40\n
-#output: /rv/remote-reg 0xa8800\n
-#output: /rv/intnum 0x4 0x2\n
-#output: /rv/mem 0x20000 0x400\n
-#output: /rv/remote-mem 0xe000\n
-#output: /rv/mbox 0xc000f000\n
-#output: /rv > int int /cris\n
-#output: /cris\n
-#output: /cris/vec-for-int 0x4 0x33 0x8 0x34 0xaa 0xea\n
-
-# Test expected --hw-info output and startup paths of components.
-
- .include "quit.s"
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/trivial2.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/trivial2.ms
deleted file mode 100644
index b633445..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/trivial2.ms
+++ /dev/null
@@ -1,21 +0,0 @@
-#mach: crisv32
-#sim(crisv32): --hw-device "/rv/dummy 0x12"
-
-# Test dummy settings: set from value.
-
- .include "testutils.inc"
- start
- move.d 0xd0000000,$r0
- move.d [$r0+],$r3
- cmp.d 0x12121212,$r3
- beq ok
- nop
-bad:
- fail
-ok:
- moveq -1,$r3
- move.d $r3,[$r0]
- cmp.d [$r0],$r3
- bne bad
- nop
- pass
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/trivial3.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/trivial3.ms
deleted file mode 100644
index 1f23b49..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/trivial3.ms
+++ /dev/null
@@ -1,20 +0,0 @@
-#mach: crisv32
-#sim(crisv32): --hw-device "/rv/dummy /dev/zero"
-
-# Test dummy settings: set from file.
-
- .include "testutils.inc"
- start
- move.d 0xd0000000,$r0
- move.d [$r0+],$r3
- beq ok
- nop
-bad:
- fail
-ok:
- moveq -1,$r3
- move.d $r3,[$r0]
- cmp.d [$r0],$r3
- bne bad
- nop
- pass
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.ms
deleted file mode 100644
index 6108160..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.ms
+++ /dev/null
@@ -1,22 +0,0 @@
-#mach: crisv32
-#r @,@srcdir@/trivial4.r
-
-# Test read and writes.
-
- .include "testutils.inc"
- start
- move.d 0xd0000032,$r0
- move.d [$r0+],$r3
- cmp.d 0xabcdef01,$r3
- beq ok
- nop
-bad:
- fail
-ok:
- move.d 0xaabbccdd,$r3
- move.d $r3,[$r0]
- move.d [$r0],$r3
- cmp.d 0x76543210,$r3
- bne bad
- nop
- pass
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.r b/sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.r
deleted file mode 100644
index b4896a0..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.r
+++ /dev/null
@@ -1,4 +0,0 @@
-W,
-r,a8832,abcdef01
-w,a8836,aabbccdd
-r,a8836,76543210
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/trivial5.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/trivial5.ms
deleted file mode 100644
index 849f17e..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/trivial5.ms
+++ /dev/null
@@ -1,16 +0,0 @@
-#mach: crisv10 crisv32
-#sim(crisv10): --hw-device "/rv/trace? true"
-#sim(crisv32): --hw-device "/rv/trace? true"
-#output: /rv: WD\n
-#output: /rv: REG R 0xd0000032\n
-#output: /rv: := 0xabcdef01\n
-#output: /rv: REG W 0xd0000036 := 0xaabbccdd\n
-#output: /rv: REG R 0xd0000036\n
-#output: /rv: := 0x76543210\n
-#output: pass\n
-
-# Test trace output for read and write.
-
-#r @,@srcdir@/trivial4.r
-
- .include "trivial4.ms"
diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/wd1.ms b/sim/testsuite/sim/cris/hw/rv-n-cris/wd1.ms
deleted file mode 100644
index 91af7fc..0000000
--- a/sim/testsuite/sim/cris/hw/rv-n-cris/wd1.ms
+++ /dev/null
@@ -1,33 +0,0 @@
-#mach: crisv10 crisv32
-#sim(crisv10): --hw-device "/rv/trace? true" --hw-device "/rv/watchdog-interval 1"
-#sim(crisv32): --hw-device "/rv/trace? true" --hw-device "/rv/watchdog-interval 1" --hw-device "/rv/max-poll-ticks 1000"
-#output: /rv: WD\n
-#output: /rv: REG R 0xd0000036\n
-#output: /rv: := 0x76543210\n
-#output: /rv: WD\n
-#output: /rv: DMA W 0x20000..0x20003\n
-#output: /rv: 0x20000: 01 02 03 04\n
-#output: /rv: REG R 0xd0000038\n
-#output: /rv: := 0x76543211\n
-#output: pass\n
-
-#r W,
-#r r,a8836,76543210
-#r W,
-#r s,e000,01020304
-#r r,a8838,76543211
-
- .include "testutils.inc"
- start
- mvi_h_mem 0 0x20000
- test_h_mem 0x76543210 0xd0000036
-
- move.d 0x20000,$r1
-0:
- test.b [$r1]
- beq 0b
- nop
- test_h_mem 0x76543211 0xd0000038
- pass
-
- .fill 65536*2+128,1,0