This is the mail archive of the newlib@sources.redhat.com mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [Patch] to support m68k simulator


Will Cohen wrote:
> 
> DJ Delorie and I have integrated the m68k emulator from the Un*x Amiga
> Emulator (UAE) with gdb. UAE is GPL'ed software. To fully support this
> there are some additional files required in newlib's libgloss/m68k. The
> ChangeLog entries and patch file are attached to this mail.  I would
> like to get this incorporated into newlib to the use of the m68k
> simulator with the gcc compiler. Other people might find this patch
> useful.
> 
> -Will Cohen
> 
>

Patch has been checked in. 

Thanks,

-- Jeff J.
  
----------------------------------------------------------------------------------------------------
> 2001-02-27  Will Cohen  <wcohen@redhat.com>
> 
>         * src/libgloss/m68k/Makefile.in: Updated copyright and
>          added rules to build simulator related libraries.
>         (SIM_SCRIPTS): New variable.
>         (SIM_LDFLAGS): New variable.
>         (SIM_BSP): New variable.
>         (SIM_CRT0): New variable.
>         (SIM_OBJS): New variable.
>         (SIM_TEST): New variable.
>         (SIM_INSTALL): new variable.
>         * src/libgloss/m68k/sim-abort.c: New file.
>         * src/libgloss/m68k/sim-crt0.S: New file.
>         * src/libgloss/m68k/sim-errno.c: New file.
>         * src/libgloss/m68k/sim-funcs.c: New file.
>         * src/libgloss/m68k/sim-inbyte.c: New file.
>         * src/libgloss/m68k/sim-print.c: New file.
>         * src/libgloss/m68k/sim-sbrk.c: New file.
>         * src/libgloss/m68k/sim.ld: New file.
>         * src/libgloss/m68k/simulator.S: New file.
> 
>   ----------------------------------------------------------------------------------------------------
> diff -Nrc3p /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/Makefile.in src/libgloss/m68k/Makefile.in
> *** /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/Makefile.in  Fri Mar 17 17:48:50 2000
> --- src/libgloss/m68k/Makefile.in       Tue Feb 27 17:05:29 2001
> ***************
> *** 1,4 ****
> ! # Copyright (c) 1995, 1996 Cygnus Support
>   #
>   # The authors hereby grant permission to use, copy, modify, distribute,
>   # and license this software and its documentation for any purpose, provided
> --- 1,4 ----
> ! # Copyright (c) 1995, 1996, 2001 Cygnus Support
>   #
>   # The authors hereby grant permission to use, copy, modify, distribute,
>   # and license this software and its documentation for any purpose, provided
> *************** OBJS =  close.o fstat.o getpid.o isatty.
> *** 68,73 ****
> --- 68,84 ----
>   CFLAGS = -g
>   # ARFLAGS = rv
> 
> +
> + # Here is all of the simulator stuff
> + SIM_SCRIPTS   = sim.ld
> + SIM_LDFLAGS   = -Tsim.ld
> + SIM_BSP               = libsim.a
> + SIM_CRT0      = sim-crt0.o
> + SIM_OBJS      = sim-print.o sim-inbyte.o sim-sbrk.o sim-abort.o sim-errno.o simulator.o sim-funcs.o unlink.o
> + SIM_TEST      =
> + SIM_INSTALL   = install-sim
> +
> +
>   CRT0 = crt0.o
>   #
>   # here's all the MVME135 target stuff
> *************** DBUG_OBJS=      dbug-exit.o dbug-inbyte.o dbu
> *** 111,121 ****
>   # build a test program for each target board. Just trying to get
>   # it to link is a good test, so we ignore all the errors for now.
>   #
> ! all: ${CRT0} ${BCC_BSP} ${IDP_BSP} ${MVME135_BSP} ${MVME162_BSP} ${DBUG_BSP}
> 
>   #
>   # here's where we build the board support packages for each target
>   #
>   ${BCC_BSP}: $(OBJS) ${BCC_OBJS}
>         ${AR} ${ARFLAGS} $@ $(OBJS) ${BCC_OBJS}
>         ${RANLIB} $@
> --- 122,135 ----
>   # build a test program for each target board. Just trying to get
>   # it to link is a good test, so we ignore all the errors for now.
>   #
> ! all: ${SIM_CRT0} ${SIM_BSP} ${CRT0} ${BCC_BSP} ${IDP_BSP} ${MVME135_BSP} ${MVME162_BSP} ${DBUG_BSP}
> 
>   #
>   # here's where we build the board support packages for each target
>   #
> + ${SIM_BSP}: ${SIM_OBJS}
> +       ${AR} ${ARFLAGS} $@ ${SIM_OBJS}
> +       ${RANLIB} $@
>   ${BCC_BSP}: $(OBJS) ${BCC_OBJS}
>         ${AR} ${ARFLAGS} $@ $(OBJS) ${BCC_OBJS}
>         ${RANLIB} $@
> *************** dtor.x: dtor.o ${CRT0} ${srcdir}/mvme135
> *** 214,222 ****
> --- 228,242 ----
>         ${CC} -L${srcdir} -L${objdir} dtor.o -o $@ $(LIBS_FOR_TARGET) \
>         -N -Wl,-Tmvme135.ld -nostdlib
> 
> + unlink.o: $(srcdir)/../unlink.c
> 
>   .PHONY: install info dvi doc install-info clean-info
>   install:
> +       # install SIM stuff
> +       $(INSTALL_PROGRAM) $(SIM_CRT0) $(tooldir)/lib${MULTISUBDIR}/$(SIM_CRT0)
> +       $(INSTALL_PROGRAM) $(SIM_BSP) $(tooldir)/lib${MULTISUBDIR}/$(SIM_BSP)
> +       $(INSTALL_DATA) ${srcdir}/sim.ld $(tooldir)/lib${MULTISUBDIR}/sim.ld
> +       #
>         $(INSTALL_PROGRAM) $(CRT0) $(tooldir)/lib${MULTISUBDIR}/$(CRT0)
>         # install BCC stuff
>         $(INSTALL_PROGRAM) $(BCC_BSP) $(tooldir)/lib${MULTISUBDIR}/$(BCC_BSP)
> diff -Nrc3p /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-abort.c src/libgloss/m68k/sim-abort.c
> *** /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-abort.c  Wed Dec 31 19:00:00 1969
> --- src/libgloss/m68k/sim-abort.c       Tue Feb 27 17:04:28 2001
> ***************
> *** 0 ****
> --- 1,21 ----
> + /*
> +  * sim-abort.c -- m68k abort support when running under the simulator.
> +  *
> +  * Copyright (c) 1995, 2001 Cygnus Support
> +  *
> +  * The authors hereby grant permission to use, copy, modify, distribute,
> +  * and license this software and its documentation for any purpose, provided
> +  * that existing copyright notices are retained in all copies and that this
> +  * notice is included verbatim in any distributions. No written agreement,
> +  * license, or royalty fee is required for any of the authorized uses.
> +  * Modifications to this software may be copyrighted by their authors
> +  * and need not follow the licensing terms described here, provided that
> +  * the new terms are clearly indicated on the first page of each file where
> +  * they apply.
> +  */
> +
> + void abort(void)
> + {
> +   write (2, "Abort called.\n", sizeof("Abort called.\n")-1);
> +   exit (1);
> + }
> diff -Nrc3p /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-crt0.S src/libgloss/m68k/sim-crt0.S
> *** /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-crt0.S   Wed Dec 31 19:00:00 1969
> --- src/libgloss/m68k/sim-crt0.S        Tue Feb 27 17:04:28 2001
> ***************
> *** 0 ****
> --- 1,121 ----
> + /*
> +  * crt0.S -- startup file for m68k-coff
> +  *
> +  * Copyright (c) 1995, 1996, 1998, 2001 Cygnus Support
> +  *
> +  * The authors hereby grant permission to use, copy, modify, distribute,
> +  * and license this software and its documentation for any purpose, provided
> +  * that existing copyright notices are retained in all copies and that this
> +  * notice is included verbatim in any distributions. No written agreement,
> +  * license, or royalty fee is required for any of the authorized uses.
> +  * Modifications to this software may be copyrighted by their authors
> +  * and need not follow the licensing terms described here, provided that
> +  * the new terms are clearly indicated on the first page of each file where
> +  * they apply.
> +  */
> +
> + #include "asm.h"
> +
> +       .title "crt0.S for m68k-coff"
> + #define STACKSIZE     0x4000
> +
> + /*
> +  * Define an empty environment.
> +  */
> +         .data
> +         .align 2
> + SYM (environ):
> +         .long 0
> +
> +       .align  2
> +       .text
> +
> + /*
> +  * These symbols are defined in C code, so they need to always be
> +  * named with SYM because of the difference between object file formats.
> +  */
> +
> + /* These are defined in C code. */
> +       .extern SYM (main)
> +       .extern SYM (exit)
> +       .extern SYM (atexit)
> +       .extern SYM(__do_global_dtors)
> +
> + /*
> +  * These values are set in the linker script, so they must be
> +  * explicitly named here without SYM.
> +  */
> +       .extern __stack
> +       .extern __bss_start
> +       .extern _end
> +
> + /*
> +  * set things up so the application will run. This *must* be called start.
> +  */
> +       .global SYM (start)
> +
> + SYM (start):
> +       /* See if user supplied their own stack (__stack != 0).  If not, then
> +        * default to using the value of %sp as set by the ROM monitor.
> +        */
> +       movel   IMM(__stack), a0
> +       cmpl    IMM(0), a0
> +       jbeq    1f
> +       movel   a0, sp
> + 1:
> +       /* set up initial stack frame */
> +       link    a6, IMM(-8)
> +
> + /*
> +  * zero out the bss section.
> +  */
> +       movel   IMM(__bss_start), d1
> +       movel   IMM(_end), d0
> +       cmpl    d0, d1
> +       jbeq    3f
> +       movl    d1, a0
> +       subl    d1, d0
> +       subql   IMM(1), d0
> + 2:
> +       clrb    (a0)+
> + #ifndef __mcf5200__
> +       dbra    d0, 2b
> +       clrw    d0
> +       subql   IMM(1), d0
> +       jbcc    2b
> + #else
> +       subql   IMM(1), d0
> +       jbpl    2b
> + #endif
> +
> + 3:
> +
> + /*
> +  * call the main routine from the application to get it going.
> +  * main (argc, argv, environ)
> +  * we pass argv as a pointer to NULL.
> +  */
> +
> + #ifdef ADD_DTORS
> +       /* put __do_global_dtors in the atexit list so the destructors get run */
> +       movel   IMM (SYM(__do_global_dtors)),(sp)
> +       jsr     SYM (atexit)
> + #endif
> +       movel   IMM (__FINI_SECTION__),(sp)
> +       jsr     SYM (atexit)
> +
> +       jsr     __INIT_SECTION__
> +
> +         pea     0
> +         pea     SYM (environ)
> +         pea     sp@(4)
> +         pea     0
> +       jsr     SYM (main)
> +       movel   d0, sp@-
> +
> + /*
> +  * drop down into exit incase the user doesn't. This should drop
> +  * control back to the ROM monitor, if there is one. This calls the
> +  * exit() from the C library so the C++ tables get cleaned up right.
> +  */
> +         jsr     SYM (exit)
> diff -Nrc3p /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-errno.c src/libgloss/m68k/sim-errno.c
> *** /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-errno.c  Wed Dec 31 19:00:00 1969
> --- src/libgloss/m68k/sim-errno.c       Tue Feb 27 17:04:28 2001
> ***************
> *** 0 ****
> --- 1,28 ----
> + /*
> +  * sim-errno.c -- return address of errno for current thread.
> +  *
> +  * Copyright (c) 1995, 2001 Cygnus Support
> +  *
> +  * The authors hereby grant permission to use, copy, modify, distribute,
> +  * and license this software and its documentation for any purpose, provided
> +  * that existing copyright notices are retained in all copies and that this
> +  * notice is included verbatim in any distributions. No written agreement,
> +  * license, or royalty fee is required for any of the authorized uses.
> +  * Modifications to this software may be copyrighted by their authors
> +  * and need not follow the licensing terms described here, provided that
> +  * the new terms are clearly indicated on the first page of each file where
> +  * they apply.
> +  */
> +
> +
> + /* syscall handler branches here in case of error. */
> +
> + extern int *__errno();
> +
> + int
> + _cerror (e)
> +      int e;
> + {
> +   *__errno() = e;
> +   return -1;
> + }
> diff -Nrc3p /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-funcs.c src/libgloss/m68k/sim-funcs.c
> *** /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-funcs.c  Wed Dec 31 19:00:00 1969
> --- src/libgloss/m68k/sim-funcs.c       Tue Feb 27 17:04:28 2001
> ***************
> *** 0 ****
> --- 1,29 ----
> + /* sim-funcs.c - random needed simulator functions
> +  *
> +  * Copyright (c) 2001 Cygnus Support
> +  *
> +  * The authors hereby grant permission to use, copy, modify, distribute,
> +  * and license this software and its documentation for any purpose, provided
> +  * that existing copyright notices are retained in all copies and that this
> +  * notice is included verbatim in any distributions. No written agreement,
> +  * license, or royalty fee is required for any of the authorized uses.
> +  * Modifications to this software may be copyrighted by their authors
> +  * and need not follow the licensing terms described here, provided that
> +  * the new terms are clearly indicated on the first page of each file where
> +  * they apply.
> +  */
> +
> + #include <unistd.h>
> +
> + int
> + kill(int pid, int sig)
> + {
> +   exit(0xdead);
> + }
> +
> + pid_t
> + getpid()
> + {
> +   return 42;
> + }
> +
> diff -Nrc3p /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-inbyte.c src/libgloss/m68k/sim-inbyte.c
> *** /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-inbyte.c Wed Dec 31 19:00:00 1969
> --- src/libgloss/m68k/sim-inbyte.c      Tue Feb 27 17:04:28 2001
> ***************
> *** 0 ****
> --- 1,26 ----
> + /*
> +  * sim-inbyte.c -- read a character from standard input.
> +  *
> +  * Copyright (c) 1995, 2001 Cygnus Support
> +  *
> +  * The authors hereby grant permission to use, copy, modify, distribute,
> +  * and license this software and its documentation for any purpose, provided
> +  * that existing copyright notices are retained in all copies and that this
> +  * notice is included verbatim in any distributions. No written agreement,
> +  * license, or royalty fee is required for any of the authorized uses.
> +  * Modifications to this software may be copyrighted by their authors
> +  * and need not follow the licensing terms described here, provided that
> +  * the new terms are clearly indicated on the first page of each file where
> +  * they apply.
> +  */
> +
> + int
> + inbyte ()
> + {
> +   char c;
> +
> +   if (read (0, &c, 1) <= 0)
> +     return -1;
> +
> +   return c;
> + }
> diff -Nrc3p /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-print.c src/libgloss/m68k/sim-print.c
> *** /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-print.c  Wed Dec 31 19:00:00 1969
> --- src/libgloss/m68k/sim-print.c       Tue Feb 27 17:04:28 2001
> ***************
> *** 0 ****
> --- 1,43 ----
> + /* sim-print.c -- print a string on the output device.
> +  *
> +  * Copyright (c) 1995, 2001 Cygnus Support
> +  *
> +  * The authors hereby grant permission to use, copy, modify, distribute,
> +  * and license this software and its documentation for any purpose, provided
> +  * that existing copyright notices are retained in all copies and that this
> +  * notice is included verbatim in any distributions. No written agreement,
> +  * license, or royalty fee is required for any of the authorized uses.
> +  * Modifications to this software may be copyrighted by their authors
> +  * and need not follow the licensing terms described here, provided that
> +  * the new terms are clearly indicated on the first page of each file where
> +  * they apply.
> +  */
> +
> + /*
> +  * print -- do a raw print of a string
> +  */
> + void
> + print (ptr)
> +      char *ptr;
> + {
> +   int len = 0;
> +   char *p = ptr;
> +
> +   while (*p != '\0')
> +     p++;
> +
> +   write (1, ptr, p-ptr);
> + }
> +
> + /*
> +  * outbyte -- write a single character.
> +  */
> +
> + void
> + outbyte (c_int)
> +      int c_int;
> + {
> +   char c = c_int;
> +
> +   write (1, &c, 1);
> + }
> diff -Nrc3p /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-sbrk.c src/libgloss/m68k/sim-sbrk.c
> *** /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim-sbrk.c   Wed Dec 31 19:00:00 1969
> --- src/libgloss/m68k/sim-sbrk.c        Tue Feb 27 17:04:28 2001
> ***************
> *** 0 ****
> --- 1,30 ----
> + /*
> +  * sim-sbrk.c -- m68k sbrk support when running under the simulator.
> +  *
> +  * Copyright (c) 1995, 2001 Cygnus Support
> +  *
> +  * The authors hereby grant permission to use, copy, modify, distribute,
> +  * and license this software and its documentation for any purpose, provided
> +  * that existing copyright notices are retained in all copies and that this
> +  * notice is included verbatim in any distributions. No written agreement,
> +  * license, or royalty fee is required for any of the authorized uses.
> +  * Modifications to this software may be copyrighted by their authors
> +  * and need not follow the licensing terms described here, provided that
> +  * the new terms are clearly indicated on the first page of each file where
> +  * they apply.
> +  */
> +
> + extern char _end[];
> + static char *curbrk = _end;
> +
> + char *
> + sbrk (incr)
> +      int incr;
> + {
> +   char *oldbrk = curbrk;
> +   curbrk += incr;
> +   if (brk (curbrk) == -1)
> +     return (char *) -1;
> +
> +   return oldbrk;
> + }
> diff -Nrc3p /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim.ld src/libgloss/m68k/sim.ld
> *** /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/sim.ld       Wed Dec 31 19:00:00 1969
> --- src/libgloss/m68k/sim.ld    Tue Feb 27 17:04:28 2001
> ***************
> *** 0 ****
> --- 1,87 ----
> + STARTUP(sim-crt0.o)
> + OUTPUT_ARCH(m68k)
> +
> + SEARCH_DIR(.)
> + GROUP(-lsim -lc -lgcc -lsim)
> + __DYNAMIC  =  0;
> +
> +
> + MEMORY
> + {
> +   ram (rwx) : ORIGIN = 0x80000000, LENGTH = 1M
> + }
> +
> + PROVIDE (__stack = 0);
> +
> + SECTIONS
> + {
> +   .text :
> +   {
> +     CREATE_OBJECT_SYMBOLS
> +     *(.text)
> +
> +     . = ALIGN(0x4);
> +     /* These are for running static constructors and destructors under ELF.  */
> +     KEEP (*crtbegin.o(.ctors))
> +     KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
> +     KEEP (*(SORT(.ctors.*)))
> +     KEEP (*(.ctors))
> +     KEEP (*crtbegin.o(.dtors))
> +     KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
> +     KEEP (*(SORT(.dtors.*)))
> +     KEEP (*(.dtors))
> +
> +     *(.rodata)
> +
> +     . = ALIGN(0x4);
> +     *(.gcc_except_table)
> +
> +     . = ALIGN(0x4);
> +     *(.eh_frame)
> +
> +     . = ALIGN(0x4);
> +     __INIT_SECTION__ = . ;
> +     LONG (0x4e560000) /* linkw %fp,#0 */
> +     *(.init)
> +     SHORT (0x4e5e)    /* unlk %fp */
> +     SHORT (0x4e75)    /* rts */
> +
> +     . = ALIGN(0x4);
> +     __FINI_SECTION__ = . ;
> +     LONG (0x4e560000) /* linkw %fp,#0 */
> +     *(.fini)
> +     SHORT (0x4e5e)    /* unlk %fp */
> +     SHORT (0x4e75)    /* rts */
> +
> +     _etext = .;
> +     *(.lit)
> +   } > ram
> +
> +   .data :
> +   {
> +     *(.shdata)
> +     *(.data)
> +     _edata = .;
> +   } > ram
> +
> +   .bss :
> +   {
> +     . = ALIGN(0x4);
> +     __bss_start = . ;
> +     *(.shbss)
> +     *(.bss)
> +     *(COMMON)
> +     _end =  ALIGN (0x8);
> +     __end = _end;
> +   } > ram
> +
> +   .stab 0 (NOLOAD) :
> +   {
> +     *(.stab)
> +   }
> +
> +   .stabstr 0 (NOLOAD) :
> +   {
> +     *(.stabstr)
> +   }
> + }
> diff -Nrc3p /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/simulator.S src/libgloss/m68k/simulator.S
> *** /dunes/wcohen/virg-netnewlib/src/libgloss/m68k/simulator.S  Wed Dec 31 19:00:00 1969
> --- src/libgloss/m68k/simulator.S       Tue Feb 27 17:04:28 2001
> ***************
> *** 0 ****
> --- 1,84 ----
> + /*
> +  * simulator.S -- m68k simulator system calls.
> +  *
> +  * Copyright (c) 1995, 2001 Cygnus Support
> +  *
> +  * The authors hereby grant permission to use, copy, modify, distribute,
> +  * and license this software and its documentation for any purpose, provided
> +  * that existing copyright notices are retained in all copies and that this
> +  * notice is included verbatim in any distributions. No written agreement,
> +  * license, or royalty fee is required for any of the authorized uses.
> +  * Modifications to this software may be copyrighted by their authors
> +  * and need not follow the licensing terms described here, provided that
> +  * the new terms are clearly indicated on the first page of each file where
> +  * they apply.
> +  */
> +
> + #include "asm.h"
> +
> + #define SYSCALL(x) .word 0x4afc, x
> +
> + #define FUNC_START(x) .globl x; x:
> + #define FUNC_END(x)
> + #define FUNC_NAME(x) SYM(x)
> +
> + FUNC_START(_exit)
> +       SYSCALL(1)
> +
> + /*
> +  * Insure that the debugger tells the client that the PC is in _exit,
> +  * not whatever function happens to follow this function.
> +  */
> +
> + 0:    nop
> +       jmp     0b                      /* we never should return, but... */
> +
> + FUNC_END(_exit)
> +
> + FUNC_START(read)
> +       SYSCALL(3)
> +       bcs     FUNC_NAME(_cerror)
> +       rts
> + FUNC_END(read)
> +
> + FUNC_START(write)
> +       SYSCALL(4)
> +       bcs     FUNC_NAME(_cerror)
> +       rts
> + FUNC_END(write)
> +
> + FUNC_START(open)
> +       SYSCALL(5)
> +       bcs     FUNC_NAME(_cerror)
> +       rts
> + FUNC_END(open)
> +
> + FUNC_START(close)
> +       SYSCALL(6)
> +       bcs     FUNC_NAME(_cerror)
> +       rts
> + FUNC_END(close)
> +
> + FUNC_START(brk)
> +       SYSCALL(17)
> +       bcs     FUNC_NAME(_cerror)
> +       rts
> + FUNC_END(brk)
> +
> + FUNC_START(lseek)
> +       SYSCALL(199)
> +       bcs     FUNC_NAME(_cerror)
> +       rts
> + FUNC_END(lseek)
> +
> + FUNC_START(fstat)
> +       SYSCALL(28)
> +       bcs     FUNC_NAME(_cerror)
> +       rts
> + FUNC_END(lseek)
> +
> + FUNC_START(isatty)
> +       SYSCALL(29)
> +       bcs     FUNC_NAME(_cerror)
> +       rts
> + FUNC_END(isatty)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]